La norme HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) permet aux produits multimédias grand public de communiquer et d'échanger des informations entre eux. Le HDMI-CEC est compatible avec de nombreuses fonctionnalités, comme la transmission de la télécommande et le contrôle audio du système, mais l'une des plus populaires est la lecture en un clic. La fonctionnalité One-Touch Play permet à un appareil source multimédia d'allumer le téléviseur et de changer automatiquement de port d'entrée. Vous n'avez donc pas besoin de chercher la télécommande du téléviseur pour passer de votre Chromecast à votre lecteur Blu-ray.
Avec Android 12, le contrôle de l'alimentation de l'écran connecté en HDMI est aligné sur celui de l'écran interne. Lorsqu'un appareil de lecture HDMI se réactive, il tente de réactiver le téléviseur connecté et de devenir la source active actuelle via la lecture One Touch HDMI-CEC. Si l'appareil se met en veille alors qu'il est la source active actuelle, il tente ensuite d'éteindre le téléviseur connecté.
La compatibilité avec le HDMI-CEC est généralement facultative. Toutefois, la plupart des fabricants ont adopté le HDMI-CEC pour que leurs appareils fonctionnent avec ceux d'autres entreprises. Chaque fabricant implémente la norme HDMI-CEC de manière différente. Les appareils ne se comprennent donc pas toujours entre eux, et les fonctionnalités compatibles varient d'un appareil à l'autre. En raison de cette variation, les consommateurs ne peuvent pas supposer que deux produits qui affirment être compatibles avec la norme CEC le sont réellement.
La prise en charge de la norme HDMI-CEC 2.0 permet d'améliorer la compatibilité entre les appareils HDMI si l'appareil émetteur et l'appareil récepteur sont compatibles avec cette version de la norme.
Solution
Avec l'introduction du framework d'entrée Android TV (TIF), HDMI-CEC rassemble tous les appareils connectés et minimise les problèmes de compatibilité.
Android a créé un service système appelé HdmiControlService
pour atténuer ces problèmes.
En proposant HdmiControlService
dans l'écosystème Android, Android espère fournir :
- Une implémentation standard du HDMI-CEC pour tous les fabricants, ce qui réduira l'incompatibilité des appareils. Auparavant, les fabricants devaient développer leurs propres implémentations HDMI-CEC ou utiliser des solutions tierces.
- Un service qui a été testé de manière approfondie sur de nombreux appareils HDMI-CEC déjà disponibles sur le marché. Android a mené des recherches rigoureuses sur les problèmes de compatibilité rencontrés par les produits et a recueilli des conseils utiles auprès des implémenteurs d'appareils expérimentés dans cette technologie. Le service CEC est conçu pour maintenir un équilibre sain entre la norme et les modifications apportées à cette norme afin qu'elle fonctionne avec les produits que les utilisateurs utilisent déjà.
Aspect général
HdmiControlService
est connecté au reste du système, comme le framework TV Input (TIF), le service audio et le service d'alimentation, pour implémenter les différentes fonctionnalités spécifiées par la norme.
Le schéma suivant illustre le passage d'un contrôleur CEC personnalisé à une implémentation de la couche d'abstraction matérielle (HAL) HDMI-CEC plus simple.

Figure 1 : Remplacement du service de contrôle HDMI
Implémentation
Le schéma suivant présente une vue détaillée du service de contrôle HDMI.

Figure 2. Détails du service de contrôle HDMI
Voici les éléments clés d'une implémentation HDMI-CEC Android appropriée :
- Une classe de gestionnaire
HdmiControlManager
fournit l'API aux applications privilégiées. Les services système tels que le service TV Input Manager et le service audio peuvent utiliser le service directement. - Le service est conçu pour permettre l'hébergement de plusieurs types d'appareils logiques.
- Le HDMI-CEC est connecté au matériel via une couche d'abstraction matérielle (HAL, Hardware Abstraction Layer) pour simplifier la gestion des différences entre les appareils au niveau du protocole et des mécanismes de signalisation. Les fabricants d'appareils peuvent utiliser la définition HAL pour implémenter la couche HAL.
Remarque : Les fabricants d'appareils doivent ajouter la ligne suivante dans PRODUCT_COPY_FILES
dans device.mk
.
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
Selon que votre appareil est un appareil récepteur ou source HDMI, les fabricants d'appareils doivent définir ro.hdmi.device_type
dans device.mk
pour que HdmiControlService
fonctionne correctement.
Pour les appareils sources HDMI, tels que les appareils Over the Top (OTT) ou les boîtiers décodeurs (STB), définissez les paramètres suivants :
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Pour les appareils récepteurs HDMI, comme les téléviseurs à écran plat, définissez :
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Un contrôleur CEC propriétaire fourni par le fabricant de l'appareil ne peut pas coexister avec
HdmiControlService
. Il doit être désactivé ou supprimé. Les exigences courantes à cet égard découlent de la nécessité de gérer les commandes spécifiques au fabricant. Le gestionnaire de commandes spécifique au fabricant doit être intégré au service en l'étendant/le modifiant. Cette tâche est laissée au fabricant de l'appareil et n'est pas spécifiée par Android. Notez que toute modification apportée au service pour les commandes spécifiques au fabricant ne doit pas interférer avec la façon dont les commandes standards sont traitées, sinon l'appareil ne sera pas compatible avec Android. - L'accès au service HDMI-CEC est protégé par le niveau de protection
SignatureOrSystem
. Seuls les composants système ou les applications placées dans/system/priv-app
peuvent accéder au service. Cela permet de protéger le service contre les utilisations abusives par des applications malveillantes.
Android est compatible avec les types TV/Display(0)
et Playback
device(4)
, qui peuvent émettre la commande One Touch Play pour devenir la source active, et Audio System (5)
, qui gère le mode audio du système et l'ARC.
Les autres types d'appareils (tuner et enregistreur) ne sont actuellement pas pris en charge.
HDMI-CEC HAL
L'API HDMI-CEC HAL permet à HdmiControlService
d'utiliser la ressource matérielle pour envoyer/recevoir des commandes HDMI-CEC, configurer les paramètres nécessaires et (éventuellement) communiquer avec le microprocesseur de la plate-forme sous-jacente qui prendra le relais du contrôle CEC lorsque le système Android sera en mode veille.
Version | Fonctionnalités | Fichiers HAL |
---|---|---|
1.0 | Configurer les données HAL (adresses, fonctionnalités). Envoyez des commandes HDMI-CEC. Enregistrez un rappel pour recevoir les commandes HDMI-CEC et les événements de branchement à chaud. | IHdmiCec.hal IHdmiCecCallback.hal |
1.1 | Présentation des types HDMI-CEC 2.0 | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Tests
Les implémentations HDMI-CEC des appareils sont testées et vérifiées à l'aide des tests CTS, conformément à la documentation CTS HDMI-CEC.
HDMI-CEC 2.0
Les appareils sources (lecture) et récepteurs (écran TV) Android sont compatibles avec HDMI-CEC 2.0. HDMI-CEC 2.0 offre une meilleure interopérabilité entre les appareils HDMI, des améliorations pour la transmission de la télécommande et des tests de certification plus complets. En général, les interactions HDMI-CEC 2.0 avec d'autres appareils sont plus efficaces, ce qui réduit le trafic HDMI-CEC et accélère les interactions.
Pour qu'un appareil soit compatible avec HDMI-CEC 2.0, l'appareil et la configuration utilisateur doivent être définis pour utiliser HDMI-CEC 2.0. L'implémentation HAL doit également indiquer la compatibilité avec HDMI-CEC 2.0 dans les appels à IHdmiCec#getCecVersion
.
Configuration CEC
Le comportement HDMI-CEC peut être configuré à la fois au moment de la compilation (par les OEM à l'aide des RRO) et au moment de l'exécution (par HdmiControlManager
@SystemApi).
Exemples de paramètres HDMI-CEC :
Paramètre | Option |
---|---|
Indique si le HDMI-CEC est activé ou désactivé. | Activé Désactivé |
Portée des messages de contrôle de l'alimentation HDMI-CEC envoyés par un appareil de lecture. | Sur le téléviseur uniquement Sur le téléviseur et le système audio Diffusion Aucun |
Les applications peuvent interroger chaque paramètre actuellement disponible et les options autorisées au moment de l'exécution.