Standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) umożliwia urządzeniom multimedialnym komunikowanie się i wymianę informacji. HDMI-CEC obsługuje wiele funkcji, takich jak przekazywanie sygnału pilota i sterowanie dźwiękiem systemowym, ale jedną z najpopularniejszych jest funkcja One Touch Play. One Touch Play umożliwia urządzeniu źródłowemu włączenie telewizora i automatyczne przełączenie jego 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 zarządzanie energią wyświetlacza podłączonego przez HDMI jest zgodne z zarządzaniem energią wyświetlacza wewnętrznego. Gdy urządzenie odtwarzające HDMI się wybudza, 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. Jednak większość producentów przyjęła standard HDMI-CEC, aby ich urządzenia działały z urządzeniami innych firm. Każdy producent implementuje 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 pomaga zwiększyć kompatybilność 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
Dzięki wprowadzeniu platformy Android TV Input Framework (TIF) standard HDMI-CEC łączy wszystkie podłączone urządzenia i minimalizuje problemy z kompatybilnością.
Aby rozwiązać te problemy, Android utworzył usługę systemową o nazwie HdmiControlService.
Oferując HdmiControlService jako część ekosystemu Androida, chcemy zapewnić:
- Standardową implementację 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ługę, która została dokładnie przetestowana na wielu urządzeniach HDMI-CEC dostępnych już na rynku. Przeprowadziliśmy rygorystyczne badania dotyczące problemów z kompatybilnością występujących w produktach i zebraliśmy 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 będzie działać z produktami, których użytkownicy już używają.
Ogólny projekt
HdmiControlService jest połączona z resztą systemu, np. z platformą TV Input Framework (TIF), usługą audio i usługą zasilania, aby implementować różne funkcje określone w standardzie.
Na ilustracji poniżej przedstawiono przejście z niestandardowego kontrolera CEC na implementację prostszej warstwy abstrakcji sprzętu (HAL) HDMI-CEC.
Rysunek 1. Zastąpienie usługi sterowania HDMI
Implementacja
Na ilustracji poniżej przedstawiono szczegółowy widok usługi sterowania HDMI.
Rysunek 2. Szczegóły usługi sterowania HDMI
Oto najważniejsze elementy prawidłowej implementacji HDMI-CEC w Androidzie:
- Klasa menedżera
HdmiControlManagerudostępnia interfejs API aplikacjom z uprawnieniami. Usługi systemowe, takie jak usługa TV Input Manager i usługa audio, mogą korzystać z usługi bezpośrednio. - Usługa jest zaprojektowana tak, aby umożliwiać hostowanie więcej niż 1 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 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 urządzenie jest urządzeniem HDMI sink czy HDMI source, producenci urządzeń muszą ustawić ro.hdmi.device_type w pliku device.mk, aby usługa HdmiControlService działała prawidłowo.
W przypadku urządzeń HDMI source, takich jak urządzenia OTT (Over the Top) lub dekodery, ustaw:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
W przypadku urządzeń HDMI sink, 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 usługą
HdmiControlService. Musi zostać wyłączony lub usunięty. Typowe wymagania w tym zakresie wynikają z potrzeby obsługi poleceń specyficznych dla producenta. Obsługę poleceń specyficznych dla producenta należy włączyć 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 wszelkie zmiany wprowadzone w usłudze w celu obsługi poleceń specyficznych dla 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 poziomem ochrony
SignatureOrSystem. Tylko komponenty systemowe lub aplikacje umieszczone w katalogu/system/priv-appmogą uzyskiwać dostęp do usługi. Ma to chronić usługę przed nadużyciami ze strony aplikacji o złośliwych zamiarach.
Android obsługuje typy TV/Display(0), Playback
device(4) (które mogą wysyłać polecenie One Touch Play, aby stać się aktywnym
źródłem) oraz Audio System (5) (które obsługuje tryb dźwięku systemowego i ARC).
Inne typy urządzeń (tuner i rejestrator) nie są obecnie obsługiwane.
HAL HDMI-CEC
Interfejs HDMI-CEC HAL API umożliwia usłudze 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 w bazowej platformie, który przejmie sterowanie CEC, gdy system Android będzie w trybie gotowości.
| Wersja | Funkcje | Pliki HAL |
|---|---|---|
| 1.0 | Konfigurowanie danych HAL (adresów, funkcji). Wysyłanie poleceń HDMI-CEC. Rejestrowanie wywołania zwrotnego w celu odbierania poleceń HDMI-CEC i zdarzeń hotplug. | IHdmiCec.halIHdmiCecCallback.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ą HDMI-CEC CTS.
HDMI-CEC 2.0
Urządzenia źródłowe (odtwarzające) i sink (panel telewizora) z Androidem 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 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ć skonfigurowane tak, aby korzystać z HDMI-CEC 2.0. Implementacja HAL musi też zgłaszać obsługę HDMI-CEC 2.0 w wywołaniach IHdmiCec#getCecVersion.
Konfiguracja CEC
Działanie 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 | Opcja |
|---|---|
| Czy HDMI-CEC jest włączony czy wyłączony. | Włączony Wyłączony |
| Zakres komunikatów zarządzania energią HDMI-CEC wysyłanych przez urządzenie odtwarzające. | Tylko do telewizora Do telewizora i systemu audio Rozgłaszaj Brak |
W przypadku każdego ustawienia aplikacje mogą w czasie działania sprawdzać dostępne i dozwolone opcje.