Lo standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) consente ai prodotti di consumo multimediali di comunicare e scambiarsi informazioni. HDMI-CEC supporta molte funzionalità, come il trasferimento del controllo remoto e il controllo audio del sistema, ma una delle più popolari è la riproduzione con un solo tocco. One Touch Play consente a un dispositivo sorgente multimediale di accendere la TV e cambiare automaticamente la porta di ingresso, così non devi cercare il telecomando della TV per passare da Chromecast al lettore Blu-ray.
Con Android 12, il controllo dell'alimentazione del display collegato tramite HDMI è allineato 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 standby 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 loro dispositivi funzionino con quelli di altre aziende. Ogni produttore implementa lo standard HDMI-CEC in modi diversi, quindi i dispositivi non sempre si comprendono e le funzionalità supportate variano da dispositivo a dispositivo. A causa di questa varianza, i consumatori non possono presumere in modo sicuro che due prodotti che dichiarano di supportare CEC siano completamente compatibili.
Il supporto di HDMI-CEC 2.0 contribuisce a migliorare la compatibilità tra i dispositivi HDMI se sia il dispositivo di invio sia quello di ricezione supportano questa versione dello standard.
Soluzione
Con l'introduzione di Android TV Input Framework (TIF), HDMI-CEC
raggruppa tutti i dispositivi connessi e riduce al minimo i problemi di compatibilità.
Android ha creato un servizio di sistema chiamato HdmiControlService
per
alleviare questi problemi.
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 testato a fondo su numerosi dispositivi HDMI-CEC già in commercio. 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 equilibrio sano tra lo standard e le modifiche apportate a questo standard in modo che funzioni con i prodotti già utilizzati dagli utenti.
Design complessivo
HdmiControlService
è connesso al resto del sistema, ad esempio
TV Input Framework (TIF), servizio audio e servizio di alimentazione, per implementare le
varie funzionalità specificate dallo standard.
Consulta il seguente diagramma per una rappresentazione del passaggio da un controller CEC personalizzato a un'implementazione del livello di astrazione hardware (HAL) HDMI-CEC più semplice.

Figura 1. Sostituzione del servizio di controllo HDMI
Implementazione
Per una visualizzazione dettagliata del servizio di controllo HDMI, consulta il seguente diagramma.

Figura 2. Dettagli del servizio di controllo HDMI
Ecco gli ingredienti chiave per una corretta implementazione di HDMI-CEC per Android:
- Una classe di gestione
HdmiControlManager
fornisce alle app con privilegi l'API. Servizi di sistema come il servizio TV Input Manager e il servizio audio possono utilizzare il servizio direttamente. - Il servizio è progettato per consentire l'hosting di più di un tipo di dispositivo logico.
- HDMI-CEC è connesso all'hardware tramite un livello di astrazione hardware (HAL) per semplificare la gestione delle differenze tra i meccanismi di protocollo e 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 devono aggiungere la
riga seguente 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 sia un dispositivo sink HDMI o una sorgente HDMI,
i produttori di dispositivi 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), imposta:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Per i dispositivi sink HDMI, come le TV a schermo piatto, imposta:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Un controller CEC proprietario fornito dal produttore del dispositivo non può coesistere
con
HdmiControlService
. Deve essere disattivato o rimosso. I requisiti comuni derivano dalla necessità di gestire comandi specifici del produttore. Il gestore di 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 la gestione dei comandi standard, altrimenti il dispositivo non sarà compatibile con Android. - L'accesso al servizio HDMI-CEC è protetto dal 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 da comportamenti illeciti da parte di app con intenti dannosi.
Android supporta i tipi TV/Display(0)
, Playback
device(4)
, che può inviare il comando One Touch Play per diventare la sorgente attiva, e Audio System (5)
, che gestisce la modalità audio di sistema e ARC.
Al momento non sono supportati altri tipi di dispositivi (sintonizzatore e registratore).
HAL HDMI-CEC
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 il sistema Android è in modalità standby.
Versione | Funzionalità | File HAL |
---|---|---|
1.0 | Configura i dati HAL (indirizzi, funzionalità). Inviare comandi HDMI-CEC. Registra il callback per ricevere comandi HDMI-CEC ed eventi hotplug. | IHdmiCec.hal IHdmiCecCallback.hal |
1.1 | Introduzione dei tipi HDMI-CEC 2.0 | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Test
Le implementazioni HDMI-CEC dei dispositivi vengono testate e verificate tramite i test CTS in base alla documentazione CTS HDMI-CEC.
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 telecomando e test di certificazione più estesi. In genere, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, con conseguente riduzione del traffico HDMI-CEC e interazioni più rapide.
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 anche segnalare il supporto di HDMI-CEC 2.0
nelle chiamate a IHdmiCec#getCecVersion
.
Configurazione CEC
Il comportamento di HDMI-CEC può essere configurato sia in fase di compilazione (dai produttori OEM che utilizzano RRO) sia in fase di runtime
(da HdmiControlManager
@SystemApi).
Esempi di impostazioni HDMI-CEC:
Impostazione | Opzione |
---|---|
Indica se HDMI-CEC è attivato o disattivato. | Attivato Disabilitato |
Ambito dei messaggi di controllo dell'alimentazione HDMI-CEC inviati da un dispositivo di riproduzione. | Solo alla TV A TV e sistema audio Trasmissione Nessuno |
Per ogni impostazione attualmente disponibile, le opzioni consentite possono essere richieste dalle app in fase di runtime.