Habilite las API HAL del dispositivo USB

La capa de abstracción de hardware (HAL) del dispositivo USB es compatible con las siguientes API del sistema:

  • API de restablecimiento de puerto USB: la API de restablecimiento de puerto USB requiere USB Gadget HAL v1.1 y está disponible para dispositivos con Android 11 o superior. Úselo para restablecer la conexión del dispositivo USB con el host conectado.
  • API de ancho de banda USB: la API de ancho de banda USB requiere USB Gadget HAL v1.2 y está disponible para dispositivos con Android 12 o superior. Úselo para obtener la velocidad de transferencia entre un dispositivo USB conectado y el host.
  • USB Gadget HAL Version API: La API de USB Gadget HAL Version requiere USB Gadget HAL v1.2 y está disponible para dispositivos con Android 12 o superior. Úselo para obtener el número de versión HAL del dispositivo USB.

Para admitir las API HAL del dispositivo USB, los fabricantes de dispositivos deben implementar la versión HAL del dispositivo USB correspondiente. Para usar las API HAL del dispositivo USB, se requiere una aplicación privilegiada del sistema.

Encuentre el dispositivo USB HAL y sus API

Los fabricantes de dispositivos deben implementar USB Gadget HAL para admitir las API correspondientes.

  1. Para encontrar la implementación predeterminada de USB Gadget HAL, use las siguientes rutas:
  2. Para encontrar el archivo de encabezado de la interfaz de hardware, use las siguientes rutas:
  3. Para encontrar las API, use la siguiente ruta para ubicar las API en el archivo de encabezado AIDL. Esta ruta también es el punto de entrada de Android Framework para las API:

Implementar el dispositivo USB HAL

Para admitir las API HAL del dispositivo USB, debe implementar la versión correcta de HAL del dispositivo USB. No se requiere implementación de la interfaz de usuario del sistema.

Para implementar USB Gadget HAL v1.1 para la API de restablecimiento de puerto USB, restablezca la conexión USB entre el dispositivo de destino y el host .

Comprender la arquitectura de la API HAL del dispositivo USB

Las API HAL del dispositivo USB están integradas en el paquete android.hardware.usb y aprovechan la HAL del dispositivo USB para interactuar con el dispositivo. Los detalles sobre cada una de sus arquitecturas específicas se encuentran en las pestañas correspondientes, de la siguiente manera:

API de ancho de banda USB

La siguiente figura ilustra el flujo de código de la API de ancho de banda USB, construida sobre el kernel UDC USB y accesible a través del paquete android.hardware.usb . La API devuelve el ancho de banda USB a través de los getCurrentUsbSpeed() y updateUsbSpeed() .

API de ancho de banda USB

Figura 1.1 Arquitectura de la API de ancho de banda USB

API de versión HAL del dispositivo USB

La siguiente figura ilustra el flujo de código de la API de la versión HAL del dispositivo USB, creada sobre el archivador de hardware IUSBGadget V1.2 y accesible a través del paquete android.hardware.usb .

API de versión HAL del dispositivo USB

Figura 1.2 Arquitectura de la API de la versión HAL del dispositivo USB

API de restablecimiento de puerto USB

La siguiente figura ilustra el flujo de código de la API de restablecimiento del puerto USB en un marco, incluida la implementación de la HAL del dispositivo USB.

API de restablecimiento de USB

Figura 1.3 Ejemplo de flujo de código API de restablecimiento de puerto USB

Valida tu implementación

Hay un caso de prueba de Vendor Test Suite (VTS) para cada versión HAL de USB Gadget y sus API correspondientes.

API de versión HAL de USB Bandwidth y USB Gadget

Encuentre el caso de prueba VTS para USB Gadget HAL v1.2 en la siguiente ruta:

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

El caso de prueba de VTS para USB Gadget HAL v1.2 es un caso de prueba del lado del host que le permite realizar las siguientes acciones:

  • Invoque la API de la versión HAL del dispositivo USB mediante el comando adb shell ( #svc usb getGadgetHalVersion ).
  • Invoque la API de ancho de banda USB mediante el comando adb shell ( #svc usb getUsbSpeed ​​).
  • Verifique la salida para confirmar que es el valor esperado.

API de restablecimiento de puerto USB

Siga esta ruta para encontrar el caso de prueba de VTS implementado para la API de restablecimiento de puerto USB:

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

El caso de prueba de VTS para la API de restablecimiento de puerto USB es un caso de prueba del lado del host que le permite realizar las siguientes acciones:

  • Invoque la API de restablecimiento del puerto USB mediante el comando adb shell ( #svc usb resetUsbGadget ).
  • Compruebe si el dispositivo bajo prueba (DUT) puede desconectarse y volver a conectarse.