Android Open Akcesorium 2.0

Ten dokument opisuje zmiany w protokole Android Open Accessory (AOA) od momentu premiery oraz suplementów Dokumentacja AOA 1.0. AOA wersja 2 udostępnia te funkcje:

  • Wyjście audio (wycofane w Androidzie 8.0).
  • Obsługa akcesorium działającego jako co najmniej 1 człowiek interfejsu (HID) na urządzenie z Androidem.

Interfejsy API pakietu Android SDK dostępne dla deweloperów aplikacji na Androida pozostają bez zmian.

Wykrywanie obsługi AOAv2

Aby określić, czy połączone urządzenie z Androidem obsługuje akcesoria obsługiwaną wersję protokołu, akcesorium musi wysyłać getProtocol() i sprawdź wynik. Urządzenia z Androidem, które obsługują tylko funkcje w AOAv1 musi zwracać wersję protokołu 1; urządzeń, które obsługują dodatkowe funkcje w AOAv2, muszą zwracać wartość 2 jako wersji protokołu. AOAv2 jest wstecznie zgodny z AOAv1, dlatego akcesoria zaprojektowany z myślą o oryginalnym protokole akcesoriów nadal działa z nowszymi urządzeniami z Androidem urządzenia.

Oto przykład z akcesoricznego pakietu programistycznego 2011 kod źródłowy (<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp) to biblioteka pokazuje to sprawdzenie protokołu:

bool AndroidAccessory::switchDevice(byte addr)
{
    int protocol = getProtocol(addr);
    if (protocol >= 1) {
        Serial.print("device supports protocol 1 or higher\n");
    } else {
        Serial.print("could not read device protocol version\n");
        return false;
    }

    sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
    sendString(addr, ACCESSORY_STRING_MODEL, model);
    sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
    sendString(addr, ACCESSORY_STRING_VERSION, version);
    sendString(addr, ACCESSORY_STRING_URI, uri);
    sendString(addr, ACCESSORY_STRING_SERIAL, serial);

    usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR |
                USB_SETUP_RECIPIENT_DEVICE, ACCESSORY_START, 0, 0, 0, 0, NULL);
    return true;
}

AOAv2 zawiera nowe identyfikatory produktów USB dla każdej kombinacji interfejsów USB dostępne w trybie akcesorium:

Wersja Identyfikator produktu Komunikacja Opis
AOAv1 0x2D00 akcesorium Udostępnia 2 zbiorcze punkty końcowe do komunikacji z aplikacją na Androida.
0x2D01 akcesorium + adb Do debugowania podczas opracowywania akcesoriów. Dostępne tylko wtedy, gdy użytkownik włączył Debugowanie USB w ustawieniach urządzenia z Androidem.
AOA wersja 2 0x2D02 ścieżkom audio Służy do strumieniowego przesyłania dźwięku z urządzenia z Androidem do akcesorium.
0x2D03 audio + ADB
0x2D04 akcesorium + dźwięk
0x2D05 akcesorium + audio + ADB

Identyfikatory produktów używane w AOAv1 (0x2D00 i 0x2D01) będą nadal obsługiwane w AOAv2.

Wsparcie audio

AOAv2 obejmuje obsługę wyjścia audio z urządzenia z Androidem do akcesorium przez standardowy 2-kanałowy, 16-bitowy interfejs klasy audio USB Dźwięk PCM z szybkością transmisji bitów 44100 KHz (dodatkowe tryby audio można dodać w w przyszłości).

Aby można było włączyć obsługę dźwięku, akcesorium musi wysłać nowe żądanie sterowania przez USB:

**SET_AUDIO_MODE**
requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
request:        58
value:          0 for no audio (default),
                1 for 2 channel, 16-bit PCM at 44100 KHz
index:          0
data            none

To polecenie należy wysłać przed wysłaniem ACCESSORY_START umożliwia włączenie trybu akcesorium.

Obsługa HID

AOAv2 umożliwia akcesoriom rejestrowanie co najmniej 1 interfejsu człowiek-USB Urządzenia (HID) z urządzeniem z Androidem. To podejście odwraca kierunek z typowymi urządzeniami USB HID, takimi jak myszy i klawiatury USB. Normalnie urządzenie HID to urządzenie peryferyjne podłączone do hosta USB (tzn. komputera osobistego), ale w AOA host USB może pełnić funkcję z urządzeniem peryferyjnym USB.

Obsługa HID pośredniczy w standardowych zdarzeniach HID. implementacja nie przyjmuje żadnych założeń dotyczących treści ani typu zdarzeń po prostu przekazuje go do systemu wejściowego, umożliwiając akcesorium AOAv2 i działać jak dowolne urządzenie HID (mysz, klawiatura, kontroler do gier itp.). Można używać HID obsługa podstawowych funkcji, takich jak odtwarzanie/wstrzymywanie odtwarzania lub zaawansowanych funkcji, takich jak stacja dokująca za pomocą myszy, pełna klawiatura QWERTY.

AOAv2 dodaje nowe żądania elementów sterujących USB, które umożliwiają działanie akcesorium jako co najmniej jedno urządzenie wejściowe HID do urządzenia z Androidem. Obsługa HID jest obsługiwana wyłącznie w ramach żądań kontrolnych dotyczących punktu końcowego zero. Nie ma więc nowego interfejsu USB, niezbędną. Cztery nowe żądania ustawień:

  • ACCESSORY_REGISTER_HID rejestruje nowe urządzenie HID za pomocą urządzenie z Androidem, Akcesorium dostarcza identyfikator umożliwiający identyfikację urządzenia HID 3 pozostałe połączenia. Identyfikator ten jest ważny do momentu odłączenia USB lub akcesorium wysyła ACCESSORY_UNREGISTER_HID, aby wyrejestrować HID urządzenia.
  • ACCESSORY_UNREGISTER_HID wyrejestrowuje urządzenie HID poprzednio zarejestrowane w ACCESSORY_REGISTER_HID.
  • ACCESSORY_SET_HID_REPORT_DESC wysyła deskryptor raportu dotyczący urządzenia HID z urządzeniem z Androidem. Żądanie to służy do opisania możliwości urządzenia HID i należy go wysłać przed zgłoszeniem zdarzeń HID. z urządzenia z Androidem. Jeśli deskryptor raportu jest większy niż wartość maksymalna rozmiar pakietu dla punktu końcowego zero, wiele Wysyłane są polecenia ACCESSORY_SET_HID_REPORT_DESC do przeniesienia całego deskryptora.
  • ACCESSORY_SEND_HID_EVENT wysyła zdarzenia wejściowe z z akcesoriami do urządzenia z Androidem.

Definicje kodu dla nowych żądań ustawień:

/* Control request for registering a HID device.
 * Upon registering, a unique ID is sent by the accessory in the
 * value parameter. This ID will be used for future commands for
 * the device
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_REGISTER_HID_DEVICE
 *  value:          Accessory assigned ID for the HID device
 *  index:          total length of the HID report descriptor
 *  data            none
 */
#define ACCESSORY_REGISTER_HID         54

/* Control request for unregistering a HID device.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_REGISTER_HID
 *  value:          Accessory assigned ID for the HID device
 *  index:          0
 *  data            none
 */
#define ACCESSORY_UNREGISTER_HID         55

/* Control request for sending the HID report descriptor.
 * If the HID descriptor is longer than the endpoint zero max packet size,
 * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
 * commands. The data for the descriptor must be sent sequentially
 * if multiple packets are needed.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_SET_HID_REPORT_DESC
 *  value:          Accessory assigned ID for the HID device
 *  index:          offset of data in descriptor
 *                      (needed when HID descriptor is too big for one packet)
 *  data            the HID report descriptor
 */
#define ACCESSORY_SET_HID_REPORT_DESC         56

/* Control request for sending HID events.
 *
 *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
 *  request:        ACCESSORY_SEND_HID_EVENT
 *  value:          Accessory assigned ID for the HID device
 *  index:          0
 *  data            the HID report for the event
 */
#define ACCESSORY_SEND_HID_EVENT         57

Interoperacyjność z AOAv1

pierwotny protokół (AOAv1), zapewnia obsługę aplikacji na Androida umożliwiającej bezpośrednią komunikację przez USB hosta (akcesorium) przez USB. AOAv2 uzupełnia tę obsługę i dodaje nowe funkcje aby akcesorium mogło komunikować się z systemem operacyjnym Android. (zwłaszcza systemów audio i wejściowych). Konstrukcja AOAv2 sprawia, możliwość zbudowania akcesorium wykorzystującego nowe formaty audio i HID. w uzupełnieniu do oryginalnego zestawu funkcji. Po prostu korzystaj z nowych funkcji w połączeniu oryginalne funkcje.

Połącz AOAv2 bez Aplikacja na Androida

Możesz zaprojektować akcesorium (takie jak stacja dokująca audio), które korzysta z dźwięku i HID jest obsługiwany, ale nie komunikuje się z aplikacją na urządzeniu z Androidem. Dla: akcesoria, dzięki czemu użytkownik nie musi oglądać próśb o znalezienie przez połączenie nowo podłączonego akcesorium z aplikacją na Androida, która może komunikować się z nim.

Aby wyłączyć takie okna po nawiązaniu połączenia z akcesoriami, akcesorium może zdecydować, aby nie wysyłać nazwy producenta ani modelu do Androida. urządzenia. Jeśli urządzenie z Androidem nie ma tych ciągów:

  • System nie próbuje znaleźć aplikacji, która mogłaby skomunikować się z akcesoriami.
  • Interfejsu USB akcesoriów nie ma w portu USB urządzenia z Androidem po przejściu urządzenia w tryb akcesorium.