Funzione BluetoothGATTGetServices (bluetoothleapis.h)
La funzione BluetoothGATTGetServices ottiene tutti i servizi primari disponibili per un server.
Sintassi
HRESULT BluetoothGATTGetServices(
[in] HANDLE hDevice,
[in] USHORT ServicesBufferCount,
[out, optional] PBTH_LE_GATT_SERVICE ServicesBuffer,
[out] USHORT *ServicesBufferActual,
[in] ULONG Flags
);
Parametri
[in] hDevice
Gestire il dispositivo Bluetooth da cui ottenere l'elenco dei servizi primari.
[in] ServicesBufferCount
Numero di elementi allocati per il parametro ServicesBuffer .
[out, optional] ServicesBuffer
Puntatore al buffer contenente una struttura BTH_LE_GATT_SERVICE in cui restituire i servizi.
[out] ServicesBufferActual
Puntatore al buffer in cui è stato restituito il numero effettivo di servizi nel parametro ServicesBuffer .
[in] Flags
Flag per modificare il comportamento di BluetoothGATTGetServices:
Flag | Descrizione |
---|---|
BLUETOOTH_GATT_FLAG_NONE | Il client non ha requisiti GATT specifici (impostazione predefinita). |
Valore restituito
Questa funzione restituisce i valori seguenti:
Codice restituito | Descrizione |
---|---|
|
Operazione riuscita. |
|
Il parametro buffer è NULL e viene restituito il numero di elementi disponibili. |
|
Restituito se vengono forniti sia un servizio padre che un handle di servizio e la gerarchia del servizio non viene rollup nell'handle del servizio padre fornito. |
|
Si è verificata una delle condizioni seguenti:
|
|
Viene specificato un buffer, ma le dimensioni del conteggio del buffer sono inferiori a quelle necessarie, in byte. |
|
I servizi sono stati specificati per essere recuperati dalla cache, ma non sono presenti servizi nella cache. |
|
I dati correnti nella cache sembrano incoerenti e comportano errori interni. |
|
L'operazione ha esaurito la memoria. |
Commenti
I servizi restituiti vengono memorizzati nella cache al completamento del recupero dei servizi dal dispositivo direttamente. A meno che non venga ricevuto un evento di modifica del servizio, non è previsto che venga modificato l'elenco dei servizi restituiti.
I driver di profilo devono pre-allocare un buffer sufficientemente grande in modo che venga restituita la matrice di servizi primari. I chiamanti possono determinare le dimensioni del buffer necessarie passando un valore non NULL in ServicesBufferActual e NULL in ServicesBuffer.
Non modificare la struttura del servizio restituita e quindi usare la struttura modificata nelle chiamate di funzione successive. Il comportamento non è definito se il chiamante esegue questa operazione.
Esempio
////////////////////////////////////////////////////////////////////////////
// Determine Services Buffer Size
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetServices(
hLEDevice,
0,
NULL,
&serviceBufferCount,
BLUETOOTH_GATT_FLAG_NONE);
if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
PrintHr("BluetoothGATTGetServices - Buffer Size", hr);
goto Done;
}
pServiceBuffer = (PBTH_LE_GATT_SERVICE)
malloc(sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
if (NULL == pServiceBuffer) {
printf("pServiceBuffer out of memory\r\n");
goto Done;
} else {
RtlZeroMemory(pServiceBuffer,
sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
}
////////////////////////////////////////////////////////////////////////////
// Retrieve Services
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetServices(
hLEDevice,
serviceBufferCount,
pServiceBuffer,
&numServices,
BLUETOOTH_GATT_FLAG_NONE);
if (S_OK != hr) {
PrintHr("BluetoothGATTGetServices - Actual Data", hr);
goto Done;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in Windows 8 e versioni successive di Windows. |
Piattaforma di destinazione | Universale |
Intestazione | bluetoothleapis.h |
Libreria | BluetoothAPIs.lib |
DLL | BluetoothAPIs.dll |