Dokumen ini menjelaskan perubahan dalam protokol Android Open Accessory (AOA) sejak rilis awal dan suplemennya Dokumentasi AOA 1.0. AOAv2 yang menambahkan fitur berikut:
- Output audio (tidak digunakan lagi di Android 8.0).
- Dukungan untuk aksesori yang bertindak sebagai satu atau beberapa perangkat antarmuka manusia (HID) ke perangkat Android.
Android SDK API yang tersedia untuk developer aplikasi Android tidak berubah.
Deteksi dukungan AOAv2
Untuk menentukan apakah perangkat Android yang terhubung mendukung aksesori dan
versi protokol yang didukung, aksesori harus mengirimkan getProtocol()
dan memeriksa hasilnya. Perangkat Android yang hanya mendukung fitur-fitur tersebut
di AOAv1 harus menampilkan 1
sebagai versi protokol; perangkat yang
mendukung fitur tambahan dalam AOAv2 harus menampilkan 2
sebagai
versi protokol. AOAv2 kompatibel dengan AOAv1 versi lama, jadi aksesorisnya
yang dirancang untuk protokol aksesori asli agar dapat terus berfungsi dengan perangkat Android yang lebih baru
perangkat.
Contoh berikut dari Accessory Development Kit 2011
kode sumber
(<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
)
library menunjukkan pemeriksaan protokol ini:
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 menyertakan ID produk USB baru untuk setiap kombinasi antarmuka USB tersedia dalam mode aksesori:
Versi | ID Produk | Komunikasi | Deskripsi |
---|---|---|---|
AOAv1 | 0x2D00 |
aksesori | Menyediakan dua endpoint massal untuk berkomunikasi dengan aplikasi Android. |
0x2D01 |
aksesori + adb | Untuk tujuan proses debug selama pengembangan aksesori. Hanya tersedia jika pengguna telah mengaktifkan Proses Debug USB di setelan perangkat Android. | |
AOAv2 | 0x2D02 |
audio | Untuk streaming audio dari perangkat Android ke aksesori. |
0x2D03 |
audio + adb | ||
0x2D04 |
aksesori + audio | ||
0x2D05 |
aksesori + audio + adb |
ID produk yang digunakan dalam AOAv1 (0x2D00
dan 0x2D01
)
terus didukung dalam AOAv2.
Dukungan audio
AOAv2 mencakup dukungan untuk output audio dari perangkat Android ke aksesori melalui antarmuka kelas audio USB standar yang mampu 2 saluran, 16-bit Audio PCM dengan kecepatan bit 44100 Khz (mode audio tambahan dapat ditambahkan masa depan).
Untuk mengaktifkan dukungan audio, aksesori harus mengirimkan permintaan kontrol USB baru:
**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
Perintah ini harus dikirim sebelum mengirim
Perintah ACCESSORY_START
untuk masuk ke mode aksesori.
Dukungan HID
AOAv2 memungkinkan aksesori untuk mendaftarkan satu atau beberapa Antarmuka Manusia USB Perangkat (HID) dengan perangkat Android. Pendekatan ini membalikkan arah untuk perangkat HID USB biasa seperti {i>mouse<i} dan {i>keyboard<i} USB. Biasanya, perangkat HID adalah periferal yang terhubung ke host USB (yaitu komputer pribadi), tetapi dalam AOA {i> host<i} USB dapat bertindak sebagai satu atau lebih input perangkat ke periferal USB.
Dukungan HID adalah proxy untuk peristiwa HID standar; tindakan tidak membuat asumsi tentang materi atau jenis peristiwa dan hanya meneruskannya ke sistem input, memungkinkan aksesori AOAv2 untuk bertindak sebagai perangkat HID apa pun (mouse, keyboard, pengontrol game, dll.). Anda dapat menggunakan HID dukungan untuk menyediakan fungsi dasar, seperti tombol putar/jeda pada media dok, atau untuk fungsionalitas lanjutan seperti stasiun dok dengan mouse dan keyboard QWERTY lengkap.
AOAv2 menambahkan permintaan kontrol USB baru yang memungkinkan aksesori untuk bertindak satu atau beberapa perangkat input HID ke perangkat Android. Dukungan HID ditangani sepenuhnya melalui permintaan kontrol pada endpoint nol, sehingga tidak ada antarmuka USB baru diperlukan. Empat permintaan kontrol baru tersebut adalah:
- ACCESSORY_REGISTER_HID mendaftarkan perangkat HID baru dengan
perangkat Android. Aksesori memberikan ID yang digunakan untuk mengidentifikasi perangkat HID untuk
tiga panggilan lainnya. ID ini berlaku sampai USB terputus atau hingga
aksesori mengirimkan
ACCESSORY_UNREGISTER_HID
untuk membatalkan pendaftaran HID perangkat seluler. - ACCESSORY_UNREGISTER_HID membatalkan pendaftaran perangkat HID
sebelumnya terdaftar di
ACCESSORY_REGISTER_HID
. - ACCESSORY_SET_HID_REPORT_DESC mengirimkan deskripsi laporan untuk
perangkat HID ke perangkat Android. Permintaan ini digunakan untuk mendeskripsikan
kemampuan perangkat HID dan harus dikirim sebelum melaporkan peristiwa HID apa pun
ke perangkat Android. Jika deskriptor laporan lebih besar dari nilai maksimum
ukuran paket untuk endpoint nol, beberapa
Perintah
ACCESSORY_SET_HID_REPORT_DESC
dikirim untuk mentransfer seluruh deskriptor. - ACCESSORY_SEND_HID_EVENT mengirimkan peristiwa input dari aksesori untuk perangkat Android.
Definisi kode untuk permintaan kontrol baru adalah:
/* 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
Interoperabilitas dengan AOAv1
Protokol asli (AOAv1) menyediakan dukungan bagi aplikasi Android untuk berkomunikasi langsung dengan USB {i>host<i} (aksesori) melalui USB. AOAv2 melanjutkan dukungan ini dan menambahkan fitur baru untuk memungkinkan aksesori berkomunikasi dengan sistem operasi Android itu sendiri (khususnya sistem audio dan input). Desain AOAv2 membuatnya memungkinkan pembuatan aksesori yang menggunakan dukungan audio dan HID baru selain set fitur asli. Cukup gunakan fitur baru beserta fitur aslinya.
Hubungkan AOAv2 tanpa aplikasi Android
Anda dapat mendesain aksesori (seperti dok audio) yang menggunakan audio dan HID tetapi tidak berkomunikasi dengan aplikasi di perangkat Android. Sebagai aksesori ini, pengguna tidak perlu menerima dialog dialog untuk menemukan dan mengaitkan aksesori yang baru dipasang dengan aplikasi Android yang dapat berkomunikasi dengannya.
Untuk menyembunyikan dialog tersebut setelah aksesori terhubung, aksesori dapat memilih untuk tidak mengirimkan nama produsen dan model ke Android perangkat seluler. Jika string ini tidak disediakan ke perangkat Android:
- Sistem tidak berupaya menemukan aplikasi untuk berkomunikasi dengan aksesori.
- Antarmuka USB aksesori tidak ada di USB perangkat Android konfigurasi setelah perangkat masuk ke mode aksesori.