USB HAL'in uygulanması

Android 8.0 sürümü, daha iyi yapılandırma ve kod güvenilirliği için USB komutlarının işlenmesini başlatma komut dosyalarının dışına ve yerel bir USB init programına taşıyor. Gadget işlevi yapılandırması için, aygıta özgü gadget işlemlerini gerçekleştirmek üzere init komut dosyaları (özellik tetikleyicileri) kullanılır.

Önceki sürümlerde, bu cihaza özel konfigürasyonlar, cihaza özel init dosyaları (özellik tetikleyicileri kullanılarak) aracılığıyla elde ediliyordu. Donanım Soyutlama Katmanı (HAL) tasarımına geçmek, ş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 aktarılamaz. Sonuç olarak çerçeveler, operasyonların sessizce başarısız olmasına rağmen hatalı bir şekilde başarılı olduğunu varsayar.
  2. init betiklerinin yürütülebilecek sınırlı sayıda işlemi vardır.

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

Cihaza özel init dosyaları, cihaza özel 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 bir 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; dolayısıyla çerçeve çökse bile USB'nin çalışıyor olması gerekir.

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

Varsayılan HAL uygulaması, Android 8.0 öncesi tüm cihazlarla ilgilenir. Dolayısıyla Android 8.0 öncesi cihazlar için cihaza özel bir çalışma olmayacaktı. 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 başlatılan her cihaza yeni USB HAL arayüzünün uygulanması gerekiyor. 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. Typc-c düğümlerinin sahipliğini sisteme aktarmak için cihaza özel USB komut dosyalarında önemsiz değişiklikler yapılması gerekebilir.