Funzione BluetoothGATTGetCharacteristicValue (bluetoothleapis.h)
La funzione BluetoothGATTGetCharacteristicValue ottiene il valore della caratteristica specificata.
Sintassi
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
);
Parametri
[in] hDevice
Gestire il servizio.
[in] Characteristic
Puntatore alla caratteristica padre del valore della caratteristica da recuperare.
[in] CharacteristicValueDataSize
Numero di byte allocati per il parametro CharacteristicValue .
[out, optional] CharacteristicValue
Puntatore al buffer in cui restituire il valore della caratteristica.
[out, optional] CharacteristicValueSizeRequired
Puntatore al buffer in cui archiviare il numero di byte necessari per restituire i dati nel buffer a cui punta CharacteristicValue.
[in] Flags
Flag per modificare il comportamento di BluetoothGATTGetCharacteristicValue:
Flag | Descrizione |
---|---|
BLUETOOTH_GATT_FLAG_NONE | Il client non ha requisiti GATT specifici (impostazione predefinita). |
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED | Il client richiede la trasmissione dei dati su un canale crittografato. |
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED | Il client richiede la trasmissione dei dati su un canale autenticato. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE | Il valore della caratteristica deve essere letto direttamente dal dispositivo. Questo sovrascrive quello nella cache, se ne è già presente uno. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE | Il valore della caratteristica deve essere letto dalla cache , indipendentemente dal fatto che sia presente nella cache o meno. |
Valore restituito
La funzione BluetoothGATTGetCharacteristicValue 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. |
|
Sia CharacteristicValue che CharacteristicValueSizeRequired sono 0. |
|
Viene specificato un buffer, ma le dimensioni del conteggio del buffer sono inferiori a quelle necessarie, in byte. |
|
I dati correnti nella cache sembrano incoerenti e comportano errori interni. |
|
Il server di destinazione non ha fornito una risposta di rete appropriata. |
|
Timeout della richiesta. |
|
Il valore della caratteristica non è leggibile in base alle proprietà delle caratteristiche. |
|
L'operazione ha esaurito la memoria. |
|
L'handle di attributo specificato non è valido in questo server. |
|
L'attributo non può essere letto. |
|
L'attributo non può essere scritto. |
|
L'attributo PDU non è valido. |
|
L'attributo richiede l'autenticazione prima di poter essere letto o scritto. |
|
Il server attributi non supporta la richiesta ricevuta dal client. |
|
L'offset specificato è passato alla fine dell'attributo. |
|
L'attributo richiede l'autorizzazione prima di poter essere letto o scritto. |
|
Troppe scritture di preparazione sono state accodate. |
|
Nessun attributo trovato nell'intervallo di handle dell'attributo specificato. |
|
L'attributo non può essere letto o scritto usando la richiesta read BLOB. |
|
Le dimensioni della chiave di crittografia usate per crittografare questo collegamento non sono sufficienti. |
|
La lunghezza del valore dell'attributo non è valida per l'operazione. |
|
La richiesta di attributo richiesta ha rilevato un errore improbabile e pertanto non è stato possibile completare come richiesto. |
|
L'attributo richiede la crittografia prima di poter essere letto o scritto. |
|
Il tipo di attributo non è un attributo di raggruppamento supportato, come definito da una specifica di livello superiore. |
|
Risorse insufficienti per completare la richiesta. |
|
È stato ricevuto un errore che si trova nell'intervallo riservato. |
Commenti
Il valore della caratteristica viene restituito dalla cache se ne è già presente uno. Questo è il caso nella maggior parte dei casi, perché tutti gli attributi del dispositivo vengono memorizzati nella cache al momento dell'associazione o dell'associazione. Tuttavia, se non è presente, il valore della caratteristica viene letto direttamente dal dispositivo e verrà memorizzato nella cache dopo averlo letto correttamente dal dispositivo. Se BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE o BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE è presente, il valore della caratteristica viene letto usando il metodo specificato.
Le caratteristiche restituite vengono memorizzate nella cache in caso di recupero corretto delle caratteristiche dal dispositivo direttamente. A meno che non venga ricevuto un evento di modifica del servizio, non è previsto che l'elenco delle caratteristiche restituite cambi.
I driver di profilo devono pre-allocare un buffer sufficientemente grande per la matrice di caratteristiche in cui restituire. I chiamanti possono determinare le dimensioni del buffer necessarie passando un valore non NULL in CharacteristicValueSizeRequired e NULL in CharacteristicValue.
Il servizio padre deve essere presente nella cache. In caso contrario, la funzione avrà esito negativo. Il servizio padre deve essere un servizio restituito da BluetoothGATTGetServices o BluetoothGATTGetIncludedServices.
Esempio
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;
}
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 |