Android 8.0 sürümü, USB komutlarının işlenmesini init
komut dosyalarından yerel bir USB daemon'a taşıyarak daha iyi yapılandırma ve kod
güvenilirliği sağlar. Gadget işlevi yapılandırması için cihaza özel gadget işlemlerini gerçekleştirmek üzere 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.
init
komut dosyalarında sınırlı sayıda işlem yürütülebilir.
Android 12 sürümü, Ağ Kontrol 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ıklama için kullanılan birincil arayüzdür. USB yapılandırmasını gerçekleştirmek için yerel bir arka plan programının olması, ç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 daemon'ları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 öncesi 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, C tipi bağlantı noktası durumunu bildirmek için dual_role_usb
sınıfını kullanıyorsa varsayılan uygulama yeterlidir. type-c düğümlerinin sahipliğini sisteme aktarmak için cihaza özel USB komut dosyalarında küçük değişiklikler yapılması gerekebilir.