Servicio de control de HDMI-CEC

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 multimedia de consumo se comuniquen y compartan información entre sí. HDMI-CEC admite 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 multimedia encienda la TV y cambie su puerto de entrada automáticamente, de modo que no tengas que buscar el control remoto de la TV para cambiar de Chromecast al reproductor de Blu-ray.

Con Android 12, el control de encendido de la pantalla conectada por HDMI se alinea con el control de encendido 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 HDMI CEC One Touch Play. Si el dispositivo entra en modo de suspensión mientras es la fuente activa actual, intenta apagar la TV conectada.

La compatibilidad con HDMI-CEC suele ser 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 ellos. Debido a esta variación, los consumidores no pueden suponer de forma segura que dos productos que afirman compatibilidad con CEC son completamente compatibles.

La compatibilidad con HDMI-CEC 2.0 ayuda a mejorar la compatibilidad entre dispositivos HDMI si el dispositivo de envío y el receptor 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 mitigar estos problemas.

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

  • Una implementación estándar de HDMI-CEC para todos los fabricantes, lo que reducirá la incompatibilidad de los dispositivos. Anteriormente, los fabricantes debían desarrollar sus propias implementaciones de HDMI-CEC o usar soluciones de terceros.
  • Un servicio que se probó bien en varios dispositivos HDMI-CEC que ya están en el mercado. Android realizó una investigación rigurosa sobre los problemas de compatibilidad que se encontraron entre los productos y recopiló consejos útiles de los implementadores de dispositivos con experiencia en la tecnología. El servicio de CEC está diseñado para mantener un equilibrio saludable entre el estándar y las modificaciones de ese estándar, de modo que funcione con los productos que las personas ya usan.

Diseño general

HdmiControlService se conecta con el resto del sistema, como el framework de entrada de TV (TIF), el servicio de audio y el servicio de alimentación, 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) más simple de HDMI-CEC.

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

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

Imagen en la que se muestra cómo los detalles del servicio de control 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 HdmiControlManager proporciona apps con privilegios con la API. Los servicios del sistema, como el servicio de Administrador de entradas de TV y el de audio, pueden usarlo directamente.
  • El servicio está diseñado para permitir alojar 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 de 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 de destino HDMI o un dispositivo de origen HDMI, los fabricantes de dispositivos deben configurar ro.hdmi.device_type en device.mk para que HdmiControlService funcione correctamente.

Para dispositivos de origen HDMI, como dispositivos de transmisión libre (OTT) o decodificadores (STB), establece lo siguiente:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos de destino HDMI, como TVs de panel, establece 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ífico del fabricante se debe incorporar al servicio extendiéndolo o modificándolo. Este trabajo se deja al fabricante del dispositivo y Android no lo especifica. Ten en cuenta que los cambios realizados en el servicio para comandos específicos del fabricante no deben interferir en la forma en que se manejan los comandos estándar. De lo contrario, 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 ubicadas en /system/priv-app pueden acceder al servicio. Esto se hace para proteger el servicio contra el abuso de apps con intents maliciosos.

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 Audio System (5), que controla el modo de audio del sistema y ARC. En este momento, 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 HDMI-CEC, configurar la configuración necesaria y, de manera opcional, comunicarse con el microprocesador en la plataforma subyacente que se hará cargo del control de CEC mientras el sistema Android esté en modo de espera.

Versión Funciones Archivos HAL
1.0 Configura los datos de la HAL (direcciones y funciones). Envía comandos de HDMI-CEC. Registra una devolución de llamada para recibir comandos HDMI-CEC y eventos de conexión y desconexión. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Presentación de los tipos 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 mediante pruebas de CTS según la documentación de CTS de HDMI-CEC.

HDMI-CEC 2.0

Los dispositivos de origen (reproducción) y destino (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 transferencia de control remoto y pruebas de certificación más extensas. Por lo 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 interacciones más rápidas.

Para que un dispositivo admita HDMI-CEC 2.0, el dispositivo y la configuración del usuario deben estar configurados 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 tanto en el tiempo de compilación (para los OEM que usan RRO) como en el tiempo de ejecución (a través de HdmiControlManager @SystemApi).

Ejemplos de parámetros de configuración de HDMI-CEC:

Configuración Opción
Indica si HDMI-CEC está habilitado o inhabilitado. Habilitado
Inhabilitado
Alcance de los mensajes de control de encendido de HDMI-CEC enviados por un dispositivo de reproducción. Solo a la TV
A la TV y al sistema de audio
Transmisión
Ninguno

Para cada parámetro de configuración disponible y permitido, las apps pueden consultar las opciones en el tiempo de ejecución.