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.
Realizacja
Szczegółowy widok usługi sterowania HDMI można znaleźć na poniższym schemacie.
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.