O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando USB HAL

Os Android 8,0 libertação movimentos de manipulação de USB comandos de init de scripts e em um daemon USB nativa para uma melhor configuração e confiabilidade código. Para a configuração da função Gadget, init de scripts (disparadores de propriedade) são usados para executar operações gadgets específicos do dispositivo.

Em versões anteriores, estas configurações específicas do dispositivo foram alcançados através específicas do dispositivo init de scripts (utilizando gatilhos de propriedades). Mudar para um design de camada de abstração de hardware (HAL) resulta em uma implementação muito mais limpa que resolve estes problemas:

  1. Operações como gravações nos nós sysfs do kernel podem falhar, mas não podem ser propagadas de volta para o código da estrutura que define o disparador de propriedade. Como resultado, as estruturas assumem incorretamente que as operações foram bem-sucedidas, embora tenham falhado silenciosamente.
  2. init scripts têm um número limitado de operações que podem ser executadas.

A versão do Android 12 adiciona suporte USB Gadget HAL para modelos de controle de rede (NCM) e chamadas de API que retornam o número da versão HAL e a velocidade USB. Para mais informações sobre a API chama disponível através do HAL USB, consulte o android.hardware.usb resumo pacote .

HAL e Treble

Os específicas do dispositivo init de scripts foram utilizadas como uma substituição para camadas de HAL para realizar operações específicas do dispositivo USB. USB (por meio de ADB) é uma interface primária para depurar problemas do sistema. Ter um daemon nativo para realizar a configuração do USB elimina a dependência do código do framework, portanto, mesmo se o framework travar, o USB deve estar em execução.

Sob o Treble modelo também introduzido no Android 8.0, todos os HALs são isolados de serviços do sistema e são necessários para executar em seus próprios daemons nativas. Isso elimina a necessidade de ter um daemon USB exclusivo, pois a camada HAL também funciona como um daemon USB.

A implementação HAL padrão cuida de todos os dispositivos pré-Android 8.0. Portanto, não haveria nenhum trabalho específico de dispositivo para os dispositivos pré-Android 8.0. O Android 8.0 usa a interface HAL para consultar o status das portas USB e realizar trocas de função de dados e função de energia.

Implementação

A nova interface USB HAL precisa ser implementada em todos os dispositivos iniciados no Android 8.0. A implementação padrão deve cuidar de dispositivos pré-Android 8.0. A implementação padrão é suficiente se o dispositivo utiliza o dual_role_usb classe ao status de relatório tipo c porta. Mudanças triviais podem ser necessárias em scripts USB específicos do dispositivo para transferir a propriedade dos nós typc-c para o sistema.