Standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) umożliwia sprzedawanym produktom multimedialnym komunikację i wymianę informacji. HDMI-CEC obsługuje wiele funkcji, takich jak zdalne sterowanie i sterowanie dźwiękiem w systemie, ale jedną z najpopularniejszych jest funkcja odtwarzania jednym dotknięciem. Odtwarzanie jednym dotknięciem umożliwia urządzeniu źródła multimediów włączanie telewizora i automatyczne przełączanie portu wejściowego, dzięki czemu nie musisz szukać pilota, aby przełączyć się z Chromecasta na odtwarzacz Blu-ray.
W Androidzie 12 sterowanie zasilaniem wyświetlacza podłączonego przez HDMI odpowiada sterowaniem zasilaniem wyświetlacza wewnętrznego. Gdy urządzenie do odtwarzania HDMI się włączy, próbuje obudzić podłączony telewizor i stać się bieżącym aktywnym źródłem za pomocą funkcji HDMI CEC One Touch Play. Jeśli urządzenie przejdzie w stan uśpienia, gdy jest bieżącym źródłem, spróbuje wyłączyć połączony telewizor.
Obsługa HDMI-CEC jest zazwyczaj opcjonalna. Większość producentów stosuje jednak HDMI-CEC, aby ich urządzenia działały z urządzeniami innych firm. Każdy producent stosuje standard HDMI-CEC na różne sposoby, więc urządzenia nie zawsze się wzajemnie rozumieją, a obsługiwane funkcje różnią się w zależności od urządzenia. Z tego powodu konsumenci nie mogą zakładać, że dwa produkty, które obsługują CEC, są w pełni zgodne.
Obsługa HDMI-CEC 2.0 poprawia zgodność urządzeń HDMI, jeśli zarówno urządzenie wysyłające, jak i odbiorcze obsługują tę wersję standardu.
Rozwiązanie
Dzięki wprowadzeniu interfejsu TIF (Android TV Input Framework) standard HDMI-CEC łączy wszystkie podłączone urządzenia i minimalizuje problemy ze zgodnością.
Aby eliminować te problemy, Android opracował usługę systemową o nazwie HdmiControlService
.
Oferując HdmiControlService
w ramach ekosystemu Androida, firma Android chce zapewnić:
- standardowa implementacja HDMI-CEC dla wszystkich producentów, która zmniejszy niezgodność urządzeń; Wcześniej producenci musieli tworzyć własne implementacje HDMI-CEC lub korzystać z rozwiązań innych firm.
- Usługa, która została dokładnie przetestowana na wielu urządzeniach HDMI-CEC dostępnych na rynku. Zespół Androida przeprowadził dokładne badania dotyczące problemów ze zgodnością, które występują w różnych produktach, oraz zebrał przydatne porady od implementatorów urządzeń, którzy mają doświadczenie w tej technologii. Usługa CEC została zaprojektowana tak, aby zachować zdrową równowagę między standardem a modyfikacjami tego standardu, aby działała z produktami, których użytkownicy już używają.
Ogólny projekt
HdmiControlService
jest połączony z resztą systemu, takimi jak TV Input Framework (TIF), usługa audio i usługa Power, aby realizować różne funkcje określone przez standard.
Na diagramie poniżej przedstawiono przejście z niestandardowego sterownika CEC na implementację uproszczonego sprzętowego poziomu abstrakcji (HAL) HDMI-CEC.
Implementacja
Szczegółowy opis usługi sterowania HDMI znajdziesz na diagramie poniżej.
Oto najważniejsze elementy prawidłowej implementacji HDMI-CEC w Androidzie:
- Klasa menedżera
HdmiControlManager
udostępnia uprawnienia interfejsu API aplikacjom z przywilejami. Usługi systemowe, takie jak usługa menedżera wejścia TV i usługa audio, mogą korzystać z usługi bezpośrednio. - Usługa umożliwia hostowanie więcej niż jednego typu urządzenia logicznego.
- Złącze HDMI-CEC jest połączone z sprzętem przez warstwę abstrakcji sprzętowej (HAL), aby uprościć obsługę różnic w protokołach i mechanizmach sygnalizacji między urządzeniami. Definicja HAL jest dostępna dla producentów urządzeń do implementacji warstwy HAL.
Uwaga: producenci urządzeń powinni dodać ten wiersz do pliku PRODUCT_COPY_FILES
w pliku 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 z wyjściami HDMI, czy urządzeniem z wejściami HDMI, producenci urządzeń muszą ustawić ro.hdmi.device_type
w device.mk
, aby HdmiControlService
działało prawidłowo.
W przypadku urządzeń źródłowych HDMI, takich jak urządzenia OTT lub dekodery, ustaw:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
W przypadku urządzeń z wyjściem HDMI, takich jak telewizory panelowe, ustaw:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Zastrzeżony kontroler CEC udostępniony przez producenta urządzenia nie może współistnieć z
HdmiControlService
. Musisz go wyłączyć lub usunąć. Wymagania te wynikają z konieczności obsługi poleceń związanych z poszczególnymi producentami. Obsługa poleceń specyficzna dla producenta powinna zostać włączona do usługi przez rozszerzenie lub zmodyfikowanie jej. Te treści trafiają do producenta urządzenia i Android ich nie określa. Pamiętaj, że zmiany wprowadzone w usłudze poleceń producenta nie mogą zakłócać obsługi standardowych poleceń, bo urządzenie nie będzie zgodne z Androidem. - Dostęp do usługi HDMI-CEC jest chroniony za pomocą poziomu ochrony
SignatureOrSystem
. Dostęp do usługi mają tylko komponenty systemu lub aplikacje umieszczone w usłudze/system/priv-app
. Ma to na celu ochronę usługi przed nadużyciami przez aplikacje o złośliwych intencjach.
Android obsługuje typ TV/Display(0)
, Playback
device(4)
, który może wydać polecenie odtwarzania jednym dotknięciem, aby stać się aktywnym źródłem, oraz Audio System (5)
, który obsługuje tryb audio systemowy i ARC.
Inne typy urządzeń (Tuner i Recorder) nie są obecnie obsługiwane.
HDMI-CEC HAL
Interfejs API HAL HDMI-CEC umożliwia HdmiControlService
korzystanie z zasobu sprzętowego do wysyłania i odbierania poleceń HDMI-CEC, konfigurowania niezbędnych ustawień oraz (opcjonalnie) komunikowania się z mikroprocesorem na platformie docelowej, który przejmie kontrolę nad CEC, gdy system Android będzie w stanie gotowości.
Wersja | Funkcje | Pliki HAL |
---|---|---|
1,0 | Skonfiguruj dane HAL (adresy, funkcje). Wysyłanie poleceń HDMI-CEC. Zarejestruj wywołanie zwrotne, aby odbierać polecenia HDMI-CEC i zdarzenia hotplug. | IHdmiCec.hal IHdmiCecCallback.hal |
1,1 | Wprowadzenie typów HDMI-CEC 2.0 | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Testowanie
Implementacje HDMI-CEC urządzeń są testowane i weryfikowane za pomocą testów CTS zgodnie z dokumentacją CTS HDMI-CEC.
HDMI-CEC 2.0
Urządzenia źródłowe (odtwarzające) i odbiorcze (panele telewizyjne) z Androidem obsługują standard HDMI-CEC 2.0. HDMI-CEC 2.0 zapewnia lepszą interoperacyjność między urządzeniami HDMI, ulepszenie przekazywania zdalnego sterowania i bardziej rozbudowane testy certyfikacyjne. Ogólnie interakcje z HDMI-CEC 2.0 z innymi urządzeniami są bardziej wydajne, co powoduje mniejszy ruch HDMI-CEC oraz szybsze interakcje.
Aby urządzenie obsługiwało standard HDMI-CEC 2.0, w konfiguracji urządzenia i użytkownika musi być włączona obsługa HDMI-CEC 2.0. Implementacja HAL musi też zgłaszać obsługę HDMI-CEC 2.0 w wywołaniach do IHdmiCec#getCecVersion
.
Konfiguracja CEC
Działanie HDMI-CEC można skonfigurować zarówno podczas kompilacji (przez OEM za pomocą RRO), jak i w czasie działania (przez HdmiControlManager
@SystemApi).
Przykłady ustawień HDMI-CEC:
Ustawienie | Option |
---|---|
Czy komunikacja HDMI-CEC jest włączona czy wyłączona. | Włączono Wyłączono |
Zakres komunikatów dotyczących sterowania zasilaniem HDMI-CEC wysyłanych przez urządzenie odtwarzające. | Tylko do telewizora Do telewizora i systemu audio Przesyłanie Brak |
Aplikacje mogą wysyłać zapytania o dostępne i dozwolone opcje każdego ustawienia w czasie działania.