В версии Android 8.0 обработка команд USB перемещается из скриптов init
в собственный демон USB для лучшей конфигурации и надежности кода. Для конфигурации функции гаджета скрипты init
(триггеры свойств) используются для выполнения операций гаджета, специфичных для устройства.
В предыдущих выпусках эти конфигурации, зависящие от устройства, достигались с помощью скриптов init
, зависящих от устройства (используя триггеры свойств). Переход к дизайну Hardware Abstraction Layer (HAL) приводит к гораздо более чистой реализации, которая решает следующие проблемы:
- Такие операции, как запись в узлы sysfs ядра, могут завершиться неудачей, но не будут переданы обратно в код фреймворка, который устанавливает триггер свойства. В результате фреймворк ошибочно предполагает, что операции были выполнены успешно, даже если они молча завершились неудачей.
- Скрипты
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. Могут потребоваться незначительные изменения в USB-скриптах, специфичных для устройства, чтобы передать право собственности на узлы typc-c в систему.