HDMI-CEC-Steuerungsdienst

Der Standard „High-Definition Multimedia Interface Consumer Electronics Control“ (HDMI-CEC) ermöglicht die Kommunikation und den Austausch von Informationen zwischen Multimedia-Produkten. HDMI-CEC unterstützt viele Funktionen, z. B. die Fernbedienungsweiterleitung und die Systemaudiosteuerung. Eine der beliebtesten Funktionen ist jedoch die One-Touch-Wiedergabe. 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.

Unter Android 12 wird die Stromversorgung des über HDMI angeschlossenen Displays mit der des internen Displays synchronisiert. 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 Abweichungen können Verbraucher nicht davon ausgehen, dass zwei Produkte, die die CEC-Unterstützung angeben, 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 Framework (TIF) werden über HDMI-CEC alle verbundenen Geräte zusammengeführt und Kompatibilitätsprobleme minimiert. Android hat einen Systemdienst namens HdmiControlService entwickelt, um diese Probleme zu beheben.

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

  • Eine standardmäßige Implementierung von HDMI-CEC für alle Hersteller, die die Geräteinkompatibilität verringert. Bisher mussten Hersteller ihre eigenen HDMI-CEC-Implementierungen entwickeln oder Lösungen von Drittanbietern verwenden.
  • Ein Dienst, der bereits mit zahlreichen HDMI-CEC-Geräten auf dem Markt getestet wurde. 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: Ersatz für HDMI-Steuerung

Implementierung

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

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:

  • Eine Managerklasse HdmiControlManager stellt privilegierten Apps die API zur Verfügung. 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 kann von Geräteherstellern zur Implementierung der HAL-Ebene verwendet werden.

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 Befehlshandler sollte in den Dienst eingefügt werden, indem er erweitert oder geändert wird. Diese Aufgabe obliegt dem Gerätehersteller und wird nicht von Android spezifiziert. Beachten Sie, dass Änderungen am Dienst für herstellerspezifische Befehle 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 wird mit dem Schutzniveau SignatureOrSystem geschützt. Nur Systemkomponenten oder die in /system/priv-app abgelegten Apps können auf den Dienst zugreifen. So soll der Dienst vor Missbrauch durch Apps mit böswilliger Absicht 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 HDMI-CEC 2.0-Typen einführen @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Testen

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

HDMI-CEC 2.0

Die Android-Geräte für die Quelle (Wiedergabe) und das Ziel (Fernsehbildschirm) unterstützen HDMI-CEC 2.0. HDMI-CEC 2.0 bietet eine bessere Interoperabilität zwischen HDMI-Geräten, Verbesserungen bei der Fernbedienungsweiterleitung und umfangreichere 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

Für jede Einstellung können derzeit verfügbare und zulässige Optionen von Apps zur Laufzeit abgefragt werden.