Menerapkan USB HAL

Rilis Android 8.0 memindahkan penanganan perintah USB dari skrip init dan 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 khusus perangkat.

Dalam rilis sebelumnya, konfigurasi khusus perangkat ini dicapai melalui skrip init khusus perangkat (menggunakan pemicu properti). Pindah ke desain Hardware Abstraction Layer (HAL) menghasilkan implementasi yang jauh lebih bersih yang memecahkan masalah ini:

  1. Operasi seperti menulis ke node sysfs kernel bisa gagal tetapi tidak disebarkan kembali ke kode kerangka kerja yang menyetel pemicu properti. Akibatnya, kerangka kerja salah mengasumsikan operasi telah berhasil meskipun mereka diam-diam gagal.
  2. skrip init memiliki jumlah operasi terbatas yang dapat dieksekusi.

Rilis Android 12 menambahkan dukungan USB Gadget HAL 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 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 asli untuk melakukan konfigurasi USB menghilangkan ketergantungan pada kode kerangka kerja sehingga meskipun kerangka kerja mogok, USB harus dijalankan.

Di bawah model Treble yang juga diperkenalkan di Android 8.0, semua HAL diisolasi dari layanan Sistem dan diharuskan berjalan di daemon asli mereka sendiri. Ini menghilangkan persyaratan untuk memiliki daemon USB eksklusif karena lapisan HAL berfungsi ganda dengan baik sebagai daemon USB.

Implementasi HAL default menangani semua perangkat pra-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 menanyakan status port USB dan untuk melakukan peran data dan pertukaran peran daya.

Penerapan

Antarmuka USB HAL baru perlu diterapkan pada setiap peluncuran perangkat di Android 8.0. Implementasi default harus menangani perangkat pra-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.