BluetoothGATTGetIncludedServices 関数 (bluetoothleapis.h)
BluetoothGATTGetIncludedServices 関数は、特定のサービスで使用可能なすべてのサービスを取得します。
構文
HRESULT BluetoothGATTGetIncludedServices(
[in] HANDLE hDevice,
[in, optional] PBTH_LE_GATT_SERVICE ParentService,
[in] USHORT IncludedServicesBufferCount,
[out, optional] PBTH_LE_GATT_SERVICE IncludedServicesBuffer,
[out] USHORT *IncludedServicesBufferActual,
[in] ULONG Flags
);
パラメーター
[in] hDevice
Bluetooth デバイスまたは親サービスを処理します。
[in, optional] ParentService
取得 する含 まれるサービスの親サービスを含むBTH_LE_GATT_SERVICE構造体のアドレス。 このパラメーターは、デバイス ハンドルが hDevice に渡される場合に必要です。 サービス ハンドルが hDevice に渡された場合、このパラメーターは省略可能です。この場合、サービス ハンドルで指定されたサービスは親として扱われます。
[in] IncludedServicesBufferCount
IncludedServicesBuffer パラメーターに割り当てられた要素の数。
[out, optional] IncludedServicesBuffer
含まれているサービスを返す BTH_LE_GATT_SERVICE 構造体を含むバッファーのアドレス。
[out] IncludedServicesBufferActual
IncludedServicesBuffer パラメーターで、含まれているサービスの実際の数が返されたバッファーへのポインター。
[in] Flags
BluetoothGATTGetIncludedServices の動作を変更するためのフラグ:
フラグ | 説明 |
---|---|
BLUETOOTH_GATT_FLAG_NONE | クライアントに特定の GATT 要件がありません (既定値)。 |
戻り値
この関数は、次の値を返します。
リターン コード | 説明 |
---|---|
|
操作は正常に完了しました。 |
|
buffer パラメーターは NULL で、代わりに使用可能な項目の数が返されます。 |
|
親サービスとサービス ハンドルの両方が指定され、サービス階層が指定された親サービス ハンドルにロールアップされない場合に返されます。 |
|
次のいずれかの条件が発生しました。
|
|
バッファーが指定されていますが、バッファー数のサイズは、必要なサイズよりもバイト単位で小さくなります。 |
|
サービスはキャッシュから取得するように指定されましたが、キャッシュにサービスは存在しません。 |
|
キャッシュ内の現在のデータは矛盾しているように見え、内部エラーが発生しています。 |
|
操作がメモリ不足でした。 |
注釈
返されたサービスは、デバイスから直接サービスが正常に取得されるとキャッシュされます。 サービス変更イベントを受信しない限り、返されるサービスの一覧は変更されるとは限りません。
プロファイル ドライバーは、返されるプライマリ サービスの配列に十分な大きさのバッファーを事前に割り当てる必要があります。 呼び出し元は、IncludedServicesBufferActual に NULL 以外の値を渡し、IncludedServicesBuffer で NULL を渡すことで、必要なバッファー サイズを決定できます。
返されたサービス構造を変更し、その後の関数呼び出しで変更された構造体を使用しないでください。 呼び出し元がこれを行う場合、動作は未定義です。
例
////////////////////////////////////////////////////////////////////////////
// Determine Included Services Buffer Size
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetIncludedServices(
hLEDevice,
gattService,
0,
NULL,
&inclServicesBufferSize,
BLUETOOTH_GATT_FLAG_NONE);
if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
PrintHr("BluetoothGATTGetIncludedServices - Buffer Size", hr);
goto Done;
}
if (inclServicesBufferSize > 0) {
pInclServicesBuffer = (PBTH_LE_GATT_ PBTH_LE_GATT_SERVICE)
malloc(inclServicesBufferSize * sizeof(BTH_LE_GATT_SERVICE));
if (NULL == pInclServicesBuffer) {
printf("pInclServicesBuffer out of memory\r\n");
goto Done;
} else {
RtlZeroMemory(pInclServicesBuffer,
inclServicesBufferSize * sizeof(BTH_LE_GATT_SERVICE));
}
////////////////////////////////////////////////////////////////////////////
// Retrieve Included Services
////////////////////////////////////////////////////////////////////////////
hr = BluetoothGATTGetIncludedServices (
hLEDevice,
gattService,
inclServicesBufferSize,
pInclServicesBuffer,
&numIncludedServices
BLUETOOTH_GATT_FLAG_NONE);
if (S_OK != hr) {
PrintHr("BluetoothGATTGetIncludedServices - Actual Data", hr);
goto Done;
}
}
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 以降のバージョンの Windows でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | bluetoothleapis.h |
Library | BluetoothApis.lib |
[DLL] | BluetoothAPIs.dll |