Função BluetoothGATTGetCharacteristicValue (bluetoothleapis.h)
A função BluetoothGATTGetCharacteristicValue obtém o valor da característica especificada.
Sintaxe
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
);
Parâmetros
[in] hDevice
Identificador para o serviço.
[in] Characteristic
Ponteiro para a característica pai do valor de característica a ser recuperado.
[in] CharacteristicValueDataSize
O número de bytes alocados para o parâmetro CharacteristicValue .
[out, optional] CharacteristicValue
Ponteiro para buffer no qual retornar o valor de característica.
[out, optional] CharacteristicValueSizeRequired
Ponteiro para o buffer no qual armazenar o número de bytes necessários para retornar dados no buffer apontado por CharacteristicValue.
[in] Flags
Sinalizadores para modificar o comportamento de BluetoothGATTGetCharacteristicValue:
Sinalizador | Descrição |
---|---|
BLUETOOTH_GATT_FLAG_NONE | O cliente não tem requisitos de GATT específicos (padrão). |
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED | O cliente solicita que os dados sejam transmitidos por um canal criptografado. |
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED | O cliente solicita que os dados sejam transmitidos por um canal autenticado. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE | O valor de característica deve ser lido diretamente do dispositivo. Isso substituirá aquele no cache se já estiver presente. |
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE | O valor de característica deve ser lido do cache (independentemente de ele estar presente no cache ou não). |
Retornar valor
A função BluetoothGATTGetCharacteristicValue retorna os seguintes valores:
Código de retorno | Descrição |
---|---|
|
A operação foi concluída com sucesso. |
|
O parâmetro de buffer é NULL e o número de itens disponíveis está sendo retornado. |
|
Retornado se um serviço pai e um identificador de serviço forem fornecidos e a hierarquia de serviço não for acumulada no identificador de serviço pai fornecido. |
|
CharacteristicValue e CharacteristicValueSizeRequired são 0. |
|
Um buffer é especificado, mas o tamanho da contagem de buffers é menor do que o necessário, em bytes. |
|
Os dados atuais no cache parecem ser inconsistentes e estão levando a erros internos. |
|
O servidor de destino não forneceu uma resposta de rede apropriada. |
|
A solicitação atingiu o tempo limite. |
|
O valor de característica não é legível conforme ditado pelas propriedades características. |
|
A operação ficou sem memória. |
|
O identificador de atributo dado não era válido neste servidor. |
|
O atributo não pode ser lido. |
|
O atributo não pode ser gravado. |
|
O atributo PDU era inválido. |
|
O atributo requer autenticação antes de ser lido ou gravado. |
|
O servidor de atributos não dá suporte à solicitação recebida do cliente. |
|
O deslocamento especificado foi passado do final do atributo. |
|
O atributo requer autorização antes de ser lido ou gravado. |
|
Muitas gravações de preparação foram enfileiradas. |
|
Nenhum atributo encontrado no intervalo de identificador de atributo fornecido. |
|
O atributo não pode ser lido ou gravado usando a Solicitação de Blob de Leitura. |
|
O tamanho da chave de criptografia usado para criptografar esse link é insuficiente. |
|
O comprimento do valor do atributo é inválido para a operação. |
|
A solicitação de atributo solicitada encontrou um erro improvável e, portanto, não pôde ser concluído conforme solicitado. |
|
O atributo requer criptografia antes de ser lido ou gravado. |
|
O tipo de atributo não é um atributo de agrupamento com suporte, conforme definido por uma especificação de camada superior. |
|
Recursos insuficientes para concluir a solicitação. |
|
Um erro que está no intervalo reservado foi recebido. |
Comentários
O valor de característica será retornado do cache se já houver um. Esse seria o caso na maior parte do tempo, pois todos os atributos do dispositivo são armazenados em cache no momento do emparelhamento ou da associação. No entanto, se não estiver presente, o valor de característica será lido diretamente do dispositivo e será armazenado em cache após a leitura com êxito do dispositivo. Se BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE ou BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE estiver presente, o valor de característica será lido usando o método especificado.
As características retornadas são armazenadas em cache após a recuperação bem-sucedida das características do dispositivo diretamente. A menos que um evento de alteração de serviço seja recebido, não se espera que a lista de características retornadas seja alterada.
Os drivers de perfil devem pré-alocar um buffer suficientemente grande para que a matriz de características seja retornada. Os chamadores podem determinar o tamanho do buffer necessário passando um valor não NULL em CharacteristicValueSizeRequired e NULL em CharacteristicValue.
O serviço pai deve estar presente no cache, caso contrário, a função falhará. O serviço pai deve ser um serviço retornado por BluetoothGATTGetServices ou BluetoothGATTGetIncludedServices.
Exemplo
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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Com suporte em Windows 8 e versões posteriores do Windows. |
Plataforma de Destino | Universal |
Cabeçalho | bluetoothleapis.h |
Biblioteca | BluetoothAPIs.lib |
DLL | BluetoothAPIs.dll |