Service de contrôle HDMI-CEC

La norme HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) permet aux produits grand public multimédia de communiquer et d'échanger des informations entre eux. HDMI-CEC prend en charge de nombreuses fonctionnalités, telles que le relais de contrôle à distance et le contrôle audio du système, mais l'un des plus populaires est One Touch Play. One Touch Play permet à un appareil source multimédia d'allumer le téléviseur et de changer son port d'entrée automatiquement, de sorte que vous n'avez pas à rechercher la télécommande du téléviseur pour passer de votre Chromecast au lecteur Blu-ray.

Avec Android 12, le contrôle de l'alimentation de l'écran connecté par HDMI s'aligne sur le contrôle de l'alimentation de l'écran interne. Lorsqu'un appareil de lecture HDMI se réveille, il tente de réveiller le téléviseur connecté et de devenir la source active actuelle via HDMI CEC One Touch Play. Si l'appareil se met en veille alors qu'il est la source active actuelle, il tente alors d'éteindre le téléviseur connecté.

La prise en charge de HDMI-CEC est généralement facultative. Cependant, la plupart des fabricants ont adopté HDMI-CEC afin que leurs appareils fonctionnent avec les appareils d'autres entreprises. Chaque fabricant implémente la norme HDMI-CEC de différentes manières, de sorte que les appareils ne se comprennent pas toujours et les fonctionnalités prises en charge varient d'un appareil à l'autre. En raison de cet écart, les consommateurs ne peuvent pas supposer en toute sécurité que deux produits qui revendiquent le support CEC sont complètement compatibles.

La prise en charge de HDMI-CEC 2.0 contribue à améliorer la compatibilité entre les appareils HDMI si l'appareil d'envoi et de réception prend en charge cette version de la norme.

La solution

Avec l'introduction de l'Android TV Input Framework (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 points douloureux.

En proposant HdmiControlService dans le cadre de l'écosystème Android, Android espère fournir :

  • Une implémentation standard de HDMI-CEC pour tous les fabricants, ce qui réduira l'incompatibilité des appareils. Auparavant, les fabricants devaient développer leurs propres implémentations de HDMI-CEC ou utiliser des solutions tierces.
  • Un service bien testé par rapport à de nombreux appareils HDMI-CEC déjà sur le marché. Android a mené des recherches rigoureuses sur les problèmes de compatibilité trouvés parmi les produits et a recueilli des conseils utiles auprès des implémenteurs d'appareils expérimentés dans la 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 gens utilisent déjà.

Conception générale

HdmiControlService est connecté au reste du système comme TV Input Framework (TIF), le service audio et le service d'alimentation pour implémenter les différentes fonctionnalités spécifiées par la norme.

Voir le schéma suivant pour une représentation du passage d'un contrôleur CEC personnalisé à une implémentation de la couche d'abstraction matérielle (HAL) HDMI-CEC plus simple.

Diagramme qui montre comment HDMI-CEC a été implémenté avant et après Android 5.0

Figure 1. Remplacement du service de contrôle HDMI

Mise en œuvre

Voir le schéma suivant pour une vue détaillée du service de contrôle HDMI.

Image qui montre comment les détails du service de contrôle HDMI

Figure 2. Détails du service de contrôle HDMI

Voici les ingrédients clés d'une bonne implémentation Android HDMI-CEC :

  • Une classe de gestionnaire HdmiControlManager fournit des applications privilégiées avec l'API. 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 de périphériques logiques.
  • HDMI-CEC est connecté au matériel via une couche d'abstraction matérielle (HAL) pour simplifier la gestion des différences de protocole et des mécanismes de signalisation entre les appareils. La définition HAL est disponible pour les fabricants d'appareils à utiliser 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 HDMI ou un appareil source HDMI, les fabricants d'appareils doivent définir ro.hdmi.device_type dans device.mk pour que HdmiControlService fonctionne correctement.

Pour les appareils source HDMI, tels que les appareils Over the Top (OTT) ou Set-top box (STB), réglez :

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Pour les appareils récepteurs HDMI, comme les téléviseurs à écran, réglez :

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 pour cela proviennent 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/modifiant. Ce travail est laissé au fabricant de l'appareil et n'est pas spécifié par Android. Notez que toute modification apportée au service pour les commandes spécifiques au fabricant ne doit pas interférer avec la manière dont les commandes standard sont géré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. Il s'agit de protéger le service contre les abus par des applications à l'intention malveillante.

Android prend en charge le type TV/Display(0) , le Playback device(4) qui peut émettre la commande One Touch Play pour devenir la source active et le 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 au 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 en charge le contrôle CEC pendant qu'Android le système est en mode veille.

Version Fonctionnalités Fichiers HAL
1.0 Configurer les données HAL (adresses, fonctionnalités). Envoyez des commandes HDMI-CEC. Enregistrez le rappel pour recevoir les commandes HDMI-CEC et les événements hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Présentation des types HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Essai

Les implémentations HDMI-CEC des appareils sont testées et vérifiées via des tests CTS conformément à la documentation HDMI-CEC CTS .

HDMI-CEC 2.0

Les appareils Android source (lecture) et récepteur (panneau TV) prennent en charge HDMI-CEC 2.0. HDMI-CEC 2.0 offre une meilleure interopérabilité entre les appareils HDMI, des améliorations du contrôle à distance et des tests de certification plus approfondis. Généralement, les interactions HDMI-CEC 2.0 avec d'autres appareils sont plus efficaces, ce qui entraîne moins de trafic HDMI-CEC ainsi que des interactions plus rapides.

Pour qu'un appareil prenne en charge HDMI-CEC 2.0, la configuration de l'appareil et de l'utilisateur doit être définie pour utiliser HDMI-CEC 2.0. L'implémentation HAL doit également signaler la prise en charge de HDMI-CEC 2.0 dans les appels à IHdmiCec#getCecVersion .

Configuration CCE

Le comportement HDMI-CEC peut être configuré à la fois au moment de la construction (par les OEM utilisant des RRO) et de l'exécution (par HdmiControlManager @SystemApi).

Exemples de paramètres HDMI-CEC :

Paramètre Option
Si le HDMI-CEC est activé ou désactivé. Activé
Handicapé
Portée des messages de contrôle de puissance HDMI-CEC envoyés par un appareil de lecture. Vers la télévision uniquement
Vers le téléviseur et le système audio
Diffuser
Aucun

Pour chaque paramètre actuellement disponible et les options autorisées peuvent être interrogées par les applications au moment de l'exécution.