El estándar de Control de productos electrónicos de consumo de la Interfaz multimedia de alta definición (HDMI-CEC) permite que los productos de consumo multimedia se comuniquen y se intercambien información entre sí. HDMI-CEC admite muchas funciones, como la transmisión de control remoto y el control de audio del sistema, pero una de las más populares es la reproducción con un solo toque. La reproducción con un solo toque permite que un dispositivo de fuente de contenido multimedia encienda la TV y cambie su puerto de entrada automáticamente, por lo que no tienes que buscar el control remoto de la TV para cambiar de Chromecast al reproductor Blu-ray.
Con Android 12, el control de encendido y apagado de la pantalla conectada por HDMI se alinea con el control de encendido y apagado de la pantalla interna. Cuando se activa un dispositivo de reproducción HDMI, intenta activar la TV conectada y convertirse en la fuente activa actual a través de la reproducción con un solo toque de HDMI CEC. Si el dispositivo se suspende mientras es la fuente activa actual, intenta apagar la TV conectada.
Por lo general, la compatibilidad con HDMI-CEC es opcional. Sin embargo, la mayoría de los fabricantes adoptaron HDMI-CEC para que sus dispositivos funcionen con los de otras empresas. Cada fabricante implementa el estándar HDMI-CEC de diferentes maneras, por lo que los dispositivos no siempre se entienden entre sí y las funciones compatibles varían entre los dispositivos. Debido a esta variación, los consumidores no pueden suponer con seguridad que dos productos que afirman tener compatibilidad con CEC sean completamente compatibles.
La compatibilidad con HDMI-CEC 2.0 ayuda a mejorar la compatibilidad entre los dispositivos HDMI si el dispositivo de envío y el de recepción admiten esta versión del estándar.
Solución
Con la introducción del framework de entrada de Android TV (TIF), HDMI-CEC reúne todos los dispositivos conectados y minimiza los problemas de compatibilidad.
Android creó un servicio del sistema llamado HdmiControlService para aliviar estos problemas.
Al ofrecer HdmiControlService como parte del ecosistema de Android, Android espera proporcionar lo siguiente:
- Una implementación estándar de HDMI-CEC para todos los fabricantes, lo que reducirá la incompatibilidad de dispositivos. Anteriormente, los fabricantes debían desarrollar sus propias implementaciones de HDMI-CEC o usar soluciones de terceros.
- Un servicio que se probó correctamente en numerosos dispositivos HDMI-CEC que ya están en el mercado. Android realizó una investigación rigurosa sobre los problemas de compatibilidad que se encuentran entre los productos y recopiló consejos útiles de implementadores de dispositivos con experiencia en la tecnología. El servicio CEC está diseñado para mantener un equilibrio saludable entre el estándar y las modificaciones de ese estándar para que funcione con los productos que las personas ya usan.
Diseño general
HdmiControlService está conectado con el resto del sistema, como el framework de entrada de TV (TIF), el servicio de audio y el servicio de energía para implementar las diversas funciones que especifica el estándar.
Consulta el siguiente diagrama para ver una representación del cambio de un controlador CEC personalizado a una implementación de la capa de abstracción de hardware (HAL) de HDMI-CEC más simple.
Figura 1: Reemplazo del servicio de control de HDMI
Implementación
Consulta el siguiente diagrama para obtener una vista detallada del servicio de control de HDMI.
Figura 2: Detalles del servicio de control de HDMI
Estos son los ingredientes clave para una implementación adecuada de HDMI-CEC de Android:
- Una clase de administrador
HdmiControlManagerproporciona a las apps con privilegios la API. Los servicios del sistema, como el servicio de administrador de entrada de TV y el servicio de audio, pueden usar el servicio directamente. - El servicio está diseñado para permitir el alojamiento de más de un tipo de dispositivo lógico.
- HDMI-CEC se conecta con el hardware a través de una capa de abstracción de hardware (HAL) para simplificar el manejo de las diferencias del protocolo y los mecanismos de señalización entre los dispositivos. La definición de HAL está disponible para que los fabricantes de dispositivos la usen para implementar la capa HAL.
Nota: Los fabricantes de dispositivos deben agregar la
siguiente línea a PRODUCT_COPY_FILES en device.mk.
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
Según si tu dispositivo es un dispositivo receptor HDMI o un dispositivo fuente HDMI, los fabricantes de dispositivos deben configurar ro.hdmi.device_type en device.mk para que HdmiControlService funcione correctamente.
Para los dispositivos fuente HDMI, como los dispositivos de transmisión libre (OTT) o los decodificadores (STB), configura lo siguiente:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Para los dispositivos receptores HDMI, como los televisores de panel, configura lo siguiente:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Un controlador CEC propietario proporcionado por el fabricante del dispositivo no puede coexistir con
HdmiControlService. Debe inhabilitarse o quitarse. Los requisitos comunes para esto provienen de la necesidad de controlar comandos específicos del fabricante. El controlador de comandos específicos del fabricante debe incorporarse al servicio extendiéndolo o modificándolo. Este trabajo se deja al fabricante del dispositivo y no lo especifica Android. Ten en cuenta que cualquier cambio realizado en el servicio para comandos específicos del fabricante no debe interferir con la forma en que se controlan los comandos estándar, o el dispositivo no será compatible con Android. - El acceso al servicio HDMI-CEC está protegido con el nivel de protección
SignatureOrSystem. Solo los componentes del sistema o las apps colocadas en/system/priv-apppueden acceder al servicio. Esto es para proteger el servicio del abuso de apps con intenciones maliciosas.
Android admite el tipo TV/Display(0), Playback
device(4) que puede emitir el comando de reproducción con un solo toque para convertirse en la fuente activa
y Audio System (5) que controla el modo de audio del sistema y ARC.
Actualmente, no se admiten otros tipos de dispositivos (sintonizador y grabadora).
HAL de HDMI-CEC
La API de HAL de HDMI-CEC permite que HdmiControlService use el recurso de hardware para enviar o recibir comandos de HDMI-CEC, configurar los parámetros necesarios y (opcionalmente) comunicarse con el microprocesador en la plataforma subyacente que tomará el control de CEC mientras el sistema Android esté en modo de espera.
| Versión | Funciones | Archivos HAL |
|---|---|---|
| 1.0 | Configura los datos de HAL (direcciones, funciones). Envía comandos de HDMI-CEC. Registra la devolución de llamada para recibir comandos de HDMI-CEC y eventos de conexión en caliente. | IHdmiCec.halIHdmiCecCallback.hal |
| 1.1 | Presenta los tipos de HDMI-CEC 2.0 | @1.1::IHdmiCec.hal@1.1::IHdmiCecCallback.hal |
Prueba
Las implementaciones de HDMI-CEC de los dispositivos se prueban y verifican a través de pruebas de CTS según la documentación de CTS de HDMI-CEC.
HDMI-CEC 2.0
Los dispositivos fuente (reproducción) y receptores (panel de TV) de Android admiten HDMI-CEC 2.0. HDMI-CEC 2.0 ofrece una mejor interoperabilidad entre los dispositivos HDMI, mejoras en la transmisión de control remoto y pruebas de certificación más extensas. En general, las interacciones de HDMI-CEC 2.0 con otros dispositivos son más eficientes, lo que genera menos tráfico de HDMI-CEC y también interacciones más rápidas.
Para que un dispositivo admita HDMI-CEC 2.0, la configuración del dispositivo y del usuario debe establecerse para usar HDMI-CEC 2.0. La implementación de HAL también debe informar la compatibilidad con HDMI-CEC 2.0 en las llamadas a IHdmiCec#getCecVersion.
Configuración de CEC
El comportamiento de HDMI-CEC se puede configurar en el tiempo de compilación (por los OEMs que usan RROs) y en el tiempo de ejecución (por HdmiControlManager @SystemApi).
Ejemplos de configuración de HDMI-CEC:
| Configuración | Opción |
|---|---|
| Si HDMI-CEC está habilitado o inhabilitado | Habilitado Inhabilitado |
| Alcance de los mensajes de control de energía de HDMI-CEC que envía un dispositivo de reproducción | Solo a la TV A la TV y al sistema de audio Transmitir Ninguno |
Las apps pueden consultar cada configuración disponible actualmente y las opciones permitidas en el tiempo de ejecución.