HDMI-CEC-Steuerungsdienst

Der HDMI-CEC-Standard (High-Definition Multimedia Interface Consumer Electronics Control) ermöglicht die Kommunikation und den Austausch von Informationen zwischen Multimedia-Produkten. HDMI-CEC unterstützt viele Funktionen, z. B. Remote Control Passthrough und Audiosteuerung des Systems. Eine der beliebtesten Funktionen ist One Touch Play. Mit One Touch Play kann ein Gerät mit Medienquelle den Fernseher einschalten und den Eingangsport automatisch wechseln. Sie müssen also nicht nach der Fernbedienung des Fernsehers suchen, um von Chromecast zum Blu-ray-Player zu wechseln.

Bei Android 12 entspricht die Ein-/Aus-Taste des HDMI-Displays der Ein/Aus-Taste des internen Bildschirms. Wenn ein HDMI-Wiedergabegerät aktiviert wird, versucht es, den verbundenen Fernseher zu aktivieren und über HDMI-CEC One Touch Play zur aktuellen aktiven Quelle zu werden. Wenn das Gerät in den Ruhemodus wechselt, während es die aktuelle aktive Quelle ist, wird versucht, den verbundenen Fernseher auszuschalten.

Die Unterstützung von HDMI-CEC ist in der Regel optional. Die meisten Hersteller haben jedoch HDMI-CEC eingeführt, damit ihre Geräte mit Geräten anderer Unternehmen funktionieren. Jeder Hersteller implementiert den HDMI-CEC-Standard auf unterschiedliche Weise. Daher verstehen sich Geräte nicht immer und die unterstützten Funktionen variieren je nach Gerät. Aufgrund dieser Abweichung können Nutzer nicht sicher davon ausgehen, dass zwei Produkte, die CEC-Unterstützung vollständig unterstützen, vollständig kompatibel sind.

Die Unterstützung von HDMI-CEC 2.0 verbessert die Kompatibilität zwischen HDMI-Geräten, wenn sowohl das sendende als auch das empfangende Gerät diese Version des Standards unterstützen.

Lösung

Mit der Einführung des Android TV Input Frameworks (TIF) werden alle verbundenen Geräte über HDMI-CEC zusammengeführt und Kompatibilitätsprobleme minimiert. Zur Lösung dieser Probleme hat Android einen Systemdienst namens HdmiControlService entwickelt.

Durch die Einbindung von HdmiControlService in das Android-Ökosystem möchte Android Folgendes bieten:

  • Eine Standardimplementierung von HDMI-CEC für alle Hersteller, die die Inkompatibilität von Geräten reduziert. Bisher mussten Hersteller ihre eigenen HDMI-CEC-Implementierungen entwickeln oder Lösungen von Drittanbietern verwenden.
  • Ein Dienst, der sich mit zahlreichen bereits auf dem Markt erhältlichen HDMI-CEC-Geräten bewährt hat. Android führt intensive Recherchen zu Kompatibilitätsproblemen bei den Produkten durch und holt sich nützliche Ratschläge von Geräteimplementierern ein, die mit der Technologie vertraut sind. Der CEC-Dienst ist so konzipiert, dass ein gesundes Gleichgewicht zwischen dem Standard und den Änderungen an diesem Standard besteht, damit er mit den Produkten funktioniert, die Nutzer bereits verwenden.

Design allgemein

HdmiControlService ist mit dem Rest des Systems wie dem TV Input Framework (TIF), dem Audiodienst und dem Energieversorgungsdienst verbunden, um die verschiedenen Funktionen zu implementieren, die im Standard festgelegt sind.

Das folgende Diagramm zeigt den Wechsel von einem benutzerdefinierten CEC-Controller zu einer Implementierung der einfacheren HDMI-CEC-Hardwareabstraktionsschicht (HAL).

Diagramm, das zeigt, wie HDMI-CEC vor und nach Android 5.0 implementiert wurde

Abbildung 1. Austausch des HDMI Control Service

Implementierung

Das folgende Diagramm enthält eine detaillierte Ansicht des HDMI-Steuerdienstes.

Bild, das zeigt, wie HDMI-Steuerungsdetails

Abbildung 2. Details zum HDMI-Steuerungsdienst

Hier sind die wichtigsten Zutaten für eine ordnungsgemäße HDMI-CEC-Implementierung in Android:

  • Die Managerklasse HdmiControlManager stellt privilegierte Anwendungen mit der API bereit. Systemdienste wie der TV-Eingabedienst und der Audiodienst können den Dienst direkt verwenden.
  • Der Dienst ist so konzipiert, dass mehr als ein logischer Gerätetyp gehostet werden kann.
  • HDMI-CEC ist über eine Hardwareabstraktionsschicht (HAL) mit der Hardware verbunden, um den Umgang mit Unterschieden zwischen den Protokoll- und Signalmechanismen der Geräte zu vereinfachen. Die HAL-Definition steht Geräteherstellern zur Verfügung, um die HAL-Schicht zu implementieren.

Hinweis: Gerätehersteller sollten die folgende Zeile in PRODUCT_COPY_FILES in device.mk einfügen.

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

Je nachdem, ob es sich bei Ihrem Gerät um ein HDMI-Sink- oder ein HDMI-Quellgerät handelt, müssen die Gerätehersteller ro.hdmi.device_type in device.mk festlegen, damit HdmiControlService ordnungsgemäß funktioniert.

Für HDMI-Quellgeräte wie Over-the-Top-Geräte (OTT) oder Set-Top-Boxen (STB) müssen folgende Einstellungen vorgenommen werden:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Für HDMI-Sink-Geräte wie Panel-Fernseher:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Ein vom Gerätehersteller bereitgestellter proprietärer CEC-Controller kann nicht mit HdmiControlService zusammen verwendet werden. Sie muss deaktiviert oder entfernt werden. Häufige Anforderungen hierfür ergeben sich aus der Notwendigkeit, herstellerspezifische Befehle zu verarbeiten. Der herstellerspezifische Befehls-Handler sollte durch Erweitern/Ändern in den Dienst eingebunden werden. Diese Arbeit bleibt dem Gerätehersteller überlassen und wird nicht von Android vorgegeben. Änderungen, die im Dienst für herstellerspezifische Befehle vorgenommen werden, dürfen die Verarbeitung von Standardbefehlen nicht beeinträchtigen. Andernfalls ist das Gerät nicht mit Android kompatibel.
  • Der Zugriff auf den HDMI-CEC-Dienst wird mit dem Schutzniveau SignatureOrSystem geschützt. Nur Systemkomponenten oder die in /system/priv-app abgelegten Apps können auf den Dienst zugreifen. Dadurch soll der Dienst vor Missbrauch durch Anwendungen mit böswilligen Absichten geschützt werden.

Android unterstützt die Typen TV/Display(0) und Playback device(4), die den Befehl „One Touch Play“ ausgeben können, um die aktive Quelle zu werden, sowie Audio System (5), der den Systemaudiomodus und ARC verarbeitet. Andere Gerätetypen (Tuner und Rekorder) werden derzeit nicht unterstützt.

HDMI-CEC-HAL

Mit der HDMI-CEC HAL API kann HdmiControlService die Hardwareressource nutzen, um HDMI-CEC-Befehle zu senden/empfangen, die erforderlichen Einstellungen zu konfigurieren und (optional) mit dem Mikroprozessor in der zugrunde liegenden Plattform zu kommunizieren, der die CEC-Steuerung übernimmt, während sich das Android-System im Standbymodus befindet.

Version Funktionen HAL-Dateien
1.0 HAL-Daten (Adressen, Funktionen) konfigurieren HDMI-CEC-Befehle senden Callback registrieren, um HDMI-CEC-Befehle und Hotplug-Ereignisse zu empfangen. IHdmiCec.hal
IHdmiCecCallback.hal
1,1 Vorstellung von HDMI-CEC 2.0-Typen @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Testen

HDMI-CEC-Implementierungen von Geräten werden über CTS-Tests gemäß der HDMI-CEC-CTS-Dokumentation getestet und verifiziert.

HDMI-CEC 2.0

Quellgeräte (Wiedergabe) und Senken (TV-Steuerfeld) von Android unterstützen HDMI-CEC 2.0. HDMI-CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI-Geräten, Verbesserungen beim Remote Control Passthrough und umfassendere Zertifizierungstests. Im Allgemeinen sind HDMI-CEC 2.0-Interaktionen mit anderen Geräten effizienter. Das führt zu weniger HDMI-CEC-Traffic und schnelleren Interaktionen.

Damit ein Gerät HDMI-CEC 2.0 unterstützt, müssen die Geräte- und Nutzerkonfiguration auf HDMI-CEC 2.0 eingestellt sein. Die HAL-Implementierung muss auch die Unterstützung von HDMI-CEC 2.0 in Aufrufen an IHdmiCec#getCecVersion melden.

CEC-Konfiguration

Das HDMI-CEC-Verhalten kann sowohl zur Buildzeit (von OEMs mit RROs) als auch zur Laufzeit (von HdmiControlManager @SystemApi) konfiguriert werden.

Beispiele für HDMI-CEC-Einstellungen:

Einstellung Option
Gibt an, ob HDMI-CEC aktiviert oder deaktiviert ist. Aktiviert
Deaktiviert
Umfang der von einem Wiedergabegerät gesendeten HDMI-CEC-Nachrichten zur Energieverwaltung. Nur an den Fernseher
An den Fernseher und das Audiosystem
Übertragen
Keine

Jede derzeit verfügbare und zulässige Einstellung kann von Apps während der Laufzeit abgefragt werden.