Внедрение USB HAL

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

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

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

HAL и Treble

Сценарии 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 для сообщения о состоянии порта типа c. Для передачи права собственности на узлы typc-c системе могут потребоваться тривиальные изменения в сценариях USB для конкретных устройств.