Servizio di controllo HDMI-CEC

Lo standard High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) consente ai prodotti consumer multimediali di comunicare e scambiare informazioni tra loro. HDMI-CEC supporta molte funzionalità, come Passthrough del telecomando e Controllo audio del sistema, ma una delle più popolari è One Touch Play. One Touch Play consente a un dispositivo sorgente multimediale di accendere la TV e di cambiare automaticamente la sua porta di ingresso, così non devi cercare il telecomando della TV per passare dal Chromecast al lettore Blu-ray.

Con Android 12, il controllo dell'alimentazione del display collegato tramite HDMI si allinea con il controllo dell'alimentazione del display interno. Quando un dispositivo di riproduzione HDMI si riattiva, tenta di riattivare la TV collegata e diventare la sorgente attiva corrente tramite HDMI CEC One Touch Play. Se il dispositivo va in sospensione mentre è la sorgente attiva corrente, tenta di spegnere la TV collegata.

Il supporto di HDMI-CEC è generalmente facoltativo. Tuttavia, la maggior parte dei produttori ha adottato HDMI-CEC, quindi i loro dispositivi funzionano con i dispositivi di altre aziende. Ogni produttore implementa lo standard HDMI-CEC in modi diversi, quindi i dispositivi non sempre si capiscono e le funzionalità supportate variano a seconda dei dispositivi. A causa di questa variazione, i consumatori non possono presumere con sicurezza che due prodotti che richiedono il supporto CEC siano completamente compatibili.

Il supporto per HDMI-CEC 2.0 aiuta a migliorare la compatibilità tra i dispositivi HDMI se sia il dispositivo di invio che quello di ricezione supportano questa versione dello standard.

Soluzione

Con l'introduzione di Android TV Input Framework (TIF), HDMI-CEC riunisce tutti i dispositivi connessi e riduce al minimo i problemi di compatibilità. Android ha creato un servizio di sistema chiamato HdmiControlService per alleviare questi punti di dolore.

Offrendo HdmiControlService come parte dell'ecosistema Android, Android spera di fornire:

  • Un'implementazione standard di HDMI-CEC per tutti i produttori, che ridurrà l'incompatibilità del dispositivo. In precedenza, i produttori dovevano sviluppare le proprie implementazioni di HDMI-CEC o utilizzare soluzioni di terze parti.
  • Un servizio ben collaudato rispetto a numerosi dispositivi HDMI-CEC già presenti sul mercato. Android ha condotto ricerche rigorose sui problemi di compatibilità riscontrati tra i prodotti e ha raccolto consigli utili da implementatori di dispositivi esperti nella tecnologia. Il servizio CEC è progettato per mantenere un sano equilibrio tra lo standard e le modifiche a tale standard in modo che funzioni con i prodotti che le persone già utilizzano.

Design generale

HdmiControlService è collegato con il resto del sistema come la TV di ingresso quadro (TIF), servizio di audio, e il servizio di potenza per implementare le varie caratteristiche previsto dalla norma.

Vedere il diagramma seguente per una rappresentazione del passaggio da un controller CEC personalizzato a un'implementazione del più semplice HAL (Hardware Abstraction Layer) HDMI-CEC.

Diagramma che mostra come è stato implementato HDMI-CEC prima e dopo Android 5.0

Sostituzione Figura 1. Servizio di controllo HDMI

Implementazione

Vedere il diagramma seguente per una vista dettagliata del servizio di controllo HDMI.

Immagine che mostra i dettagli del servizio di controllo HDMI

Figura 2. I dettagli del servizio di controllo HDMI

Ecco gli ingredienti chiave per una corretta implementazione HDMI-CEC di Android:

  • Una classe gestore HdmiControlManager fornisce applicazioni privilegiati con l'API. I servizi di sistema come il servizio TV Input Manager e il servizio Audio possono utilizzare direttamente il servizio.
  • Il servizio è progettato per consentire l'hosting di più di un tipo di dispositivo logico.
  • HDMI-CEC è collegato all'hardware tramite un livello di astrazione hardware (HAL) per semplificare la gestione delle differenze del protocollo e dei meccanismi di segnalazione tra i dispositivi. La definizione HAL è disponibile per i produttori di dispositivi da utilizzare per implementare il livello HAL.

Nota: I produttori di dispositivi dovrebbero aggiungere la seguente riga in PRODUCT_COPY_FILES in device.mk .

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

A seconda che il dispositivo è un dispositivo HDMI lavandino o un dispositivo sorgente HDMI, i produttori di dispositivi bisogno di impostare ro.hdmi.device_type in device.mk per HdmiControlService per funzionare correttamente.

Per i dispositivi sorgente HDMI, come i dispositivi Over the Top (OTT) o Set-top box (STB), impostare:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Per i dispositivi sink HDMI, come i televisori a pannello, impostare:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Un controllore CEC proprietaria dispositivo fornito dal produttore non può coesistere con HdmiControlService . Deve essere disabilitato o rimosso. Requisiti comuni per questo derivano dalla necessità di gestire comandi specifici del produttore. Il gestore dei comandi specifico del produttore deve essere incorporato nel servizio estendendolo/modificandolo. Questo lavoro è lasciato al produttore del dispositivo e non specificato da Android. Tieni presente che qualsiasi modifica apportata al servizio per i comandi specifici del produttore non deve interferire con il modo in cui vengono gestiti i comandi standard o il dispositivo non sarà compatibile con Android.
  • L'accesso al servizio HDMI-CEC è custodito con il livello di protezione SignatureOrSystem . Solo componenti del sistema o delle applicazioni collocate in /system/priv-app in grado di accedere al servizio. Questo serve a proteggere il servizio da abusi da parte di app con intenti dannosi.

Supporta Android tipo TV/Display(0) , Playback device(4) in grado di eseguire il comando Riproduzione One Touch per diventare la sorgente attiva e Audio System (5) modalità audio quale sistema maniglie e ARC. Altri tipi di dispositivi (sintonizzatore e registratore) non sono attualmente supportati.

HDMI-CEC HAL

L'API HDMI-CEC HAL permette al HdmiControlService fanno uso della risorsa hardware per inviare / ricevere comandi HDMI-CEC, configurare le impostazioni necessarie, e (opzionalmente) comunicano con il microprocessore nella piattaforma sottostante che assumerà il controllo CEC mentre Android il sistema è in modalità standby.

Versione Caratteristiche File HAL
1.0 Configura i dati HAL (indirizzi, caratteristiche). Invia comandi HDMI-CEC. Registra la richiamata per ricevere comandi HDMI-CEC ed eventi hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Introdurre i tipi HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

test

Implementazioni HDMI-CEC dei dispositivi sono testati e verificati tramite test CTS secondo la documentazione HDMI-CEC CTS .

HDMI-CEC 2.0

I dispositivi Android source (riproduzione) e sink (pannello TV) supportano HDMI-CEC 2.0. HDMI-CEC 2.0 offre una migliore interoperabilità tra i dispositivi HDMI, miglioramenti a Remote Control Passthrough e test di certificazione più approfonditi. In genere, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, con conseguente minor traffico HDMI-CEC e interazioni più veloci.

Affinché un dispositivo supporti HDMI-CEC 2.0, il dispositivo e la configurazione utente devono essere impostati per utilizzare HDMI-CEC 2.0. L'implementazione HAL deve inoltre segnalare il supporto per HDMI-CEC 2.0 nelle chiamate a IHdmiCec#getCecVersion .

Configurazione CEC

Comportamento HDMI-CEC può essere configurato sia a tempo di costruzione (per gli OEM che utilizzano RROs) e tempo di esecuzione (da HdmiControlManager @SystemApi).

Esempi di impostazioni HDMI-CEC:

Collocamento Opzione
Se l'HDMI-CEC è abilitato o disabilitato. Abilitato
Disabilitato
Ambito dei messaggi di controllo dell'alimentazione HDMI-CEC inviati da un dispositivo di riproduzione. Solo per la TV
Alla TV e al sistema audio
Trasmissione
Nessuno

Per ogni impostazione attualmente disponibile e le opzioni consentite possono essere interrogate dalle app in fase di esecuzione.