In diesem Dokument werden die Änderungen am Android Open Accessory-Protokoll (AOA) beschrieben. und Nahrungsergänzungsmittel und Dokumentation zu AOA 1.0 AOAv2 bietet folgende Funktionen:
- Audioausgabe (in Android 8.0 eingestellt)
- Unterstützung für Zubehör, das als ein oder mehrere Benutzeroberflächengeräte agiert (HIDs) auf das Android-Gerät übertragen.
Die für Android-App-Entwickler verfügbaren Android SDK APIs bleiben unverändert.
AOAv2-Unterstützung erkennen
So stellen Sie fest, ob ein verbundenes Android-Gerät Zubehör und die
unterstützte Protokollversion gesendet wird, muss das Zubehör eine getProtocol()
und überprüfen Sie das Ergebnis. Android-Geräte, die nur die Funktionen unterstützen
in AOAv1 muss 1
als Protokollversion zurückgeben. Geräte, die
die zusätzlichen Funktionen in AOAv2 unterstützen, muss 2
als
Protokollversion. AOAv2 ist abwärtskompatibel mit AOAv1,
die für das ursprüngliche Zubehörprotokoll entwickelt wurden, funktionieren auch mit neueren Android-Versionen
Geräte.
Das folgende Beispiel aus dem Accessory Development Kit 2011
Quellcode
(<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
)
Bibliothek diese Protokollprüfung veranschaulicht:
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 enthält neue USB-Produkt-IDs für jede Kombination von USB-Schnittstellen. im Zubehörmodus verfügbar:
Version | Produkt-ID | Kommunikation | Beschreibung |
---|---|---|---|
AOAv1 | 0x2D00 |
Accessoires | Stellt zwei Bulk-Endpunkte für die Kommunikation mit einer Android-App bereit. |
0x2D01 |
Zubehör + ADB | Für die Fehlerbehebung bei der Entwicklung von Zubehör. Nur verfügbar, wenn die Nutzer hat in den Android-Geräteeinstellungen USB-Debugging aktiviert. | |
AOAv2 | 0x2D02 |
Audio | Zum Streamen von Audio von einem Android-Gerät auf Zubehör |
0x2D03 |
Audio + ADB | ||
0x2D04 |
Zubehör + Audio | ||
0x2D05 |
Zubehör + Audio + ADB |
In AOAv1 verwendete Produkt-IDs (0x2D00
und 0x2D01
)
werden auch in AOAv2 unterstützt.
Audio-Unterstützung
AOAv2 unterstützt die Audioausgabe von einem Android-Gerät an ein über eine standardmäßige USB-Audioklasse-Schnittstelle mit 2 Kanälen, 16 Bit PCM-Audio mit einer Bitrate von 44.100 kHz (weitere Audiomodi können in in der Zukunft).
Um die Audiounterstützung zu aktivieren, muss das Zubehör eine neue USB-Steueranfrage senden:
**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
Dieser Befehl muss gesendet werden, bevor der Befehl
ACCESSORY_START
-Befehl zum Aufrufen des Zubehörmodus.
HID-Unterstützung
AOAv2 ermöglicht Zubehör die Registrierung einer oder mehrerer USB Human Interfaces Geräte (HID) mit einem Android-Gerät Dieser Ansatz kehrt die Richtung Kommunikation für typische USB-HID-Geräte wie USB-Mäuse und -Tastaturen. Normalerweise ist das HID-Gerät ein Peripheriegerät, das mit einem USB-Host verbunden ist (d.h. Computer), aber bei AOA kann der USB-Host als eine oder mehrere Eingaben fungieren. mit einem USB-Peripheriegerät verbinden.
HID-Unterstützung ist ein Proxy für standardmäßige HID-Ereignisse. die keine Annahmen über den Inhalt oder die Art der Ereignisse übergeben sie einfach an das Eingabesystem, wodurch ein AOAv2-Zubehör als beliebiges HID-Gerät fungieren (Maus, Tastatur, Gamecontroller usw.). Sie können HID verwenden Unterstützung der Bereitstellung grundlegender Funktionen, wie z. B. einer Schaltfläche für Wiedergabe/Pause auf einem Medium Dock oder für erweiterte Funktionen wie eine Dockingstation mit Maus und vollständige QWERTY-Tastatur.
AOAv2 fügt neue USB-Steuerungsanfragen hinzu, die es dem Zubehör ermöglichen, ein oder mehrere HID-Eingabegeräte an das Android-Gerät. HID-Unterstützung wird abgewickelt vollständig über Steuerungsanfragen am Endpunkt Null. Es ist also keine neue USB-Schnittstelle erforderlich. Die vier neuen Kontrollanforderungen sind:
- ACCESSORY_REGISTER_HID registriert ein neues HID-Gerät beim
Android-Gerät Im Zubehör ist eine ID angegeben, mit der das HID-Gerät für
die anderen drei Aufrufe. Diese ID ist gültig, bis die USB-Verbindung getrennt oder
Zubehör sendet
ACCESSORY_UNREGISTER_HID
, um die HID-Registrierung aufzuheben . - ACCESSORY_UNREGISTER_HID hebt die Registrierung eines HID-Geräts auf
zuvor bei
ACCESSORY_REGISTER_HID
registriert - ACCESSORY_SET_HID_REPORT_DESC sendet einen Berichtsdeskriptor für
ein HID-Gerät mit dem Android-Gerät verbinden. Mit dieser Anfrage wird das
Funktionen des HID-Geräts und muss gesendet werden, bevor HID-Ereignisse gemeldet werden
auf das Android-Gerät übertragen. Wenn der Berichtsdeskriptor größer als das Maximum ist
Paketgröße für Endpunkt null, mehrere
ACCESSORY_SET_HID_REPORT_DESC
-Befehle werden gesendet, um den gesamten Deskriptor zu finden. - ACCESSORY_SEND_HID_EVENT sendet Eingabeereignisse vom für das Android-Gerät.
Die Codedefinitionen für die neuen Kontrollanfragen lauten:
/* 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ät mit AOAv1
Das ursprüngliche Protokoll (AOAv1) bietet Unterstützung für eine Android-App, um direkt mit einem USB-Kabel zu kommunizieren. (Zubehör) über USB. AOAv2 setzt diese Unterstützung fort und bietet um dem Zubehör die Kommunikation mit dem Android-Betriebssystem zu ermöglichen (insbesondere Audio- und Eingabesysteme). Das Design von AOAv2 macht es ein Zubehör zu bauen, das die neue Audio- und HID-Unterstützung verwendet. Funktionen hinzugefügt werden. Verwenden Sie einfach die neuen Funktionen die ursprünglichen Funktionen.
AOAv2 verbinden ohne Android-App
Sie können Zubehör (z. B. ein Audiodock) entwerfen, das Audio und HID verwendet. unterstützt, kommuniziert aber nicht mit einer App auf dem Android-Gerät. Für Zubehörteile brauchen Nutzer keine Aufforderungen zum Suchen und das neu angeschlossene Zubehör mit einer Android-App verknüpft, mit ihr kommunizieren können.
Um solche Dialogfelder zu unterdrücken, nachdem eine Verbindung mit einem Zubehör hergestellt wurde, Zubehörteils nicht die Hersteller- und Modellnamen an das Android- . Wenn diese Strings nicht für das Android-Gerät bereitgestellt werden:
- Das System versucht nicht, eine App zur Kommunikation mit dem Zubehör zu finden.
- Die USB-Schnittstelle des Zubehörs ist nicht im USB-Anschluss des Android-Geräts vorhanden. nachdem das Gerät in den Zubehörmodus gewechselt ist.