Android Open Accessory 1.0

Android-USB-Zubehör muss dem Android Open Accessory (AOA)-Protokoll entsprechen. Dieses definiert, wie ein Zubehör die Kommunikation mit einem Android-Gerät erkennt und einrichtet. Für Zubehör gelten die folgenden Schritte:

  1. Warten Sie auf ein verbundenes Gerät und erkennen Sie es.
  2. Prüfen, ob der Zubehörmodus des Geräts unterstützt wird
  3. Versuchen Sie, das Gerät im Zubehörmodus zu starten (falls erforderlich).
  4. Wenn das Gerät AOA unterstützt, stellen Sie eine Verbindung zum Gerät her.

In den folgenden Abschnitten wird beschrieben, wie Sie diese Schritte implementieren.

Auf verbundene Geräte warten und diese erkennen

Das Zubehör sollte kontinuierlich nach verbundenen Android-Geräten suchen. Wenn ein Gerät verbunden ist, sollte das Zubehör prüfen, ob das Gerät den Zubehörmodus unterstützt.

Unterstützung für Zubehörmodus ermitteln

Hinweis:Das USB-Debugging ist zum Verbinden von Zubehör nicht erforderlich, ADB kann aber während der Entwicklung erforderlich sein. Weitere Informationen finden Sie unter Hinweise zum Debuggen.

Wenn ein Android-Gerät eine Verbindung herstellt, kann es sich in einem der drei folgenden Status befinden:

  • Unterstützt den Android-Zubehörmodus und befindet sich bereits im Zubehörmodus.
  • Unterstützt den Android-Zubehörmodus, befindet sich aber nicht im Zubehörmodus.
  • Der Android-Zubehörmodus wird nicht unterstützt.

Bei der Erstverbindung sollte das Zubehör die Version, die Anbieter-ID und die Produkt-ID des USB-Geräte-Descriptors des verbundenen Geräts prüfen. Die Anbieter-ID muss mit der ID von Google (0x18D1) übereinstimmen. Wenn sich das Gerät bereits im Zubehörmodus befindet, muss die Produkt-ID 0x2D00 oder 0x2D01 sein. Das Zubehör kann dann über Bulk-Übertragungsendpunkte mithilfe seines eigenen Kommunikationsprotokolls eine Verbindung zum Gerät herstellen. Das Gerät muss nicht im Zubehörmodus gestartet werden.

Hinweis:0x2D00 ist für Android-Geräte reserviert, die den Zubehörmodus unterstützen. 0x2D01 ist für Geräte reserviert, die den Zubehörmodus sowie das Android Debug Bridge-Protokoll (ADB) unterstützen. Dieses Protokoll stellt eine zweite Schnittstelle mit zwei Bulk-Endpunkten für ADB bereit. Sie können diese Endpunkte zum Debuggen der Zubehöranwendung verwenden, wenn Sie das Zubehör auf einem Computer simulieren. Verwenden Sie diese Schnittstelle im Allgemeinen nur, wenn das Zubehör einen Passthrough an ADB auf dem Gerät implementiert.

Wenn die Version, die Anbieter-ID oder die Produkt-ID im USB-Geräte-Descriptor nicht mit den erwarteten Werten übereinstimmen, kann das Zubehör nicht feststellen, ob das Gerät den Android-Zubehörmodus unterstützt. Das Zubehör sollte versuchen, das Gerät im Zubehörmodus zu starten (siehe unten), um die Geräteunterstützung zu ermitteln.

Wichtig : Ein USB-Zubehör muss beim ersten Handshake einen Header senden. Der Header enthält den Hersteller, das Modell und die Version. Obwohl „version“ ein optionales Feld ist, werden Android-Geräte mit Android 10 und niedriger neu gestartet, wenn eine Android-App installiert ist, die nur mit der Version übereinstimmt, das Zubehör jedoch keine Version sendet, da im Systemprozess eine Ausnahme ausgelöst wird.

Im Zubehörmodus starten

Wenn die Versions-, Anbieter- und Produkt-IDs nicht zu einem Android-Gerät im Zubehörmodus passen, kann das Zubehör nicht feststellen, ob das Gerät den Zubehörmodus unterstützt (aber nicht aktiv ist) oder ihn nicht unterstützt. Das kann passieren, weil Geräte, die den Zubehörmodus unterstützen, aber nicht im Zubehörmodus sind, anfangs die Anbieter- und Produkt-IDs des Geräteherstellers anstelle der Anbieter- und Produkt-IDs der AOA melden.

Das Zubehör sollte versuchen, das Gerät im Zubehörmodus zu starten, um festzustellen, ob das Gerät diesen Modus unterstützt:

  1. Senden Sie eine 51-Kontrollanfrage („Get Protocol“), um festzustellen, ob das Gerät das Android-Zubehörprotokoll unterstützt. Wenn das Gerät das Protokoll unterstützt, wird eine Zahl ungleich 0 zurückgegeben, die die unterstützte Protokollversion darstellt. Die Steueranfrage befindet sich an Endpunkt 0 mit den folgenden Eigenschaften:
    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. Wenn das Gerät eine unterstützte Protokollversion zurückgibt, senden Sie eine Steueranfrage mit identifizierenden Stringinformationen an das Gerät. Anhand dieser Informationen kann das Gerät eine geeignete Anwendung für das Zubehör ermitteln oder dem Nutzer eine URL anzeigen, falls keine geeignete Anwendung vorhanden ist. Die Kontrollanfrage wird an Endpunkt 0 (für jede String-ID) mit den folgenden Merkmalen gesendet:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Die folgenden String-IDs werden unterstützt. Die maximale Größe für jeden String beträgt 256 Byte. Sie müssen mit \0 endbeenden.

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Senden Sie eine Steueranfrage, um das Gerät im Zubehörmodus zu starten. Die Steueranfrage befindet sich an Endpunkt 0 mit den folgenden Eigenschaften:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Nach diesen Schritten sollte das Zubehör warten, bis sich das verbundene USB-Gerät im Zubehörmodus wieder auf dem Bus anmeldet, und dann die verbundenen Geräte neu auflisten. Der Algorithmus ermittelt die Unterstützung des Zubehörmodus, indem er die Anbieter- und Produkt-IDs prüft. Diese müssen korrekt sein, z. B. den Anbieter- und Produkt-IDs von Google entsprechen, anstatt den IDs des Geräteherstellers, wenn das Gerät erfolgreich in den Zubehörmodus gewechselt ist. Wenn die IDs und die Version korrekt sind, wird versucht, eine Verbindung zum Gerät herzustellen.

Hinweis:AOA unterstützt derzeit keine gleichzeitigen AOA- und MTP-Verbindungen. Wenn Sie von AOA zu MTP wechseln möchten, muss das Zubehör zuerst das USB-Gerät trennen (entweder physisch oder auf elektrisch äquivalente Weise) und dann über MTP wieder verbinden.

Wenn ein Schritt fehlschlägt, erkennt das Zubehör, dass das Gerät den Android-Zubehörmodus nicht unterstützt, und wartet, bis das nächste Gerät eine Verbindung herstellt.

Kommunikation mit dem Gerät herstellen

Wenn das Zubehör ein Android-Gerät im Zubehörmodus erkennt, kann es die Geräteoberfläche und Endpunktbeschreibungen abfragen, um die Bulk-Endpunkte für die Kommunikation mit dem Gerät abzurufen.

Die Anzahl der Schnittstellen und Bulk-Endpunkte hängt von der Produkt-ID ab. Ein Android-Gerät mit einer der folgenden Produkt-IDs:

  • 0x2D00 hat eine Schnittstelle mit zwei Bulk-Endpunkten für die Eingabe- und Ausgabekommunikation.
  • 0x2D01 hat zwei Schnittstellen mit jeweils zwei Bulk-Endpunkten für die Eingabe- und Ausgabekommunikation. Die erste Schnittstelle verarbeitet die Standardkommunikation und die zweite Schnittstelle die ADB-Kommunikation. Wenn Sie eine Benutzeroberfläche verwenden möchten, suchen Sie die ersten Bulk-Eingabe- und ‑Ausgabeendpunkte, legen Sie die Gerätekonfiguration mit einer SET_CONFIGURATION-Geräteanfrage (0x09) auf den Wert „1“ fest und kommunizieren Sie dann über die Endpunkte.