Android 8.0 sürümü, daha iyi yapılandırma ve kod güvenilirliği için USB komutlarının işlenmesini init komut dosyalarından yerel bir USB daemon'a taşıyor. Gadget işlevi yapılandırmasında, cihaza özel gadget işlemlerini gerçekleştirmek için init komut dosyaları (özellik tetikleyicileri) kullanılır.
Önceki sürümlerde, bu cihaza özel yapılandırmalar cihaza özel init komut dosyaları (özellik tetikleyicileri kullanılarak) aracılığıyla yapılıyordu. Donanım Soyutlama Katmanı (HAL) tasarımına geçiş, aşağıdaki sorunları çözen çok daha temiz bir uygulamayla sonuçlanır:
- Çekirdek sysfs düğümlerine yazma gibi işlemler başarısız olabilir ancak özellik tetikleyicisini ayarlayan çerçeveler koduna geri yayılmaz. Bu nedenle, işlemler sessizce başarısız olmasına rağmen çerçeveler işlemlerin başarılı olduğunu yanlışlıkla varsayar.
initkomut dosyalarında yürütülebilecek işlem sayısı sınırlıdır.
Android 12 sürümü, Ağ Denetim Modelleri (NCM) için USB Gadget HAL desteği ve hem HAL sürüm numarasını hem de USB hızını döndüren API çağrıları ekler. USB HAL üzerinden kullanılabilen API çağrıları hakkında daha fazla bilgi için android.hardware.usb paket özetine bakın.
HAL ve Treble
Cihaza özel init komut dosyaları, cihaza özel USB işlemlerini gerçekleştirmek için HAL katmanlarının yerine kullanıldı. USB (ADB üzerinden), sistem sorunlarında hata ayıklamak için kullanılan birincil arayüzdür. USB yapılandırmasını gerçekleştirmek için yerel bir arka plan programı kullanmak, çerçeve koduna olan bağımlılığı ortadan kaldırır. Bu nedenle, çerçeve kilitlense bile USB çalışmaya devam eder.
Android 8.0'da kullanıma sunulan Treble modeli kapsamında, tüm HAL'ler sistem hizmetlerinden izole edilir ve kendi yerel arka plan programlarında çalıştırılması gerekir. Bu sayede, HAL katmanı USB daemon'u olarak da kullanılabildiğinden özel bir USB daemon'u bulundurma zorunluluğu ortadan kalkar.
Varsayılan HAL uygulaması, Android 8.0'dan önceki tüm cihazlarla ilgilenir. Bu nedenle, Android 8.0'dan önceki sürümlerin yüklü olduğu cihazlar için cihaza özel bir çalışma yapılmayacaktır. Android 8.0, USB bağlantı noktalarının durumunu sorgulamak ve veri rolü ile güç rolü değişimlerini gerçekleştirmek için HAL arayüzünü kullanır.
Uygulama
Android 8.0'da kullanıma sunulan her cihazda yeni USB HAL arayüzü uygulanmalıdır.
Varsayılan uygulama, Android 8.0 öncesi cihazlarla ilgilenmelidir. Cihaz, type-c bağlantı noktası durumunu bildirmek için dual_role_usb sınıfını kullanıyorsa varsayılan uygulama yeterlidir. typc-c düğümlerinin sahipliğini sisteme aktarmak için cihaza özel USB komut dosyalarında küçük değişiklikler yapılması gerekebilir.