Функция BluetoothGATTGetDescriptors (bluetoothleapis.h)
Функция BluetoothGATTGetDescriptors получает все дескрипторы, доступные для указанной характеристики.
Синтаксис
HRESULT BluetoothGATTGetDescriptors(
[in] HANDLE hDevice,
[in] PBTH_LE_GATT_CHARACTERISTIC Characteristic,
[in] USHORT DescriptorsBufferCount,
[out, optional] PBTH_LE_GATT_DESCRIPTOR DescriptorsBuffer,
[out] USHORT *DescriptorsBufferActual,
[in] ULONG Flags
);
Параметры
[in] hDevice
Дескриптор устройства или службы Bluetooth. Если передается дескриптор службы, служба должна быть дедушкой дескриптора.
[in] Characteristic
Указатель на BTH_LE_GATT_CHARACTERISTIC структуру, содержащую родительскую характеристику извлекаемых дескрипторов.
[in] DescriptorsBufferCount
Количество элементов, выделенных для параметра DescriptorsBuffer .
[out, optional] DescriptorsBuffer
Указатель на буфер, содержащий BTH_LE_GATT_DESCRIPTOR структуру, в которую возвращаются дескрипторы.
[out] DescriptorsBufferActual
Указатель на буфер, в который было возвращено фактическое количество дескрипторов в параметре DescriptorsBuffer .
[in] Flags
Флаги для изменения поведения BluetoothGATTGetDescriptors:
Flag | Описание |
---|---|
BLUETOOTH_GATT_FLAG_NONE | У клиента нет конкретных требований GATT (по умолчанию). |
Возвращаемое значение
Эта функция возвращает следующие значения:
Код возврата | Описание |
---|---|
|
Операция выполнена успешно. |
|
Параметр buffer имеет значение NULL, и вместо этого возвращается количество доступных элементов. |
|
Возвращается, если предоставляются как родительская служба, так и дескриптор службы, а иерархия служб не выполняет свертку до предоставленного дескриптора родительской службы. |
|
Произошло одно из следующих условий:
|
|
Указан буфер, но размер количества буферов меньше, чем требуется, в байтах. |
|
Текущие данные в кэше выглядят несогласованными и приводят к внутренним ошибкам. |
|
Для операции не хватает памяти. |
Комментарии
Возвращаемые характеристики кэшируются при успешном извлечении характеристик непосредственно с устройства. Если событие изменения службы не получено, список возвращаемых характеристик не изменится.
Драйверы профилей должны предварительно выделить достаточно большой буфер для возвращаемого массива характеристик. Вызывающие стороны могут определить необходимый размер буфера, передав значение, отличное от NULL , в descriptorsBufferActual и NULL в DescriptorsBuffer.
Не изменяйте возвращаемую структуру характеристик, а затем используйте измененную структуру в последующих вызовах функций. Поведение не определено, если это делает вызывающий объект.
Родительская характеристика должна присутствовать в кэше, в противном случае функция завершится ошибкой. Родительская служба должна быть службой, возвращаемой bluetoothGATTGetServices или BluetoothGATTGetIncludedServices.
Пример
////////////////////////////////////////////////////////////////////////////
// Determine Descriptor Buffer Size
////////////////////////////////////////////////////////////////////////////
GetDescriptors:
hr = BluetoothGATTGetDescriptors(
hCurrService,
currGattChar,
0,
NULL,
&descriptorBufferSize,
BLUETOOTH_GATT_FLAG_NONE);
if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
PrintHr("BluetoothGATTGetDescriptors - Buffer Size", hr);
goto Done; // Allow continuation
}
if (descriptorBufferSize > 0) {
pDescriptorBuffer = (PBTH_LE_GATT_DESCRIPTOR)
malloc(descriptorBufferSize
* sizeof(BTH_LE_GATT_DESCRIPTOR));
if (NULL == pDescriptorBuffer) {
printf("pDescriptorBuffer out of memory\r\n");
goto Done;
} else {
RtlZeroMemory(pDescriptorBuffer, descriptorBufferSize);
}
////////////////////////////////////////////////////////////////////////////
// Retrieve Descriptors
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetDescriptors(
hCurrService,
currGattChar,
descriptorBufferSize,
pDescriptorBuffer,
&numDescriptors,
BLUETOOTH_GATT_FLAG_NONE);
if (S_OK != hr) {
PrintHr("BluetoothGATTGetDescriptors - Actual Data", hr);
goto Done;
}
if (numDescriptors != descriptorBufferSize) {
printf("buffer size and buffer size actual size mismatch\r\n");
goto Done;
}
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в Windows 8 и более поздних версиях Windows. |
Целевая платформа | Универсальное |
Верхняя часть | bluetoothleapis.h |
Библиотека | BluetoothApis.lib |
DLL | BluetoothAPIs.dll |