Menerapkan USB HAL

Rilis Android 8.0 memindahkan penanganan perintah USB dari skrip init ke daemon USB asli untuk konfigurasi dan keandalan kode yang lebih baik. Untuk konfigurasi fungsi Gadget, skrip init (pemicu properti) digunakan untuk melakukan operasi gadget spesifik perangkat.

Dalam rilis sebelumnya, konfigurasi khusus perangkat ini dicapai melalui skrip init khusus perangkat (menggunakan pemicu properti). Peralihan ke desain Lapisan Abstraksi Perangkat Keras (HAL) menghasilkan implementasi yang jauh lebih bersih yang memecahkan masalah berikut:

  1. Operasi seperti penulisan ke node kernel sysfs bisa gagal tetapi tidak disebarkan kembali ke kode kerangka kerja yang menyetel pemicu properti. Akibatnya, kerangka kerja secara keliru berasumsi bahwa operasi telah berhasil meskipun secara diam-diam gagal.
  2. 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 mengembalikan nomor versi HAL dan kecepatan USB. Untuk informasi selengkapnya tentang panggilan API yang tersedia melalui USB HAL, lihat ringkasan paket android.hardware.usb .

HAL dan Trebel

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 asli untuk melakukan konfigurasi USB menghilangkan ketergantungan pada kode kerangka kerja sehingga meskipun kerangka kerja rusak, USB harus tetap berjalan.

Di bawah model Treble yang juga diperkenalkan di Android 8.0, semua HAL diisolasi dari layanan Sistem dan harus dijalankan di daemon aslinya sendiri. Hal ini menghilangkan kebutuhan untuk memiliki daemon USB eksklusif karena lapisan HAL berfungsi ganda sebagai daemon USB.

Implementasi HAL default menangani semua perangkat sebelum Android 8.0. Oleh karena itu, tidak akan ada pekerjaan khusus perangkat untuk perangkat sebelum Android 8.0. Android 8.0 menggunakan antarmuka HAL untuk menanyakan status port USB dan melakukan pertukaran peran data dan peran daya.

Penerapan

Antarmuka USB HAL baru perlu diterapkan pada setiap perangkat yang diluncurkan pada Android 8.0. Implementasi default harus menangani perangkat sebelum Android 8.0. Implementasi default sudah cukup jika perangkat menggunakan kelas dual_role_usb untuk melaporkan status port tipe-c. Perubahan kecil mungkin diperlukan dalam skrip USB khusus perangkat untuk mentransfer kepemilikan node typc-c ke sistem.