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 を実装する必要があります。
- USB ガジェット HAL のデフォルト実装を確認するには、以下のパスを使用します。
- バージョン 1.2(最新):
<aosp>/hardware/interfaces/usb/gadget/1.2/default/
- バージョン 1.1:
<aosp>/hardware/interfaces/usb/gadget/1.1/default/
- バージョン 1.2(最新):
- ハードウェア インターフェースのヘッダー ファイルを確認するには、以下のパスを使用します。
- API を確認するには、以下のパスを使用して AIDL ヘッダー ファイルで API を見つけます。このパスは、この API の Android フレームワーク エントリ ポイントでもあります。
android.hardware.usb
:<aosp>/core/java/android/hardware/usb
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 の帯域幅が返されます。
図 1.1 USB Bandwidth API のアーキテクチャ
USB ガジェット HAL Version API
下の図は、USB ガジェット HAL Version API のコードフローを示しています。これは、IUSBGadget V1.2 ハードウェア バインダ上に構築され、android.hardware.usb
パッケージでアクセスできます。
図 1.2 USB ガジェット HAL Version API のアーキテクチャ
USB Port Reset API
下の図は、フレームワーク内の USB Port Reset API のコードフローを示しています。これには、USB ガジェット HAL の実装も含まれています。
図 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)で接続解除と再接続ができるかどうか確認します。