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:
- Ç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.
-
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ına sahip olmak, ç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.