Compartilhar via


Função BluetoothGATTGetServices (bluetoothleapis.h)

A função BluetoothGATTGetServices obtém todos os serviços primários disponíveis para um servidor.

Sintaxe

HRESULT BluetoothGATTGetServices(
  [in]            HANDLE               hDevice,
  [in]            USHORT               ServicesBufferCount,
  [out, optional] PBTH_LE_GATT_SERVICE ServicesBuffer,
  [out]           USHORT               *ServicesBufferActual,
  [in]            ULONG                Flags
);

Parâmetros

[in] hDevice

Manipule para o dispositivo Bluetooth do qual obter a lista de serviços primários.

[in] ServicesBufferCount

O número de elementos alocados para o parâmetro ServicesBuffer .

[out, optional] ServicesBuffer

Ponteiro para o buffer que contém uma estrutura BTH_LE_GATT_SERVICE na qual retornar serviços.

[out] ServicesBufferActual

Ponteiro para o buffer no qual o número real de serviços foi retornado no parâmetro ServicesBuffer .

[in] Flags

Sinalizadores para modificar o comportamento de BluetoothGATTGetServices:

Sinalizador Descrição
BLUETOOTH_GATT_FLAG_NONE O cliente não tem requisitos de GATT específicos (padrão).

Retornar valor

Essa função retorna os seguintes valores:

Código de retorno Descrição
S_OK
A operação foi concluída com sucesso.
ERROR_MORE_DATA
O parâmetro buffer é NULL e o número de itens disponíveis está sendo retornado.
ERROR_ACCESS_DENIED
Retornado se um serviço pai e um identificador de serviço forem fornecidos e a hierarquia de serviço não for acumulada para o identificador de serviço pai fornecido.
ERROR_INVALID_PARAMETER
Uma das seguintes condições ocorreu:
  • ServicesBuffer é NULL e ServicesBufferCount é 0
  • ServicesBuffer não é NULL, mas ServicesBufferCount é NULL
  • ServicesBuffer não é NULL e ServicesBufferCount é 0
ERROR_INVALID_USER_BUFFER
Um buffer é especificado, mas o tamanho da contagem de buffers é menor do que o necessário, em bytes.
ERROR_INVALID_FUNCTION
Os serviços foram especificados para serem recuperados do cache, mas nenhum serviço está presente no cache.
ERROR_BAD_COMMAND
Os dados atuais no cache parecem ser inconsistentes e estão levando a erros internos.
ERROR_NO_SYSTEM_RESOURCES
A operação ficou sem memória.

Comentários

Os serviços retornados são armazenados em cache após a recuperação bem-sucedida dos serviços do dispositivo diretamente. A menos que um evento de alteração de serviço seja recebido, a lista de serviços retornados não deverá ser alterada.

Os drivers de perfil devem pré-alocar um buffer suficientemente grande para que a matriz de serviços primários seja retornada. Os chamadores podem determinar o tamanho do buffer necessário passando um valor não NULL em ServicesBufferActual e NULL em ServicesBuffer.

Não modifique a estrutura de serviço retornada e use a estrutura modificada em chamadas de função subsequentes. O comportamento será indefinido se o chamador fizer isso.

Exemplo


////////////////////////////////////////////////////////////////////////////
// Determine Services Buffer Size
////////////////////////////////////////////////////////////////////////////

    hr = BluetoothGATTGetServices(
            hLEDevice,
            0,
            NULL,
            &serviceBufferCount,
            BLUETOOTH_GATT_FLAG_NONE);
    
    if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
        PrintHr("BluetoothGATTGetServices - Buffer Size", hr);
        goto Done;
    }

    pServiceBuffer = (PBTH_LE_GATT_SERVICE)
            malloc(sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
    
    if (NULL == pServiceBuffer) {
        printf("pServiceBuffer out of memory\r\n");
        goto Done;
    } else {
        RtlZeroMemory(pServiceBuffer, 
                sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
    }
    
////////////////////////////////////////////////////////////////////////////
// Retrieve Services
////////////////////////////////////////////////////////////////////////////
    
    hr = BluetoothGATTGetServices(
            hLEDevice,
            serviceBufferCount,
            pServiceBuffer,
            &numServices,
            BLUETOOTH_GATT_FLAG_NONE);
    
    if (S_OK != hr) {
        PrintHr("BluetoothGATTGetServices - Actual Data", hr);
        goto Done;
    }

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

Confira também

BTH_LE_GATT_SERVICE