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 scambiarsi informazioni tra loro. HDMI-CEC supporta molte funzionalità, ad esempio Remote Control Passthrough e System Audio Control, ma uno dei modelli è One Touch Play. One Touch Play consente a un dispositivo di origine multimediale di accendere la TV e a cambiare la porta di ingresso automaticamente, così non dovrai cercare la TV telecomando 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à 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 per HDMI-CEC 2.0 migliora la compatibilità tra i dispositivi HDMI sia l'invio e la 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'ambito di Android Android, Android spera di fornire:

  • Un'implementazione standard di HDMI-CEC per tutti i produttori, che ridurre l'incompatibilità dei dispositivi. In precedenza, i produttori dovevano sviluppare proprie implementazioni di HDMI-CEC o utilizzare soluzioni di terze parti.
  • Un servizio già testato su numerosi dispositivi HDMI-CEC nel 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, ad esempio TV Input Framework (TIF), servizio audio e servizio Power per implementare le varie caratteristiche 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.

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

Figura 1. Servizio di controllo HDMI sostituzione

Implementazione

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

Immagine che mostra i dettagli del servizio di controllo HDMI

Figura 2. Dettagli di HDMI Control Service

Di seguito sono riportati gli ingredienti chiave per un'implementazione corretta di HDMI-CEC su Android:

  • Un gestore HdmiControlManager offre 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 seguendo la riga in PRODUCT_COPY_FILES tra 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 un dispositivo di origine HDMI, i produttori di dispositivi devono impostare ro.hdmi.device_type 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 disattivata o rimossa. Comuni i requisiti provengono dalla necessità di gestire le specifiche tramite comandi SQL. 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 per i comandi specifici del produttore non devono interferire con il modo Vengono gestiti i comandi standard o il dispositivo non sarà compatibile con Android.
  • L'accesso al servizio HDMI-CEC è protetto con il livello di protezioneSignatureOrSystem. 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 One Touch Play per diventare attivo sorgente e Audio System (5), che gestisce la modalità audio del sistema e ARC. Altri tipi di dispositivi (Tuner e Registratore) non sono attualmente supportati.

HAL HDMI-CEC

L'API HDMI-CEC HAL consente a HdmiControlService di utilizzare i risorse hardware per inviare/ricevere comandi HDMI-CEC, configurare le impostazioni necessarie e (facoltativamente) comunicare con il microprocessore nella piattaforma sottostante prenderà 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 Illustrare i tipi di 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 source (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ù approfonditi. In generale, le interazioni HDMI-CEC 2.0 con altri dispositivi sono più efficienti, generando meno traffico HDMI-CEC e interazioni più veloci.

Affinché un dispositivo supporti HDMI-CEC 2.0, è necessario che la configurazione del dispositivo e dell'utente sia impostata per utilizzare 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 al momento della build (dagli OEM che utilizzano RRO) sia al runtime (di 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 all'impianto audio
Trasmissione
Nessuno

Per ogni impostazione attualmente disponibile, le opzioni consentite possono essere sottoposte a query dalle app in fase di esecuzione.