USB HAL'ı uygulama

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 ve yerel bir USB arka plan programına taşır. Gadget işlevi yapılandırması için, 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ıyla (özellik tetikleyicileri kullanılarak) elde edildi. Donanım Soyutlama Katmanı (HAL) tasarımına geçiş, şu 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çeve koduna geri yayılamaz. Sonuç olarak, çerçeveler, sessizce başarısız olmalarına rağmen, işlemlerin başarılı olduğunu yanlış bir şekilde varsayar.
  2. init betiklerinin yürütülebilecek sınırlı sayıda işlemi vardır.

Android 12 sürümü, hem HAL sürüm numarasını hem de USB hızını döndüren Ağ Denetim Modelleri (NCM) ve API çağrıları için USB Gadget HAL desteği ekler. USB HAL aracılığıyla kullanılabilen API çağrıları hakkında daha fazla bilgi için android.hardware.usb paket özetine bakın.

HAL ve Tiz

Aygıta özgü init komut dosyaları, aygıta özgü USB işlemlerini gerçekleştirmek için HAL katmanlarının yerine kullanıldı. USB (ADB aracılığıyla), sistem sorunlarının hatalarını ayıklamak için birincil arabirimdir. USB yapılandırmasını gerçekleştirmek için yerel bir arka plan programına sahip olmak, çerçeve koduna olan bağımlılığı ortadan kaldırır, bu nedenle çerçeve çökse bile USB çalışır durumda olmalıdır.

Yine Android 8.0'da tanıtılan Tiz modeli altında, tüm HAL'ler Sistem hizmetlerinden yalıtılmıştır ve kendi yerel arka plan programlarında çalışması gerekir. Bu, HAL katmanı bir USB arka plan programı olarak güzel bir şekilde ikiye katlandığından özel bir USB arka plan programı gereksinimini ortadan kaldırır.

Varsayılan HAL uygulaması, tüm Android 8.0 öncesi cihazlarla ilgilenir. Bu nedenle, Android 8.0 öncesi cihazlar için cihaza özel herhangi bir çalışma olmayacaktı. Android 8.0, USB bağlantı noktalarının durumunu sorgulamak ve veri rolü ile güç rolü takaslarını gerçekleştirmek için HAL arabirimini kullanır.

uygulama

Android 8.0'da başlatılan her cihazda yeni USB HAL arabiriminin uygulanması gerekir. Varsayılan uygulama, Android 8.0 öncesi cihazlarla ilgilenmelidir. Aygıt, tip-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 önemsiz değişiklikler gerekebilir.