Servizio di controllo HDMI-CEC

Lo standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) consente ai prodotti di consumo 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 cambiare automaticamente la porta di ingresso, quindi non è necessario 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 al controllo dell'alimentazione del display interno. Quando un dispositivo di riproduzione HDMI si riattiva, tenta di riattivare la TV collegata e di diventare la sorgente attiva corrente tramite HDMI CEC One Touch Play. Se il dispositivo va in modalità di sospensione mentre è la sorgente attiva corrente, tenta di spegnere la TV connessa.

Il supporto di HDMI-CEC è generalmente facoltativo. Tuttavia, la maggior parte dei produttori ha adottato HDMI-CEC in modo che i propri dispositivi funzionino con quelli di altre aziende. Ogni produttore implementa lo standard HDMI-CEC in modi diversi, quindi i dispositivi non sempre si capiscono tra loro e le funzionalità supportate variano da dispositivo a dispositivo. A causa di questa variazione, i consumatori non possono presumere con sicurezza che due prodotti che dichiarano 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 collegati e riduce al minimo i problemi di compatibilità. Android ha creato un servizio di sistema chiamato HdmiControlService per alleviare questi punti critici.

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à dei dispositivi. In precedenza, i produttori dovevano sviluppare le proprie implementazioni di HDMI-CEC o utilizzare soluzioni di terze parti.
  • Un servizio ben testato rispetto a numerosi dispositivi HDMI-CEC già presenti sul mercato. Android ha condotto una ricerca rigorosa 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 allo standard in modo che funzioni con i prodotti che le persone già utilizzano.

Progettazione complessiva

HdmiControlService è collegato al resto del sistema come TV Input Framework (TIF), servizio audio e servizio alimentazione per implementare le varie funzionalità specificate dallo standard.

Vedere il diagramma seguente per una rappresentazione del passaggio da un controller CEC personalizzato a un'implementazione del più semplice livello di astrazione hardware HDMI-CEC (HAL).

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

Figura 1. Sostituzione del servizio di controllo HDMI

Implementazione

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

Immagine che mostra i dettagli del servizio HDMI Control

Figura 2. Dettagli del servizio di controllo HDMI

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

  • Una classe manager HdmiControlManager fornisce app privilegiate 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 tuo dispositivo sia un dispositivo sink HDMI o un dispositivo sorgente HDMI, i produttori del dispositivo devono impostare ro.hdmi.device_type in device.mk affinché HdmiControlService funzioni 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 con dissipatore HDMI, come i televisori a pannello, impostare:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Un controller CEC proprietario fornito dal produttore del dispositivo non può coesistere con HdmiControlService . Deve essere disabilitato o rimosso. I requisiti comuni per questo derivano dalla necessità di gestire comandi specifici del produttore. Il gestore 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, altrimenti il ​​dispositivo non sarà compatibile con Android.
  • L'accesso al servizio HDMI-CEC è custodito con il livello di protezione SignatureOrSystem . Solo i componenti di sistema o le app inserite in /system/priv-app possono accedere al servizio. Questo serve a proteggere il servizio dagli abusi da parte di app con intenti dannosi.

Android supporta il tipo TV/Display(0) , Playback device(4) che può emettere il comando One Touch Play per diventare la sorgente attiva e Audio System (5) che gestisce la modalità audio del sistema e ARC. Altri tipi di dispositivi (sintonizzatore e registratore) non sono attualmente supportati.

HDMI-CEC HAL

L'API HAL HDMI-CEC consente a HdmiControlService di utilizzare la risorsa hardware per inviare/ricevere comandi HDMI-CEC, configurare le impostazioni necessarie e (facoltativamente) comunicare con il microprocessore nella piattaforma sottostante che assumerà il controllo CEC mentre Android il sistema è in modalità standby.

Versione Caratteristiche File HAL
1.0 Configurare i dati HAL (indirizzi, funzionalità). 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

Le implementazioni dei dispositivi HDMI-CEC vengono testate e verificate tramite test CTS in base alla documentazione HDMI-CEC CTS .

HDMI CEC 2.0

I dispositivi Android sorgente (riproduzione) e sink (pannello TV) supportano HDMI-CEC 2.0. HDMI-CEC 2.0 offre una migliore interoperabilità tra i dispositivi HDMI, miglioramenti al passthrough del controllo remoto e test di certificazione più estesi. In generale, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, con conseguente minore traffico HDMI-CEC e interazioni più veloci.

Affinché un dispositivo supporti HDMI-CEC 2.0, la configurazione del dispositivo e dell'utente deve essere impostata 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

Il comportamento HDMI-CEC può essere configurato sia in fase di creazione (dagli OEM che utilizzano RRO) che in fase di esecuzione (da HdmiControlManager @SystemApi).

Esempi di impostazioni HDMI-CEC:

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

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