Android Otwarte akcesorium 1.0

Akcesoria USB z systemem Android muszą być zgodne z protokołem Android Open Accessory (AOA), który określa, w jaki sposób akcesorium wykrywa i konfiguruje komunikację z urządzeniem z systemem Android. Akcesoria powinny wykonać następujące kroki:

  1. Poczekaj i wykryj podłączone urządzenie.
  2. Określ obsługę trybu akcesoriów urządzenia.
  3. Spróbuj uruchomić urządzenie w trybie akcesoriów (jeśli to konieczne).
  4. Jeżeli urządzenie obsługuje AOA, nawiąż komunikację z urządzeniem.

W poniższych sekcjach wyjaśniono, jak wdrożyć te kroki.

Poczekaj i wykryj podłączone urządzenia

Akcesoria powinny stale sprawdzać, czy są podłączone urządzenia z systemem Android. Po podłączeniu urządzenia akcesorium powinno określić, czy urządzenie obsługuje tryb akcesoriów.

Określ obsługę trybu akcesoriów

Uwaga: debugowanie USB nie jest wymagane do podłączenia akcesoriów, ale ADB może być konieczne podczas programowania. Aby uzyskać szczegółowe informacje, zobacz Uwagi dotyczące debugowania .

Po nawiązaniu połączenia urządzenie z systemem Android może znajdować się w jednym z trzech stanów:

  • Obsługuje tryb akcesoriów Androida i jest już w trybie akcesoriów.
  • Obsługuje tryb akcesoriów Androida, ale nie jest w trybie akcesoriów.
  • Nie obsługuje trybu akcesoriów Androida.

Podczas pierwszego połączenia akcesorium powinno sprawdzić wersję, identyfikator dostawcy i identyfikator produktu deskryptora urządzenia USB podłączonego urządzenia. Identyfikator dostawcy powinien odpowiadać identyfikatorowi Google ( 0x18D1 ). Jeśli urządzenie jest już w trybie akcesoriów, identyfikator produktu powinien mieć wartość 0x2D00 lub 0x2D01 , a akcesorium może nawiązać komunikację z urządzeniem poprzez punkty końcowe przesyłania zbiorczego przy użyciu własnego protokołu komunikacyjnego (urządzenie nie musi być uruchamiane w trybie akcesoriów).

Uwaga: 0x2D00 jest zarezerwowane dla urządzeń z systemem Android obsługujących tryb akcesoriów. 0x2D01 jest zarezerwowany dla urządzeń obsługujących tryb akcesoriów, a także protokół Android Debug Bridge (ADB), który udostępnia drugi interfejs z dwoma zbiorczymi punktami końcowymi dla ADB. Możesz użyć tych punktów końcowych do debugowania aplikacji akcesorium, jeśli symulujesz akcesorium na komputerze. Ogólnie rzecz biorąc, nie używaj tego interfejsu, chyba że akcesorium implementuje przejście do ADB na urządzeniu.

Jeśli wersja, identyfikator dostawcy lub identyfikator produktu w deskryptorze urządzenia USB nie odpowiadają oczekiwanym wartościom, akcesorium nie może określić, czy urządzenie obsługuje tryb akcesoriów systemu Android. Akcesorium powinno podjąć próbę uruchomienia urządzenia w trybie akcesoriów (szczegółowo poniżej), aby określić, czy urządzenie jest obsługiwane.

Kluczowy punkt: akcesorium USB musi wysłać nagłówek po pierwszym uzgadnianiu. Nagłówek zawiera producenta, model i wersję. Chociaż wersja jest polem opcjonalnym, jeśli zainstalowana jest aplikacja na Androida, która pasuje tylko do wersji, ale akcesorium nie wysyła wersji, urządzenia z Androidem 10 i starszym zostaną ponownie uruchomione z powodu zgłoszenia wyjątku w procesie systemowym.

Spróbuj uruchomić w trybie akcesoriów

Jeśli wersja, dostawca i identyfikator produktu nie odpowiadają urządzeniu z systemem Android w trybie akcesoriów, akcesorium nie może określić, czy urządzenie obsługuje tryb akcesoriów (ale nie jest w nim) lub czy urządzenie nie obsługuje trybu akcesoriów. Może się tak zdarzyć, ponieważ urządzenia obsługujące tryb akcesoriów (ale nie działające w trybie akcesoriów) początkowo zgłaszają dostawcę producenta urządzenia i identyfikatory produktu, a nie dostawcę AOA i identyfikatory produktu.

Akcesorium powinno spróbować uruchomić urządzenie w trybie akcesoriów, aby sprawdzić, czy urządzenie obsługuje ten tryb:

  1. Wyślij żądanie kontrolne 51 („Pobierz protokół”), aby sprawdzić, czy urządzenie obsługuje protokół akcesoriów Androida. Jeśli urządzenie obsługuje protokół, zwraca niezerową liczbę reprezentującą obsługiwaną wersję protokołu. Żądanie kontroli znajduje się w punkcie końcowym 0 i ma następującą charakterystykę:
    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. Jeśli urządzenie zwróci obsługiwaną wersję protokołu, wyślij do urządzenia żądanie kontroli zawierające ciąg znaków identyfikacyjnych. Informacje te umożliwiają urządzeniu określenie odpowiedniego zastosowania dla akcesorium (lub przedstawienie użytkownikowi adresu URL, jeśli odpowiednia aplikacja nie istnieje). Żądanie kontroli znajduje się w punkcie końcowym 0 (dla każdego identyfikatora ciągu) i ma następującą charakterystykę:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Obsługiwane są następujące identyfikatory ciągów o maksymalnym rozmiarze 256 bajtów dla każdego ciągu (musi być zakończony zerem przez \0 ).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Wyślij żądanie sterowania, aby poprosić urządzenie o uruchomienie w trybie akcesoriów. Żądanie kontroli znajduje się w punkcie końcowym 0 i ma następującą charakterystykę:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Po wykonaniu tych kroków akcesorium powinno poczekać, aż podłączone urządzenie USB ponownie pojawi się na magistrali w trybie akcesorium, a następnie ponownie wyliczyć podłączone urządzenia. Algorytm określa obsługę trybu akcesoriów , sprawdzając identyfikatory dostawcy i produktu, które powinny być prawidłowe (na przykład odpowiadać identyfikatorom dostawcy i produktu Google, a nie producentowi urządzenia), jeśli urządzenie pomyślnie przełączyło się w tryb akcesoriów. Jeśli identyfikatory i wersja są prawidłowe, akcesorium przesuwa się, aby nawiązać komunikację z urządzeniem .

Uwaga: AOA nie obsługuje obecnie jednoczesnych połączeń AOA i MTP. Aby przełączyć się z AOA na MTP, akcesorium musi najpierw odłączyć urządzenie USB (fizycznie lub w sposób równoważny elektrycznie), a następnie ponownie podłączyć przy użyciu protokołu MTP.

Jeśli którykolwiek krok zakończy się niepowodzeniem, akcesorium określi, że urządzenie nie obsługuje trybu akcesoriów Android i czeka na połączenie następnego urządzenia.

Nawiąż komunikację z urządzeniem

Jeśli akcesorium wykryje urządzenie z systemem Android w trybie akcesoriów, może wysłać zapytanie do interfejsu urządzenia i deskryptorów punktów końcowych, aby uzyskać zbiorcze punkty końcowe na potrzeby komunikacji z urządzeniem.

Liczba interfejsów i zbiorczych punktów końcowych zależy od identyfikatora produktu. Urządzenie z systemem Android o identyfikatorze produktu:

  • 0x2D00 ma jeden interfejs z dwoma masowymi punktami końcowymi do komunikacji wejściowej i wyjściowej.
  • 0x2D01 ma dwa interfejsy z dwoma masowymi punktami końcowymi, każdy do komunikacji wejściowej i wyjściowej. Pierwszy interfejs obsługuje standardową komunikację, a drugi interfejs obsługuje komunikację ADB. Aby użyć interfejsu, zlokalizuj pierwszy zbiorczy punkt końcowy wejścia i wyjścia, ustaw konfigurację urządzenia na wartość 1 za pomocą żądania urządzenia SET_CONFIGURATION ( 0x09 ), a następnie skomunikuj się za pomocą punktów końcowych.