Serviço de controle HDMI-CEC

O padrão de controle eletrônico de consumidor de interface multimídia de alta definição (HDMI-CEC) permite que produtos de consumo multimídia se comuniquem e troquem informações entre si. O HDMI-CEC suporta 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 seu 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 presumir 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 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 os problemas de compatibilidade. O Android criou um serviço de sistema chamado HdmiControlService para aliviar esses pontos problemáticos.

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

  • Uma implementação padrão do 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 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 do switch de um controlador CEC personalizado para uma implementação da camada de abstração de hardware HDMI-CEC (HAL) 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 como os 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 adequada do Android HDMI-CEC:

  • 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.
  • O HDMI-CEC é conectado ao hardware por meio de uma camada de abstração de hardware (HAL) para simplificar o manuseio das diferenças do protocolo e dos 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.

Observação : 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 fonte HDMI, os fabricantes de dispositivos precisam definir ro.hdmi.device_type em device.mk para que o 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 . Ele 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 comando 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 manipulados ou o dispositivo não será compatível com Android.
  • O acesso ao serviço HDMI-CEC é protegido com o nível de proteção SignatureOrSystem . Apenas os componentes do sistema ou os aplicativos colocados em /system/priv-app podem acessar o serviço. Isso é para proteger o serviço de 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 o Audio System (5) que lida com o modo de áudio do sistema e o ARC. Outros tipos de dispositivos (Sintonizador e Gravador) atualmente não são suportados.

HDMI-CEC HAL

A API HAL HDMI-CEC 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 sistema está em modo de espera.

Versão Características Arquivos HAL
1,0 Configure os 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 Introduzir 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 Android de origem (reprodução) e coletor (painel de TV) são compatíveis com HDMI-CEC 2.0. O 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 e interações mais rápidas.

Para que um dispositivo suporte 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 de 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 compilação (por OEMs usando RROs) e 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. 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.