Usługa kontroli HDMI-CEC

Standard High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) umożliwia wielomedialnym produktom konsumenckim komunikację i wymianę informacji między sobą. HDMI-CEC obsługuje wiele funkcji, takich jak zdalne sterowanie i sterowanie dźwiękiem systemu, ale jedną z najpopularniejszych jest funkcja One Touch Play. Funkcja One Touch Play umożliwia urządzeniu źródłowemu multimediów automatyczne włączenie telewizora i przełączenie portu wejściowego, dzięki czemu nie musisz szukać pilota do telewizora, aby przełączyć się z Chromecasta na odtwarzacz Blu-ray.

W systemie Android 12 sterowanie zasilaniem wyświetlacza podłączonego przez złącze HDMI jest zgodne z sterowaniem zasilaniem wyświetlacza wewnętrznego. Po wybudzeniu urządzenie odtwarzające HDMI podejmuje próbę wybudzenia podłączonego telewizora i stania się bieżącym aktywnym źródłem za pośrednictwem funkcji HDMI CEC One Touch Play. Jeśli urządzenie przejdzie w tryb uśpienia, gdy jest bieżącym 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 standard HDMI-CEC, dzięki czemu ich urządzenia współpracują z urządzeniami innych firm. Każdy producent wdraża standard HDMI-CEC na różne sposoby, dlatego urządzenia nie zawsze się rozumieją, a obsługiwane funkcje różnią się w zależności od urządzenia. Z powodu tej rozbieżności konsumenci nie mogą bezpiecznie założyć, że dwa produkty objęte wsparciem CEC są w pełni kompatybilne.

Obsługa standardu HDMI-CEC 2.0 pomaga poprawić kompatybilność pomię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 wejściowej Android TV (TIF) HDMI-CEC łączy wszystkie podłączone urządzenia i minimalizuje problemy ze zgodnością. Aby złagodzić te problemy, Android stworzył usługę systemową o nazwie HdmiControlService .

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

  • Standardowa implementacja HDMI-CEC dla wszystkich producentów, co zmniejszy niekompatybilność urządzeń. Wcześniej producenci musieli opracowywać własne implementacje HDMI-CEC lub korzystać z rozwiązań firm trzecich.
  • Usługa dobrze przetestowana z wieloma urządzeniami HDMI-CEC dostępnymi już na rynku. Android przeprowadził rygorystyczne badania dotyczące problemów ze zgodnością występujących w produktach i zebrał przydatne porady od doświadczonych w tej technologii wdrażających urządzenia. Usługa CEC została zaprojektowana tak, aby zachować zdrową równowagę pomiędzy normą a modyfikacjami tej normy, tak aby działała z produktami, z których ludzie już korzystają.

Ogólny projekt

HdmiControlService jest połączona z resztą systemu, np. strukturą wejścia TV (TIF), usługą audio i usługą zasilania, w celu wdrożenia różnych funkcji określonych w standardzie.

Poniższy diagram przedstawia przejście z niestandardowego kontrolera CEC na implementację prostszej warstwy abstrakcji sprzętu (HAL) HDMI-CEC.

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

Rysunek 1. Wymiana usługi sterowania HDMI

Realizacja

Szczegółowy widok usługi sterowania HDMI można znaleźć na poniższym schemacie.

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

Rysunek 2. Szczegóły usługi sterowania HDMI

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

  • Klasa menedżera HdmiControlManager udostępnia aplikacjom uprzywilejowanym interfejs API. Usługi systemowe, takie jak Menedżer wejść TV i Usługa audio, mogą korzystać z tej usługi bezpośrednio.
  • Usługa ma na celu umożliwienie hostowania więcej niż jednego typu urządzenia logicznego.
  • HDMI-CEC jest połączony ze sprzętem poprzez warstwę abstrakcji sprzętu (HAL), aby uprościć obsługę różnic w protokołach i mechanizmach sygnalizacyjnych pomiędzy urządzeniami. Definicja HAL jest dostępna dla producentów urządzeń i może być używana do implementowania warstwy HAL.

Uwaga : Producenci urządzeń powinni dodać następujący wiersz 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 Twoje urządzenie jest urządzeniem typu ujście HDMI, czy urządzeniem źródłowym HDMI, producenci urządzeń muszą ustawić ro.hdmi.device_type w device.mk , aby HdmiControlService działała poprawnie.

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

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

W przypadku urządzeń z wejściem HDMI, takich jak telewizory panelowe, ustaw:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Zastrzeżony kontroler CEC dostarczony przez producenta urządzenia nie może współistnieć z HdmiControlService . Należy go wyłączyć lub usunąć. Typowe wymagania w tym zakresie wynikają z konieczności obsługi poleceń specyficznych dla producenta. Specyficzną dla producenta procedurę obsługi poleceń należy włączyć do usługi poprzez jej rozszerzenie/modyfikację. Ta praca jest pozostawiona producentowi urządzenia i nie jest określona przez system Android. Należy pamiętać, że wszelkie zmiany wprowadzone w usłudze dla poleceń specyficznych dla producenta nie mogą zakłócać sposobu obsługi standardowych poleceń, w przeciwnym razie urządzenie nie będzie kompatybilne z systemem Android.
  • Dostęp do usługi HDMI-CEC chroniony jest poziomem ochrony SignatureOrSystem . Dostęp do usługi mają wyłącznie komponenty systemowe lub aplikacje umieszczone w /system/priv-app . Ma to na celu ochronę usługi przed nadużyciami ze strony aplikacji mających złośliwe zamiary.

Android obsługuje typ TV/Display(0) , Playback device(4) , które może wydać polecenie One Touch Play, aby stać się aktywnym źródłem, oraz Audio System (5) , który obsługuje systemowy tryb audio i ARC. Inne typy urządzeń (tuner i nagrywarka) nie są obecnie obsługiwane.

HDMI-CEC HAL

Interfejs API HAL HDMI-CEC umożliwia usłudze HdmiControlService wykorzystanie zasobów sprzętowych do wysyłania/odbierania poleceń HDMI-CEC, konfigurowania niezbędnych ustawień i (opcjonalnie) komunikowania się z mikroprocesorem na platformie bazowej, który przejmie kontrolę nad CEC, podczas gdy system Android system znajduje się w trybie gotowości.

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 urządzeń HDMI-CEC są testowane i weryfikowane za pomocą testów CTS zgodnie z dokumentacją HDMI-CEC CTS .

HDMI-CEC 2.0

Urządzenia źródłowe (odtwarzanie) i ujścia (panel telewizora) z systemem Android obsługują standard HDMI-CEC 2.0. HDMI-CEC 2.0 zapewnia lepszą interoperacyjność pomię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 i szybszymi interakcjami.

Aby urządzenie obsługiwało standard HDMI-CEC 2.0, konfiguracja urządzenia i użytkownika musi być ustawiona na korzystanie z HDMI-CEC 2.0. Implementacja HAL musi również zgłaszać obsługę HDMI-CEC 2.0 w wywołaniach do IHdmiCec#getCecVersion .

Konfiguracja CEC-a

Zachowanie HDMI-CEC można skonfigurować zarówno w czasie kompilacji (przez producentów OEM korzystających z RRO), jak i w czasie wykonywania (przez HdmiControlManager @SystemApi).

Przykładowe ustawienia HDMI-CEC:

Ustawienie Opcja
Czy funkcja HDMI-CEC jest włączona, czy wyłączona. Włączony
Wyłączony
Zakres komunikatów sterujących mocą HDMI-CEC wysyłanych przez urządzenie odtwarzające. Tylko do telewizora
Do telewizora i systemu audio
Audycja
Nic

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