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.
- Para encontrar a implementação padrão do USB Gadget HAL, use os seguintes caminhos:
- Versão 1.2 (mais recente):
<aosp>/hardware/interfaces/usb/gadget/1.2/default/
- Versão 1.1:
<aosp>/hardware/interfaces/usb/gadget/1.1/default/
- Versão 1.2 (mais recente):
- Para encontrar o arquivo de cabeçalho da interface de hardware, use os seguintes caminhos:
- Versão 1.2 (mais recente):
<aosp>/hardware/interfaces/usb/gadget/1.2/IUsbGadget.hal
- Versão 1.1:
<aosp>/hardware/interfaces/usb/gadget/1.1/IUsbGadget.hal
- Versão 1.2 (mais recente):
- 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:
-
android.hardware.usb
:<aosp>/core/java/android/hardware/usb
-
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()
.
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
.
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.
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.