BluetoothGATTGetDescriptorValue-Funktion (bluetoothleapis.h)
Die BluetoothGATTGetDescriptorValue-Funktion ruft den Wert des angegebenen Deskriptors ab.
Syntax
HRESULT BluetoothGATTGetDescriptorValue(
[in] HANDLE hDevice,
[in] PBTH_LE_GATT_DESCRIPTOR Descriptor,
[in] ULONG DescriptorValueDataSize,
[out, optional] PBTH_LE_GATT_DESCRIPTOR_VALUE DescriptorValue,
[out, optional] USHORT *DescriptorValueSizeRequired,
[in] ULONG Flags
);
Parameter
[in] hDevice
Handle für den Dienst.
[in] Descriptor
Zeiger auf BTH_LE_GATT_DESCRIPTOR Struktur, die den übergeordneten Deskriptor des abzurufenden Deskriptorwerts enthält.
[in] DescriptorValueDataSize
Die Anzahl der Bytes, die dem DescriptorValue-Parameter zugeordnet sind.
[out, optional] DescriptorValue
Zeiger auf BTH_LE_GATT_DESCRIPTOR_VALUE Struktur, in die der Deskriptorwert zurückgegeben werden soll.
[out, optional] DescriptorValueSizeRequired
Zeiger auf den Puffer, in dem die Anzahl zusätzlicher Bytes gespeichert werden soll, die erforderlich sind, um Daten im Puffer zurückzugeben, auf den descriptorValue verweist.
[in] Flags
Flags zum Ändern des Verhaltens von BluetoothGATTGetDescriptorValue:
Flag | Beschreibung |
---|---|
BLUETOOTH_GATT_FLAG_NONE | Für den Client gelten keine spezifischen GATT-Anforderungen (Standard). |
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED | Der Client fordert die Übertragung der Daten über einen verschlüsselten Kanal an. |
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED | Der Client fordert die Übertragung der Daten über einen authentifizierten Kanal an. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE | Der Deskriptorwert muss direkt vom Gerät gelesen werden. Dadurch wird die im Cache vorhandene überschrieben. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE | Der Deskriptorwert muss aus dem Cache gelesen werden (unabhängig davon, ob er im Cache vorhanden ist oder nicht). |
Rückgabewert
Die BluetoothGATTGetDescriptorValue-Funktion gibt die folgenden Werte zurück:
Rückgabecode | BESCHREIBUNG |
---|---|
|
Der Vorgang wurde erfolgreich abgeschlossen. |
|
Der Pufferparameter ist NULL , und stattdessen wird die Anzahl der verfügbaren Elemente zurückgegeben. |
|
Wird zurückgegeben, wenn sowohl ein übergeordneter Dienst als auch ein Diensthandle bereitgestellt werden und die Diensthierarchie kein Rollup zum bereitgestellten übergeordneten Diensthandle durchführt. |
|
Sowohl DescriptorValue als auch DescriptorValueSizeRequired sind 0. |
|
Es wird ein Puffer angegeben, aber die Pufferanzahl ist kleiner als die erforderliche Größe in Bytes. |
|
Es wurde ein Deskriptorwert angegeben, der aus dem Cache abgerufen werden soll, aber der Deskriptorwert ist nicht im Cache vorhanden. |
|
Die aktuellen Daten im Cache scheinen inkonsistent zu sein und führen zu internen Fehlern. |
|
Der Zielserver hat keine geeignete Netzwerkantwort bereitgestellt. |
|
Das Anforderungstimeout. |
|
Für den Vorgang ist der Arbeitsspeicher nicht mehr vorhanden. |
|
Das angegebene Attributhandle war auf diesem Server ungültig. |
|
Das Attribut kann nicht gelesen werden. |
|
Das Attribut kann nicht geschrieben werden. |
|
Die Attribut-PDU war ungültig. |
|
Das Attribut erfordert eine Authentifizierung, bevor es gelesen oder geschrieben werden kann. |
|
Der Attributserver unterstützt die vom Client empfangene Anforderung nicht. |
|
Der angegebene Offset lag nach dem Ende des Attributs. |
|
Das Attribut erfordert eine Autorisierung, bevor es gelesen oder geschrieben werden kann. |
|
Zu viele Vorbereitungsschreibvorgänge wurden in die Warteschlange eingereiht. |
|
Innerhalb des angegebenen Attributhandlesbereichs wurde kein Attribut gefunden. |
|
Das Attribut kann nicht mit der Blob-Leseanforderung gelesen oder geschrieben werden. |
|
Die für die Verschlüsselung dieses Links verwendete Verschlüsselungsschlüsselgröße ist unzureichend. |
|
Die Länge des Attributwerts ist für den Vorgang ungültig. |
|
Bei der angeforderten Attributanforderung ist ein Fehler aufgetreten, der unwahrscheinlich war und daher nicht wie angefordert abgeschlossen werden konnte. |
|
Das Attribut erfordert eine Verschlüsselung, bevor es gelesen oder geschrieben werden kann. |
|
Der Attributtyp ist kein unterstütztes Gruppierungsattribut, wie durch eine Spezifikation höherer Ebenen definiert. |
|
Unzureichende Ressourcen zum Abschließen der Anforderung. |
|
Ein Fehler, der im reservierten Bereich liegt, wurde empfangen. |
Hinweise
Der Deskriptorwert wird aus dem Cache zurückgegeben, wenn bereits ein Wert vorhanden ist. Dies wäre meistens der Fall, da alle Geräteattribute zum Zeitpunkt der Kopplung oder Zuordnung zwischengespeichert werden. Wenn er jedoch nicht vorhanden ist, wird der Deskriptorwert direkt vom Gerät gelesen und beim erfolgreichen Lesen vom Gerät zwischengespeichert. Wenn BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE oder BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE vorhanden ist, wird der Deskriptorwert mithilfe der angegebenen Methode gelesen.
Zurückgegebene Deskriptorwerte werden beim erfolgreichen Abruf von Deskriptorwerten direkt vom Gerät zwischengespeichert. Es wird davon ausgegangen, dass sich die Deskriptorwerte ändern, sofern kein Dienständerungsereignis empfangen wird.
Profiltreiber sollten vorab einen ausreichend großen Puffer zuordnen, damit das Array von Deskriptorwerten zurückgegeben werden kann. Aufrufer können die erforderliche Puffergröße ermitteln, indem sie einen Wert ungleich NULL in DescriptorValueSizeRequired und NULL in DescriptorValue übergeben.
Der übergeordnete Dienst muss im Cache vorhanden sein, andernfalls schlägt die Funktion fehl. Der übergeordnete Dienst muss ein Dienst sein, der entweder von BluetoothGATTGetServices oder BluetoothGATTGetIncludedServices zurückgegeben wird.
Beispiel
////////////////////////////////////////////////////////////////////////////
// Determine Descriptor Value Buffer Size
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetDescriptorValue(
hCurrService,
currGattDescriptor,
0,
NULL,
&descValueDataSize,
BLUETOOTH_GATT_FLAG_NONE);
if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
PrintHr("BluetoothGATTGetDescriptorValue - Buffer Size", hr);
goto Done; // allow continuation
}
pDescValueBuffer = (PBTH_LE_GATT_DESCRIPTOR_VALUE)malloc(descValueDataSize);
if (NULL == pDescValueBuffer) {
printf("pDescValueBuffer out of memory\r\n");
goto Done;
} else {
RtlZeroMemory(pDescValueBuffer, descValueDataSize);
}
////////////////////////////////////////////////////////////////////////////
// Retrieve the Descriptor Value
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetDescriptorValue(
hCurrService,
currGattDescriptor,
(ULONG)descValueDataSize,
pDescValueBuffer,
NULL,
BLUETOOTH_GATT_FLAG_NONE);
if (S_OK != hr) {
PrintHr("BluetoothGATTGetDescriptorValue - Actual Data", hr);
goto Done; // allow continuation
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Wird in Windows 8 und höheren Versionen von Windows unterstützt. |
Zielplattform | Universell |
Header | bluetoothleapis.h |
Bibliothek | BluetoothAPIs.lib |
DLL | BluetoothAPIs.dll |