USB HAL'i uygulama

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:

  1. Ç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.
  2. 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.