Standard High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) umożliwia komunikację i wymianę informacji między urządzeniami multimedialnymi. HDMI-CEC obsługuje wiele funkcji, takich jak przekazywanie sygnału pilota i sterowanie dźwiękiem systemowym, ale jedną z najpopularniejszych jest One Touch Play. Funkcja One Touch Play umożliwia urządzeniu źródłowemu włączenie telewizora i automatyczne 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 Androidzie 12 sterowanie zasilaniem wyświetlacza podłączonego przez HDMI jest zgodne ze sterowaniem zasilaniem wyświetlacza wewnętrznego. Gdy urządzenie odtwarzające HDMI zostanie wybudzone, próbuje wybudzić 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 aktywnym źródłem, spróbuje wyłączyć podłączony telewizor.
Obsługa HDMI-CEC jest zwykle opcjonalna. Większość producentów stosuje jednak 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ę rozumieją, a obsługiwane funkcje różnią się w zależności od urządzenia. Z tego powodu konsumenci nie mogą zakładać, że 2 produkty, które deklarują obsługę CEC, są w pełni kompatybilne.
Obsługa HDMI-CEC 2.0 zwiększa zgodność 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ą.
Aby rozwiązać te problemy, Android stworzył usługę systemową o nazwie HdmiControlService
.
Oferując HdmiControlService
jako część ekosystemu Androida, chcemy zapewnić:
- Standardowe wdrożenie HDMI-CEC dla wszystkich producentów, które 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 prowadzi intensywne badania nad problemami ze zgodnością występującymi w produktach i zbiera przydatne porady od producentów urządzeń, którzy mają doświadczenie w tej technologii. Usługa CEC została zaprojektowana tak, aby zachować równowagę między standardem a jego modyfikacjami, dzięki czemu działa z produktami, których ludzie już używają.
Ogólny projekt
HdmiControlService
jest połączony z pozostałymi elementami systemu, takimi jak TV Input Framework (TIF), usługa audio i usługa zasilania, aby wdrażać różne funkcje określone w standardzie.
Na poniższym diagramie przedstawiono przejście od niestandardowego kontrolera CEC do implementacji prostszej warstwy abstrakcji sprzętu (HAL) HDMI-CEC.

Rysunek 1. HDMI Control Service replacement
Implementacja
Szczegółowy widok usługi sterowania HDMI znajdziesz na poniższym diagramie.

Rysunek 2. Szczegóły usługi sterowania HDMI
Oto kluczowe elementy prawidłowej implementacji HDMI-CEC na Androidzie:
- Klasa menedżera
HdmiControlManager
udostępnia uprzywilejowanym aplikacjom interfejs API. Usługi systemowe, takie jak usługa Menedżer wejść TV i usługa Audio, mogą korzystać z usługi bezpośrednio. - Usługa jest przeznaczona do hostowania 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 HAL jest dostępna dla producentów urządzeń, którzy mogą jej używać do implementowania warstwy HAL.
Uwaga: producenci urządzeń powinni dodać ten 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 urządzenie jest urządzeniem odbiorczym HDMI czy urządzeniem źródłowym HDMI, producenci urządzeń muszą ustawić wartość ro.hdmi.device_type
w device.mk
, aby funkcja HdmiControlService
działała 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ń odbierających HDMI, takich jak telewizory panelowe, ustaw:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Własny kontroler CEC dostarczony przez producenta urządzenia nie może współistnieć z
HdmiControlService
. Musi zostać wyłączony lub usunięty. Typowe wymagania w tym zakresie wynikają z konieczności obsługi poleceń specyficznych dla producenta. Obsługa poleceń specyficznych dla producenta powinna zostać włączona do usługi przez jej rozszerzenie lub zmodyfikowanie. To zadanie należy do producenta urządzenia i nie jest określone przez Androida. Pamiętaj, że żadna zmiana wprowadzona w usłudze w przypadku poleceń specyficznych dla producenta nie może zakłócać sposobu obsługi standardowych poleceń, ponieważ w przeciwnym razie urządzenie nie będzie zgodne z Androidem. - Dostęp do usługi HDMI-CEC jest chroniony poziomem ochrony
SignatureOrSystem
. Dostęp do usługi mają tylko komponenty systemowe lub aplikacje umieszczone w/system/priv-app
. Ma to chronić usługę przed nadużyciami ze strony aplikacji o złośliwych zamiarach.
Android obsługuje typy TV/Display(0)
i Playback
device(4)
, które mogą wysyłać polecenie One Touch Play, aby stać się aktywnym źródłem, oraz typ Audio System (5)
, który obsługuje tryb audio systemu i ARC.
Inne typy urządzeń (Tuner i Recorder) nie są obecnie obsługiwane.
HDMI-CEC HAL
Interfejs API HAL HDMI-CEC umożliwia urządzeniu HdmiControlService
korzystanie z zasobów sprzętowych do wysyłania i odbierania poleceń HDMI-CEC, konfigurowania niezbędnych ustawień oraz (opcjonalnie) komunikowania się z mikroprocesorem na platformie bazowej, który przejmie kontrolę nad CEC, gdy system Android będzie w trybie 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 na urządzeniach są testowane i weryfikowane za pomocą testów CTS zgodnie z dokumentacją testów CTS HDMI-CEC.
HDMI-CEC 2.0
Urządzenia z Androidem (odtwarzające) i odbiorniki (panele telewizyjne) obsługują HDMI-CEC 2.0. HDMI-CEC 2.0 zapewnia lepszą interoperacyjność między urządzeniami HDMI, ulepszenia w zakresie przekazywania sygnału pilota 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 HDMI-CEC 2.0, musi być ono skonfigurowane do korzystania z tego standardu. Implementacja HAL musi też zgłaszać obsługę HDMI-CEC 2.0 w wywołaniach funkcji IHdmiCec#getCecVersion
.
Konfiguracja CEC
Działanie HDMI-CEC można skonfigurować zarówno w czasie kompilacji (przez producentów OEM za pomocą nakładek RRO), jak i w czasie działania (przez HdmiControlManager
@SystemApi).
Przykłady ustawień HDMI-CEC:
Ustawienie | Opcja |
---|---|
Czy komunikacja HDMI-CEC jest włączona czy wyłączona. | Włączono Wyłączono |
Zakres komunikatów sterowania zasilaniem HDMI-CEC wysyłanych przez urządzenie odtwarzające. | Tylko na telewizor Na telewizor i system audio Transmisja Brak |
Aplikacje mogą w czasie działania sprawdzać, które ustawienia są obecnie dostępne i jakie są dozwolone opcje.