Android Open Accessory 1.0

Android-USB-Zubehör muss den Vorgaben für Open Accessory (AOA) von Android entsprechen Protokoll, das definiert, wie Zubehör die Kommunikation mit einem Android-Gerät. Für Zubehör gelten die folgenden Schritte:

  1. Warten Sie, bis ein verbundenes Gerät erkannt wird.
  2. Ermitteln, ob das Gerät den Zubehörmodus unterstützt.
  3. Versuchen Sie, das Gerät im Zubehörmodus zu starten (falls erforderlich).
  4. Wenn das Gerät AOA unterstützt, stellen Sie die Kommunikation mit dem Gerät her.

In den folgenden Abschnitten wird erläutert, wie Sie diese Schritte implementieren.

Warten auf und Verbindung erkennen Geräte

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

Unterstützung des Zubehörmodus bestimmen

Hinweis:USB-Debugging ist zum Verbinden von Zubehör nicht erforderlich, ADB kann während der Entwicklung erforderlich sein. Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Überlegungen zur Fehlerbehebung:

Wenn ein Android-Gerät eine Verbindung herstellt, kann es einen von drei Status haben:

  • 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.
  • Android-Zubehörmodus wird nicht unterstützt.

Bei der ersten Verbindung sollte das Zubehör die Version, die Anbieter-ID und die Produkt-ID der USB-Gerätebeschreibung des verbundenen Geräts. Die Anbieter-ID muss mit der ID von Google (0x18D1) übereinstimmen. Wenn sich das Gerät bereits in Zubehörmodus muss die Produkt-ID 0x2D00 oder „0x2D01“ und das Zubehör können Kommunikation mit anderen das Gerät über Bulk-Übertragungsendpunkte mit eigener Kommunikation -Protokoll (das Gerät muss nicht im Zubehörmodus gestartet werden).

Hinweis: 0x2D00 ist reserviert für Android-Geräte, die den Zubehörmodus unterstützen 0x2D01 ist für Geräte reserviert, die den Zubehörmodus sowie die Android-Fehlerbehebung Bridge-Protokoll (ADB), das eine zweite Schnittstelle mit zwei Bulk-Endpunkten zur Verfügung stellt für ADB. Sie können diese Endpunkte zum Debuggen der Zubehöranwendung verwenden, wenn Sie simulieren das Zubehör auf einem Computer. Verwenden Sie diese Option -Schnittstelle, es sei denn, das Zubehör implementiert einen Passthrough zu ADB auf dem Gerät.

Wenn Version, Anbieter-ID oder Produkt-ID in der Beschreibung des USB-Geräts nicht erwarteten Werten entsprechen, kann mit dem Zubehör nicht festgestellt werden, ob das Gerät Android-Zubehörmodus. Das Zubehör sollte versuchen, das Gerät in Zubehörmodus (Details siehe unten), um die Geräteunterstützung zu bestimmen.

Wichtiger Hinweis : USB-Zubehör muss beim ersten Handshake einen Header senden. Der Header enthält den Hersteller, das Modell und Version. Die Version ist zwar ein optionales Feld, aber wenn eine Android-App installiert ist, die nur mit der Version übereinstimmt, aber das Zubehör keine Version sendet, werden Android-Geräte unter Android 10 und niedriger wird aufgrund einer Ausnahme des Systemprozesses.

Startversuch im Zubehörteil Modus

Wenn Versions-, Anbieter- und Produkt-ID nicht mit einem Android-basierten Gerät im Zubehörmodus verwendet, kann das Zubehör nicht feststellen, ob das Gerät nicht aktiviert ist) oder wenn das Gerät den Zubehörmodus nicht unterstützt. Dieses kann auftreten, weil Geräte, die den Zubehörmodus unterstützen, aber nicht im Zubehör enthalten sind, -Modus) die Anbieter- und Produkt-IDs des Geräteherstellers anstelle der AOA-Anbieter- und Produkt-IDs.

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

  1. Senden Sie eine 51-Steueranfrage („Get Protocol“), um festzustellen, ob das Gerät unterstützt das Protokoll für Android-Zubehör. Wenn das Gerät das Protokoll unterstützt, wird eine Zahl ungleich null zurückgegeben, die die unterstützte Protokollversion darstellt. Die Kontrollanfrage befindet sich am 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. Sende eine Kontrollanfrage, wenn das Gerät eine unterstützte Protokollversion zurückgibt mit identifizierenden Zeichenfolgeninformationen für das Gerät. Anhand dieser Informationen kann das um eine geeignete App für das Zubehör zu finden (oder eine URL an den Nutzer, wenn keine entsprechende Anwendung vorhanden ist). Die Kontrollgruppe Die Anfrage ist am Endpunkt 0 (für jede String-ID) mit dem folgenden Code: Eigenschaften:
    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 mit einer maximalen Größe von 256 Byte unterstützt. für jeden String (muss mit \0 enden).

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

Nachdem Sie diese Schritte ausgeführt haben, sollte das Zubehör warten, bis das USB-Kabel verbunden wird. um sich im Bus im Zubehörmodus neu vorzustellen, und dann verbundenen Geräten. Der Algorithmus bestimmt die Unterstützung des Zubehörmodus indem Sie die Anbieter- und Produkt-IDs prüfen. Diese sollten korrekt sein (z. B. entsprechende nicht an die IDs des Geräteherstellers, sondern an die Anbieter- und Produkt-IDs von Google), Das Gerät wurde in den Zubehörmodus gewechselt. Wenn IDs und Version korrekt sind, wird das Zubehör umgesetzt, Kommunikation mit dem Gerät.

Hinweis:AOA wird derzeit nicht unterstützt. gleichzeitige AOA- und MTP-Verbindungen. Für den Wechsel von AOA zu MTP muss das Zubehörteil muss zuerst das USB-Gerät trennen (entweder physisch oder an eine und stellen Sie die Verbindung dann über MTP wieder her.

Wenn ein Schritt fehlschlägt, stellt das Zubehör fest, dass das Gerät nicht unterstützt wird Android-Zubehörmodus und wartet, bis sich das nächste Gerät verbindet.

Kommunikation mit den Teammitgliedern das Gerät

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

Die Anzahl der Schnittstellen und Bulk-Endpunkte hängt von der Produkt-ID ab. Eine Android-Gerät mit folgender Produkt-ID:

  • 0x2D00 hat eine Schnittstelle mit zwei Bulk-Endpunkten für die Eingabe und die Ausgabekommunikation.
  • 0x2D01 hat zwei Schnittstellen mit jeweils zwei Bulk-Endpunkten für die Ein- und Ausgabekommunikation. Die erste Schnittstelle verarbeitet und die zweite Schnittstelle über die ADB-Kommunikation. Um eine die ersten Endpunkte für die Bulk-Eingabe und -Ausgabe finden, die Gerätekonfiguration auf den Wert „1“ mit einer SET_CONFIGURATION (0x09) Geräteanfrage und kommuniziere dann über die Endpunkte.