Стандарт HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) позволяет мультимедийным потребительским устройствам обмениваться информацией друг с другом. 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), Audio service и Power service, для реализации различных функций, предусмотренных стандартом.
На следующей диаграмме показан переход от пользовательского контроллера CEC к более простой реализации аппаратного уровня абстракции (HAL) HDMI-CEC.

Рисунок 1. Замена оборудования для управления HDMI.
Выполнение
Подробное описание службы управления HDMI представлено на следующей схеме.

Рисунок 2. Подробная информация о службе управления HDMI.
Вот основные компоненты для корректной реализации HDMI-CEC в Android:
- Класс-менеджер
HdmiControlManagerпредоставляет привилегированным приложениям доступ к API. Системные службы, такие как служба управления входами телевизора и служба аудио, могут использовать эту службу напрямую. - Данная услуга позволяет размещать более одного типа логических устройств.
- 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, таких как OTT-приставки или телеприставки, установите следующие параметры:
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.halIHdmiCecCallback.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 .
Конфигурация CEC
Поведение HDMI-CEC можно настроить как на этапе сборки (производителями оборудования с использованием RRO), так и во время выполнения (с помощью HdmiControlManager @SystemApi).
Примеры настроек HDMI-CEC:
| Параметр | Вариант |
|---|---|
| Включена или выключена функция HDMI-CEC. | Включено Неполноценный |
| Область действия сообщений управления питанием HDMI-CEC, отправляемых устройством воспроизведения. | Только для телевидения К телевизору и аудиосистеме Транслировать Никто |
Для каждой настройки доступные и разрешенные параметры могут быть запрошены приложениями во время выполнения.