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.
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.
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
HdmiControlManagerfornece 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-apppodem 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.halIHdmiCecCallback.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.