USB 小工具硬件抽象层 (HAL) 支持以下系统 API:
- USB Port Reset API:USB Port Reset API 要求实现 USB Gadget HAL v1.1,适用于搭载 Android 11 或更高版本的设备。使用该 API 可以重置与所连接的主机之间的 USB 小工具连接。
- USB Bandwidth API:USB Bandwidth API 要求实现 USB Gadget HAL v1.2,适用于搭载 Android 12 或更高版本的设备。使用该 API 可以获取已连接的 USB 设备与主机之间的传输速度。
- USB Gadget HAL Version API:USB Gadget HAL Version API 要求实现 USB Gadget HAL v1.2,适用于搭载 Android 12 或更高版本的设备。使用该 API 可以获取 USB Gadget HAL 版本号。
如需支持 USB Gadget HAL API,设备制造商必须实现对应的 USB Gadget HAL 版本。如需使用 USB Gadget HAL API,必须具有系统特权应用。
查找 USB Gadget HAL 及其 API
设备制造商必须实现 USB Gadget HAL 才能支持对应的 API。
- 如需查找 USB Gadget HAL 的默认实现,请使用以下路径:
- 如需查找硬件接口头文件,请使用以下路径:
- 如需查找这些 API,请使用以下路径来定位到 AIDL 头文件下的 API。此路径也是这些 API 的 Android 框架入口点:
android.hardware.usb
:<aosp>/core/java/android/hardware/usb
实现 USB Gadget HAL
如需支持 USB Gadget HAL API,您必须实现正确的 USB Gadget HAL 版本。不需要实现系统界面。
如需为 USB Port Reset API 实现 USB Gadget HAL v1.1,请重置目标设备与主机之间的 USB 连接。
了解 USB Gadget HAL API 架构
USB Gadget HAL API 全部内置在 android.hardware.usb
软件包中,并利用 USB Gadget HAL 与设备进行交互。这些 API 的每个特定架构的详细信息在对应的标签页中,如下所示:
下图展示了基于 USB UDC 内核构建并可通过 android.hardware.usb
软件包访问的 USB Bandwidth API 的代码流。该 API 可通过 getCurrentUsbSpeed()
和 updateUsbSpeed()
方法返回 USB 带宽。
图 1.1 USB Bandwidth API 的架构
下图展示了基于 IUSBGadget V1.2 硬件 binder 构建并可通过 android.hardware.usb
软件包访问的 USB Gadget HAL Version API 的代码流。
图 1.2 USB Gadget HAL Version API 的架构
下图展示了框架中 USB Port Reset API 的代码流,包括 USB Gadget HAL 的实现。
图 1.3 USB Port Reset API 代码流示例
验证您的实现
每个 USB Gadget HAL 版本及其对应的 API 都有一个供应商测试套件 (VTS) 测试用例。
USB Bandwidth API 和 USB Gadget HAL Version API
您可在以下路径找到为 USB Gadget HAL v1.2 实现的 VTS 测试用例:
<aosp>/test/vts-testcase/hal/usb/gadget/V1_2/
为 USB Gadget HAL v1.2 实现的 VTS 测试用例是一种主机端测试用例,让您可以执行以下操作:
- 使用 adb shell 命令 (
#svc usb getGadgetHalVersion
) 调用 USB Gadget HAL Version API。 - 使用 adb shell 命令 (
#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 shell 命令 (
#svc usb resetUsbGadget
) 调用 USB Port Reset API。 - 检查被测设备 (DUT) 是否可以断开连接并重新连接。