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

Стандарт управления бытовой электроникой мультимедийного интерфейса высокой четкости (HDMI-CEC) позволяет мультимедийным потребительским продуктам взаимодействовать и обмениваться информацией друг с другом. HDMI-CEC поддерживает множество функций, таких как сквозное дистанционное управление и управление звуком системы, но одна из самых популярных — 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), служба аудио и служба питания, для реализации различных функций, определенных стандартом.

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

Диаграмма, показывающая, как 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

API HDMI-CEC HAL позволяет 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 можно настроить как во время сборки (производителями OEM, использующими RRO), так и во время выполнения (с помощью HdmiControlManager @SystemApi).

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

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

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