Aksesori USB Android harus mematuhi Android Open Accessory (AOA) yang menentukan cara aksesori mendeteksi dan menyiapkan komunikasi dengan perangkat yang didukung Android. Aksesori harus melakukan langkah-langkah berikut:
- Menunggu dan mendeteksi perangkat yang terhubung.
- Menentukan dukungan mode aksesori perangkat.
- Coba aktifkan perangkat dalam mode aksesori (jika perlu).
- Jika perangkat mendukung AOA, buat komunikasi dengan perangkat.
Bagian berikut menjelaskan cara menerapkan langkah-langkah ini.
Menunggu dan mendeteksi koneksi perangkat
Aksesori harus terus memeriksa keberadaan perangkat Android yang terhubung. Saat perangkat terhubung, aksesori akan menentukan apakah perangkat tersebut mendukung mode aksesori.
Menentukan dukungan mode aksesori
Catatan: Proses debug USB tidak diperlukan untuk menghubungkan aksesori, tetapi ADB mungkin diperlukan selama pengembangan. Untuk mengetahui detailnya, lihat Pertimbangan debug.
Saat terhubung, perangkat Android dapat berada dalam salah satu dari tiga status berikut:
- Mendukung mode aksesori Android dan sudah ada dalam mode aksesori.
- Mendukung mode aksesori Android, tetapi tidak dalam mode aksesori.
- Tidak mendukung mode aksesori Android.
Selama koneksi awal, aksesori harus memeriksa versi, ID vendor,
dan ID produk deskriptor perangkat USB perangkat yang terhubung. ID vendor
harus cocok dengan ID Google (0x18D1
). Jika perangkat sudah berada di
mode aksesori, ID produk harus 0x2D00
atau
0x2D01
dan aksesori dapat
membangun komunikasi dengan
perangkat melalui endpoint transfer massal menggunakan komunikasinya sendiri
(perangkat tidak perlu dimulai dalam mode aksesori).
Catatan: 0x2D00
dicadangkan untuk
Perangkat Android yang mendukung mode aksesori. 0x2D01
sama dengan
disediakan untuk perangkat yang mendukung mode aksesori serta Android Debug
Protokol Bridge (ADB), yang mengekspos antarmuka kedua dengan dua endpoint massal
untuk ADB. Anda dapat menggunakan endpoint ini untuk men-debug aplikasi aksesori jika
Anda menyimulasikan aksesori di komputer. Secara umum, jangan gunakan
kecuali jika aksesori menerapkan passthrough ke ADB pada perangkat.
Jika versi, ID vendor, atau ID produk di deskriptor perangkat USB tidak cocok dengan nilai yang diharapkan, aksesori tidak dapat menentukan apakah perangkat mendukung Mode aksesori Android. Aksesori harus berupaya memulai perangkat dengan mode aksesori (dijelaskan di bawah) untuk menentukan dukungan perangkat.
Poin penting: Aksesori USB harus mengirimkan {i>header<i} pada saat berjabatan tangan awal. {i>Header<i} berisi produsen, model, dan . Meskipun versi adalah bidang opsional, jika aplikasi Android diinstal, cocok dengan versi, tetapi aksesori tidak mengirimkan versi, perangkat Android berjalan di Android 10 dan yang lebih lama akan dimulai ulang karena pengecualian ditampilkan di proses sistem.
Mencoba memulai di aksesori moda
Jika versi, vendor, dan ID produk tidak sesuai dengan perangkat yang didukung Android dalam mode aksesori, aksesori tidak dapat menentukan apakah perangkat tersebut mendukung (tetapi tidak aktif) mode aksesori atau jika perangkat tidak mendukung mode aksesori. Ini dapat terjadi karena perangkat yang mendukung mode aksesori (tetapi tidak dalam aksesori ) akan melaporkan ID produk dan vendor produsen perangkat bukan ID vendor dan ID produk AOA.
Aksesori harus mencoba menyalakan perangkat dalam mode aksesori untuk menentukan jika perangkat mendukung mode tersebut:
- Mengirim permintaan kontrol 51 ("Get Protocol") untuk menentukan apakah perangkat
mendukung protokol aksesori Android. Jika perangkat mendukung protokol itu,
ia mengembalikan angka bukan nol yang
mewakili versi protokol yang didukung.
Permintaan kontrol berada di endpoint 0 dengan karakteristik berikut:
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)
- Jika perangkat menampilkan versi protokol yang didukung, kirim permintaan kontrol
dengan mengidentifikasi
informasi {i>string <i}ke perangkat. Informasi ini memungkinkan
perangkat untuk menentukan aplikasi yang sesuai untuk aksesori (atau menyajikan
URL kepada pengguna jika aplikasi yang sesuai tidak ada). Kontrol
permintaan ada di endpoint 0 (untuk setiap ID string) dengan
karakteristik:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 52 value: 0 index: string ID data zero terminated UTF8 string sent from accessory to device
ID string berikut didukung, dengan ukuran maksimum 256 byte untuk setiap string (harus diakhiri dengan nol dengan
\0
).manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
- Kirim permintaan kontrol untuk meminta perangkat memulai dalam mode aksesori. Tujuan
permintaan kontrol berada di endpoint 0 dengan karakteristik berikut:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
Setelah menyelesaikan langkah ini, aksesori akan menunggu hingga USB yang terhubung perangkat untuk memperkenalkan dirinya kembali di bus dalam mode aksesori, lalu perangkat yang terhubung. Algoritma menentukan dukungan mode aksesori dengan memeriksa ID vendor dan produk, yang harus benar (misalnya, ke ID vendor dan produk Google, bukan ke ID produsen perangkat) jika perangkat berhasil dialihkan ke mode aksesori. Jika ID dan versi sudah benar, aksesori bergerak untuk membuat komunikasi dengan perangkat.
Catatan: AOA saat ini tidak mendukung koneksi AOA dan MTP secara simultan. Untuk beralih dari AOA ke MTP, aksesori harus terlebih dahulu memutuskan sambungan perangkat USB (baik secara fisik maupun elektrik dengan cara yang setara) dan kemudian menghubungkan kembali menggunakan MTP.
Jika ada langkah yang gagal, aksesori akan menentukan bahwa perangkat tidak mendukung Mode aksesori Android dan menunggu perangkat berikutnya terhubung.
Membangun komunikasi dengan perangkat
Jika aksesori mendeteksi perangkat dengan teknologi Android dalam mode aksesori, aksesori bisa melakukan kueri antarmuka perangkat dan deskriptor endpoint untuk mendapatkan endpoint massal untuk berkomunikasi dengan perangkat.
Jumlah antarmuka dan endpoint massal bergantung pada ID produk. Channel Perangkat yang didukung Android dengan ID produk:
0x2D00
memiliki satu antarmuka dengan dua endpoint massal untuk input dan komunikasi output.0x2D01
memiliki dua antarmuka dengan dua endpoint massal untuk untuk komunikasi input dan output. Antarmuka pertama menangani dan antarmuka kedua menangani komunikasi ADB. Untuk menggunakan antarmuka pengguna, temukan endpoint input dan output massal pertama, konfigurasi perangkat ke nilai 1 denganSET_CONFIGURATION
(0x09
) permintaan perangkat, lalu berkomunikasi menggunakan endpoint.