Ativar as APIs HAL do gadget USB

O USB Gadget Hardware Abstraction Layer (HAL) suporta as seguintes APIs do sistema:

  • API de redefinição de porta USB: a API de redefinição de porta USB requer USB Gadget HAL v1.1 e está disponível para dispositivos com Android 11 ou superior. Use-o para redefinir a conexão do dispositivo USB com o host conectado.
  • API de largura de banda USB: A API de largura de banda USB requer USB Gadget HAL v1.2 e está disponível para dispositivos com Android 12 ou superior. Use-o para obter a velocidade de transferência entre um dispositivo USB conectado e o host.
  • API USB Gadget HAL Version: A API USB Gadget HAL Version requer USB Gadget HAL v1.2 e está disponível para dispositivos com Android 12 ou superior. Use-o para obter o número da versão do USB Gadget HAL.

Para oferecer suporte às APIs USB Gadget HAL, os fabricantes de dispositivos devem implementar a versão correspondente do USB Gadget HAL. Para usar as APIs HAL do Gadget USB, é necessário um aplicativo privilegiado do sistema.

Encontre o USB Gadget HAL e suas APIs

Os fabricantes de dispositivos devem implementar o USB Gadget HAL para oferecer suporte às APIs correspondentes.

  1. Para encontrar a implementação padrão do USB Gadget HAL, use os seguintes caminhos:
  2. Para encontrar o arquivo de cabeçalho da interface de hardware, use os seguintes caminhos:
  3. Para localizar as APIs, use o caminho a seguir para localizar as APIs no arquivo de cabeçalho AIDL. Este caminho também é o ponto de entrada do Android Framework para as APIs:

Implemente o dispositivo USB HAL

Para oferecer suporte às APIs do USB Gadget HAL, você deve implementar a versão correta do USB Gadget HAL. Nenhuma implementação da interface do usuário do sistema é necessária.

Para implementar USB Gadget HAL v1.1 para USB Port Reset API, redefina a conexão USB entre o dispositivo de destino e o host .

Entenda a arquitetura da API HAL do gadget USB

As APIs USB Gadget HAL são todas incorporadas ao pacote android.hardware.usb e aproveitam o USB Gadget HAL para interagir com o dispositivo. Os detalhes sobre cada uma de suas arquiteturas específicas estão nas abas correspondentes, como segue:

API de largura de banda USB

A figura a seguir ilustra o fluxo de código da API de largura de banda USB, construída sobre o kernel UDC USB e acessível por meio do pacote android.hardware.usb . A API retorna a largura de banda USB por meio dos métodos getCurrentUsbSpeed() e updateUsbSpeed() .

API de largura de banda USB

Figura 1.1 Arquitetura da API de largura de banda USB

API de versão HAL do gadget USB

A figura a seguir ilustra o fluxo de código da API USB Gadget HAL Version, criada com base no hardware binder IUSBGadget V1.2 e acessível por meio do pacote android.hardware.usb .

API de versão HAL do gadget USB

Figura 1.2 Arquitetura da API da versão HAL do gadget USB

API de redefinição de porta USB

A figura a seguir ilustra o fluxo de código da API de redefinição de porta USB em uma estrutura, incluindo a implementação do USB Gadget HAL.

API de redefinição de USB

Figura 1.3 Exemplo de fluxo de código da API de redefinição de porta USB

Valide sua implementação

Há um caso de teste Vendor Test Suite (VTS) para cada versão do USB Gadget HAL e suas APIs correspondentes.

Largura de banda USB e APIs de versão HAL de gadget USB

Encontre o caso de teste VTS para USB Gadget HAL v1.2 no seguinte caminho:

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

O caso de teste VTS para USB Gadget HAL v1.2 é um caso de teste do lado do host que permite executar as seguintes ações:

  • Invoque a API USB Gadget HAL Version usando o comando adb shell ( #svc usb getGadgetHalVersion ).
  • Invoque a API de largura de banda USB usando o comando adb shell ( #svc usb getUsbSpeed ​​).
  • Verifique a saída para confirmar se é o valor esperado.

API de redefinição de porta USB

Siga este caminho para encontrar o caso de teste VTS implementado para a API de redefinição de porta USB:

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

O caso de teste VTS para API de redefinição de porta USB é um caso de teste do lado do host que permite executar as seguintes ações:

  • Invoque a API de redefinição de porta USB usando o comando adb shell ( #svc usb resetUsbGadget ).
  • Verifique se o dispositivo em teste (DUT) pode desconectar e reconectar.