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.
Implementação
Consulte o diagrama a seguir para obter uma visão detalhada 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.