Внедрить USB HAL

В версии Android 8.0 обработка USB-команд перенесена из init -скриптов в собственный USB-демон для лучшей настройки и надежности кода. Для настройки функций гаджета используются init скрипты (триггеры свойств), которые выполняют операции, специфичные для гаджета.

В предыдущих версиях эти конфигурации, специфичные для устройств, достигались с помощью скриптов init , специфичных для устройств (с использованием триггеров свойств). Переход к архитектуре на уровне абстракции оборудования (HAL) приводит к гораздо более чистой реализации, которая решает следующие проблемы:

  1. Такие операции, как запись в узлы sysfs ядра, могут завершиться сбоем, но не будут переданы обратно в код фреймворка, который устанавливает триггер свойства. В результате фреймворк ошибочно предполагает, что операции выполнены успешно, даже если они без предупреждения завершились сбоем.
  2. Скрипты init имеют ограниченное число операций, которые могут быть выполнены.

В версии Android 12 добавлена ​​поддержка USB Gadget HAL для сетевых моделей управления (NCM) и вызовов API, возвращающих как номер версии HAL, так и скорость USB. Подробнее о вызовах API, доступных через USB HAL, см. в описании пакета android.hardware.usb .

HAL и высокие частоты

Скрипты init , специфичные для устройств, использовались в качестве замены слоям HAL для выполнения USB-операций, специфичных для устройств. USB (через ADB) — основной интерфейс для отладки системных проблем. Наличие собственного демона для настройки USB устраняет зависимость от кода фреймворка, поэтому даже в случае его сбоя USB должен работать.

В модели Treble , также представленной в Android 8.0, все HAL-компоненты изолированы от системных служб и должны запускаться в собственных собственных демонах. Это устраняет необходимость в отдельном демоне USB, поскольку уровень HAL прекрасно выполняет функции демона USB.

Реализация HAL по умолчанию обслуживает все устройства до Android 8.0. Поэтому для устройств до Android 8.0 не потребуется никаких специфических действий. Android 8.0 использует интерфейс HAL для запроса состояния USB-портов и переключения ролей управления данными и питанием.

Выполнение

Новый интерфейс USB HAL должен быть реализован на каждом устройстве с Android 8.0. Реализация по умолчанию должна обеспечивать работу устройств с версиями до Android 8.0. Реализации по умолчанию достаточно, если устройство использует класс dual_role_usb для передачи статуса порта Type-C. Для передачи права собственности на узлы Type-C системе могут потребоваться незначительные изменения в USB-скриптах, специфичных для конкретного устройства.