Standard Consumer Electronics Control (HDMI-CEC) umożliwia komunikację i wymianę informacji między multimedialnymi urządzeniami konsumenckimi. HDMI-CEC obsługuje wiele funkcji, takich jak zdalne sterowanie i sterowanie dźwiękiem systemu, ale jedną z najpopularniejszych jest funkcja odtwarzania jednym dotknięciem. Tryb One Touch Play pozwala urządzeniu z źródłem multimediów włączyć telewizor i przełączyć jego port wejściowy automatycznie, dzięki czemu nie musisz szukać pilota do telewizora, aby przełączyć się z Chromecasta na odtwarzacz Blu-ray.
W Androidzie 12 sterowanie zasilaniem wyświetlacza podłączonego przez HDMI jest zgodne ze 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 tryb uśpienia, gdy jest bieżącym źródłem, spróbuje wyłączyć podłączony telewizor.
Obsługa HDMI-CEC jest zazwyczaj opcjonalna. Jednak większość producentów wdrożył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 swój sposób, więc urządzenia nie zawsze się ze sobą komunikują, 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 mają obsługiwać CEC, są w pełni kompatybilne.
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) HDMI-CEC łączy wszystkie podłączone urządzenia i minimalizuje problemy ze zgodnością.
Aby rozwiązać te problemy, w Androidzie została utworzona usługa systemowa o nazwie HdmiControlService
.
Oferując HdmiControlService
w ramach ekosystemu Androida, firma Android chce zapewnić:
- standardowe wdrożenie HDMI-CEC dla wszystkich producentów, co zmniejszy niezgodność urządzeń; Wcześniej producenci musieli opracowywać 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 w standardzie.
Na poniższym diagramie przedstawiono przejście z niestandardowego sterownika CEC na implementację uproszczonego warstwy abstrakcji sprzętowej (HAL) standardu HDMI-CEC.

Rysunek 1. wymiana usługi sterowania HDMI,
Implementacja
Szczegółowy opis usługi sterowania HDMI znajdziesz na diagramie poniżej.

Rysunek 2. Szczegóły usługi sterowania HDMI
Oto najważniejsze elementy prawidłowej implementacji HDMI-CEC w Androidzie:
- Klasa menedżera
HdmiControlManager
udostępnia uprawnienia interfejsu API aplikacjom uprzywilejowanym. Usługi systemowe, takie jak usługa menedżera wejść 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ń i może być używana 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ściami HDMI, takich jak telewizory panelowe, ustaw:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Własnościowy kontroler CEC dostarczony przez producenta urządzenia nie może współistnieć z
HdmiControlService
. Musi zostać wyłączony lub usunięty. 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 poprzez jej rozszerzenie lub zmodyfikowanie. To zadanie należy do producenta urządzenia, a nie do Androida. Pamiętaj, że wszelkie zmiany wprowadzone w usłudze dotyczące poleceń producenta nie mogą zakłócać sposobu obsługi poleceń standardowych, ponieważ w przeciwnym razie 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 systemowe lub aplikacje umieszczone w/system/priv-app
. Ma to na celu ochronę usługi przed nadużyciami przez aplikacje o złośliwych zamiarach.
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łać polecenia HDMI-CEC. Rejestruje 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ą współpracę między urządzeniami HDMI, ulepszone przekazywanie sygnału za pomocą pilota oraz bardziej rozbudowane testy certyfikacyjne. Ogólnie interakcje 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
Zachowanie HDMI-CEC można skonfigurować zarówno w czasie kompilacji (przez producentów 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 wiadomości sterowania zasilaniem HDMI-CEC wysyłanych przez urządzenie odtwarzające. | Tylko do telewizora Do telewizora i systemu audio Transmisja Brak |
Aplikacje mogą wysyłać zapytania o dostępne i dozwolone opcje każdego ustawienia w czasie działania.