Acessório do Android Open 1.0

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

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

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

Esperar e detectar conectado dispositivos

Os acessórios precisam verificar continuamente se há dispositivos Android conectados. Quando um dispositivo está conectado, o acessório deve determinar se ele é compatível com o modo de acessório.

Determinar o suporte ao modo de acessório

Observação:a depuração USB não é necessária para conectar acessórios, mas O adb pode ser necessário durante o desenvolvimento. Para mais detalhes, consulte Considerações de depuração.

Quando um dispositivo Android se conecta, ele pode estar em um destes três estados:

  • Oferece suporte ao modo de acessório Android e já está nesse modo.
  • Oferece suporte ao modo de acessório Android, mas não está no modo de acessório.
  • Não é compatível com o modo de acessório Android.

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

Observação: 0x2D00 é reservado para Dispositivos com tecnologia Android compatíveis com o modo de acessório. 0x2D01 é reservado para dispositivos compatíveis com o modo de acessório, bem como para o Android Debug Protocolo Bridge (adb), que expõe uma segunda interface com dois endpoints em massa para ADB. É possível usar esses endpoints para depurar o aplicativo acessório se você está simulando o acessório em um computador. Em geral, não use isso interface, a menos que o acessório implemente uma passagem para o ADB no dispositivo.

Se a versão, o ID do fornecedor ou o ID do produto no descritor do dispositivo USB não corresponder aos valores esperados, o acessório não poderá determinar se o dispositivo é compatível Modo de acessório Android. O acessório deve tentar iniciar o dispositivo modo acessório (detalhado abaixo) para determinar o suporte do dispositivo.

Ponto-chave : um acessório USB precisa enviar um cabeçalho no handshake inicial. O cabeçalho contém as informações de fabricante, modelo para a versão anterior. Embora a versão seja um campo opcional, se um app Android que só estiver instalado corresponde à versão, mas o acessório não envia uma versão, os dispositivos Android em execução no Android 10 e versões anteriores serão reinicializados devido a uma exceção ser gerada no o processo do sistema.

Tentativa de iniciar no acessório modo

Se a versão, o fornecedor e os IDs do produto não corresponderem a uma conta do Android dispositivo em modo de acessório, o acessório não pode determinar se o dispositivo é compatível, mas não está no modo de acessório) ou se o dispositivo não for compatível com esse modo. Isso pode ocorrer porque os dispositivos compatíveis com o modo de acessório, mas não estão em modo de informa inicialmente o fornecedor do fabricante do dispositivo e os IDs do produto em vez de IDs de produto e fornecedor AOA.

O acessório deve tentar iniciar o dispositivo no modo de acessório para determinar se o dispositivo for compatível com esse modo:

  1. Enviar uma solicitação de controle 51 ("Receber protocolo") para determinar se o dispositivo oferece suporte ao protocolo de acessório Android. Se o dispositivo oferecer suporte ao protocolo, ela retornará um número diferente de zero que representa a versão do protocolo compatível. A solicitação de controle está no endpoint 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 compatível, envie uma solicitação de controle com a identificação de informações de string para o dispositivo. Essas informações permitem que dispositivo para determinar um aplicativo apropriado para o acessório (ou apresentar um URL ao usuário se não houver um aplicativo apropriado). O controle solicitação está no endpoint 0 (para cada ID de string) com o seguinte 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 IDs de string a seguir são aceitos, com um tamanho máximo de 256 bytes. para cada string (precisa terminar 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 que o dispositivo seja iniciado no modo de acessório. A solicitação de controle está no endpoint 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 o USB conectado para se apresentar novamente no barramento em modo de acessório e, em seguida, enumerar e dispositivos conectados. O algoritmo determina o suporte ao modo de acessório verificando os IDs de produto e fornecedor, que devem estar corretos (por exemplo, corresponder aos IDs de produto e fornecedor do Google em vez de aos IDs do fabricante do dispositivo) se o dispositivo entrou no modo de acessório. Se os IDs e a versão estiverem corretos, o acessório se move para estabelecer comunicação com o dispositivo.

Observação:no momento, a AOA não é compatível com a AOA. conexões AOA e MTP simultâneas. Para mudar de AOA para MTP, o acessório primeiro é necessário desconectar o dispositivo USB (seja fisicamente ou equivalente) e depois reconecte usando o MTP.

Se alguma etapa falhar, o acessório determinará que o dispositivo não é compatível Modo de acessório Android e espera até que o próximo dispositivo seja conectado.

Estabelecer comunicação com o dispositivo

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

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

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