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

Стандарт 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 к реализации более простого уровня аппаратной абстракции HDMI-CEC (HAL).

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

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

Выполнение

Подробный обзор службы управления HDMI см. на следующей схеме.

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

Рисунок 2. Подробности службы управления HDMI

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

  • Класс менеджера HdmiControlManager предоставляет API привилегированным приложениям. Системные службы, такие как служба TV Input Manager и служба Audio, могут использовать этот 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, таких как устройства 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 .

Конфигурация CEC

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

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

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

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