O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Android Open Accessory Protocol 1.0

Os acessórios USB do Android devem aderir ao protocolo Android Open Accessory (AOA), que define como um acessório detecta e configura a comunicação com um dispositivo Android. Os acessórios devem seguir as seguintes etapas:

  1. Aguarde e detecte um dispositivo conectado.
  2. Determine o suporte do modo acessório do dispositivo.
  3. Tente iniciar o dispositivo no modo acessório (se necessário).
  4. Se o dispositivo for compatível com AOA, estabeleça comunicação com o dispositivo.

As seções a seguir explicam como implementar essas etapas.

Aguarde e detecte dispositivos conectados

Os acessórios devem verificar continuamente se há dispositivos Android conectados. Quando um dispositivo é conectado, o acessório deve determinar se o dispositivo oferece suporte ao modo acessório.

Determine o suporte do modo acessório

Quando um dispositivo Android é conectado, ele pode estar em um dos três estados:

  • Suporta o modo acessório Android e já está no modo acessório.
  • Suporta o modo acessório Android, mas não está no modo acessório.
  • Não suporta o modo acessório Android.

Durante a conexão inicial, o acessório deve verificar a ID do fornecedor e a ID do produto do descritor do dispositivo USB do dispositivo conectado. O ID do fornecedor deve corresponder ao ID do Google ( 0x18D1 ). Se o dispositivo já estiver no modo acessório, a ID do produto deve ser 0x2D00 ou 0x2D01 e o acessório pode estabelecer comunicação com o dispositivo por meio de terminais de transferência em massa usando seu próprio protocolo de comunicação (o dispositivo não precisa ser iniciado no modo acessório).

Nota: 0x2D00 é reservado para dispositivos Android que suportam o modo acessório. 0x2D01 é reservado para dispositivos que suportam o modo acessório, bem como o protocolo Android Debug Bridge (ADB), que expõe uma segunda interface com dois endpoints em massa para ADB. Você pode usar esses terminais para depurar o aplicativo acessório se estiver simulando o acessório em um computador. Em geral, não use essa interface, a menos que o acessório implemente uma passagem para ADB no dispositivo.

Se o ID do fornecedor ou o ID do produto encontrado no descritor do dispositivo USB não corresponder aos valores esperados, o acessório não pode determinar se o dispositivo suporta o modo acessório Android. O acessório deve tentar iniciar o dispositivo no modo acessório (detalhado abaixo) para determinar o suporte do dispositivo.

Tente iniciar no modo acessório

Se o fornecedor e os IDs do produto não corresponderem a um dispositivo Android no modo acessório, o acessório não poderá discernir se o dispositivo é compatível (mas não está) no modo acessório ou se o dispositivo não é compatível com o modo acessório. Isso pode ocorrer porque os dispositivos que oferecem suporte ao modo acessório (mas não estão no modo acessório) relatam inicialmente o fabricante do dispositivo e os IDs do produto, em vez do fornecedor AOA e os IDs do produto.

O acessório deve tentar iniciar o dispositivo no modo acessório para determinar se o dispositivo oferece suporte a esse modo:

  1. Envie uma 51 solicitação de controle ("Obter protocolo") para determinar se o dispositivo oferece suporte ao protocolo de acessório Android. Se o dispositivo suportar o protocolo, ele retornará um número diferente de zero que representa a versão do protocolo com suporte. A solicitação de controle está no ponto final 0 com as seguintes características:
    requestType:    USB_DIR_IN | USB_TYPE_VENDOR
    request:        51
    value:          0
    index:          0
    data:           protocol version number (16 bits little endian sent from the
                    device to the accessory)
    
  2. Se o dispositivo retornar uma versão de protocolo com suporte, envie uma solicitação de controle com informações de string de identificação para o dispositivo. Essas informações permitem que o dispositivo determine um aplicativo apropriado para o acessório (ou apresente um URL ao usuário se um aplicativo apropriado não existir). A solicitação de controle está no ponto de extremidade 0 (para cada ID de string) com as seguintes características:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Os seguintes IDs de string são suportados, com um tamanho máximo de 256 bytes para cada string (deve ser terminado em zero com \0 ).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Envie uma solicitação de controle para pedir ao dispositivo para iniciar no modo acessório. A solicitação de controle está no ponto final 0 com as seguintes características:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Depois de concluir essas etapas, o acessório deve aguardar até que o dispositivo USB conectado se re-introduza no barramento no modo acessório e, em seguida, reenumere os dispositivos conectados. O algoritmo determina o suporte do modo acessório verificando o fornecedor e os IDs do produto, que devem estar corretos (por exemplo, corresponder aos IDs do fornecedor e do produto do Google em vez dos IDs do fabricante do dispositivo) se o dispositivo mudou com sucesso para o modo acessório. Se os IDs estiverem corretos, o acessório se move para estabelecer comunicação com o dispositivo .

Nota: AOA atualmente não oferece suporte a conexões simultâneas de AOA e MTP. Para alternar de AOA para MTP, o acessório deve primeiro desconectar o dispositivo USB (fisicamente ou de forma eletricamente equivalente) e depois reconectar usando MTP.

Se alguma etapa falhar, o acessório determinará que o dispositivo não é compatível com o modo de acessório Android e aguardará o próximo dispositivo se conectar.

Estabeleça comunicação com o dispositivo

Se o acessório detectar um dispositivo com Android no modo acessório, o acessório pode consultar a interface do dispositivo e os descritores de endpoint para obter endpoints em massa para comunicação com o dispositivo.

O número de interfaces e terminais em massa depende do ID do produto. Um dispositivo com Android com um ID de produto de:

  • 0x2D00 tem uma interface com dois terminais em massa para comunicação de entrada e saída.
  • 0x2D01 tem duas interfaces com dois terminais em massa cada para comunicação de entrada e saída. A primeira interface lida com comunicação padrão e a segunda interface lida com comunicação ADB. Para usar uma interface, localize os primeiros pontos de extremidade de entrada e saída em massa, defina a configuração do dispositivo para um valor de 1 com uma solicitação de dispositivo SET_CONFIGURATION ( 0x09 ) e comunique-se usando os pontos de extremidade.