Usługa sterowania HDMI-CEC

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.

Diagram pokazujący, jak HDMI-CEC było implementowane przed Androidem 5.0 i po nim

Rysunek 1. HDMI Control Service replacement

Implementacja

Szczegółowy widok usługi sterowania HDMI znajdziesz na poniższym diagramie.

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

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