Serviço de controle HDMI-CEC

O padrão HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) permite que produtos de consumo multimídia se comuniquem e troquem informações entre si. HDMI-CEC oferece suporte a muitos recursos, como passagem de controle remoto e controle de áudio do sistema, mas um dos mais populares é o One Touch Play. O One Touch Play permite que um dispositivo de fonte de mídia ligue a TV e alterne sua porta de entrada automaticamente, para que você não precise procurar o controle remoto da TV para alternar do Chromecast para o Blu-ray player.

Com o Android 12, o controle de energia da tela conectada por HDMI se alinha ao controle de energia da tela interna. Quando um dispositivo de reprodução HDMI é ativado, ele tenta ativar a TV conectada e se tornar a fonte ativa no momento por meio do HDMI CEC One Touch Play. Se o dispositivo entrar em suspensão enquanto for a fonte ativa no momento, ele tentará desligar a TV conectada.

O suporte a HDMI-CEC geralmente é opcional. No entanto, a maioria dos fabricantes adotou o HDMI-CEC para que seus dispositivos funcionem com dispositivos de outras empresas. Cada fabricante implementa o padrão HDMI-CEC de maneiras diferentes, portanto os dispositivos nem sempre se entendem e os recursos suportados variam entre os dispositivos. Devido a esta variação, os consumidores não podem assumir com segurança que dois produtos que reivindicam suporte CEC são completamente compatíveis.

O suporte para HDMI-CEC 2.0 ajuda a melhorar a compatibilidade entre dispositivos HDMI se o dispositivo de envio e recebimento suportar esta 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 de sistema chamado HdmiControlService para aliviar esses pontos problemáticos.

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

  • Uma implementação padrão de HDMI-CEC para todos os fabricantes, o que reduzirá a incompatibilidade de dispositivos. Anteriormente, os fabricantes tinham que desenvolver as suas próprias implementações de HDMI-CEC ou utilizar soluções de terceiros.
  • Um serviço bem testado em vários dispositivos HDMI-CEC já existentes no mercado. O Android tem conduzido pesquisas rigorosas sobre problemas de compatibilidade encontrados entre os produtos e coletado conselhos úteis de implementadores de dispositivos com experiência 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 geral

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

Consulte o diagrama a seguir para obter 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 visão detalhada do serviço de controle HDMI.

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

Figura 2. Detalhes do serviço de controle HDMI

Aqui estão os principais ingredientes para uma implementação Android HDMI-CEC adequada:

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

Nota : Os fabricantes de dispositivos devem adicionar a seguinte linha em 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 seu dispositivo é um dispositivo coletor HDMI ou um dispositivo de fonte HDMI, os fabricantes do dispositivo precisam definir ro.hdmi.device_type em device.mk para que HdmiControlService funcione corretamente.

Para dispositivos de fonte HDMI, como dispositivos Over the Top (OTT) ou Set-top box (STB), defina:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos coletores 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 HdmiControlService . Deve ser desativado ou removido. Os requisitos comuns para isso vêm da necessidade de lidar com comandos específicos do fabricante. O manipulador de comandos específico do fabricante deve ser incorporado ao serviço, estendendo-o/modificando-o. Este trabalho é deixado para o fabricante do dispositivo e não é especificado pelo Android. Observe que qualquer alteração feita no serviço para comandos específicos do fabricante não deve interferir na forma como os comandos padrão são tratados ou o dispositivo não será compatível com Android.
  • O acesso ao serviço HDMI-CEC é protegido pelo nível de proteção SignatureOrSystem . Somente componentes do sistema ou aplicativos colocados em /system/priv-app podem acessar o serviço. Isso protege o serviço contra abusos por parte de aplicativos mal-intencionados.

O Android suporta o tipo TV/Display(0) , Playback device(4) que pode emitir o comando One Touch Play para se tornar a fonte ativa e Audio System (5) que controla o modo de áudio do sistema e ARC. Outros tipos de dispositivos (sintonizador e gravador) não são suportados atualmente.

HDMI-CEC HAL

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

Versão Características Arquivos HAL
1,0 Configure dados HAL (endereços, recursos). Envie comandos HDMI-CEC. Registre o retorno de chamada para receber comandos HDMI-CEC e eventos hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Apresente os tipos HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Teste

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

HDMI-CEC 2.0

Os dispositivos Android de origem (reprodução) e coletor (painel de TV) suportam HDMI-CEC 2.0. HDMI-CEC 2.0 oferece melhor interoperabilidade entre dispositivos HDMI, melhorias no Remote Control Passthrough e testes de certificação mais extensos. Geralmente, as interações HDMI-CEC 2.0 com outros dispositivos são mais eficientes, resultando em menos tráfego HDMI-CEC, bem como em interações mais rápidas.

Para que um dispositivo seja compatível com HDMI-CEC 2.0, a configuração do dispositivo e do usuário deve ser definida para usar HDMI-CEC 2.0. A implementação HAL também deve relatar suporte para HDMI-CEC 2.0 em chamadas para IHdmiCec#getCecVersion .

Configuração CEC

O comportamento do HDMI-CEC pode ser configurado tanto em tempo de construção (por OEMs usando RROs) quanto em tempo de execução (por HdmiControlManager @SystemApi).

Exemplos de configurações HDMI-CEC:

Contexto Opção
Se o HDMI-CEC está ativado ou desativado. Habilitado
Desabilitado
Escopo das mensagens de controle de energia HDMI-CEC enviadas por um dispositivo de reprodução. Somente para TV
Para TV e sistema de áudio
Transmissão
Nenhum

Para cada configuração atualmente disponível e permitida, as opções podem ser consultadas pelos aplicativos em tempo de execução.