Ce document décrit les modifications apportées au protocole Android Open Accessory (AOA) depuis sa version initiale et ses compléments Documentation AOA 1.0 AOAv2 ajoute les fonctionnalités suivantes:
- Sortie audio (obsolète dans Android 8.0)
- Prise en charge de l'accessoire faisant office d'un ou de plusieurs dispositifs d'interface humaine (HID) à l'appareil Android.
Les API SDK Android disponibles pour les développeurs d'applications Android restent inchangées.
Détecter la prise en charge d'AOAv2
Pour déterminer si un appareil Android connecté est compatible avec les accessoires et
version de protocole compatible, un accessoire doit envoyer un getProtocol()
et vérifiez le résultat. Appareils Android uniquement compatibles avec les fonctionnalités
dans AOAv1 doit renvoyer 1
comme version de protocole. appareils qui
prendre en charge les fonctionnalités supplémentaires dans AOAv2 doit renvoyer 2
en tant que
la version du protocole. AOAv2 est rétrocompatible avec AOAv1, de sorte que les accessoires
conçus pour le protocole d'accessoire d'origine continuent de fonctionner avec les nouvelles versions d'Android
appareils.
L'exemple suivant tiré du kit de développement d'accessoires de 2011
code source
(<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
)
illustre cette vérification de protocole:
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 inclut de nouveaux identifiants produit USB pour chaque combinaison d'interfaces USB disponibles en mode accessoire:
Version | Identifiant produit | Communication | Description |
---|---|---|---|
AOAv1 | 0x2D00 |
accessoires | Fournit deux points de terminaison groupés pour la communication avec une application Android. |
0x2D01 |
accessoire + adb | À des fins de débogage lors du développement d'accessoires. Disponible uniquement si L'utilisateur a activé le débogage USB dans les paramètres de l'appareil Android. | |
AOAv2 | 0x2D02 |
audio | Pour diffuser des contenus audio depuis un appareil Android vers un accessoire |
0x2D03 |
audio + adb | ||
0x2D04 |
accessoire + audio | ||
0x2D05 |
accessoire + audio + adb |
Identifiants produit utilisés dans AOAv1 (0x2D00
et 0x2D01
)
restent pris en charge dans AOAv2.
Compatibilité audio
AOAv2 prend en charge la sortie audio d'un appareil Android vers via une interface de classe audio USB standard avec 2 canaux, 16 bits Audio PCM avec un débit de 44 100 kHz (des modes audio supplémentaires peuvent être ajoutés dans à l'avenir).
Pour activer la compatibilité audio, l'accessoire doit envoyer une nouvelle requête de commande 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
Cette commande doit être envoyée avant d'envoyer la
ACCESSORY_START
pour accéder au mode accessoire.
Compatibilité HID
AOAv2 permet aux accessoires d'enregistrer une ou plusieurs interfaces humaines USB Appareils (HID) avec un appareil Android. Cette approche inverse le sens communication pour les périphériques USB HID standards tels que les souris et les claviers USB. Normalement, le périphérique HID est un périphérique connecté à un hôte USB (par exemple, ordinateur personnel), mais dans l'AOA, l'hôte USB peut servir d'une ou plusieurs entrées des appareils à un périphérique USB.
La prise en charge HID est un proxy pour les événements HID standards. la la mise en œuvre ne fait aucune hypothèse sur le contenu ou le type des événements et le transmet simplement au système d'entrée, ce qui permet à un accessoire AOAv2 agir comme n'importe quel appareil HID (souris, clavier, manette de jeu, etc.) ; Vous pouvez utiliser HID la prise en charge de la fourniture de fonctionnalités de base, telles qu'un bouton lecture/pause sur un contenu multimédia ou pour des fonctionnalités avancées telles qu'une station d'accueil avec une souris et clavier QWERTY complet.
AOAv2 ajoute de nouvelles requêtes de contrôle USB qui permettent à l’accessoire d’agir en tant que un ou plusieurs périphériques d'entrée HID à l'appareil Android. La compatibilité HID est assurée entièrement via des requêtes de contrôle sur le point de terminaison zéro. Ainsi, aucune nouvelle interface USB n'est nécessaires. Les quatre nouvelles demandes de contrôle sont les suivantes:
- ACCESSORY_REGISTER_HID enregistre un nouvel appareil HID avec le paramètre
un appareil Android. L'accessoire fournit un ID permettant d'identifier l'appareil HID pour
les trois autres appels. Cet ID est valide jusqu'à ce que la clé USB se déconnecte ou jusqu'à ce que le
l'accessoire envoie
ACCESSORY_UNREGISTER_HID
pour annuler l'enregistrement du HID appareil. - ACCESSORY_UNREGISTER_HID annule l'enregistrement d'un appareil HID
précédemment enregistré auprès de
ACCESSORY_REGISTER_HID
. - ACCESSORY_SET_HID_REPORT_DESC envoie un descripteur de rapport pour
un appareil HID à l'appareil Android. Cette requête sert à décrire
de l'appareil HID et doivent être envoyées avant de signaler tout événement HID
sur l'appareil Android. Si le descripteur du rapport est plus grand que la taille maximale
la taille du paquet pour le point de terminaison zéro, plusieurs
Des commandes
ACCESSORY_SET_HID_REPORT_DESC
sont envoyées pour transférer l'intégralité du descripteur. - ACCESSORY_SEND_HID_EVENT envoie les événements d'entrée à partir de à l'appareil Android.
Les définitions de code pour les nouvelles requêtes de contrôle sont les suivantes:
/* 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
Interopérabilité avec AOAv1
Le protocole original (AOAv1) permet à une application Android de communiquer directement avec un câble hôte (accessoire) via USB. AOAv2 poursuit cette prise en charge et ajoute de nouvelles fonctionnalités pour permettre à l'accessoire de communiquer avec le système d'exploitation Android lui-même (en particulier les systèmes audio et d'entrée). La conception d'AOAv2 possible de créer un accessoire compatible avec les technologies audio et HID en plus de l'ensemble de fonctionnalités d'origine. Il vous suffit d'utiliser les nouvelles fonctionnalités les caractéristiques d'origine.
Connecter AOAv2 sans Application Android
Vous pouvez concevoir un accessoire (comme une station d'accueil audio) qui utilise l'audio et le HID. mais ne communique pas avec une application sur l'appareil Android. Pour ces accessoires, les utilisateurs n'ont pas besoin de recevoir d'invites de boîte de dialogue pour trouver et associer le nouvel accessoire à une application Android qui peut communiquer avec elle.
Pour supprimer ces boîtes de dialogue après la connexion d'un accessoire, accessoire peut choisir de ne pas envoyer le nom du fabricant et du modèle au appareil. Lorsque ces chaînes ne sont pas fournies à l'appareil Android:
- Le système ne cherche pas d'application pour communiquer avec l'accessoire.
- L'interface USB de l'accessoire n'est pas présente dans le port USB de l'appareil Android configuration après que l'appareil est passé en mode accessoire.