Accessorio Android Open 1.0

Gli accessori USB Android devono essere conformi ad Android Open Accessory (AOA) che definisce il modo in cui un accessorio rileva e configura la comunicazione con un dispositivo Android. Gli accessori devono eseguire i seguenti passaggi:

  1. Attendi e rileva un dispositivo connesso.
  2. Determina il supporto della modalità accessorio del dispositivo.
  3. Prova ad avviare il dispositivo in modalità accessorio (se necessario).
  4. Se il dispositivo supporta AOA, stabilisci la comunicazione con il dispositivo.

Le sezioni seguenti spiegano come implementare questi passaggi.

Attendi e rileva connessione dispositivi

Gli accessori devono controllare continuamente la presenza di dispositivi Android connessi. Quando un dispositivo è connesso, l'accessorio dovrebbe determinare se supporta la modalità accessorio.

Determina il supporto della modalità accessorio

Nota: per collegare gli accessori il debug USB non è necessario, ma Potrebbe essere necessario il componente ADB durante lo sviluppo. Per maggiori dettagli, vedi Considerazioni sul debug.

Quando un dispositivo Android si connette, può avere uno dei tre seguenti stati:

  • Supporta la modalità accessorio Android ed è già in questa modalità.
  • Supporta la modalità accessorio Android, ma non è in modalità accessorio.
  • Non supporta la modalità accessorio Android.

Durante la connessione iniziale, l'accessorio deve controllare la versione, l'ID del fornitore e l'ID prodotto del descrittore del dispositivo USB del dispositivo collegato. L'ID del fornitore deve corrispondere all'ID Google (0x18D1). Se il dispositivo è già inserito accessorio, l'ID prodotto deve essere 0x2D00 o 0x2D01 e l'accessorio possono instaurare una comunicazione con dispositivo attraverso endpoint di trasferimento collettivo che utilizzano la propria comunicazione (non è necessario avviarlo in modalità accessorio).

Nota: 0x2D00 è riservato a Dispositivi Android che supportano la modalità accessorio. 0x2D01 è riservata ai dispositivi che supportano la modalità accessorio e il debug Android Protocollo Bridge (ADB), che espone una seconda interfaccia con due endpoint di massa per ADB. Puoi utilizzare questi endpoint per eseguire il debug dell'applicazione dell'accessorio se stai simulando l'accessorio su un computer. In generale, non utilizzare questo a meno che l'accessorio non implementi un passthrough ad ADB sul dispositivo.

Se la versione, l'ID del fornitore o l'ID prodotto nel descrittore del dispositivo USB non corrispondano ai valori previsti, l'accessorio non è in grado di determinare se il dispositivo supporta Modalità accessorio Android. L'accessorio dovrebbe tentare di avviare il dispositivo tra della modalità accessorio (dettagliata di seguito) per determinare il supporto dei dispositivi.

Punto chiave : un accessorio USB deve invia un'intestazione al momento dell'handshake iniziale. L'intestazione contiene i dati produttore, modello completamente gestita. Sebbene il campo relativo alla versione sia facoltativo, se è installata un'app per Android che corrisponde alla versione, ma l'accessorio non invia una versione, i dispositivi Android su Android 10 e versioni precedenti verrà riavviato a causa della generazione di un'eccezione il processo di sistema.

Prova ad avviare nell'accessorio modalità

Se gli ID versione, fornitore e prodotto non corrispondono a un dispositivo in modalità accessorio, l'accessorio non è in grado di determinare se supporta (ma non è in modalità accessorio o se il dispositivo non supporta questa modalità. Questo perché i dispositivi che supportano la modalità accessorio (ma non sono in modalità accessorio) ) indica inizialmente il produttore del dispositivo e gli ID prodotto anziché gli ID fornitore e prodotto AOA.

L'accessorio dovrebbe provare ad avviare il dispositivo in modalità accessorio per determinare se il dispositivo supporta quella modalità:

  1. Inviare una richiesta di controllo 51 ("Get Protocol") per determinare se il dispositivo supporta il protocollo accessori Android. Se il dispositivo supporta il protocollo, restituisce un numero diverso da zero che rappresenta la versione del protocollo supportata. La richiesta di controllo si trova sull'endpoint 0 con le seguenti caratteristiche:
    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 il dispositivo restituisce una versione del protocollo supportata, invia una richiesta di controllo informazioni sulla stringa di identificazione al dispositivo. Queste informazioni consentono dispositivo per stabilire un'applicazione appropriata per l'accessorio (oppure presentare un l'URL dell'utente se non esiste un'applicazione appropriata). Il gruppo di controllo si trova sull'endpoint 0 (per ogni ID stringa) con le caratteristiche:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Sono supportati i seguenti ID stringa, con una dimensione massima di 256 byte per ogni stringa (deve avere terminati zero con \0).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Invia una richiesta di controllo per chiedere al dispositivo di avviarsi in modalità accessorio. La la richiesta di controllo si trova sull'endpoint 0 con le seguenti caratteristiche:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Dopo aver completato questi passaggi, l'accessorio dovrebbe attendere che il cavo USB dispositivo per reintrodursi sul bus in modalità accessorio, quindi enumerare di nuovo dispositivi connessi. L'algoritmo determina il supporto della modalità accessorio controllando gli ID fornitore e prodotto, che dovrebbero essere corretti (ad esempio, agli ID fornitore e prodotto di Google anziché agli ID produttore del dispositivo) se il dispositivo è passato alla modalità accessorio. Se gli ID e la versione sono corretti, l'accessorio si sposta per stabilire comunicazione con il dispositivo.

Nota: l'AOA al momento non supporta connessioni simultanee AOA e MTP. Per passare da AOA a MTP, l'accessorio deve prima scollegare il dispositivo USB (fisicamente o in una equivalente) e poi riconnettiti utilizzando MTP.

Se un passaggio non funziona, l'accessorio stabilisce che il dispositivo non supporta modalità accessorio Android e attende che il dispositivo successivo si connetta.

Stabilisci la comunicazione con il dispositivo

Se l'accessorio rileva un dispositivo Android in modalità accessorio, il può interrogare i descrittori dell'interfaccia e dell'endpoint del dispositivo per ottenere endpoint di massa per comunicare con il dispositivo.

Il numero di interfacce e di endpoint collettivi dipende dall'ID prodotto. Un Dispositivo basato su Android con un ID prodotto di:

  • 0x2D00 ha un'interfaccia con due endpoint collettivi per l'input e comunicazione di output.
  • 0x2D01 ha due interfacce con due endpoint collettivi, ciascuno comunicazione di input e output. La prima interfaccia gestisce gli standard mentre la seconda interfaccia gestisce la comunicazione ADB. Per utilizzare un , individua il primo endpoint di input e output collettivo, imposta configurazione del dispositivo sul valore 1 con SET_CONFIGURATION (0x09), quindi comunicare usando gli endpoint.