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 の動作を変更するためのフラグ:
フラグ | 説明 |
---|---|
BLUETOOTH_GATT_FLAG_NONE | クライアントに特定の GATT 要件がありません (既定値)。 |
戻り値
この関数は、次の値を返します。
リターン コード | 説明 |
---|---|
|
操作は正常に完了しました。 |
|
buffer パラメーターは NULL で、代わりに使用可能な項目の数が返されます。 |
|
親サービスとサービス ハンドルの両方が指定され、サービス階層が指定された親サービス ハンドルにロールアップされない場合に返されます。 |
|
次のいずれかの条件が発生しました。
|
|
バッファーが指定されていますが、バッファー数のサイズは、必要なサイズよりもバイト単位で小さくなります。 |
|
サービスはキャッシュから取得するように指定されましたが、キャッシュにサービスは存在しません。 |
|
キャッシュ内の現在のデータは矛盾しているように見え、内部エラーが発生しています。 |
|
操作がメモリ不足でした。 |
注釈
返されたサービスは、デバイスから直接サービスが正常に取得されるとキャッシュされます。 サービス変更イベントを受信しない限り、返されるサービスの一覧は変更されるとは限りません。
プロファイル ドライバーは、返されるプライマリ サービスの配列に十分な大きさのバッファーを事前に割り当てる必要があります。 呼び出し元は、ServicesBufferActual に NULL 以外の値を渡し、ServicesBuffer で NULL を渡すことで、必要なバッファー サイズを決定できます。
返されたサービス構造を変更し、その後の関数呼び出しで変更された構造体を使用しないでください。 呼び出し元がこれを行う場合、動作は未定義です。
例
////////////////////////////////////////////////////////////////////////////
// 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 でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | bluetoothleapis.h |
Library | BluetoothAPIs.lib |
[DLL] | BluetoothAPIs.dll |