Rilis Android 8.0 memindahkan penanganan perintah USB dari skrip init
dan masuk ke daemon USB native untuk konfigurasi dan keandalan
kode yang lebih baik. 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). Peralihan ke
desain Hardware Abstraksi Layer (HAL) menghasilkan implementasi yang jauh lebih rapi
yang memecahkan masalah ini:
- Operasi seperti penulisan ke node sysfs kernel dapat gagal, tetapi tidak disebarkan kembali ke kode framework yang menetapkan pemicu properti. Akibatnya, framework salah mengasumsikan bahwa operasi telah berhasil meskipun telah gagal secara diam-diam.
- Skrip
init
memiliki jumlah operasi terbatas yang dapat dijalankan.
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 HAL USB, lihat
ringkasan paket android.hardware.usb
.
HAL dan Treble
Skrip init
khusus perangkat digunakan sebagai pengganti
lapisan HAL untuk melakukan operasi USB khusus perangkat. USB (melalui ADB) adalah
antarmuka utama untuk men-debug masalah sistem. Memiliki daemon native untuk melakukan
konfigurasi USB akan menghilangkan dependensi pada kode framework sehingga meskipun
framework mengalami error, USB akan tetap berjalan.
Berdasarkan model Treble yang juga diperkenalkan di Android 8.0, semua HAL diisolasi dari layanan Sistem dan diwajibkan untuk berjalan di daemon native-nya sendiri. Hal ini menghilangkan persyaratan untuk memiliki daemon USB eksklusif karena lapisan HAL berfungsi sebagai daemon USB dengan baik.
Implementasi HAL default menangani semua perangkat sebelum Android 8.0. Oleh karena itu, tidak akan ada pekerjaan khusus perangkat untuk perangkat pra-Android 8.0. Android 8.0 menggunakan antarmuka HAL untuk membuat kueri status port USB dan melakukan pertukaran peran data dan peran daya.
Implementasi
Antarmuka HAL USB baru perlu diterapkan di setiap perangkat yang diluncurkan di Android 8.0.
Implementasi default harus menangani perangkat pra-Android 8.0. Implementasi
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.