次の方法で共有


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 要件がありません (既定値)。

戻り値

この関数は、次の値を返します。

リターン コード 説明
S_OK
操作は正常に完了しました。
ERROR_MORE_DATA
buffer パラメーターは NULL で、代わりに使用可能な項目の数が返されます。
ERROR_ACCESS_DENIED
親サービスとサービス ハンドルの両方が指定され、サービス階層が指定された親サービス ハンドルにロールアップされない場合に返されます。
ERROR_INVALID_PARAMETER
次のいずれかの条件が発生しました。
  • IncludedServicesBufferNULLIncludedServicesBufferCount は 0 です。
  • IncludedServicesBufferNULL 以外ですが、 IncludedServicesBufferCountNULL です
  • IncludedServicesBufferNULL 以外で、 IncludedServicesBufferCount は 0 です。
ERROR_INVALID_USER_BUFFER
バッファーが指定されていますが、バッファー数のサイズは、必要なサイズよりもバイト単位で小さくなります。
ERROR_INVALID_FUNCTION
サービスはキャッシュから取得するように指定されましたが、キャッシュにサービスは存在しません。
ERROR_BAD_COMMAND
キャッシュ内の現在のデータは矛盾しているように見え、内部エラーが発生しています。
ERROR_NO_SYSTEM_RESOURCES
操作がメモリ不足でした。

注釈

返されたサービスは、デバイスから直接サービスが正常に取得されるとキャッシュされます。 サービス変更イベントを受信しない限り、返されるサービスの一覧は変更されるとは限りません。

プロファイル ドライバーは、返されるプライマリ サービスの配列に十分な大きさのバッファーを事前に割り当てる必要があります。 呼び出し元は、IncludedServicesBufferActualNULL 以外の値を渡し、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

こちらもご覧ください

BTH_LE_GATT_SERVICE