Serviço de controle HDMI-CEC

O padrão HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) permite que os produtos multimídia de consumo se comuniquem e troquem informações entre si. O 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 com o 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 atual por meio do HDMI CEC One Touch Play. Se o dispositivo entrar em suspensão enquanto for a fonte ativa atual, ele tentará desligar a TV conectada.

O suporte a HDMI-CEC geralmente é opcional. No entanto, a maioria dos fabricantes adotou 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 essa variação, os consumidores não podem assumir com segurança que dois produtos que reivindicam suporte CEC são totalmente compatíveis.

O suporte para HDMI-CEC 2.0 ajuda a melhorar a compatibilidade entre os dispositivos HDMI se os dispositivos de envio e recebimento forem compatíveis com 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 os 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 do dispositivo. Anteriormente, os fabricantes precisavam desenvolver suas próprias implementações de HDMI-CEC ou usar soluções de terceiros.
  • Um serviço bem testado em vários dispositivos HDMI-CEC já existentes no mercado. O Android vem realizando pesquisas rigorosas sobre problemas de compatibilidade encontrados entre os produtos e coletando conselhos úteis de implementadores de dispositivos experientes na tecnologia. O serviço CEC é 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 com o restante 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 descriçã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 obter uma visão detalhada do serviço de controle HDMI.

Imagem que mostra os detalhes do serviço HDMI Control

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 é projetado para permitir a hospedagem de mais de um tipo de dispositivo lógico.
  • O HDMI-CEC é conectado ao hardware por meio de uma camada de abstração de hardware (HAL) para simplificar o manuseio 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 de dissipação HDMI ou um dispositivo de origem HDMI, os fabricantes de dispositivos precisam definir ro.hdmi.device_type em device.mk para que HdmiControlService funcione corretamente.

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

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos de dissipação 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 . Ele deve ser desativado ou removido. 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/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 maneira como os comandos padrão são tratados ou 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 os componentes do sistema ou os aplicativos colocados em /system/priv-app podem acessar o serviço. Isso é para proteger o serviço contra abuso por aplicativos com intenção maliciosa.

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 lida com o modo de áudio do sistema e ARC. Outros tipos de dispositivos (sintonizador e gravador) não são suportados no momento.

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) se comunicar com o microprocessador na plataforma subjacente que assumirá o controle CEC enquanto o sistema Android estiver em modo de espera.

Versão Características arquivos HAL
1,0 Configure os dados HAL (endereços, recursos). Envie comandos HDMI-CEC. Registre retorno de chamada para receber comandos HDMI-CEC e eventos hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Apresentar 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

Dispositivos de origem (reprodução) e coletor (painel de TV) do Android suportam 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 HDMI-CEC 2.0 com outros dispositivos são mais eficientes, resultando em menos tráfego HDMI-CEC, bem como interações mais rápidas.

Para que um dispositivo suporte HDMI-CEC 2.0, o dispositivo e a configuração do usuário devem ser definidos 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 HDMI-CEC pode ser configurado em tempo de construção (por OEMs usando RROs) e 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. Apenas para TV
Para TV e sistema de áudio
Transmissão
Nenhum

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