Usługa sterowania HDMI-CEC

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.

Schemat pokazujący implementację HDMI-CEC przed i po Androidzie 5.0

Rysunek 1. wymiana usługi sterowania HDMI,

Implementacja

Szczegółowy opis usługi sterowania HDMI znajdziesz na diagramie poniżej.

Obraz pokazujący szczegóły usługi HDMI Control

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_typedevice.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 ochronySignatureOrSystem. 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.