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

Стандарт 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 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, могут использовать службу напрямую.
  • Сервис предназначен для размещения более одного типа логических устройств.
  • 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) или Set-top box (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, улучшения Remote Control Passthrough и более обширное тестирование сертификации. В целом, взаимодействие 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, отправляемых устройством воспроизведения. Только для ТВ
К ТВ и аудиосистеме
Транслировать
Никто

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