Servicio de control HDMI-CEC

El estándar de control de electrónica de consumo de interfaz multimedia de alta definición (HDMI-CEC) permite que los productos de consumo multimedia se comuniquen e intercambien información entre sí. HDMI-CEC es compatible con muchas funciones, como la transferencia de control remoto y el control de audio del sistema, pero una de las más populares es One Touch Play. One Touch Play permite que un dispositivo de fuente de medios encienda el televisor y cambie su puerto de entrada automáticamente, por lo que no tiene que buscar el control remoto del televisor para cambiar su Chromecast a un reproductor de Blu-ray.

Con Android 12, el control de energía de la pantalla conectada por HDMI se alinea con el control de energía de la pantalla interna. Cuando un dispositivo de reproducción HDMI se activa, intenta activar el televisor conectado y convertirse en la fuente activa actual a través de HDMI CEC One Touch Play. Si el dispositivo entra en suspensión mientras es la fuente activa actual, entonces intenta apagar el televisor conectado.

La compatibilidad con HDMI-CEC generalmente es opcional. Sin embargo, la mayoría de los fabricantes han adoptado HDMI-CEC para que sus dispositivos funcionen con los dispositivos 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 admitidas varían entre dispositivos. Debido a esta variación, los consumidores no pueden asumir con seguridad que dos productos que afirman ser compatibles con CEC son completamente compatibles.

La compatibilidad con HDMI-CEC 2.0 ayuda a mejorar la compatibilidad entre dispositivos HDMI si tanto el dispositivo de envío como el de recepción admiten esta versión del estándar.

Solución

Con la introducción de Android TV Input Framework (TIF), HDMI-CEC reúne todos los dispositivos conectados y minimiza los problemas de compatibilidad. Android ha creado un servicio de sistema llamado HdmiControlService para aliviar estos puntos débiles.

Al ofrecer HdmiControlService como parte del ecosistema de Android, Android espera brindar:

  • Una implementación estándar de HDMI-CEC para todos los fabricantes, lo que reducirá la incompatibilidad de dispositivos. Anteriormente, los fabricantes tenían que desarrollar sus propias implementaciones de HDMI-CEC o usar soluciones de terceros.
  • Un servicio que está bien probado contra numerosos dispositivos HDMI-CEC que ya están en el mercado. Android ha estado realizando una investigación rigurosa sobre los problemas de compatibilidad encontrados entre los productos y recopilando consejos útiles de los 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 a ese estándar para que funcione con los productos que la gente ya usa.

Diseño general

HdmiControlService está conectado con el resto del sistema, como TV Input Framework (TIF), el servicio de audio y el servicio de energía para implementar las diversas características que especifica el estándar.

Consulte 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) HDMI-CEC más simple.

Diagrama que muestra cómo se implementó HDMI-CEC antes y después de Android 5.0

Figura 1. Reemplazo del servicio de control HDMI

Implementación

Consulte el siguiente diagrama para obtener una vista detallada del servicio de control HDMI.

Imagen que muestra cómo se detalla el servicio HDMI Control

Figura 2. Detalles del servicio de control HDMI

Estos son los ingredientes clave para una implementación adecuada de Android HDMI-CEC:

  • Una clase de administrador HdmiControlManager proporciona aplicaciones privilegiadas con la API. Los servicios del sistema, como el servicio TV Input Manager y el servicio de audio, pueden usar el servicio directamente.
  • El servicio está diseñado para permitir alojar más de un tipo de dispositivo lógico.
  • HDMI-CEC está conectado 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 HAL está disponible para que los fabricantes de dispositivos la utilicen para implementar la capa HAL.

Nota : los fabricantes de dispositivos deben agregar la siguiente línea en 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

Dependiendo de si su 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 dispositivos de fuente HDMI, como Over the Top (OTT) o dispositivos Set-top box (STB), configure:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos de sumidero HDMI, como televisores de panel, configure:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Un controlador CEC propietario proporcionado por el fabricante del dispositivo no puede coexistir con HdmiControlService . Debe ser deshabilitado o eliminado. Los requisitos comunes para esto provienen de la necesidad de manejar comandos específicos del fabricante. El controlador de comandos específico del fabricante debe incorporarse al servicio ampliándolo/modificándolo. Este trabajo se deja al fabricante del dispositivo y no lo especifica Android. Tenga en cuenta que cualquier cambio realizado en el servicio para los comandos específicos del fabricante no debe interferir con la forma en que se manejan los comandos estándar o el dispositivo no será compatible con Android.
  • El acceso al servicio HDMI-CEC está resguardado con el nivel de protección SignatureOrSystem . Solo los componentes del sistema o las aplicaciones ubicadas en /system/priv-app pueden acceder al servicio. Esto es para proteger el servicio del abuso por parte de aplicaciones con intenciones maliciosas.

Android admite el tipo TV/Display(0) , Playback device(4) que puede emitir el comando One Touch Play para convertirse en la fuente activa y el Audio System (5) que maneja el modo de audio del sistema y ARC. Otros tipos de dispositivos (sintonizador y grabador) actualmente no son compatibles.

HAL HDMI-CEC

La API HDMI-CEC HAL permite que HdmiControlService haga uso del recurso de hardware para enviar/recibir comandos HDMI-CEC, configurar los ajustes necesarios y (opcionalmente) comunicarse con el microprocesador en la plataforma subyacente que asumirá el control de CEC mientras Android el sistema está en modo de espera.

Versión Características archivos HAL
1.0 Configurar datos HAL (direcciones, características). Envía comandos HDMI-CEC. Registre la devolución de llamada para recibir comandos HDMI-CEC y eventos hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Introducir tipos de HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Pruebas

Las implementaciones de dispositivos HDMI-CEC se prueban y verifican mediante pruebas CTS de acuerdo con la documentación HDMI-CEC CTS .

HDMI-CEC 2.0

Los dispositivos de fuente (reproducción) y disipador (panel de TV) de Android son compatibles con HDMI-CEC 2.0. HDMI-CEC 2.0 ofrece una mejor interoperabilidad entre dispositivos HDMI, mejoras en el paso de control remoto y pruebas de certificación más exhaustivas. 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 e interacciones más rápidas.

Para que un dispositivo sea compatible con HDMI-CEC 2.0, la configuración del dispositivo y del usuario debe estar configurada 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 CEC

El comportamiento de HDMI-CEC se puede configurar tanto en el momento de la compilación (por los OEM que usan RRO) como en el tiempo de ejecución (por HdmiControlManager @SystemApi).

Ejemplos de configuraciones de HDMI-CEC:

Ajuste Opción
Si HDMI-CEC está habilitado o deshabilitado. Activado
Desactivado
Alcance de los mensajes de control de potencia HDMI-CEC enviados por un dispositivo de reproducción. Solo a la televisión
Al sistema de TV y audio
Transmisión
Ninguna

Para cada configuración actualmente disponible y las opciones permitidas pueden ser consultadas por aplicaciones en tiempo de ejecución.