Функция 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 (по умолчанию). |
Возвращаемое значение
Эта функция возвращает следующие значения:
Код возврата | Описание |
---|---|
|
Операция выполнена успешно. |
|
Параметр buffer имеет значение NULL, и вместо этого возвращается количество доступных элементов. |
|
Возвращается, если предоставляются как родительская служба, так и дескриптор службы, а иерархия служб не выполняет свертку до предоставленного дескриптора родительской службы. |
|
Произошло одно из следующих условий:
|
|
Указан буфер, но размер количества буферов меньше, чем требуется, в байтах. |
|
Службы были указаны для получения из кэша, но в кэше нет служб. |
|
Текущие данные в кэше выглядят несогласованными и приводят к внутренним ошибкам. |
|
Для операции не хватает памяти. |
Комментарии
Возвращенные службы кэшируются при успешном получении служб непосредственно с устройства. Если событие изменения службы не получено, список возвращаемых служб не изменится.
Драйверы профилей должны предварительно выделить достаточно большой буфер для возвращаемого массива основных служб. Вызывающие стороны могут определить необходимый размер буфера, передав значение, отличное от 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 |