Partager via


Fonction BluetoothGATTGetCharacteristicValue (bluetoothleapis.h)

La fonction BluetoothGATTGetCharacteristicValue obtient la valeur de la caractéristique spécifiée.

Syntaxe

HRESULT BluetoothGATTGetCharacteristicValue(
  [in]            HANDLE                            hDevice,
  [in]            PBTH_LE_GATT_CHARACTERISTIC       Characteristic,
  [in]            ULONG                             CharacteristicValueDataSize,
  [out, optional] PBTH_LE_GATT_CHARACTERISTIC_VALUE CharacteristicValue,
  [out, optional] USHORT                            *CharacteristicValueSizeRequired,
  [in]            ULONG                             Flags
);

Paramètres

[in] hDevice

Gérez le service.

[in] Characteristic

Pointeur vers la caractéristique parente de la valeur caractéristique à récupérer.

[in] CharacteristicValueDataSize

Nombre d’octets alloués pour le paramètre CharacteristicValue .

[out, optional] CharacteristicValue

Pointeur vers la mémoire tampon dans laquelle retourner la valeur caractéristique.

[out, optional] CharacteristicValueSizeRequired

Pointeur vers la mémoire tampon dans laquelle stocker le nombre d’octets nécessaires pour retourner des données dans la mémoire tampon pointée par CharacteristicValue.

[in] Flags

Indicateurs permettant de modifier le comportement de BluetoothGATTGetCharacteristicValue :

Indicateur Description
BLUETOOTH_GATT_FLAG_NONE Le client n’a pas d’exigences GATT spécifiques (par défaut).
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED Le client demande que les données soient transmises sur un canal chiffré.
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED Le client demande que les données soient transmises sur un canal authentifié.
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE La valeur caractéristique est à lire directement à partir de l’appareil. Cela remplace celui dans le cache si l’un d’eux est déjà présent.
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE La valeur caractéristique doit être lue à partir du cache (qu’elle soit présente ou non dans le cache).

Valeur retournée

La fonction BluetoothGATTGetCharacteristicValue retourne les valeurs suivantes :

Code de retour Description
S_OK
L’opération s’est terminée avec succès.
ERROR_MORE_DATA
Le paramètre de mémoire tampon est NULL et le nombre d’éléments disponibles est retourné à la place.
ERROR_ACCESS_DENIED
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.
ERROR_INVALID_PARAMETER
CharacteristicValue et CharacteristicValueSizeRequired sont tous deux 0.
ERROR_INVALID_USER_BUFFER
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.
ERROR_BAD_COMMAND
Les données actuelles dans le cache semblent incohérentes et entraînent des erreurs internes.
ERROR_BAD_NET_RESP
Le serveur cible n’a pas fourni de réponse réseau appropriée.
ERROR_SEM_TIMEOUT
La requête a expiré.
ERROR_PRIVILEGE_NOT_HELD
La valeur caractéristique n’est pas lisible comme dicté par les propriétés caractéristiques.
ERROR_NO_SYSTEM_RESOURCES
L’opération a manqué de mémoire.
E_BLUETOOTH_ATT_INVALID_HANDLE
Le handle d’attribut donné n’était pas valide sur ce serveur.
E_BLUETOOTH_ATT_READ_NOT_PERMITTED
Impossible de lire l’attribut.
E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED
L’attribut ne peut pas être écrit.
E_BLUETOOTH_ATT_INVALID_PDU
L’attribut PDU n’était pas valide.
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION
L’attribut nécessite une authentification avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED
Le serveur d’attributs ne prend pas en charge la demande reçue du client.
E_BLUETOOTH_ATT_INVALID_OFFSET
Le décalage spécifié a dépassé la fin de l’attribut.
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION
L’attribut nécessite une autorisation avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL
Trop d’écritures de préparation ont été mises en file d’attente.
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND
Aucun attribut trouvé dans la plage de handle d’attribut donnée.
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG
L’attribut ne peut pas être lu ou écrit à l’aide de la demande de lecture d’objet blob.
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE
La taille de clé de chiffrement utilisée pour chiffrer ce lien est insuffisante.
E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH
La longueur de la valeur de l’attribut n’est pas valide pour l’opération.
E_BLUETOOTH_ATT_UNLIKELY
La demande d’attribut demandée a rencontré une erreur peu probable et n’a donc pas pu être effectuée comme demandé.
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION
L’attribut nécessite un chiffrement avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE
Le type d’attribut n’est pas un attribut de regroupement pris en charge tel que défini par une spécification de couche supérieure.
E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES
Ressources insuffisantes pour terminer la demande.
E_BLUETOOTH_ATT_UNKNOWN_ERROR
Une erreur qui se trouve dans la plage réservée a été reçue.

Remarques

La valeur caractéristique est retournée à partir du cache si l’une d’elles est déjà présente. Ce serait le cas la plupart du temps, car tous les attributs d’appareil sont mis en cache au moment de l’appairage ou de l’association. Toutefois, si elle n’est pas présente, la valeur caractéristique est lue directement à partir de l’appareil et sera mise en cache une fois la lecture réussie à partir de l’appareil. Si BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE ou BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE est présent, la valeur caractéristique est lue à l’aide de la méthode spécifiée.

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 CharacteristicValueSizeRequired et NULL dans CharacteristicValue.

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


            if (currGattChar->IsReadable) {
////////////////////////////////////////////////////////////////////////////
// Determine Characteristic Value Buffer Size
////////////////////////////////////////////////////////////////////////////

                hr = BluetoothGATTGetCharacteristicValue(
                        hCurrService,
                        currGattChar,
                        0,
                        NULL,
                        &charValueDataSize,
                        BLUETOOTH_GATT_FLAG_NONE);

                if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
                    PrintHr("BluetoothGATTGetCharacteristicValue - Buffer Size", hr);
                    goto GetDescriptors; // Proceed to retrieving descriptors
                }

                pCharValueBuffer = (PBTH_LE_GATT_CHARACTERISTIC_VALUE)malloc(charValueDataSize);

                if (NULL == pCharValueBuffer) {
                    printf("pCharValueBuffer out of memory\r\n");
                    goto Done;
                } else {
                    RtlZeroMemory(pCharValueBuffer, charValueDataSize);
                }

////////////////////////////////////////////////////////////////////////////
// Retrieve the Characteristic Value
////////////////////////////////////////////////////////////////////////////

                hr = BluetoothGATTGetCharacteristicValue(
                        hCurrService,
                        currGattChar,
                        (ULONG)charValueDataSize,
                        pCharValueBuffer,
                        NULL,
                        BLUETOOTH_GATT_FLAG_NONE);

                if (S_OK != hr) {
                    PrintHr("BluetoothGATTGetCharacteristicValue - Actual Data", hr);
                    goto GetDescriptors; // Proceed to retrieving descriptors
                }

                PrintCharacteristicValue(pCharValueBuffer, 2, currGattChar->CharacteristicUuid);

                // Free before going to next iteration, or memory leak.
                free(pCharValueBuffer);
                pCharValueBuffer = NULL;
            }

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

Voir aussi

BTH_LE_GATT_CHARACTERISTIC

BTH_LE_GATT_CHARACTERISTIC_VALUE