Android Open Akcesorium 1.0

Akcesoria USB z Androidem muszą być zgodne z aparatami Android Open Accessory (AOA). protokołu, który określa, jak akcesorium wykrywa i konfiguruje komunikację z na urządzeniu z Androidem. W przypadku akcesoriów należy wykonać te czynności:

  1. Poczekaj i wykryj połączone urządzenie.
  2. Określ, czy urządzenie obsługuje tryb akcesorium.
  3. W razie potrzeby spróbuj uruchomić urządzenie w trybie akcesorium.
  4. Jeśli urządzenie obsługuje AOA, nawiąż z nim komunikację.

W sekcjach poniżej wyjaśniamy, jak wykonać te czynności.

Poczekaj na połączenie i wykryj połączenie urządzenia

Akcesoria powinny stale sprawdzać dostępność połączonych urządzeń z Androidem. Gdy urządzenie jest połączone, akcesorium powinno określać, czy obsługuje tryb akcesorium.

Określanie obsługi trybu akcesoriów

Uwaga: debugowanie USB nie jest wymagane do podłączania akcesoriów, ale ADB może być konieczne podczas programowania. Więcej informacji: Uwagi na temat debugowania.

Urządzenie z Androidem może się połączyć w jednym z trzech stanów:

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

Podczas początkowego połączenia akcesorium powinno sprawdzić wersję, identyfikator dostawcy i identyfikator produktu deskryptora podłączonego urządzenia USB. Identyfikator dostawcy powinien odpowiadać identyfikatorowi Google (0x18D1). Jeśli urządzenie jest już w kadrze trybem akcesorium, identyfikatorem produktu powinien być 0x2D00 lub 0x2D01 i akcesorium nawiązywać kontakt z urządzenia za pomocą własnych punktów końcowych transferu zbiorczego, (urządzenie nie musi być uruchamiane w trybie akcesorium).

Uwaga: 0x2D00 jest zarezerwowany dla Urządzenia z Androidem, które obsługują tryb akcesoriów. 0x2D01 to zarezerwowane na potrzeby urządzeń obsługujących tryb akcesorium oraz debugowanie Androida Protokół Bridge (ADB), który ujawnia drugi interfejs z 2 zbiorczymi punktami końcowymi dla ADB. Możesz użyć tych punktów końcowych do debugowania aplikacji akcesorium, jeśli symulowanie akcesorium na komputerze, Ogólnie nie używaj tego atrybutu chyba że akcesorium implementuje przekazywanie do ADB na urządzeniu.

Jeśli wersja, identyfikator dostawcy lub identyfikator produktu w deskryptorze urządzenia USB nie są zgodne zgodne z oczekiwanymi wartościami, akcesorium nie może określić, czy urządzenie obsługuje Tryb akcesorium z Androidem. Akcesorium powinno próbować uruchomić urządzenie za trybu akcesorium (szczegóły poniżej), aby określić, czy urządzenie jest obsługiwane.

Ważne: akcesorium USB musi wysyłać nagłówek podczas wstępnego uzgadniania połączenia. Nagłówek zawiera nazwę producenta, model wersji. Pole „Wersja” jest opcjonalne, jednak w przypadku zainstalowania aplikacji na Androida tylko pasuje do wersji, ale akcesorium nie wysyła wersji, Android 10 i starsze wersje zostaną ponownie uruchomione z powodu zgłoszenia wyjątku w procesie systemowym.

Spróbuj włączyć urządzenie w akcesorium tryb

Jeśli wersja, dostawca i identyfikator produktu nie odpowiadają identyfikatorowi z systemem Android akcesorium w trybie akcesorium nie jest w stanie określić, czy urządzenie obsługuje (ale nie jest w trybie akcesoriów lub gdy urządzenie nie obsługuje tego trybu. Ten może wystąpić, ponieważ urządzenia obsługujące tryb akcesorium (ale nie znajdują się w zestawie) trybu) początkowo zgłaszają identyfikatory producenta i produktu urządzenia zamiast identyfikatorów dostawcy i produktu AOA.

Akcesorium powinno spróbować uruchomić je w trybie akcesorium, aby określić, jeśli urządzenie obsługuje ten tryb:

  1. Wyślij żądanie sterowania kodem 51 („Get Protocol”), aby sprawdzić, czy urządzenie obsługuje protokół akcesoriów z Androidem. Jeśli urządzenie obsługuje ten protokół, zwraca liczbę inną niż zero, która reprezentuje obsługiwaną wersję protokołu. Żądanie dotyczące ustawień znajduje się w punkcie końcowym 0 o następujących cechach:
    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 zwraca obsługiwaną wersję protokołu, wyślij żądanie sterowania z informacją o ciągu znaków. Dzięki tym informacjom urządzenia w celu określenia odpowiedniego zastosowania akcesorium (lub adres URL użytkownika, jeśli nie istnieje odpowiednia aplikacja). Element sterujący żądanie jest wysyłane do punktu końcowego 0 (dla każdego identyfikatora ciągu znaków) z następującym identyfikatorem cechy:
    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ą podane niżej identyfikatory ciągu znaków o maksymalnym rozmiarze 256 bajtów dla każdego ciągu (musi być zakończona zero za pomocą \0).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Wyślij żądanie sterowania, aby urządzenie uruchomiło się w trybie akcesorium. żądanie sterujące znajduje się w punkcie końcowym 0 o następujących cechach:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Po wykonaniu tych czynności akcesorium powinno poczekać na podłączenie USB aby ponownie przedstawić się w autobusie w trybie akcesorium, a następnie ponownie połączonych urządzeniach. Algorytm określa, czy tryb akcesorium obsługuje sprawdzając identyfikatory dostawcy i produktu, które powinny być poprawne (np. do identyfikatorów dostawcy i produktu Google zamiast do identyfikatorów producenta urządzenia), jeśli urządzenie przełączyło się w tryb akcesorium. Jeśli identyfikatory i wersja są poprawne, akcesorium przemieszcza się, aby ustalić, komunikacji z urządzeniem.

Uwaga: AOA nie obsługuje obecnie tej funkcji. jednoczesne połączenia AOA i MTP. Aby przełączyć się z AOA na MTP, akcesorium należy najpierw odłączyć urządzenie USB (fizycznie lub elektrycznie) w podobny sposób), a następnie połącz się ponownie za pomocą MTP.

Jeśli którykolwiek krok się nie powiedzie, akcesorium ustali, że urządzenie nie obsługuje tych funkcji. w trybie akcesorium z Androidem i czeka na połączenie kolejnego urządzenia.

Nawiąż kontakt z urządzenie

Jeśli akcesorium wykryje urządzenie z Androidem w trybie akcesorium, akcesorium może wysyłać zapytania do interfejsu urządzenia i deskryptorów punktów końcowych, aby uzyskać zbiorcze punkty końcowe umożliwiające komunikację z urządzeniem.

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

  • 0x2D00 ma 1 interfejs z 2 zbiorczymi punktami końcowymi do wprowadzania danych komunikacji wyjściowej.
  • 0x2D01 ma 2 interfejsy z 2 zbiorczymi punktami końcowymi, każdy dla komunikacji wejściowej i wyjściowej. Pierwszy interfejs obsługuje standardowe a drugi interfejs – za pomocą ADB. Aby użyć zlokalizuj pierwsze zbiorcze wejściowe i wyjściowe punkty końcowe, ustaw konfiguracji urządzenia na wartość 1 i SET_CONFIGURATION (0x09) żądania urządzenia, a następnie komunikują się za pomocą punktów końcowych.