Lo standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) consente ai prodotti di consumo multimediali di comunicare e scambiarsi informazioni tra loro. HDMI-CEC supporta molte funzionalità, come il passthrough del telecomando e il controllo dell'audio di sistema, ma una delle più apprezzate è la Riproduzione con un solo tocco. One Touch Play consente a un dispositivo di origine multimediale di accendere la TV e di cambiare automaticamente la porta di ingresso, quindi 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 è in linea con il 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 entra in modalità di sospensione mentre è l'origine 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, pertanto i dispositivi non sempre si riconoscono e le funzionalità supportate variano da un dispositivo all'altro. A causa di questa variabilità, i consumatori non possono assumere con certezza che due prodotti che dichiarano di supportare il 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 riunisce tutti i dispositivi connessi e riduce al minimo i problemi di compatibilità.
Android ha creato un servizio di sistema chiamato HdmiControlService
per risolvere questi problemi.
Offrendo HdmiControlService
nell'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 su numerosi dispositivi HDMI-CEC già sul mercato. Android ha condotto ricerche rigorose sui problemi di compatibilità rilevati tra i prodotti e raccolto consigli utili da parte di implementatori di dispositivi esperti della tecnologia. Il servizio CEC è progettato per mantenere un equilibrio sano tra lo standard e le relative modifiche in modo che funzioni con i prodotti già in uso.
Design generale
HdmiControlService
è connesso al resto del sistema, come il framework di input TV (TIF), il servizio audio e il 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
Consulta il seguente diagramma per una visualizzazione dettagliata del servizio di controllo HDMI.

Figura 2. Dettagli del servizio di controllo HDMI
Di seguito sono riportati gli ingredienti chiave per un'implementazione corretta di HDMI-CEC su Android:
- Un'app di gestione
HdmiControlManager
fornisce le app con privilegi con l'API. I 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 è 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 devono aggiungere la seguente riga a 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 di destinazione 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 di origine HDMI, come i dispositivi over-the-top (OTT) o i decoder (STB), imposta:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Per i dispositivi di destinazione HDMI, come le TV a pannello, 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 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 compito è 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 è protetto 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 da comportamenti illeciti da parte di app con intenti dannosi.
Android supporta il tipo TV/Display(0)
, Playback
device(4)
che può emettere il comando di riproduzione con un solo tocco per diventare la fonte attiva e Audio System (5)
che gestisce la modalità audio di sistema e ARC.
Al momento non sono supportati altri tipi di dispositivi (tuner e registratori).
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 di base che assumerà il controllo CEC mentre il sistema Android è in modalità standby.
Versione | Funzionalità | File HAL |
---|---|---|
1.0 | Configura i dati HAL (indirizzi, elementi). Invia comandi HDMI-CEC. Registra il callback per ricevere i comandi HDMI-CEC e gli eventi hotplug. | IHdmiCec.hal IHdmiCecCallback.hal |
1,1 | Introduzione ai 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 di origine (riproduzione) e di destinazione (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ù approfonditi. In genere, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, il che si traduce in un minor traffico HDMI-CEC e in interazioni più rapide.
Affinché un dispositivo supporti HDMI-CEC 2.0, la configurazione del dispositivo e dell'utente deve essere impostata sull'utilizzo di HDMI-CEC 2.0. L'implementazione dell'HAL deve anche segnalare il supporto di HDMI-CEC 2.0 nelle chiamate a IHdmiCec#getCecVersion
.
Configurazione CEC
Il comportamento HDMI-CEC può essere configurato sia in fase di compilazione (dagli OEM che utilizzano RRO) sia in fase di esecuzione
(da HdmiControlManager
@SystemApi).
Esempi di impostazioni HDMI-CEC:
Impostazione | Opzione |
---|---|
Indica se HDMI-CEC è attivo o disattivato. | Abilitato Disabilitato |
Ambito dei messaggi di controllo dell'alimentazione HDMI-CEC inviati da un dispositivo di riproduzione. | Solo alla TV Alla TV e all'impianto audio Trasmissione Nessuno |
Per ogni impostazione attualmente disponibile, le opzioni consentite possono essere sottoposte a query dalle app in fase di esecuzione.