Google está empenhada em fazer avançar a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Android Open Acessório Protocol 2.0

Este documento descreve as mudanças no protocolo Android Open Acessório (AOA) desde seu lançamento inicial e suplementos documentação AOA 1.0 . AOAv2 adiciona as seguintes funcionalidades:

  • saída de áudio (preterido no Android 8.0).
  • Suporte para o desempenho acessório como um ou mais dispositivos de interface humana (HIDS) para o dispositivo Android.

APIs do Android SDK disponível para desenvolvedores de aplicativos Android são inalteradas.

suporte de detecção AOAv2

Para determinar se um conectados Android suporta os acessórios do dispositivo e a versão do protocolo suportado, um acessório deve enviar uma getProtocol() de comando e verificar o resultado. Dispositivos Android que suportam apenas o feautures em AOAv1 deve retornar 1 como a versão do protocolo; dispositivos que suportam os feautres adicionais em AOAv2 deve retornar 2 como a versão do protocolo. AOAv2 é compatível com AOAv1, então acessórios concebidos para o protocolo acessórios originais continuar a trabalhar com dispositivos Android mais recentes.

O exemplo a seguir a partir do 2011 acessório Kit de Desenvolvimento de código-fonte ( <adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp ) biblioteca demonstra essa verificação protocolo:

bool AndroidAccessory::switchDevice(byte addr)
{
    int protocol = getProtocol(addr);
    if (protocol >= 1) {
        Serial.print("device supports protocol 1 or higher\n");
    } else {
        Serial.print("could not read device protocol version\n");
        return false;
    }

    sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
    sendString(addr, ACCESSORY_STRING_MODEL, model);
    sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
    sendString(addr, ACCESSORY_STRING_VERSION, version);
    sendString(addr, ACCESSORY_STRING_URI, uri);
    sendString(addr, ACCESSORY_STRING_SERIAL, serial);

    usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR |
                USB_SETUP_RECIPIENT_DEVICE, ACCESSORY_START, 0, 0, 0, 0, NULL);
    return true;
}

AOAv2 inclui novas identificações de produto USB para cada combinação de interfaces USB disponíveis no modo acessório:

Versão ID do produto Comunicação Descrição
AOAv1 0x2D00 acessório Proporciona dois pontos de extremidade a granel para comunicar com uma aplicação Android.
0x2D01 acessório + adb Para fins de depuração durante o desenvolvimento acessório. Disponível apenas se o usuário tiver habilitado USB depuração nas configurações do dispositivo Android.
AOAv2 0x2D02 auditivo Para streaming de áudio de um dispositivo Android a um acessório.
0x2D03 áudio + adb
0x2D04 + Acessório audio
0x2D05 acessório + áudio + adb

IDs dos produtos utilizados na AOAv1 ( 0x2D00 e 0x2D01 ) continuam a ser suportados em AOAv2.

suporte de áudio

AOAv2 inclui suporte para a saída áudio a partir de um dispositivo Android a um acessório através de um interface de áudio classe norma USB capaz de dois canais, de áudio PCM de 16 bits com uma velocidade de 44,100 Khz bits (os modos de áudio adicionais podem ser adicionadas no futuro).

Para ativar o suporte de áudio, o acessório deve enviar uma nova solicitação de controle USB:

**SET_AUDIO_MODE**
requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
request:        58
value:          0 for no audio (default),
                1 for 2 channel, 16-bit PCM at 44100 KHz
index:          0
data            none

Este comando deve ser enviado antes de enviar o ACCESSORY_START de comando para entrar no modo acessório.

suporte HID

AOAv2 permite acessórios para registar um ou mais dispositivos USB de interface humana (HID) com um dispositivo Android. Esta abordagem inverte o sentido de comunicação para os dispositivos USB HID típicos, tais como ratinhos USB e teclados. Normalmente, o dispositivo HID é um periférico ligado a um hospedeiro USB (ou seja um computador pessoal), mas em AOA o hospedeiro USB pode actuar como um ou mais dispositivos de entrada para um periférico USB.

suporte HID é um proxy para eventos HID padrão; a aplicação não faz suposições sobre o conteúdo ou o tipo de eventos e simplesmente passa através do sistema de entrada, permitindo que um acessório AOAv2 para actuar como qualquer dispositivo HID (rato, teclado, o controlador de jogo, etc.). Você pode usar o suporte HID para fornecer funcionalidade básica, como um botão de play / pause em uma doca de mídia, ou para a funcionalidade avançada, como uma estação de ancoragem com um rato e um teclado QWERTY completo.

AOAv2 adiciona novas solicitações de controle USB que permitem o acessório para agir como um ou mais HID dispositivos de entrada para o dispositivo Android. suporte HID é tratado inteiramente através de solicitações de controle no nó de extremidade zero, de forma que nenhum novo interface USB é necessário. Os quatro novos pedidos de controlo são:

  • ACCESSORY_REGISTER_HID registra um novo dispositivo HID com o dispositivo Android. O acessório fornece uma ID usada para identificar o dispositivo HID para os outros três chamadas. Este ID é válido até desconexões USB ou até que o acessório envia ACCESSORY_UNREGISTER_HID para cancelar o registro do dispositivo HID.
  • ACCESSORY_UNREGISTER_HID cancela o registro de um dispositivo HID anteriormente registrado ACCESSORY_REGISTER_HID .
  • ACCESSORY_SET_HID_REPORT_DESC envia um descritor de relatório para um dispositivo HID para o dispositivo Android. Este pedido é usado para descrever as capacidades do dispositivo HID e devem ser enviadas antes de relatar quaisquer eventos HID para o dispositivo Android. Se o descritor relatório é maior que o tamanho máximo do pacote para endpoint zero, vários ACCESSORY_SET_HID_REPORT_DESC comandos são enviados para transferir todo o descritor.
  • ACCESSORY_SEND_HID_EVENT envia eventos de entrada do acessório para o dispositivo Android.

As definições de código para as novas solicitações de controle são:

/* Control request for registering a HID device.
 * Upon registering, a unique ID is sent by the accessory in the
 * value parameter. This ID will be used for future commands for
 * the device
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_REGISTER_HID_DEVICE
 *  value:          Accessory assigned ID for the HID device
 *  index:          total length of the HID report descriptor
 *  data            none
 */
#define ACCESSORY_REGISTER_HID         54

/* Control request for unregistering a HID device.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_REGISTER_HID
 *  value:          Accessory assigned ID for the HID device
 *  index:          0
 *  data            none
 */
#define ACCESSORY_UNREGISTER_HID         55

/* Control request for sending the HID report descriptor.
 * If the HID descriptor is longer than the endpoint zero max packet size,
 * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
 * commands. The data for the descriptor must be sent sequentially
 * if multiple packets are needed.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_SET_HID_REPORT_DESC
 *  value:          Accessory assigned ID for the HID device
 *  index:          offset of data in descriptor
 *                      (needed when HID descriptor is too big for one packet)
 *  data            the HID report descriptor
 */
#define ACCESSORY_SET_HID_REPORT_DESC         56

/* Control request for sending HID events.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_SEND_HID_EVENT
 *  value:          Accessory assigned ID for the HID device
 *  index:          0
 *  data            the HID report for the event
 */
#define ACCESSORY_SEND_HID_EVENT         57

Interoperabilidade com AOAv1

O protocolo original ( AOAv1 ) fornece suporte para uma aplicação Android para se comunicar diretamente com um host USB (acessório) através de USB. AOAv2 continua este apoio e adiciona novos recursos para permitir que o acessório para se comunicar com o próprio sistema operacional Android (especificamente os sistemas de entrada de áudio e). O design do AOAv2 torna possível construir um acessório que usa o novo suporte de áudio e HID, além do conjunto de recursos originais. Basta usar os novos recursos, juntamente com as características originais.

Conectando AOAv2 sem um app Android

Você pode projetar um acessório (como uma estação de áudio) que utiliza o suporte de áudio e HID, mas não se comunicar com um aplicativo no dispositivo Android. Para estes acessórios, os usuários não precisam receber avisos de diálogo para encontrar e associar o acessório recém-anexado a um aplicativo Android que pode se comunicar com ele.

Para suprimir tais diálogos depois de uma liga de acessórios, o acessório pode optar por não enviar o nome do fabricante e modelo para o dispositivo Android. Quando essas cordas não são fornecidos para o dispositivo Android:

  • O sistema não tenta encontrar uma aplicação para se comunicar com o acessório.
  • A interface USB acessório não está presente na configuração do dispositivo USB Android após o dispositivo entra acessório modo.