Поделиться через


Функция BluetoothGATTGetServices (bluetoothleapis.h)

Функция BluetoothGATTGetServices получает все основные службы, доступные для сервера.

Синтаксис

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

Параметры

[in] hDevice

Дескриптор устройства Bluetooth, с которого можно получить список основных служб.

[in] ServicesBufferCount

Количество элементов, выделенных для параметра ServicesBuffer .

[out, optional] ServicesBuffer

Указатель на буфер, содержащий BTH_LE_GATT_SERVICE структуру, в которую возвращаются службы.

[out] ServicesBufferActual

Указатель на буфер, в который было возвращено фактическое количество служб в параметре ServicesBuffer .

[in] Flags

Флаги для изменения поведения BluetoothGATTGetServices:

Flag Описание
BLUETOOTH_GATT_FLAG_NONE У клиента нет конкретных требований GATT (по умолчанию).

Возвращаемое значение

Эта функция возвращает следующие значения:

Код возврата Описание
S_OK
Операция выполнена успешно.
ERROR_MORE_DATA
Параметр buffer имеет значение NULL, и вместо этого возвращается количество доступных элементов.
ERROR_ACCESS_DENIED
Возвращается, если предоставляются как родительская служба, так и дескриптор службы, а иерархия служб не выполняет свертку до предоставленного дескриптора родительской службы.
ERROR_INVALID_PARAMETER
Произошло одно из следующих условий:
  • ServicesBuffer имеет значение NULL, а ServicesBufferCount — 0
  • ServicesBuffer имеет значение, отличное от NULL, а ServicesBufferCountNULL.
  • Значение ServicesBuffer не равно NULL, а ServicesBufferCount — 0
ERROR_INVALID_USER_BUFFER
Указан буфер, но размер количества буферов меньше, чем требуется, в байтах.
ERROR_INVALID_FUNCTION
Службы были указаны для получения из кэша, но в кэше нет служб.
ERROR_BAD_COMMAND
Текущие данные в кэше выглядят несогласованными и приводят к внутренним ошибкам.
ERROR_NO_SYSTEM_RESOURCES
Для операции не хватает памяти.

Комментарии

Возвращенные службы кэшируются при успешном получении служб непосредственно с устройства. Если событие изменения службы не получено, список возвращаемых служб не изменится.

Драйверы профилей должны предварительно выделить достаточно большой буфер для возвращаемого массива основных служб. Вызывающие стороны могут определить необходимый размер буфера, передав значение, отличное от NULL , в ServicesBufferActual и NULL в ServicesBuffer.

Не изменяйте возвращаемую структуру службы, а затем используйте измененную структуру в последующих вызовах функций. Поведение не определено, если это делает вызывающий объект.

Пример


////////////////////////////////////////////////////////////////////////////
// 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;
    }

Требования

Требование Значение
Минимальная версия клиента Поддерживается в Windows 8 и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть bluetoothleapis.h
Библиотека BluetoothAPIs.lib
DLL BluetoothAPIs.dll

См. также раздел

BTH_LE_GATT_SERVICE