Usługa sterowania HDMI-CEC

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.

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 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_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ś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.