Включить HAL API USB-гаджета

Уровень аппаратной абстракции гаджетов USB (HAL) поддерживает следующие системные API:

  • API сброса USB-порта: API сброса USB-порта требует USB Gadget HAL v1.1 и доступен для устройств под управлением Android 11 или выше. Используйте его для сброса соединения USB-гаджета с подключенным хостом.
  • USB Bandwidth API: USB Bandwidth API требует USB Gadget HAL v1.2 и доступен для устройств под управлением Android 12 или выше. Используйте его, чтобы получить скорость передачи между подключенным USB-устройством и хостом.
  • API версии USB Gadget HAL: API версии USB Gadget HAL требует USB Gadget HAL v1.2 и доступен для устройств под управлением Android 12 или более поздней версии. Используйте его, чтобы получить номер версии USB-гаджета HAL.

Для поддержки API HAL USB Gadget производители устройств должны реализовать соответствующую версию HAL USB Gadget. Для использования HAL API USB Gadget требуется системное привилегированное приложение.

Найдите USB-гаджет HAL и его API.

Производители устройств должны реализовать USB Gadget HAL для поддержки соответствующих API.

  1. Чтобы найти реализацию USB Gadget HAL по умолчанию, используйте следующие пути:
  2. Чтобы найти заголовочный файл аппаратного интерфейса, используйте следующие пути:
  3. Чтобы найти API, используйте следующий путь для поиска API в заголовочном файле AIDL. Этот путь также является точкой входа Android Framework для API:

Реализовать USB-гаджет HAL

Для поддержки API HAL USB Gadget необходимо реализовать правильную версию HAL USB Gadget. Не требуется реализация системного пользовательского интерфейса.

Чтобы реализовать USB Gadget HAL v1.1 для API сброса USB-порта, сбросьте USB-соединение между целевым устройством и хостом .

Понимание архитектуры USB Gadget HAL API

Все API-интерфейсы USB Gadget HAL встроены в пакет android.hardware.usb и используют HAL USB Gadget для взаимодействия с устройством. Подробная информация о каждой из их конкретных архитектур находится на соответствующих вкладках, а именно:

API пропускной способности USB

На следующем рисунке показан поток кода USB Bandwidth API, созданного на основе ядра USB UDC и доступного через пакет android.hardware.usb . API возвращает пропускную способность USB с помощью getCurrentUsbSpeed() и updateUsbSpeed() .

API пропускной способности USB

Рис. 1.1 Архитектура USB Bandwidth API

USB-гаджет версии HAL API

На следующем рисунке показан поток кода API-интерфейса USB Gadget HAL Version, построенного на основе аппаратного связывателя IUSBGadget V1.2 и доступного через пакет android.hardware.usb .

USB-гаджет версии HAL API

Рис. 1.2 Архитектура API версии HAL USB-гаджета

API сброса порта USB

На следующем рисунке показан поток кода API сброса USB-порта в среде, включая реализацию USB-гаджета HAL.

API сброса USB

Рис. 1.3 Пример потока кода API для сброса USB-порта

Подтвердите свою реализацию

Для каждой версии USB-гаджета HAL и соответствующих API-интерфейсов существует тестовый пример Vendor Test Suite (VTS).

USB Bandwidth и USB Gadget версии HAL API

Найдите тестовый пример VTS для USB Gadget HAL v1.2 по следующему пути:

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

Тестовый сценарий VTS для USB Gadget HAL v1.2 — это тестовый сценарий на стороне хоста, который позволяет выполнять следующие действия:

  • Вызовите API версии USB Gadget HAL с помощью команды оболочки adb ( #svc usb getGadgetHalVersion ).
  • Вызовите USB Bandwidth API с помощью команды оболочки adb ( #svc usb getUsbSpeed ​​).
  • Проверьте вывод, чтобы убедиться, что это ожидаемое значение.

API сброса порта USB

Следуйте по этому пути, чтобы найти тестовый пример VTS, реализованный для API сброса порта USB:

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

Тестовый пример VTS для API сброса USB-порта — это тестовый пример на стороне хоста, который позволяет выполнять следующие действия:

  • Вызовите API сброса порта USB с помощью команды оболочки adb ( #svc usb resetUsbGadget ).
  • Проверьте, может ли тестируемое устройство (DUT) отключаться и снова подключаться.