Service de contrôle HDMI-CEC

La norme HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) permet aux produits multimédia grand public de communiquer et d'échanger des informations entre eux. HDMI-CEC prend en charge de nombreuses fonctionnalités, telles que le relais de télécommande et le contrôle audio du système, mais l'une 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 automatiquement son port d'entrée, vous n'avez donc pas besoin de 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é via 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é le HDMI-CEC afin que leurs appareils fonctionnent avec les appareils d'autres sociétés. Chaque fabricant implémente la norme HDMI-CEC de différentes manières, de sorte que les appareils ne se comprennent pas toujours et que les fonctionnalités prises en charge varient d'un appareil à l'autre. En raison de cette différence, les consommateurs ne peuvent pas supposer en toute sécurité que deux produits revendiquant le support CEC sont totalement 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.

Solution

Avec l'introduction d'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 problèmes.

En proposant HdmiControlService dans le cadre de 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 recourir à des solutions tierces.
  • Un service qui a fait ses preuves sur de nombreux appareils HDMI-CEC déjà présents sur le marché. Android a mené des recherches rigoureuses sur les problèmes de compatibilité détectés entre les produits et a collecté des conseils utiles auprès des développeurs 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 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 Power pour implémenter les différentes fonctionnalités spécifiées par la norme.

Consultez le diagramme 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 montrant 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

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

Image illustrant 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 d'héberger 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 que les fabricants d'appareils puissent l'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 périphérique récepteur HDMI ou un périphérique source HDMI, les fabricants de périphériques 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), définissez :

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Pour les appareils à récepteur HDMI, comme les téléviseurs à panneau, 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 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/en le 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 façon dont les commandes standards sont gérées, sinon l'appareil ne sera pas compatible Android.
  • L'accès au service HDMI-CEC est gardé avec le niveau de protection SignatureOrSystem . Seuls les composants du 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 d’applications malveillantes.

Android prend en charge le type TV/Display(0) , Playback device(4) qui peut é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 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 que l'Android le système est en mode veille.

Version Caractéristiques Fichiers HAL
1.0 Configurez 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 Remote Control Passthrough 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 de HAL doit également signaler la prise en charge de HDMI-CEC 2.0 dans les appels à IHdmiCec#getCecVersion .

Configuration CEC

Le comportement HDMI-CEC peut être configuré à la fois au moment de la construction (par les OEM utilisant des RRO) et au moment 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é
Désactivé
Portée des messages de contrôle d'alimentation 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 autorisé, les options peuvent être interrogées par les applications au moment de l'exécution.