Lo standard HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) consente a più prodotti di consumo multimediali di comunicare e scambiare 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 è One Touch Play. 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 attiva, tenta di riattivare la TV connessa e diventare la fonte attiva corrente tramite la riproduzione one-touch HDMI CEC. Se il dispositivo entra in modalità sospensione mentre è l'origine attiva corrente, tenta di spegnere la TV connessa.
Il supporto della tecnologia 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 comprendono e le funzionalità supportate variano a seconda del dispositivo. A causa di questa variazione, i consumatori non possono pensare con sicurezza che due prodotti che rivendicano il supporto 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
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 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 TIF (TV Input Framework), 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 più semplice HAL (HAL).
Implementazione
Consulta il seguente diagramma per una visualizzazione dettagliata 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. I produttori di dispositivi possono usare la definizione HAL 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 sorgente HDMI, ad esempio i dispositivi over-the-top (OTT) o 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 disattivata o rimossa. 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 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. allo scopo di proteggere il servizio da comportamenti illeciti da parte di app con intento dannoso.
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 HDMI-CEC HAL 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, 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 sorgente (riproduzione) e di destinazione (pannello TV) supportano HDMI-CEC 2.0. HDMI-CEC 2.0 offre una migliore interoperabilità tra dispositivi HDMI, miglioramenti al Remote Control Passthrough e test di certificazione più completi. In generale, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, quindi si ottiene un volume inferiore di 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 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 la tecnologia HDMI-CEC è attivata o disattivata. | Abilitato Disabilitato |
Ambito dei messaggi relativi al controllo alimentazione HDMI-CEC inviati da un dispositivo di riproduzione. | Solo alla TV Alla TV e al sistema audio Trasmetti Nessuno |
Per ogni impostazione attualmente disponibile, le opzioni consentite possono essere sottoposte a query dalle app in fase di esecuzione.