Serviço de controle HDMI-CEC

A interface multimídia de alta definição de controle de eletrônicos de consumo (HDMI-CEC) permite que produtos de consumo mulitmedia se comuniquem e e trocam informações entre si. O HDMI-CEC oferece suporte a muitos recursos, como transmissão de controle remoto e controle de áudio do sistema, mas um dos mais populares é o One Touch Play. Com o One Touch Play, um dispositivo de fonte de mídia pode ligar a TV e alternar automaticamente a porta de entrada para não precisar procurar pela TV. controle remoto para trocar do Chromecast para o Blu-ray player.

Com o Android 12, o controle de energia da tela conectada por HDMI é alinhado ao controle de energia da tela interna. Quando um dispositivo de reprodução HDMI é ativado, ele tenta para ativar a smart TV e se tornar a fonte ativa no momento pela reprodução com um toque do HDMI CEC. Se o dispositivo entrar em suspensão enquanto for a fonte ativa, 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 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. Por causa dessa variação, os consumidores não podem presumem que dois produtos que alegam suporte ao CEC são totalmente compatíveis.

O suporte a 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 o lançamento 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 do sistema chamado HdmiControlService para e aliviar esses aspectos problemáticos.

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

  • Uma implementação padrão do HDMI-CEC para todos os fabricantes, o que reduz a incompatibilidade de dispositivos. Antes, os fabricantes precisavam desenvolver as próprias implementações de HDMI-CEC ou usam soluções de terceiros.
  • um serviço que já foi bem testado em vários dispositivos HDMI-CEC no mercado. O Android tem conduzido pesquisas rigorosas sobre compatibilidade problemas encontrados entre os produtos e coletar conselhos úteis de dispositivos desenvolvedores 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 que ele funciona com os produtos que as pessoas já usam.

Design em geral

O HdmiControlService está conectado ao restante do sistema da seguinte forma: TV Input Framework (TIF), serviço de áudio e serviço de energia para implementar a vários recursos especificados pelo padrão.

Consulte o diagrama a seguir para conferir uma representação da mudança de um controlador CEC personalizado para uma implementação da camada de abstração de hardware HDMI-CEC mais simples (HAL).

Diagrama que mostra como o HDMI-CEC foi implementado antes e depois do Android 5.0

Figura 1. Serviço de controle HDMI aparelho de substituição

Implementação

Consulte o diagrama a seguir para conferir 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

Estes são os principais ingredientes para uma implementação adequada de HDMI-CEC para Android:

  • Uma classe de gerenciador HdmiControlManager fornece apps privilegiados com a API. Serviços do sistema, como o serviço de gerenciamento 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.
  • O HDMI-CEC é conectado ao hardware por uma camada de abstração de hardware (HAL) para simplificar o processamento de diferenças do protocolo e dos mecanismos de sinalização entre os dispositivos. A definição de HAL está disponível para fabricantes de dispositivos usar para implementar a camada HAL.

Observação: os fabricantes de dispositivos precisam adicionar o linha seguinte para 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

O dispositivo precisa ser de coletor ou fonte HDMI, os fabricantes de dispositivos precisam definir ro.hdmi.device_type device.mk para que o HdmiControlService funcione corretamente.

Para dispositivos de origem HDMI, como over-the-top (OTT) ou conversor (STB), defina:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Para dispositivos de sink 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 precisa ser desativado ou removido. Comum requisitos para isso vêm da necessidade de lidar com configurações específicas do fabricante, comandos O gerenciador de comandos específico do fabricante deve ser incorporado ao o serviço estendendo-o/modificando-o. Este trabalho é deixado para o dispositivo fabricante e não seja especificado pelo Android. Qualquer mudança feita no serviço para comandos específicos do fabricante não pode interferir na forma como os comandos padrão são processados, 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 apps colocados em /system/priv-app podem acessar o serviço. Isso é feito para proteger contra abuso por apps com intenção maliciosa.

O Android oferece suporte ao tipo TV/Display(0), Playback device(4), que pode emitir o comando "One Touch Play" para se tornar o ativo 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 do HDMI-CEC

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

Versão Recursos Arquivos HAL
1.0 Configure os dados da HAL (endereços, recursos). Enviar comandos HDMI-CEC. Registre o callback para receber comandos HDMI-CEC e eventos de hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Apresentação dos tipos de 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 testes CTS de acordo com a Documentação do HDMI-CEC CTS.

HDMI-CEC 2.0

Os dispositivos Android de origem (reprodução) e coletor (painel de TV) oferecem suporte a HDMI-CEC 2.0. HDMI-CEC 2.0 oferece melhor interoperabilidade entre dispositivos HDMI melhorias na passagem de controle remoto e testes de certificação mais abrangentes. Em geral, as interações do HDMI-CEC 2.0 com outros dispositivos são mais eficientes, resultando em menos tráfego do HDMI-CEC e interações mais rápidas.

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

Configuração do CEC

O comportamento HDMI-CEC pode ser configurado no tempo de build (por OEMs que usam RROs) e no tempo de execução (por HdmiControlManager @SystemApi).

Exemplos de configurações do HDMI-CEC:

Configuração Opção
Se o HDMI-CEC está ativado ou desativado. Ativado
Desativadas
Escopo das mensagens de controle de energia do HDMI-CEC enviadas por um dispositivo de reprodução. Para TV somente
Para TV e sistema de áudio
Transmissão
Nenhuma

Para cada configuração disponível e permitida, as opções podem ser consultadas por apps no momento da execução.