Служба управления HDMI-CEC

Стандарт High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) позволяет потребительским мультимедийным продуктам взаимодействовать и обмениваться информацией друг с другом. HDMI-CEC поддерживает множество функций, таких как Remote Control Passthrough и System Audio Control, но одной из самых популярных является One Touch Play. One Touch Play позволяет устройству-источнику мультимедиа автоматически включать телевизор и переключать его входной порт, поэтому вам не нужно искать пульт от телевизора, чтобы переключиться с Chromecast на проигрыватель Blu-ray.

В Android 12 управление питанием дисплея, подключенного через HDMI, совпадает с управлением питанием внутреннего дисплея. Когда устройство воспроизведения HDMI выходит из спящего режима, оно пытается разбудить подключенный телевизор и стать текущим активным источником через HDMI CEC One Touch Play. Если устройство переходит в спящий режим, будучи текущим активным источником, оно пытается выключить подключенный телевизор.

Поддержка HDMI-CEC, как правило, не является обязательной. Однако большинство производителей используют HDMI-CEC, поэтому их устройства работают с устройствами других компаний. Каждый производитель реализует стандарт HDMI-CEC по-разному, поэтому устройства не всегда понимают друг друга, а поддерживаемые функции различаются между устройствами. Из-за этой разницы потребители не могут с уверенностью предположить, что два продукта, заявленные о поддержке CEC, полностью совместимы.

Поддержка HDMI-CEC 2.0 помогает улучшить совместимость между устройствами HDMI, если и отправляющее, и принимающее устройство поддерживают эту версию стандарта.

Решение

С введением Android TV Input Framework (TIF) HDMI-CEC объединяет все подключенные устройства и сводит к минимуму проблемы совместимости. Android создал системную службу под названием HdmiControlService , чтобы облегчить эти болевые точки.

Предлагая HdmiControlService как часть экосистемы Android, Android надеется обеспечить:

  • Стандартная реализация HDMI-CEC для всех производителей, что уменьшит несовместимость устройств. Раньше производителям приходилось разрабатывать собственные реализации HDMI-CEC или использовать сторонние решения.
  • Услуга, которая хорошо протестирована на многочисленных устройствах HDMI-CEC, уже имеющихся на рынке. Android проводит тщательное исследование проблем совместимости, обнаруженных среди продуктов, и собирает полезные советы от разработчиков устройств, имеющих опыт работы с этой технологией. Служба CEC предназначена для поддержания здорового баланса между стандартом и модификациями этого стандарта, чтобы он работал с продуктами, которые люди уже используют.

Общий дизайн

HdmiControlService связана с остальной частью системы, такой как TV Input Framework (TIF), служба Audio и служба Power, для реализации различных функций, указанных в стандарте.

На следующей диаграмме показан переход от пользовательского контроллера CEC к реализации более простого уровня аппаратной абстракции HDMI-CEC (HAL).

Диаграмма, показывающая, как HDMI-CEC был реализован до и после Android 5.0.

Рис. 1. Замена службы управления HDMI

Реализация

См. следующую диаграмму для подробного представления службы управления HDMI.

Изображение, показывающее, как детализируется служба HDMI Control

Рис. 2. Детали службы управления HDMI

Вот ключевые составляющие правильной реализации Android HDMI-CEC:

  • Класс менеджера HdmiControlManager предоставляет привилегированным приложениям API. Системные службы, такие как служба TV Input Manager и служба аудио, могут использовать службу напрямую.
  • Услуга предназначена для размещения нескольких типов логических устройств.
  • HDMI-CEC связан с аппаратным обеспечением через уровень аппаратной абстракции (HAL) для упрощения обработки различий протоколов и механизмов сигнализации между устройствами. Определение HAL доступно производителям устройств для реализации уровня HAL.

Примечание . Производители устройств должны добавить следующую строку в PRODUCT_COPY_FILES в device.mk .

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

В зависимости от того, является ли ваше устройство устройством-приемником HDMI или устройством-источником HDMI, производители устройств должны установить ro.hdmi.device_type в device.mk , чтобы HdmiControlService работал правильно.

Для устройств-источников HDMI, таких как устройства Over the Top (OTT) или телевизионные приставки (STB), установите:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Для устройств с приемником HDMI, таких как панельные телевизоры, установите:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Собственный контроллер CEC, предоставленный производителем устройства, не может сосуществовать с HdmiControlService . Его необходимо отключить или удалить. Общие требования к этому исходят из необходимости обрабатывать команды, специфичные для производителя. Обработчик команд производителя должен быть включен в службу путем его расширения/изменения. Эта работа возлагается на производителя устройства и не указывается Android. Обратите внимание, что любые изменения, внесенные в службу для команд конкретного производителя, не должны влиять на способ обработки стандартных команд, иначе устройство не будет совместимо с Android.
  • Доступ к сервису HDMI-CEC защищен уровнем защиты SignatureOrSystem . Только системные компоненты или приложения, размещенные в /system/priv-app могут получить доступ к сервису. Это необходимо для защиты службы от злоупотреблений со стороны злонамеренных приложений.

Android поддерживает тип TV/Display(0) , Playback device(4) , которое может выдать команду One Touch Play, чтобы стать активным источником, и Audio System (5) , которая управляет системным аудиорежимом и ARC. Другие типы устройств (тюнер и рекордер) в настоящее время не поддерживаются.

HDMI-CEC HAL

HDMI-CEC HAL API позволяет HdmiControlService использовать аппаратный ресурс для отправки/получения команд HDMI-CEC, настройки необходимых параметров и (необязательно) взаимодействия с микропроцессором базовой платформы, который возьмет на себя управление CEC, в то время как Android система находится в режиме ожидания.

Версия Функции HAL-файлы
1,0 Настройте данные HAL (адреса, функции). Отправка команд HDMI-CEC. Зарегистрируйте обратный вызов для получения команд HDMI-CEC и событий горячего подключения. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Представляем типы HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Тестирование

Реализации устройств HDMI-CEC тестируются и проверяются с помощью тестов CTS в соответствии с документацией HDMI-CEC CTS .

HDMI-CEC 2.0

Устройства-источник (воспроизведение) и приемник (панель телевизора) Android поддерживают HDMI-CEC 2.0. HDMI-CEC 2.0 предлагает лучшую совместимость между HDMI-устройствами, улучшения сквозного удаленного управления и более обширные сертификационные испытания. Как правило, взаимодействие HDMI-CEC 2.0 с другими устройствами более эффективно, что приводит к меньшему трафику HDMI-CEC, а также к более быстрому взаимодействию.

Чтобы устройство поддерживало HDMI-CEC 2.0, устройство и пользовательская конфигурация должны быть настроены на использование HDMI-CEC 2.0. Реализация HAL также должна сообщать о поддержке HDMI-CEC 2.0 в вызовах IHdmiCec#getCecVersion .

Конфигурация ЦИК

Поведение HDMI-CEC можно настроить как во время сборки (производители оборудования, использующие RRO), так и во время выполнения (с помощью HdmiControlManager @SystemApi).

Примеры настроек HDMI-CEC:

Параметр Вариант
Включен или отключен HDMI-CEC. Включено
Неполноценный
Объем сообщений управления питанием HDMI-CEC, отправляемых устройством воспроизведения. Только на ТВ
К телевизору и аудиосистеме
Транслировать
Никто

Для каждого параметра, доступного в настоящее время, и разрешенные параметры могут быть запрошены приложениями во время выполнения.