USB HAL'yi uygulama

Android 8.0 sürümü, USB komutlarının işlenmesini init Cihazlara özel widget işlemlerini gerçekleştirmek için Gadget işlevi yapılandırmasında init komut dosyaları (mülk tetikleyicileri) kullanılır.

Önceki sürümlerde bu cihaza özgü yapılandırmalar, cihaza özgü init komut dosyaları (mülk tetikleyicileri kullanılarak) aracılığıyla gerçekleştiriliyordu. Donanım Soyutlama Katmanı (HAL) tasarımına geçmek, aşağıdaki sorunları çözen çok daha temiz bir uygulamaya yol açar:

  1. Çekirdek sysfs düğümlerine yazma gibi işlemler başarısız olabilir ancak mülk tetikleyicisini ayarlayan çerçeve koduna geri aktarılmaz. Sonuç olarak, çerçeveler sessizce başarısız olsalar bile işlemlerin başarılı olduğunu yanlış bir şekilde varsayarlar.
  2. init komut dosyalarında çalıştırılabilen sınırlı sayıda işlem vardır.

Android 12 sürümü, hem HAL sürüm numarasını hem de USB hızını döndüren API çağrıları ve Ağ Kontrol Modelleri (NCM) için USB Gadget HAL desteği 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 Tiz

Cihaza özel USB işlemleri gerçekleştirmek için HAL katmanlarının yerine cihaza özgü init komut dosyaları kullanıldı. USB (ADB üzerinden), sistem sorunlarını gidermek için birincil arayüzdür. USB yapılandırmasını gerçekleştirecek yerel bir arka plan programının olması, çerçeve koduna olan bağımlılığı ortadan kaldırır. Bu sayede, çerçeve kilitlense bile USB çalışmaya devam eder.

Android 8.0'da da kullanıma sunulan Treble modelinde tüm HAL'ler sistem hizmetlerinden izole edilir ve kendi yerel daemon'larında çalışması gerekir. HAL katmanı, bir USB arka plan programı olarak başarıyla iki katına çıktığından, bu özellik, özel bir USB arka plan programına sahip olma gerekliliğini ortadan kaldırır.

Varsayılan HAL uygulaması, Android 8.0 öncesi tüm cihazlar için geçerlidir. Bu nedenle, Android 8.0 öncesi cihazlar için cihaza özel bir çalışma yoktur. Android 8.0, USB bağlantı noktalarının durumunu sorgulamak ve veri rolü ile güç rolü değişimleri yapmak için HAL arayüzünü kullanır.

Uygulama

Yeni USB HAL arayüzünün, Android 8.0'de kullanıma sunulan her cihazda uygulanması gerekir. Varsayılan uygulama, Android 8.0 öncesi cihazları dikkate alır. Cihaz, USB-C bağlantı noktası durumunu bildirmek için dual_role_usb sınıfını kullanıyorsa varsayılan uygulama yeterlidir. USB-C düğümlerinin sahipliğini sisteme aktarmak için cihaza özgü USB komut dosyalarında küçük değişiklikler yapılması gerekebilir.