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 passthrough de la télécommande et le contrôle audio du système, mais l'une des plus populaires est la lecture à une touche. One Touch Play permet à un périphérique multimédia d'allumer le téléviseur et bascule automatiquement le port d'entrée pour vous éviter d'avoir à rechercher le 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 est réactivé, il tente pour activer le téléviseur connecté et devenir la source active actuelle via HDMI CEC One Touch Play. Si l'appareil se met en veille alors qu'il s'agit de la source active, il tente ensuite de s'éteindre la TV connectée.

La prise en charge du 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 met en œuvre le protocole HDMI-CEC standard de différentes manières, de sorte que les appareils ne se comprennent pas toujours et ne prennent pas les fonctionnalités 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 compatibilité HDMI-CEC 2.0 améliore la compatibilité entre les appareils HDMI lorsque les les appareils d’envoi et de réception prennent en charge 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 fournir :

  • Une implémentation standard du HDMI-CEC pour tous les fabricants, qui réduire 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é sur de nombreux appareils HDMI-CEC déjà disponibles sur le marché. Android a mené des recherches rigoureuses sur la compatibilité problèmes détectés parmi les produits et collecte de conseils utiles sur l'appareil 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 le 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.

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.

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

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

Image montrant les détails du service de contrôle HDMI

Figure 2. Informations sur le 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 appareil.
  • Le HDMI-CEC est connecté au matériel via une couche d'abstraction matérielle (HAL) pour simplifier la gestion des différences entre le protocole et les mécanismes de signalisation des 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 récepteur HDMI ou un périphérique source HDMI, les fabricants d'appareils doivent définir ro.hdmi.device_type dans device.mk pour HdmiControlService fonctionne correctement.

Pour les appareils sources HDMI, tels que les appareils de service de distribution par contournement (OTT, over-the-top) ou de boîtier décodeur, 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. 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/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 contre les utilisations abusives d'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 pris en charge.

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 Configurer les données HAL (adresses, caractéristiques) 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 <ph type="x-smartling-placeholder"></ph> Documentation CTS HDMI-CEC

HDMI-CEC 2.0

Les appareils Android source (lecture) et puits (écran de télévision) 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 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, sa configuration et celle de l'utilisateur doivent être configuré pour utiliser HDMI-CEC 2.0. L'implémentation de la HAL doit également indiquer la compatibilité avec HDMI-CEC 2.0. dans les appels à IHdmiCec#getCecVersion.

Configuration du 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ée
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.