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. Remote Control Passthrough und Audiosteuerung des Systems, aber eines der beliebtesten 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 ein-/ausschalten. Wenn ein HDMI-Wiedergabegerät aktiviert wird, wird versucht, um den verbundenen Fernseher zu aktivieren und über die HDMI-CEC-Funktion „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, das Gerät auszuschalten. den internetfähigen Fernseher.

In der Regel ist die Unterstützung von HDMI-CEC 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 von Gerät zu Gerät. Aufgrund dieser Abweichungen können Verbraucher nicht davon ausgehen, dass zwei Produkte, die CEC-Unterstützung beanspruchen, vollständig kompatibel sind.

Die Unterstützung von HDMI-CEC 2.0 verbessert die Kompatibilität zwischen HDMI-Geräten, wenn sowohl die senden und empfangen, unterstützen diese Standardversion des Standards.

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 erstellt, diese Probleme zu lösen.

Indem wir HdmiControlService als Teil des Android- möchte Android Folgendes bieten:

  • Eine standardmäßige Implementierung von HDMI-CEC für alle Hersteller, wodurch die Gerätekompatibilität verbessert wird. 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 verbunden, z. B. TV Input Framework (TIF), Audiodienst und Power Service zur Implementierung der verschiedene Funktionen, die der Standard vorgibt.

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-Steuerungsdienst

Implementierung

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

Bild, das die Details zum Dienst „HDMI Control“ zeigt

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 befugten Apps die API zur Verfügung. Systemdienste wie TV Input Manager und Audiodienst den Dienst direkt nutzen können.
  • Der Dienst ist darauf ausgelegt, mehr als einen Typ logischer .
  • 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 den Parameter Folgende Zeile in device.mk in PRODUCT_COPY_FILES ein.

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 OTT- oder Set-Top-Box-Geräte:

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 gleichzeitig verwendet werden mit HdmiControlService. Sie muss deaktiviert oder entfernt werden. Häufig Anforderungen dafür aus der Notwendigkeit, herstellerspezifische Anforderungen . 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 festgelegt. Beachten Sie, dass alle Änderungen in der Dienst für herstellerspezifische Befehle darf die Art und Weise, Standardbefehle verarbeitet werden oder das Gerät nicht mit Android kompatibel ist.
  • Der Zugriff auf den HDMI-CEC-Dienst wird durch das Schutzniveau geschützt SignatureOrSystem Nur Systemkomponenten oder die in /system/priv-app abgelegten Apps können auf den Dienst zugreifen. Dies dient dem Schutz der um Missbrauch durch Apps mit böswilliger Absicht zu verhindern.

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 Konfigurieren Sie HAL-Daten (Adressen, Funktionen). HDMI-CEC-Befehle senden Registrieren Sie den Callback, um HDMI-CEC-Befehle und Hotplug-Ereignisse zu erhalten. 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 gemäß der HDMI-CEC-CTS-Dokumentation über CTS-Tests 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 am 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 das Gerät und die Nutzerkonfiguration so konfiguriert sein: ist auf HDMI-CEC 2.0 eingestellt. 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 zum Build-Zeitpunkt (durch OEMs, die RROs verwenden) als auch zur Laufzeit konfiguriert werden. (von HdmiControlManager @SystemApi).

Beispiele für HDMI-CEC-Einstellungen:

Einstellung Option
Gibt an, ob HDMI-CEC aktiviert oder deaktiviert ist. Aktiviert
Deaktiviert
Bereich der HDMI-CEC-Nachrichten zur Stromversorgung, die von einem Wiedergabegerät gesendet werden. 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.