Service de contrôle HDMI-CEC

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, telles que le contournement de la télécommande et le contrôle audio du système, mais l'une des plus populaires est One Touch Play. La lecture en un seul geste 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é par HDMI s'aligne sur le contrôle de l'alimentation de l'écran interne. Lorsqu'un appareil de lecture HDMI est activé, il tente de réactiver le téléviseur connecté et de devenir la source active actuelle via HDMI CEC One Touch Play. Si l'appareil passe en veille alors qu'il est la source active, il tente 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 différentes manières. Par conséquent, les appareils ne se comprennent pas toujours et les fonctionnalités compatibles varient d'un appareil à l'autre. En raison de cette variance, les consommateurs ne peuvent pas supposer en toute sécurité que deux produits qui prétendent être compatibles avec le CEC sont complètement compatibles.

La prise en charge de HDMI-CEC 2.0 améliore la compatibilité entre les appareils HDMI si les appareils d'envoi et de réception sont compatibles avec cette version de la norme.

Solution

Avec l'introduction du framework d'entrée Android TV (TIF), le 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 difficultés.

En proposant HdmiControlService dans l'écosystème Android, Android espère offrir les avantages suivants:

  • Une implémentation standard du HDMI-CEC pour tous les fabricants, ce qui réduit l'incompatibilité des appareils. Auparavant, les fabricants devaient développer leurs propres implémentations du HDMI-CEC ou utiliser des solutions tierces.
  • Un service testé avec de nombreux appareils HDMI-CEC déjà sur le marché. Android a mené des recherches rigoureuses sur les problèmes de compatibilité détectés entre les produits et a recueilli des conseils utiles auprès des implémentateurs 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'il fonctionne avec les produits que les utilisateurs utilisent déjà.

Aspect général

HdmiControlService est connecté au reste du système, comme TV Input Framework (TIF), le service audio et le service Power pour mettre en œuvre les différentes fonctionnalités spécifiées par la norme.

Consultez 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.

Schéma illustrant l'implémentation du HDMI-CEC avant et après Android 5.0

Figure 1 : Remplacement du service de contrôle HDMI

Implémentation

Pour obtenir une vue détaillée du service de contrôle HDMI, consultez le schéma suivant.

Image montrant 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 HDMI-CEC d'Android:

  • 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) afin de simplifier la gestion des différences de protocole et des mécanismes de signalement entre les appareils. La définition de la HAL est disponible pour les fabricants d'appareils afin de mettre en œuvre 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 de réception HDMI ou une 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 OTT (Over the Top) ou les boîtiers décodeurs, définissez les paramètres suivants:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Pour les appareils de réception HDMI, comme les téléviseurs à écran plat, définissez les paramètres suivants:

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. Elle doit être désactivée ou supprimée. 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 ou en 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 manière dont les commandes standards 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. 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 de lecture à un bouton pour devenir la source active, et Audio System (5), qui gère le mode audio système et ARC. Les autres types d'appareils (tuner et enregistreur) ne sont actuellement pas compatibles.

HAL HDMI-CEC

L'API HAL HDMI-CEC 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 le contrôle du CEC lorsque le système Android est en mode veille.

Version Fonctionnalités Fichiers HAL
1.0 Configurez les données HAL (adresses, éléments géographiques). Envoyer des commandes HDMI-CEC Enregistrez un rappel pour recevoir les commandes HDMI-CEC et les événements de hotplug. 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 validées via des tests CTS conformément à la documentation CTS HDMI-CEC.

HDMI-CEC 2.0

Les appareils Android source (lecture) et puits (panneau TV) sont compatibles avec HDMI-CEC 2.0. HDMI-CEC 2.0 offre une meilleure interopérabilité entre les appareils HDMI, des améliorations du passthrough de la télécommande et des tests de certification plus approfondis. En règle générale, les interactions HDMI-CEC 2.0 avec d'autres appareils sont généralement 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, la configuration de l'appareil et de l'utilisateur doit être définie pour utiliser HDMI-CEC 2.0. L'implémentation du 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é au moment de la compilation (par les OEM à l'aide de 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é
Champ d'application des messages de contrôle de l'alimentation HDMI-CEC envoyés par un appareil de lecture. À la télévision uniquement
À la télévision et au système audio
Diffusion
Aucun

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