HDMI-CEC-Steuerungsdienst

Der Standard „High-Definition Multimedia Interface Consumer Electronics Control“ (HDMI-CEC) ermöglicht es Multimedia-Produkten, miteinander zu kommunizieren und Informationen auszutauschen. HDMI‑CEC unterstützt viele Funktionen, z. B. die Fernbedienungsdurchleitung und die Systemaudiosteuerung. Eine der beliebtesten Funktionen ist die One Touch Play-Funktion. Mit One Touch Play kann ein Media-Quellgerät den Fernseher einschalten und den Eingabeport automatisch wechseln. So müssen Sie nicht nach der TV-Fernbedienung suchen, um von Ihrem Chromecast zum Blu-ray-Player zu wechseln.

In Android 12 entspricht die Stromsteuerung des über HDMI angeschlossenen Displays der Stromsteuerung des internen Displays. Wenn ein HDMI-Wiedergabegerät aktiviert wird, versucht es, den angeschlossenen 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 HDMI-CEC jedoch übernommen, damit ihre Geräte mit den 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 Unterschiede können Verbraucher nicht davon ausgehen, dass zwei Produkte, die CEC unterstützen, vollständig kompatibel sind.

Die Unterstützung für 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 Framework (TIF) werden durch HDMI-CEC alle verbundenen Geräte zusammengeführt und Kompatibilitätsprobleme minimiert. Android hat einen Systemdienst namens HdmiControlService entwickelt, um diese Probleme zu beheben.

Mit HdmiControlService als Teil des Android-Ökosystems möchte Android Folgendes bieten:

  • Eine Standardimplementierung von HDMI-CEC für alle Hersteller, die die Inkompatibilität von Geräten verringert. Bisher mussten Hersteller eigene Implementierungen von HDMI-CEC entwickeln oder Lösungen von Drittanbietern verwenden.
  • Ein Dienst, der bereits mit zahlreichen HDMI‑CEC-Geräten auf dem Markt getestet wurde. Android hat gründliche Untersuchungen zu Kompatibilitätsproblemen bei den Produkten durchgeführt und nützliche Ratschläge von Geräteherstellern eingeholt, die Erfahrung mit der Technologie haben. Der CEC-Dienst soll ein gesundes Gleichgewicht zwischen dem Standard und Änderungen an diesem Standard aufrechterhalten, damit er mit den Produkten funktioniert, die Nutzer bereits verwenden.

Design allgemein

HdmiControlService ist mit dem Rest des Systems verbunden, z. B. mit dem TV Input Framework (TIF), dem Audiodienst und dem Power-Dienst, 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 zur Implementierung von HDMI-CEC vor und nach Android 5.0

Abbildung 1: Ersatz für den HDMI Control Service

Implementierung

Das folgende Diagramm zeigt eine detaillierte Ansicht des HDMI-Steuerungsdienstes.

Bild mit Details zum HDMI Control-Dienst

Abbildung 2: Details zum HDMI-Steuerungsdienst

Hier sind die wichtigsten Voraussetzungen für eine korrekte HDMI-CEC-Implementierung unter Android:

  • Eine Manager-Klasse HdmiControlManager stellt privilegierten Apps die API zur Verfügung. Systemdienste wie der TV Input Manager-Dienst und der Audio-Dienst können den Dienst direkt verwenden.
  • Der Dienst ist so konzipiert, dass mehr als ein Typ von logischem Gerät gehostet werden kann.
  • HDMI-CEC ist über eine Hardware-Abstraktionsschicht (Hardware Abstraction Layer, HAL) mit der Hardware verbunden, um die Unterschiede zwischen den Protokoll- und Signalmechanismen der Geräte zu vereinfachen. Die HAL-Definition ist für Gerätehersteller verfügbar, damit sie die HAL-Ebene implementieren können.

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 Ihr Gerät ein HDMI-Senkengerät oder ein HDMI-Quellgerät ist, müssen Gerätehersteller ro.hdmi.device_type in device.mk für HdmiControlService richtig einstellen.

Für HDMI-Quellgeräte wie Over-the-Top-Geräte (OTT) oder Set-Top-Boxen (STB) legen Sie Folgendes fest:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Für HDMI-Senkengeräte wie Flachbildfernseher gilt:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Ein proprietärer CEC-Controller, der vom Gerätehersteller bereitgestellt wird, kann nicht gleichzeitig mit HdmiControlService verwendet werden. Es muss deaktiviert oder entfernt werden. Häufige Anforderungen ergeben sich aus der Notwendigkeit, herstellerspezifische Befehle zu verarbeiten. Der herstellerspezifische Befehlshandler sollte in den Dienst integriert werden, indem er erweitert oder geändert wird. Diese Aufgabe wird dem Gerätehersteller überlassen und nicht von Android festgelegt. Beachten Sie, dass Änderungen, die im Dienst für herstellerspezifische Befehle vorgenommen werden, die Verarbeitung von Standardbefehlen nicht beeinträchtigen dürfen. Andernfalls ist das Gerät nicht mit Android kompatibel.
  • Der Zugriff auf den HDMI‑CEC-Dienst ist durch das Schutzniveau SignatureOrSystem geschützt. Nur Systemkomponenten oder die Apps, die sich in /system/priv-app befinden, können auf den Dienst zugreifen. Dadurch soll der Dienst vor Missbrauch durch Apps 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), die den Systemaudiomodus und ARC verarbeitet. Andere Gerätetypen (Tuner und Recorder) werden derzeit nicht unterstützt.

HDMI-CEC HAL

Mit der HDMI-CEC HAL API kann HdmiControlService die Hardwareressource verwenden, um HDMI-CEC-Befehle zu senden/empfangen, die erforderlichen Einstellungen zu konfigurieren und (optional) mit dem Mikroprozessor auf der zugrunde liegenden Plattform zu kommunizieren, der die CEC-Steuerung übernimmt, während sich das Android-System im Stand-by-Modus 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 Einführung 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 überprüft.

HDMI-CEC 2.0

Android-Quellgeräte (Wiedergabe) und ‑Senkengeräte (TV-Display) unterstützen HDMI-CEC 2.0. HDMI‑CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI‑Geräten, Verbesserungen bei der Fernbedienungsdurchleitung und umfangreichere Zertifizierungstests. Im Allgemeinen sind HDMI-CEC 2.0-Interaktionen mit anderen Geräten effizienter, was zu weniger HDMI-CEC-Traffic und schnelleren Interaktionen führt.

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

CEC-Konfiguration

Das HDMI-CEC-Verhalten kann sowohl zur Build-Zeit (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 HDMI-CEC-Nachrichten zur Stromversorgung, die von einem Wiedergabegerät gesendet werden. Nur auf Fernseher
Auf Fernseher und Audiosystem
Übertragen
Keine

Für jede Einstellung können Apps zur Laufzeit die aktuell verfügbaren und zulässigen Optionen abfragen.