Стандарт 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.](https://source.android.google.cn/static/devices/tv/images/HDMI_Control_Service.png?authuser=8&hl=ru)
Рис. 1. Замена службы управления HDMI
Реализация
См. следующую диаграмму для подробного представления службы управления HDMI.
![Изображение, показывающее, как детализируется служба HDMI Control](https://source.android.google.cn/static/devices/tv/images/HDMI_Control_Service_Flow.png?authuser=8&hl=ru)
Рис. 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, отправляемых устройством воспроизведения. | Только на ТВ К телевизору и аудиосистеме Транслировать Никто |
Для каждого параметра, доступного в настоящее время, и разрешенные параметры могут быть запрошены приложениями во время выполнения.