Fonction BluetoothGATTGetCharacteristics (bluetoothleapis.h)
La fonction BluetoothGATTGetCharacteristics obtient toutes les caractéristiques disponibles pour le service spécifié.
Syntaxe
HRESULT BluetoothGATTGetCharacteristics(
[in] HANDLE hDevice,
[in, optional] PBTH_LE_GATT_SERVICE Service,
[in] USHORT CharacteristicsBufferCount,
[out, optional] PBTH_LE_GATT_CHARACTERISTIC CharacteristicsBuffer,
[out] USHORT *CharacteristicsBufferActual,
[in] ULONG Flags
);
Paramètres
[in] hDevice
Gérez l’appareil ou le service Bluetooth.
[in, optional] Service
Adresse d’une structure de BTH_LE_GATT_SERVICE contenant le service parent des services inclus à récupérer. Ce paramètre est requis si un handle d’appareil est passé à hDevice. Ce paramètre est facultatif si un handle de service a été passé à hDevice, auquel cas le service spécifié par le handle de service sera traité comme le parent.
[in] CharacteristicsBufferCount
Nombre d’éléments alloués pour le paramètre CharacteristicsBuffer .
[out, optional] CharacteristicsBuffer
Pointeur vers une mémoire tampon dans laquelle retourner des caractéristiques en tant que tableau de structures BTH_LE_GATT_CHARACTERISTIC .
[out] CharacteristicsBufferActual
Pointeur vers la mémoire tampon dans laquelle est retourné le nombre réel de caractéristiques retournées dans le paramètre CharacteristicsBuffer .
[in] Flags
Indicateurs permettant de modifier le comportement de BluetoothGATTGetCharacteristics :
Indicateur | Description |
---|---|
BLUETOOTH_GATT_FLAG_NONE | Le client n’a pas d’exigences GATT spécifiques (par défaut). |
Valeur retournée
Cette fonction retourne les valeurs suivantes :
Code de retour | Description |
---|---|
|
L’opération s’est terminée avec succès. |
|
Le paramètre de mémoire tampon est NULL et le nombre d’éléments disponibles est retourné à la place. |
|
Retourné si un service parent et un handle de service sont fournis et que la hiérarchie de service ne se cumule pas sur le handle de service parent fourni. |
|
L’une des conditions suivantes s’est produite :
|
|
Une mémoire tampon est spécifiée, mais la taille du nombre de mémoires tampons est inférieure à ce qui est requis, en octets. |
|
Les données actuelles dans le cache semblent incohérentes et entraînent des erreurs internes. |
|
L’opération a manqué de mémoire. |
Remarques
Les caractéristiques retournées sont mises en cache lors de la récupération réussie des caractéristiques de l’appareil directement. À moins qu’un événement de modification de service ne soit reçu, la liste des caractéristiques retournées ne devrait pas changer.
Les pilotes de profil doivent préallouer une mémoire tampon suffisamment grande pour que le tableau de caractéristiques soit retourné. Les appelants peuvent déterminer la taille de mémoire tampon nécessaire en transmettant une valeur non NULL dans CaractéristiquesBufferActual et NULL dans CaractéristiquesBuffer.
Ne modifiez pas la structure caractéristique retournée, puis utilisez la structure modifiée dans les appels de fonction suivants. Le comportement n’est pas défini si l’appelant effectue cette opération.
Le service parent doit être présent dans le cache, sinon la fonction échoue. Le service parent doit être un service retourné par BluetoothGATTGetServices ou BluetoothGATTGetIncludedServices.
Exemple
////////////////////////////////////////////////////////////////////////////
// Determine Characteristic Buffer Size
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetCharacteristics(
hCurrService,
currGattService,
0,
NULL,
&charBufferSize,
BLUETOOTH_GATT_FLAG_NONE);
if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
PrintHr("BluetoothGATTGetCharacteristics - Buffer Size", hr);
goto Done;
}
if (charBufferSize > 0) {
pCharBuffer = (PBTH_LE_GATT_CHARACTERISTIC)
malloc(charBufferSize * sizeof(BTH_LE_GATT_CHARACTERISTIC));
if (NULL == pCharBuffer) {
printf("pCharBuffer out of memory\r\n");
goto Done;
} else {
RtlZeroMemory(pCharBuffer,
charBufferSize * sizeof(BTH_LE_GATT_CHARACTERISTIC));
}
////////////////////////////////////////////////////////////////////////////
// Retrieve Characteristics
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetCharacteristics(
hCurrService,
currGattService,
charBufferSize,
pCharBuffer,
&numChars,
BLUETOOTH_GATT_FLAG_NONE);
if (S_OK != hr) {
PrintHr("BluetoothGATTGetCharacteristics - Actual Data", hr);
goto Done; // Allow continuation
}
if (numChars != charBufferSize) {
printf("buffer size and buffer size actual size mismatch\r\n");
goto Done;
}
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge dans Windows 8 et versions ultérieures de Windows. |
Plateforme cible | Universal |
En-tête | bluetoothleapis.h |
Bibliothèque | BluetoothApis.lib |
DLL | BluetoothApis.dll |