Google si impegna a far progredire equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Android Open Accessory Protocol 2.0

Questo documento descrive i cambiamenti nel protocollo Android Open Accessory (AOA) dal suo rilascio iniziale e supplementi AOA 1.0 documentazione . AOAv2 aggiunge le seguenti caratteristiche:

  • Uscita audio (deprecato in Android 8.0).
  • Il supporto per la recitazione accessori come uno o più dispositivi di interfaccia umana (HID) al dispositivo Android.

API SDK Android disponibili per gli sviluppatori di applicazioni Android sono invariati.

Supporto Rilevazione AOAv2

Per determinare se un collegati Android supporta dispositivi accessori e la versione del protocollo supportato, un accessorio deve inviare un getProtocol() di comando e controllare il risultato. Dispositivi Android che supportano solo la Feautures in AOAv1 devono ritornare 1 come la versione del protocollo; i dispositivi che supportano le feautres supplementari in AOAv2 devono restituire 2 , come la versione del protocollo. AOAv2 è compatibile con AOAv1, quindi accessori progettati per il protocollo di accessori originali continuare a lavorare con i dispositivi più recenti Android.

L'esempio che segue dal 2011 accessorio Kit di sviluppo del codice sorgente ( <adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp ) biblioteca dimostra questo controllo protocollo:

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 include nuovi ID di prodotto USB per ciascuna combinazione di interfacce USB disponibili in modalità accessorio:

Versione numero identificativo del prodotto Comunicazione Descrizione
AOAv1 0x2D00 accessorio Fornisce due endpoint bulk per comunicare con un'applicazione Android.
0x2D01 Accessorio + adb Per scopi di debug durante lo sviluppo degli accessori. Disponibile solo se l'utente ha abilitato USB Debugging nelle impostazioni del dispositivo Android.
AOAv2 0x2D02 Audio Per lo streaming audio da un dispositivo Android ad un accessorio.
0x2D03 audio + adb
0x2D04 + Audio accessorio
0x2D05 Accessorio + audio + adb

Gli ID di prodotti utilizzati in AOAv1 ( 0x2D00 e 0x2D01 ) continuano ad essere supportati in AOAv2.

supporto audio

AOAv2 include il supporto per l'uscita audio da un dispositivo Android ad un accessorio tramite un'interfaccia classe audio standard USB capace di 2 canali, audio PCM a 16 bit con un bit rate di 44100 Khz (modalità audio supplementari possono essere aggiunti in futuro).

Per abilitare il supporto audio, l'accessorio deve inviare una nuova richiesta di controllo 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

Questo comando deve essere inviato prima di inviare ACCESSORY_START di comando per entrare in modalità accessorio.

supporto HID

AOAv2 permette accessori di registrare una o più Human Interface Devices USB (HID) con un dispositivo Android. Questo approccio inverte la direzione di comunicazione per dispositivi USB HID tipici come mouse e tastiere USB. Normalmente, il dispositivo HID è una periferica collegata a un host USB (ad esempio un personal computer), ma nel AOA l'host USB può fungere da uno o più dispositivi di ingresso ad una periferica USB.

supporto HID è un proxy per gli eventi HID standard; l'attuazione fa alcuna ipotesi circa il contenuto o il tipo di eventi e semplicemente passa attraverso il sistema di input, consentendo un accessorio AOAv2 di agire come qualsiasi dispositivo HID (mouse, tastiera, controller di gioco, etc.). È possibile utilizzare il supporto HID per fornire funzionalità di base, come ad esempio un pulsante di riproduzione / pausa su un bacino di supporto, o per funzionalità avanzate come ad esempio una docking station con un mouse e una tastiera QWERTY completa.

AOAv2 aggiunge nuove richieste di controllo USB che permettono l'accessorio di agire come uno o più dispositivi di input HID al dispositivo Android. supporto HID è gestita interamente attraverso le richieste di controllo sul punto finale pari a zero, è necessaria quindi nessuna nuova interfaccia USB. Le quattro nuove richieste di controllo sono:

  • ACCESSORY_REGISTER_HID registra un nuovo dispositivo HID con il dispositivo Android. L'accessorio fornisce un ID utilizzato per identificare il dispositivo HID per gli altri tre chiamate. Questo ID è valido fino disconnette USB o finché l'accessorio invia ACCESSORY_UNREGISTER_HID annullare la registrazione del dispositivo HID.
  • ACCESSORY_UNREGISTER_HID annulla la registrazione di un dispositivo HID registrato in precedenza con ACCESSORY_REGISTER_HID .
  • ACCESSORY_SET_HID_REPORT_DESC invia un descrittore di rapporto per un dispositivo HID al dispositivo Android. Questa richiesta è usato per descrivere le capacità del dispositivo HID e deve essere inviato prima di segnalare qualsiasi evento HID al dispositivo Android. Se il descrittore rapporto è maggiore della dimensione massima del pacchetto per endpoint zero multipli ACCESSORY_SET_HID_REPORT_DESC comandi vengono inviati per trasferire l'intera descrittore.
  • ACCESSORY_SEND_HID_EVENT invia eventi di input dal accessorio al dispositivo Android.

Le definizioni di codice per le nuove richieste di controllo sono:

/* 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

Interoperabilità con AOAv1

Il protocollo originale ( AOAv1 ) fornisce il supporto per un'applicazione Android di comunicare direttamente con un host USB (accessorio) tramite USB. AOAv2 continua questo supporto e aggiunge nuove funzionalità per consentire l'accessorio di comunicare con il sistema operativo Android stessa (in particolare l'audio e sistemi di input). La progettazione di AOAv2 rende possibile la costruzione di un accessorio che utilizza il nuovo supporto audio e HID in aggiunta al set di funzionalità originale. Basta usare le nuove funzionalità con le caratteristiche originali.

Collegamento AOAv2 senza un app Android

È possibile progettare un accessorio (ad esempio un dock audio) che utilizza il supporto audio e HID, ma non comunica con un'applicazione sul dispositivo Android. Per questi accessori, gli utenti non hanno bisogno di ricevere richieste di dialogo per la ricerca e associare l'accessorio appena collegato con un'applicazione Android che può comunicare con esso.

Per sopprimere tali finestre di dialogo dopo un accessorio collega, l'accessorio può scegliere di non inviare i nomi del produttore e del modello al dispositivo Android. Quando queste stringhe non sono forniti al dispositivo Android:

  • Il sistema non tenta di trovare un'applicazione per comunicare con l'accessorio.
  • L'interfaccia USB accessorio non è presente nella configurazione del dispositivo USB Android dopo il dispositivo entra in modalità accessorio.