Usługa sterowania HDMI-CEC

Standard High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) umożliwia multimedialnym produktom konsumenckim komunikowanie się i wymianę informacji między sobą. HDMI-CEC obsługuje wiele funkcji, takich jak Remote Control Passthrough i System Audio Control, ale jedną z najpopularniejszych jest One Touch Play. Funkcja One Touch Play umożliwia urządzeniu źródła multimediów automatyczne włączanie telewizora i przełączanie portu wejściowego, dzięki czemu nie trzeba szukać pilota telewizora, aby przełączyć się z Chromecasta na odtwarzacz Blu-ray.

W systemie Android 12 sterowanie zasilaniem wyświetlacza podłączonego przez HDMI jest zgodne z kontrolą zasilania wyświetlacza wewnętrznego. Gdy urządzenie odtwarzające HDMI się obudzi, podejmie próbę wybudzenia podłączonego telewizora i stanie się bieżącym aktywnym źródłem poprzez HDMI CEC One Touch Play. Jeśli urządzenie przejdzie w stan uśpienia, gdy jest aktywnym źródłem, spróbuje wyłączyć podłączony telewizor.

Obsługa HDMI-CEC jest generalnie opcjonalna. Jednak większość producentów przyjęła HDMI-CEC, więc ich urządzenia współpracują z urządzeniami innych firm. Każdy producent implementuje standard HDMI-CEC na różne sposoby, więc urządzenia nie zawsze się rozumieją, a obsługiwane funkcje różnią się między urządzeniami. Z powodu tej rozbieżności konsumenci nie mogą bezpiecznie założyć, że dwa produkty, które twierdzą, że wspierają CEC, są całkowicie kompatybilne.

Obsługa HDMI-CEC 2.0 pomaga poprawić kompatybilność między urządzeniami HDMI, jeśli zarówno urządzenie wysyłające, jak i odbierające obsługują tę wersję standardu.

Rozwiązanie

Wraz z wprowadzeniem platformy Android TV Input Framework (TIF), HDMI-CEC łączy wszystkie podłączone urządzenia i minimalizuje problemy ze zgodnością. Android stworzyła usługę systemową o nazwie HdmiControlService złagodzić te punkty bólowe.

Oferując HdmiControlService jako część ekosystemu Android, Android ma nadzieję zapewnić:

  • Standardowa implementacja HDMI-CEC dla wszystkich producentów, która zmniejszy niezgodność urządzeń. Wcześniej producenci musieli opracować własne implementacje HDMI-CEC lub korzystać z rozwiązań innych firm.
  • Usługa, która jest dobrze przetestowana pod kątem wielu urządzeń HDMI-CEC dostępnych już na rynku. Android prowadzi rygorystyczne badania dotyczące problemów ze zgodnością znalezionych wśród produktów i zbiera przydatne porady od doświadczonych w tej technologii wdrożeniowców urządzeń. Usługa CEC ma na celu utrzymanie zdrowej równowagi między standardem a modyfikacjami tego standardu, tak aby działała z produktami, z których ludzie już korzystają.

Ogólny projekt

HdmiControlService jest połączony z resztą systemu, takich jak wejścia TV ramowego (TIF), transfer audio i usług Uprawnienia do realizacji różnych funkcji Norma określa.

Na poniższym diagramie przedstawiono obraz przełączania z niestandardowego kontrolera CEC na implementację prostszej warstwy abstrakcji sprzętowej HDMI-CEC (HAL).

Diagram przedstawiający implementację HDMI-CEC przed i po Androidzie 5.0

Wymiana Rysunek 1. HDMI Control Service

Realizacja

Poniższy schemat zawiera szczegółowy widok usługi sterowania HDMI.

Obraz przedstawiający szczegóły usługi Sterowanie HDMI

Rysunek 2. szczegółów HDMI Control Service

Oto kluczowe składniki prawidłowej implementacji HDMI-CEC w systemie Android:

  • Klasa menedżer HdmiControlManager zapewnia uprzywilejowane aplikacje z API. Usługi systemowe, takie jak usługa TV Input Manager i usługa Audio, mogą z niej korzystać bezpośrednio.
  • Usługa ma na celu umożliwienie hostingu więcej niż jednego typu urządzenia logicznego.
  • HDMI-CEC jest połączony ze sprzętem za pomocą warstwy abstrakcji sprzętu (HAL), aby uprościć obsługę różnic w protokole i mechanizmach sygnalizacji między urządzeniami. Definicja warstwy HAL jest dostępna dla producentów urządzeń do implementacji warstwy HAL.

Uwaga: Producenci urządzeń należy dodać następującą linię do PRODUCT_COPY_FILES w device.mk .

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

W zależności od tego, czy urządzenie jest urządzeniem zlew HDMI lub urządzenia źródłowego HDMI, producenci urządzeń należy ustawić ro.hdmi.device_type w device.mk dla HdmiControlService aby działać poprawnie.

W przypadku urządzeń źródłowych HDMI, takich jak urządzenia Over the Top (OTT) lub przystawki STB (STB), ustaw:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

W przypadku urządzeń typu sink HDMI, takich jak telewizory panelowe, ustaw:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Urządzenie dostarczane przez producenta zastrzeżony kontroler CEC nie może współistnieć z HdmiControlService . Musi być wyłączony lub usunięty. Typowe wymagania w tym zakresie wynikają z konieczności obsługi poleceń specyficznych dla producenta. Program obsługi poleceń specyficzny dla producenta powinien zostać włączony do usługi poprzez jego rozszerzenie/modyfikację. Ta praca jest pozostawiona producentowi urządzenia i nie jest określona przez Androida. Pamiętaj, że wszelkie zmiany wprowadzone w usłudze dla poleceń producenta nie mogą zakłócać sposobu obsługi poleceń standardowych, w przeciwnym razie urządzenie nie będzie zgodne z systemem Android.
  • Dostęp do usługi HDMI-CEC jest strzeżony z poziomem ochrony SignatureOrSystem . Tylko komponenty systemu lub aplikacje umieszczone w /system/priv-app można uzyskać dostępu do usługi. Ma to na celu ochronę usługi przed nadużyciami ze strony aplikacji o złośliwych zamiarach.

Android obsługuje typ TV/Display(0) , Playback device(4) , który może wydać polecenie Odtwórz One Touch stać się aktywnym źródłem i Audio System (5) tryb dźwięku, który system uchwytów i ARC. Inne typy urządzeń (tuner i rejestrator) nie są obecnie obsługiwane.

HDMI-CEC HAL

HDMI-CEC HAL API pozwala na HdmiControlService skorzystać z zasobów sprzętowych do wysyłania / odbierania poleceń HDMI-CEC, skonfiguruj wymagane ustawienia i (opcjonalnie) komunikować się z mikroprocesorem w podstawowej platformy, która przejmie kontrolę CEC natomiast Androida system jest w trybie czuwania.

Wersja Cechy Pliki HAL
1,0 Skonfiguruj dane HAL (adresy, funkcje). Wysyłaj polecenia HDMI-CEC. Zarejestruj wywołanie zwrotne, aby otrzymywać polecenia HDMI-CEC i zdarzenia hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1,1 Przedstaw typy HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Testowanie

Implementacje HDMI CEC urządzenia są badane i weryfikowane przez CTS testów według dokumentów HDMI CEC CTS .

HDMI-CEC 2.0

Urządzenia źródłowe (odtwarzanie) i zlew (panel TV) z systemem Android obsługują standard HDMI-CEC 2.0. HDMI-CEC 2.0 zapewnia lepszą interoperacyjność między urządzeniami HDMI, ulepszenia funkcji Remote Control Passthrough i bardziej rozbudowane testy certyfikacyjne. Ogólnie rzecz biorąc, interakcje HDMI-CEC 2.0 z innymi urządzeniami są bardziej wydajne, co skutkuje mniejszym ruchem HDMI-CEC, a także szybszymi interakcjami.

Aby urządzenie obsługiwało HDMI-CEC 2.0, konfiguracja urządzenia i użytkownika musi być ustawiona na używanie HDMI-CEC 2.0. Realizacja HAL musi również zgłosić wsparcie dla HDMI-CEC 2.0 w wywołań IHdmiCec#getCecVersion .

Konfiguracja CEC

Zachowanie HDMI CEC może być skonfigurowane zarówno czas budowy (z wykorzystaniem organizacjami, OEM) i wykonywania (o HdmiControlManager @SystemApi).

Przykłady ustawień HDMI-CEC:

Ustawienie Opcja
Czy HDMI-CEC jest włączony czy wyłączony. Włączony
Wyłączone
Zakres komunikatów sterowania zasilaniem HDMI-CEC wysyłanych przez urządzenie odtwarzające. Tylko do telewizora
Do telewizora i systemu audio
Audycja
Nic

Dla każdego aktualnie dostępnego ustawienia i dozwolone opcje mogą być sprawdzane przez aplikacje w czasie wykonywania.