Rilis Android 8.0 memindahkan penanganan perintah USB dari skrip init
ke daemon USB native untuk konfigurasi yang lebih baik dan keandalan kode. Untuk konfigurasi fungsi Gadget, skrip init
(pemicu properti) digunakan untuk melakukan operasi gadget khusus perangkat.
Pada rilis sebelumnya, konfigurasi khusus perangkat ini dicapai melalui
skrip init
khusus perangkat (menggunakan pemicu properti). Beralih ke desain
Hardware Abstraction Layer (HAL) menghasilkan penerapan yang jauh lebih bersih
yang memecahkan masalah ini:
- Operasi seperti penulisan ke node sysfs kernel dapat gagal, tetapi tidak dipropagasi kembali ke kode framework yang menetapkan pemicu properti. Akibatnya, framework secara keliru mengasumsikan bahwa operasi telah berhasil meskipun operasi tersebut gagal tanpa pemberitahuan.
- Skrip
init
memiliki jumlah operasi terbatas yang dapat dieksekusi.
Rilis Android 12 menambahkan dukungan HAL Gadget USB untuk Model Kontrol Jaringan (NCM) dan panggilan API yang menampilkan nomor versi HAL dan kecepatan USB. Untuk mengetahui informasi selengkapnya tentang panggilan API yang tersedia melalui USB HAL, lihat ringkasan paket android.hardware.usb
.
HAL dan Treble
Skrip init
spesifik per perangkat digunakan sebagai pengganti
lapisan HAL untuk melakukan operasi USB spesifik per perangkat. USB (melalui ADB) adalah
antarmuka utama untuk men-debug masalah sistem. Dengan adanya daemon native untuk melakukan konfigurasi USB, dependensi pada kode framework akan dihilangkan sehingga meskipun framework mengalami error, USB akan tetap berjalan.
Dalam model Treble yang juga diperkenalkan di Android 8.0, semua HAL diisolasi dari layanan Sistem dan harus berjalan di daemon native-nya sendiri. Dengan demikian, Anda tidak perlu memiliki daemon USB eksklusif karena lapisan HAL berfungsi ganda dengan baik sebagai daemon USB.
Penerapan HAL default menangani semua perangkat pra-Android 8.0. Oleh karena itu, tidak ada pekerjaan khusus perangkat untuk perangkat sebelum Android 8.0. Android 8.0 menggunakan antarmuka HAL untuk mengkueri status port USB dan melakukan pertukaran peran data dan peran daya.
Implementasi
Antarmuka HAL USB baru harus diimplementasikan di setiap perangkat yang diluncurkan di Android 8.0.
Implementasi default akan menangani perangkat sebelum Android 8.0. Penerapan
default sudah cukup jika perangkat menggunakan class dual_role_usb
untuk melaporkan
status port type-c. Perubahan kecil mungkin diperlukan dalam skrip USB khusus perangkat
untuk mentransfer kepemilikan node typc-c ke sistem.