Serviço de controle HDMI-CEC

O padrão de controle de eletrônicos de consumo da interface multimídia de alta definição (HDMI-CEC, na sigla em inglês) permite que produtos de consumo multimídia se comuniquem e troquem informações entre si. O HDMI-CEC oferece suporte a muitos recursos, como a passagem de controle remoto e o controle de áudio do sistema, mas um dos mais populares é o One Touch Play. O One Touch Play permite que um dispositivo de origem de mídia ligue a TV e mude a porta de entrada automaticamente. Assim, não é necessário procurar o controle remoto da TV para mudar do Chromecast para o Blu-ray player.

No Android 12, o controle liga/desliga da tela conectada por HDMI está alinhado ao controle liga/desliga da tela interna. Quando um dispositivo de reprodução HDMI é ativado, ele tenta ativar a TV conectada e se tornar a origem ativa atual usando o HDMI CEC One Touch Play. Se o dispositivo entrar no modo de suspensão enquanto for a origem ativa atual, ele tentará desligar a TV conectada.

O suporte ao HDMI-CEC é geralmente opcional. No entanto, a maioria dos fabricantes adotou o HDMI-CEC para que os dispositivos funcionem com os de outras empresas. Cada fabricante implementa o padrão HDMI-CEC de maneiras diferentes. Por isso, os dispositivos nem sempre se entendem, e os recursos com suporte variam entre eles. Devido a essa variação, os consumidores não podem presumir com segurança que dois produtos que afirmam ter suporte ao CEC sejam totalmente compatíveis.

O suporte ao HDMI-CEC 2.0 ajuda a melhorar a compatibilidade entre dispositivos HDMI se o dispositivo de envio e o de recebimento forem compatíveis com essa versão do padrão.

Solução

Com a introdução do Android TV Input Framework (TIF), o HDMI-CEC reúne todos os dispositivos conectados e minimiza problemas de compatibilidade. O Android criou um serviço do sistema chamado HdmiControlService para atenuar esses problemas.

Ao oferecer o HdmiControlService como parte do ecossistema Android, esperamos fornecer:

  • Uma implementação padrão do HDMI-CEC para todos os fabricantes, o que reduzirá a incompatibilidade de dispositivos. Anteriormente, os fabricantes precisavam desenvolver as próprias implementações do HDMI-CEC ou usar soluções de terceiros.
  • Um serviço bem testado em vários dispositivos HDMI-CEC já no mercado. O Android tem conduzido pesquisas rigorosas sobre problemas de compatibilidade encontrados entre os produtos e coletado conselhos úteis de implementadores de dispositivos experientes na tecnologia. O serviço CEC foi projetado para manter um equilíbrio saudável entre o padrão e as modificações desse padrão, para que funcione com os produtos que as pessoas já usam.

Design em geral

O HdmiControlService está conectado ao restante do sistema, como o TV Input Framework (TIF), o serviço de áudio e o serviço de energia, para implementar os vários recursos especificados pelo padrão.

Consulte o diagrama a seguir para uma representação da mudança de um controlador CEC personalizado para uma implementação da camada de abstração de hardware (HAL) HDMI-CEC mais simples.

Diagrama que mostra como o HDMI-CEC foi implementado antes e depois do Android 5.0

Figura 1. Substituição do serviço de controle HDMI

Implementação

Consulte o diagrama a seguir para uma visualização detalhada do serviço de controle HDMI.

Imagem que mostra os detalhes do serviço de controle HDMI

Figura 2. Detalhes do serviço de controle HDMI

Confira os principais elementos para uma implementação adequada do HDMI-CEC do Android:

  • Uma classe de gerenciador HdmiControlManager fornece apps privilegiados com a API. Serviços do sistema, como o serviço de gerenciador de entrada de TV e o serviço de áudio, podem usar o serviço diretamente.
  • O serviço foi projetado para permitir a hospedagem de mais de um tipo de dispositivo lógico.
  • O HDMI-CEC está conectado ao hardware por meio de uma camada de abstração de hardware (HAL) para simplificar o tratamento de diferenças do protocolo e dos mecanismos de sinalização entre os dispositivos. A definição de HAL está disponível para os fabricantes de dispositivos usarem para implementar a camada HAL.

Observação: os fabricantes de dispositivos precisam adicionar a seguinte linha a PRODUCT_COPY_FILES em device.mk.

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

Dependendo se o dispositivo é um dispositivo de receptor HDMI ou um dispositivo de origem HDMI, os fabricantes de dispositivos precisam definir ro.hdmi.device_type em device.mk para que o HdmiControlService funcione corretamente.

Para dispositivos de origem HDMI, como dispositivos over-the-top (OTT) ou conversores (STB), defina:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos de receptor HDMI, como TVs de painel, defina:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Um controlador CEC proprietário fornecido pelo fabricante do dispositivo não pode coexistir com o HdmiControlService. Ele precisa ser desativado ou removido. Os requisitos comuns para isso vêm da necessidade de processar comandos específicos do fabricante. O processador de comandos específicos do fabricante precisa ser incorporado ao serviço estendendo/modificando-o. Esse trabalho é deixado para o fabricante do dispositivo e não especificado pelo Android. Qualquer mudança feita no serviço para comandos específicos do fabricante não pode interferir na maneira como os comandos padrão são processados. Caso contrário, o dispositivo não será compatível com o Android.
  • O acesso ao serviço HDMI-CEC é protegido com o nível de proteção SignatureOrSystem. Somente componentes do sistema ou os apps colocados em /system/priv-app podem acessar o serviço. Isso serve para proteger o serviço contra abuso por apps com intenções maliciosas.

O Android oferece suporte ao tipo TV/Display(0), Playback device(4), que pode emitir o comando One Touch Play para se tornar a origem ativa e Audio System (5), que processa o modo de áudio do sistema e o ARC. Outros tipos de dispositivos (sintonizador e gravador) não são compatíveis no momento.

HAL HDMI-CEC

A API HAL HDMI-CEC permite que o HdmiControlService use o recurso de hardware para enviar/receber comandos HDMI-CEC, configurar as definições necessárias e (opcionalmente) se comunicar com o microprocessador na plataforma subjacente que assumirá o controle CEC enquanto o sistema Android estiver no modo de espera.

Versão Recursos Arquivos HAL
1.0 Configurar dados HAL (endereços, recursos). Enviar comandos HDMI-CEC. Registrar callback para receber comandos HDMI-CEC e eventos de conexão dinâmica. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Introduzir tipos HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Teste

As implementações de HDMI-CEC de dispositivos são testadas e verificadas por testes do CTS de acordo com a documentação do CTS HDMI-CEC.

HDMI-CEC 2.0

Os dispositivos de origem (reprodução) e receptor (painel de TV) do Android oferecem suporte ao HDMI-CEC 2.0. O HDMI-CEC 2.0 oferece melhor interoperabilidade entre dispositivos HDMI, melhorias na passagem de controle remoto e testes de certificação mais extensos. Geralmente, as interações do HDMI-CEC 2.0 com outros dispositivos são mais eficientes, resultando em menos tráfego HDMI-CEC e interações mais rápidas.

Para que um dispositivo ofereça suporte ao HDMI-CEC 2.0, a configuração do dispositivo e do usuário precisa ser definida para usar o HDMI-CEC 2.0. A implementação do HAL também precisa informar o suporte ao HDMI-CEC 2.0 em chamadas para IHdmiCec#getCecVersion.

Configuração do CEC

O comportamento do HDMI-CEC pode ser configurado no tempo de build (por OEMs usando RROs) e no tempo de execução (por HdmiControlManager @SystemApi).

Exemplos de configurações HDMI-CEC:

Configuração Opção
Se o HDMI-CEC está ativado ou desativado. Ativado
Desativado
Escopo das mensagens de controle liga/desliga HDMI-CEC enviadas por um dispositivo de reprodução. Somente para a TV
Para a TV e o sistema de áudio
Transmitir
Nenhum

Para cada configuração disponível no momento, as opções permitidas podem ser consultadas por apps no tempo de execução.