Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Android Open Accessory Protocol 1.0

Aksesori USB Android harus mematuhi protokol Android Open Accessory (AOA), yang menentukan cara aksesori mendeteksi dan menyiapkan 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. Mencoba memulai perangkat dalam mode aksesori (jika perlu).
  4. Jika perangkat mendukung AOA, buat komunikasi dengan perangkat.

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 terhubung, aksesori harus menentukan apakah perangkat mendukung mode aksesori.

Tentukan dukungan mode aksesori

Saat perangkat yang diberdayakan Android terhubung, itu bisa berada di salah satu dari tiga status:

  • 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 yang diberdayakan Android yang mendukung mode aksesori. 0x2D01 dicadangkan untuk perangkat yang mendukung mode aksesori serta protokol Android Debug Bridge (ADB), yang memperlihatkan antarmuka kedua dengan dua titik akhir massal untuk ADB. Anda dapat menggunakan titik akhir ini untuk men-debug aplikasi aksesori jika Anda mensimulasikan aksesori di komputer. Secara umum, jangan gunakan antarmuka ini kecuali aksesori menerapkan passthrough ke ADB di perangkat.

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

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

Mencoba memulai 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 jika perangkat tidak mendukung mode aksesori. Hal ini dapat terjadi karena perangkat yang mendukung mode aksesori (tetapi tidak 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 itu:

  1. Kirim permintaan kontrol 51 ("Get Protocol") untuk menentukan apakah perangkat mendukung protokol aksesori Android. Jika perangkat mendukung protokol, ia mengembalikan angka bukan nol yang mewakili versi protokol yang didukung. Permintaan kontrol berada di titik akhir 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 mengembalikan versi protokol yang didukung, kirim permintaan kontrol dengan mengidentifikasi informasi string ke perangkat. Informasi ini memungkinkan perangkat untuk menentukan aplikasi yang sesuai untuk aksesori (atau menyajikan URL kepada pengguna jika aplikasi yang sesuai tidak ada). Permintaan kontrol berada di 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 ini didukung, dengan ukuran maksimum 256 byte untuk setiap string (harus diakhiri 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 di titik akhir 0 dengan karakteristik berikut:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Setelah menyelesaikan langkah-langkah ini, aksesori harus menunggu perangkat USB yang terhubung masuk kembali ke bus dalam mode aksesori, lalu menghitung ulang perangkat yang terhubung. Algoritme menentukan dukungan mode aksesori dengan memeriksa vendor dan ID produk, yang seharusnya benar (misalnya, sesuai dengan vendor Google dan ID produk, bukan dengan ID produsen perangkat) jika perangkat berhasil dialihkan ke mode aksesori. Jika ID dan versinya benar, aksesori 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 melepaskan perangkat USB terlebih dahulu (baik secara fisik atau dengan cara yang setara secara elektrik), lalu sambungkan kembali menggunakan MTP.

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

Jalin komunikasi dengan perangkat

Jika aksesori mendeteksi perangkat yang diberdayakan Android dalam mode aksesori, aksesori tersebut 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, setel konfigurasi perangkat ke nilai 1 dengan permintaan perangkat SET_CONFIGURATION ( 0x09 ), kemudian komunikasikan menggunakan titik akhir.