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의 동작을 수정하는 플래그:
플래그 | 설명 |
---|---|
BLUETOOTH_GATT_FLAG_NONE | 클라이언트에 특정 GATT 요구 사항(기본값)이 없습니다. |
반환 값
이 함수는 다음 값을 반환합니다.
반환 코드 | Description |
---|---|
|
작업이 성공적으로 완료되었습니다. |
|
버퍼 매개 변수가 NULL이고 사용 가능한 항목 수가 대신 반환됩니다. |
|
부모 서비스와 서비스 핸들이 모두 제공되고 서비스 계층이 제공된 부모 서비스 핸들로 롤업되지 않는 경우 반환됩니다. |
|
다음 조건 중 하나가 발생했습니다.
|
|
버퍼가 지정되었지만 버퍼 수 크기는 필요한 크기(바이트)보다 작습니다. |
|
캐시의 현재 데이터가 일치하지 않는 것으로 나타나 내부 오류가 발생합니다. |
|
작업에 메모리가 부족합니다. |
설명
반환된 특성은 디바이스에서 직접 특성을 성공적으로 검색할 때 캐시됩니다. 서비스 변경 이벤트가 수신되지 않는 한 반환된 특성 목록은 변경되지 않습니다.
프로필 드라이버는 반환할 특성 배열에 대해 충분히 큰 버퍼를 미리 할당해야 합니다. 호출자는 DescriptorsBufferActual에서 NULL이 아닌 값을 전달하고 DescriptorsBuffer에서 NULL을 전달하여 필요한 버퍼 크기를 확인할 수 있습니다.
반환된 특성 구조를 수정하지 말고 후속 함수 호출에서 수정된 구조를 사용합니다. 호출자가 이 작업을 수행하는 경우 동작이 정의되지 않습니다.
부모 특성은 캐시에 있어야 합니다. 그렇지 않으면 함수가 실패합니다. 부모 서비스는 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 |