Aksesori Terbuka Android 1.0

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:

  1. Menunggu dan mendeteksi perangkat yang terhubung.
  2. Menentukan dukungan mode aksesori perangkat.
  3. Coba aktifkan perangkat dalam mode aksesori (jika perlu).
  4. 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:

  1. 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)
    
  2. 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
    
  3. 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 dengan SET_CONFIGURATION (0x09) permintaan perangkat, lalu berkomunikasi menggunakan endpoint.