USB ガジェット HAL API の有効化

USB ガジェット Hardware Abstraction Layer(HAL)は、以下のシステム API をサポートします。

  • USB Port Reset API: USB ガジェット HAL v1.1 が必要です。Android 11 以降を搭載したデバイスで利用できます。ホストと USB ガジェットとの接続をリセットできます。
  • USB Bandwidth API: USB ガジェット HAL API v1.2 が必要です。Android 12 以降を搭載したデバイスで利用できます。接続されている USB デバイスとホストとの間の転送速度を取得できます。
  • USB ガジェット HAL Version API: USB ガジェット HAL v1.2 が必要です。Android 12 以降を搭載したデバイスで利用できます。USB ガジェット HAL のバージョン番号を取得できます。

USB ガジェット HAL API をサポートするには、デバイス メーカーで、対応する USB ガジェット HAL バージョンを実装する必要があります。USB ガジェット HAL API を使用するには、システム特権のアプリが必要です。

USB ガジェット HAL とその API の確認

デバイス メーカーは、対応する API をサポートする USB ガジェット HAL を実装する必要があります。

  1. USB ガジェット HAL のデフォルト実装を確認するには、以下のパスを使用します。
  2. ハードウェア インターフェースのヘッダー ファイルを確認するには、以下のパスを使用します。
  3. API を確認するには、以下のパスを使用して AIDL ヘッダー ファイルで API を見つけます。このパスは、この API の Android フレームワーク エントリ ポイントでもあります。

USB ガジェット HAL の実装

USB ガジェット HAL API をサポートするには、正しい USB ガジェット HAL バージョンを実装する必要があります。システム UI を実装する必要はありません。

USB Port Reset API のために USB ガジェット HAL v1.1 を実装するには、ターゲット デバイスとホストとの間の USB 接続をリセットします。

USB ガジェット HAL API のアーキテクチャについて

USB ガジェット HAL API は、すべてが android.hardware.usb パッケージに組み込まれており、USB ガジェット HAL を利用してデバイスとやり取りします。各アーキテクチャの詳細は、以下の対応するタブに表示されます。

USB Bandwidth API

下の図は、USB Bandwidth API のコードフローを示しています。これは、USB UDC カーネル上に構築され、android.hardware.usb パッケージでアクセスできます。この API の getCurrentUsbSpeed() メソッドと updateUsbSpeed() メソッドで、USB の帯域幅が返されます。

USB Bandwidth API

図 1.1 USB Bandwidth API のアーキテクチャ

USB ガジェット HAL Version API

下の図は、USB ガジェット HAL Version API のコードフローを示しています。これは、IUSBGadget V1.2 ハードウェア バインダ上に構築され、android.hardware.usb パッケージでアクセスできます。

USB ガジェット HAL Version API

図 1.2 USB ガジェット HAL Version API のアーキテクチャ

USB Port Reset API

下の図は、フレームワーク内の USB Port Reset API のコードフローを示しています。これには、USB ガジェット HAL の実装も含まれています。

USB Reset API

図 1.3 USB Port Reset API のコードフローの例

実装の検証

USB ガジェット HAL バージョンとそれに対応する API には、それぞれにベンダー テスト スイート(VTS)のテストケースがあります。

USB Bandwidth API と USB ガジェット HAL Version API

USB ガジェット HAL v1.2 の VTS テストケースは次のパスにあります。

<aosp>/test/vts-testcase/hal/usb/gadget/V1_2/

USB ガジェット HAL v1.2 向けの VTS テストケースは、次のアクションを実行可能な、ホスト側のテストケースです。

  • adb シェルコマンド(#svc usb getGadgetHalVersion)を使用して USB ガジェット HAL Version API を呼び出します。
  • adb シェルコマンド(#svc usb getUsbSpeed)を使用して USB Bandwidth API を呼び出します。
  • 出力が想定値であることを確認します。

USB Port Reset API

次のパスをたどって、USB Port Reset API 向けに実装されている VTS テストケースを見つけます。

<aosp>/test/vts-testcase/hal/usb/gadget/V1_1/

USB Port Reset API 向けの VTS テストケースは、次のアクションを実行可能な、ホスト側のテストケースです。

  • adb シェルコマンド(#svc usb resetUsbGadget)を使用して USB Port Reset API を呼び出します。
  • テスト対象デバイス(DUT)で接続解除と再接続ができるかどうか確認します。