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

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

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

Выполнение

Подробное описание службы управления 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.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, отправляемых устройством воспроизведения. Только для телевидения
К телевизору и аудиосистеме
Транслировать
Никто

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