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:
- Poczekaj i wykryj połączone urządzenie.
- Określ, czy urządzenie obsługuje tryb akcesorium.
- W razie potrzeby spróbuj uruchomić urządzenie w trybie akcesorium.
- 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:
- 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)
- 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
- 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 iSET_CONFIGURATION
(0x09
) żądania urządzenia, a następnie komunikują się za pomocą punktów końcowych.