Aksesori Terbuka Android 1.0

Aksesori USB Android harus mematuhi protokol Android Open Accessories (AOA), yang menentukan cara aksesori mendeteksi dan mengatur komunikasi dengan perangkat yang diberdayakan Android. Aksesori harus melakukan langkah-langkah berikut:

  1. Tunggu dan deteksi perangkat yang terhubung.
  2. Tentukan dukungan mode aksesori perangkat.
  3. Coba mulai perangkat dalam mode aksesori (jika diperlukan).
  4. Jika perangkat mendukung AOA, jalin komunikasi dengan perangkat tersebut.

Bagian berikut menjelaskan cara menerapkan langkah-langkah ini.

Tunggu dan deteksi perangkat yang terhubung

Aksesori harus terus memeriksa perangkat yang diberdayakan Android yang terhubung. Saat perangkat tersambung, aksesori harus menentukan apakah perangkat mendukung mode aksesori.

Tentukan dukungan mode aksesori

Catatan: USB debugging tidak diperlukan untuk menghubungkan aksesori tetapi ADB mungkin diperlukan selama pengembangan. Untuk detailnya, lihat Pertimbangan debug .

Saat perangkat yang diberdayakan Android tersambung, perangkat tersebut dapat berada dalam salah satu dari tiga kondisi berikut:

  • Mendukung mode aksesori Android dan sudah 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 dari deskriptor perangkat USB perangkat yang terhubung. ID vendor harus cocok dengan ID Google ( 0x18D1 ). Jika perangkat sudah dalam mode aksesori, ID produk harus 0x2D00 atau 0x2D01 dan aksesori dapat menjalin komunikasi dengan perangkat melalui titik akhir transfer massal menggunakan protokol komunikasinya sendiri (perangkat tidak perlu dimulai dalam mode aksesori).

Catatan: 0x2D00 dicadangkan untuk perangkat Android yang mendukung mode aksesori. 0x2D01 dicadangkan untuk perangkat yang mendukung mode aksesori serta protokol Android Debug Bridge (ADB), yang menampilkan antarmuka kedua dengan dua titik akhir massal untuk ADB. Anda dapat menggunakan titik akhir ini untuk men-debug aplikasi aksesori jika Anda menyimulasikan aksesori di komputer. Secara umum, jangan gunakan antarmuka ini kecuali aksesori mengimplementasikan passthrough ke ADB pada perangkat.

Jika versi, ID vendor, atau ID produk di deskriptor perangkat USB tidak sesuai dengan nilai yang diharapkan, aksesori tidak dapat menentukan apakah perangkat mendukung mode aksesori Android. Aksesori harus mencoba memulai perangkat dalam mode aksesori (dirinci di bawah) untuk menentukan dukungan perangkat.

Poin penting: Aksesori USB harus mengirimkan header saat jabat tangan awal. Header berisi pabrikan, model, dan versi. Meskipun versi adalah kolom opsional, jika aplikasi Android yang diinstal hanya cocok dengan versinya, namun aksesori tidak mengirimkan versinya, perangkat Android yang menjalankan Android 10 dan yang lebih lama akan di-boot ulang karena adanya pengecualian dalam proses sistem.

Coba mulai dalam mode aksesori

Jika versi, vendor, dan ID produk tidak sesuai dengan perangkat yang diberdayakan Android dalam mode aksesori, aksesori tidak dapat menentukan apakah perangkat mendukung (tetapi tidak dalam) mode aksesori atau apakah perangkat tidak mendukung mode aksesori. Hal ini dapat terjadi karena perangkat yang mendukung mode aksesori (namun tidak berada dalam mode aksesori) pada awalnya melaporkan vendor produsen perangkat dan ID produk, bukan vendor AOA dan ID produk.

Aksesori harus mencoba memulai perangkat dalam mode aksesori untuk menentukan apakah perangkat mendukung mode tersebut:

  1. Kirim permintaan kontrol 51 ("Dapatkan Protokol") untuk menentukan apakah perangkat mendukung protokol aksesori Android. Jika perangkat mendukung protokol tersebut, perangkat akan mengembalikan angka bukan nol yang mewakili versi protokol yang didukung. Permintaan kontrol berada pada titik akhir 0 dengan karakteristik sebagai 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 mengembalikan versi protokol yang didukung, kirimkan permintaan kontrol dengan informasi string pengidentifikasi ke perangkat. Informasi ini memungkinkan perangkat menentukan aplikasi yang sesuai untuk aksesori tersebut (atau menyajikan URL kepada pengguna jika aplikasi yang sesuai tidak ada). Permintaan kontrol berada pada titik akhir 0 (untuk setiap ID string) dengan karakteristik berikut:
    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. Permintaan kontrol berada pada titik akhir 0 dengan karakteristik sebagai berikut:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Setelah menyelesaikan langkah-langkah ini, aksesori harus menunggu hingga perangkat USB yang terhubung muncul kembali di bus dalam mode aksesori, lalu menghitung ulang perangkat yang terhubung. Algoritme menentukan dukungan mode aksesori dengan memeriksa vendor dan ID produk, yang mana harus benar (misalnya, sesuai dengan vendor dan ID produk Google, bukan ID produsen perangkat) jika perangkat berhasil beralih ke mode aksesori. Jika ID dan versinya benar, aksesori akan bergerak untuk menjalin komunikasi dengan perangkat .

Catatan: AOA saat ini tidak mendukung koneksi AOA dan MTP secara bersamaan. Untuk beralih dari AOA ke MTP, aksesori harus terlebih dahulu memutuskan sambungan perangkat USB (baik secara fisik atau dengan cara yang setara secara elektrik) lalu menyambungkan kembali menggunakan MTP.

Jika ada langkah yang gagal, aksesori menentukan bahwa perangkat tidak mendukung mode aksesori Android dan menunggu perangkat berikutnya terhubung.

Jalin komunikasi dengan perangkat

Jika aksesori mendeteksi perangkat yang diberdayakan Android dalam mode aksesori, aksesori dapat menanyakan antarmuka perangkat dan deskriptor titik akhir untuk mendapatkan titik akhir massal untuk berkomunikasi dengan perangkat.

Jumlah antarmuka dan titik akhir massal bergantung pada ID produk. Perangkat yang diberdayakan Android dengan ID produk:

  • 0x2D00 memiliki satu antarmuka dengan dua titik akhir massal untuk komunikasi input dan output.
  • 0x2D01 memiliki dua antarmuka dengan dua titik akhir massal masing-masing untuk komunikasi input dan output. Antarmuka pertama menangani komunikasi standar dan antarmuka kedua menangani komunikasi ADB. Untuk menggunakan antarmuka, temukan titik akhir masukan dan keluaran massal pertama, atur konfigurasi perangkat ke nilai 1 dengan permintaan perangkat SET_CONFIGURATION ( 0x09 ), lalu komunikasikan menggunakan titik akhir.