Multi-HAL adlı Sensörler, HAL'lerin birlikte çalışabilmesini sağlayan bir çerçevedir başka sensör HAL'leri olabilir. Sensörler Multi-HAL, sensör alt HAL'lerini dinamik olarak yükler satıcı bölümünde dinamik kitaplıklar olarak depolanır ve onlara bir geri çağırma sağlar nesnesini ifade eder. Sensör alt HAL'si, web sitenizdeki paylaşılan bir nesnede yerleşik olarak bulunan ve çoklu HAL çerçevesi tarafından kullanılır. Bu alt HAL'ler veya ana işlevi içeren çoklu HAL koduna bağımlıdır. açıklamaya çalışın.
Multi-HAL 2.1 Sensörleri, Android çalıştıran cihazlarda kullanılabilir 11 veya üzeri bir sayı aşağıdakileri yapabilecek alt HAL'lerin yüklenmesini destekleyen Multi-HAL 2.0 Sensörlerinin iterasyonu CANNOT TRANSLATE menteşe açısı sensör türü. Bu sensör türünü desteklemek için alt HAL'lerin, alt HAL API'lerini kullanması gerekir 2.1 SubHal başlığı.
Android 13 veya sonraki sürümleri çalıştıran Sensor AIDL HAL'ı kullanmak için çoklu HAL özelliğine olanak tanıyan çoklu HAL dolgu katmanıdır. Uygulama ayrıntıları için bkz. Multi-HAL Sensörlerinin AIDL HAL Sensörleriyle Kullanılması.
Multi-HAL 2 Sensörleri ile HAL 2 Sensörleri arasındaki fark
Multi-HAL 2 Sensörleri, Android çalıştıran cihazlarda kullanılabilir
10 veya üzeri
Sensör HAL'sinin yanı sıra çeşitli soyutlamalar sunuyor.
2
kullanmaları gerekecek. Multi-HAL 2 sensörü
HalProxy
ve Sensörler HAL 2 arayüzünü ve
V2_1/SubHal
(veya
V2_0/SubHal
)
arayüzünü kullanarak HalProxy
alt HAL'lerle etkileşime girebilir.
ISensorsSubHal
arayüzü,
2.1/ISensors.hal
(veya
2.0/ISensors.hal
)
aşağıdaki şekillerde kullanabilirsiniz:
- İlk kullanıma hazırlama yöntemi,
IHalProxyCallback
gönderir sınıfını kullanır.ISensorsCallback
- Sub-HAL'ler, hata ayıklama sağlamak için bir hata ayıklama işlevi uygulamalıdır daha fazla bilgi edineceksiniz.
- Sub-HAL'lerin, yüklenen alt HAL'nin diğer alt HAL'lerden ayrılır.
Multi-HAL 2 Sensörleri ile HAL 2 Sensörleri arasındaki temel fark
ilk kullanıma hazırlama işlevleri FMQ sağlamak yerine IHalProxyCallback
Arayüz, sensör etkinliklerini sensörlere göndermek için biri olmak üzere iki yöntem sunar.
çerçeve ve uyanık kalma kilitleri oluşturmak için bir yöntem. Gelişmiş Koruma bölümünde
Multi-HAL, FMQ'larla olan tüm etkileşimleri yöneterek ürünlerin zamanında teslim edilmesini sağlar.
tüm alt HAL'ler için sensör etkinliklerini dikkate alır. Alt HAL'lerin
createScopedWakelock
uyanık kalma kilitlerini zamanlama yükünü
Multi-HAL sensörlerini ve uyanık kalma kilidi kullanımını tek bir ortak uyanık kalma kilidinde merkezileştirmek için
Böylece, kilitlenme ve kilit açma çağrılarını en aza indiren Sensors Multi-HAL'nin tamamı kullanılabilir.
Multi-HAL 2 sensöründe yerleşik güvenlik özellikleri de bulunur. Bu sayfa,
Sensör FMQ'nun dolu olduğu veya Android sensör çerçevesinin
yeniden başlatılır ve sensör durumunun sıfırlanması gerekir. Ayrıca, etkinlikler
HalProxy
sınıfında yayınlandı, ancak sensör çerçevesi kabul edemedi
Sensors Multi-HAL, etkinlikleri bir arka plana taşıyabilir.
belirli bir etkinlik olabilir.
Kaynak kodu ve referans uygulaması
Tüm Sensörlerin Multi-HAL kodunu şurada bulabilirsiniz:
hardware/interfaces/sensors/common/default/2.X/multihal/
.
Bazı kaynaklar için ipuçlarını aşağıda bulabilirsiniz.
HalProxy.h
:HalProxy
nesnesi, Sensör çoklu HAL tarafından örneklendirilir ve verilerin alt HAL'lerden sensör çerçevesine aktarılması.HalProxy.cpp
:HalProxy
uygulaması, aşağıdakileri gerçekleştirmek için gereken tüm mantığı içerir: alt HAL'ler ile sensör çerçevesi arasında Multiplex iletişimi.SubHal.h
:ISensorsSubHal
arayüzü, alt HAL'lerin kullanması gereken arayüzü tanımlarHalProxy
ile uyumlu olmak için aşağıdaki adımları uygulayın. Sub-HAL,HalProxyCallback
nesnesinin kullanılabilmesi için ilk kullanıma hazırlama yöntemipostEvents
vecreateScopedWakelock
.Multi-HAL 2.0 uygulamaları için sürüm 2.0'ı kullanın:
SubHal.h
.hardware/interfaces/sensors/common/default/2.X/multihal/tests/
: Bu birim testleri,HalProxy
uygulamasını doğrular.hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/
: Bu örneğin alt HAL uygulamasında, sahte sensörler oluşturmak için sahte sensörler verileri. Birden fazla alt HAL'nin bir cihazda nasıl etkileşimde bulunduğunu test etmek için kullanışlıdır.
Uygulama
Bu bölümde, aşağıda belirtilen durumlarda Multi-HAL Sensörlerinin nasıl uygulanacağı açıklanmaktadır durumlar:
- Multi-HAL Sensörlerinin AIDL HAL Sensörleriyle Kullanımı
- Multi-HAL 2.1 Sensörlerini Uygulama
- Sensörler Multi-HAL 2.0'dan Multi-HAL 2.1'e Bağlantı Kurma
- Sensör HAL 2.0'dan Taşıma
- Sensör HAL 1.0'dan Taşıma
- Sensörlerden Multi-HAL 1.0'dan Bağlantı Oluşturma
AIDL HAL Sensörleri ile Multi-HAL Sensörlerini Kullanma
AIDL HAL Sensörleri ile çoklu HAL özelliğine izin vermek için AIDL'yi içe aktarın Şurada bulunan Multi-HAL dolgu katmanı modülü: donanım/arayüzler/sensörler/aidl/default/multihal/. Modül, AIDL ve HIDL sensörlerinin HAL tanımı arasındaki dönüşümü işler bir sarmalayıcı tanımlar ve aşağıda açıklandığı üzere çoklu HAL arayüzünün etrafında bir sarmalayıcı tanımlar Multi-HAL 2.1 Sensörlerini Uygulama. AIDL çoklu HAL dolgu katmanı, Multi-HAL 2.1 Sensörlerini kullanan cihazlarla uyumludur.
AIDL çoklu HAL dolgu katmanı, baş izleyiciyi ve baş izleyiciyi açığa çıkarmanıza olanak tanır.
AIDL HAL Sensörleri'ndeki sınırlı eksenli IMU sensör türleri Bu sensörü kullanmak için
AIDL HAL arayüzünün tanımladığı türlerde, type
alanını
getSensorsList_2_1()
uygulamasında SensorInfo
yapı. Bu güvenli
AIDL ve HIDL sensörlerinin HAL tam sayı destekli sensör türü alanları
üstlenmez.
Multi-HAL 2.1 Sensörlerini Uygulama
Sensörler Multi-HAL 2.1'i yeni bir cihaza uygulamak için aşağıdaki adımları izleyin:
ISensorsSubHal
arayüzünü aşağıda açıklandığı şekilde uygulayınSubHal.h
- Şunu uygulayın:
sensorsHalGetSubHal_2_1
yönteminiSubHal.h
içinde değiştirebilirsiniz. Yeni uygulanan alt HAL'yi oluşturmak için bir
cc_library_shared
hedefi ekleyin. Hedef eklerken:- Hedefin tedarikçi firmada bir yere aktarıldığından emin olma bölümü.
/vendor/etc/sensors/hals.conf
adresindeki yapılandırma dosyasında, yolu yeni bir satırda kitaplığa ekleyin. Gerekirse,hals.conf
dosyası yükleyin.
Alt HAL kitaplığı oluşturmakla ilgili örnek bir
Android.bp
girişi için bkz.hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp
android.hardware.sensors
girişin tümünümanifest.xml
dosyasını yükleyin. Bu dosya, cihazda desteklenen HAL'lerin listesini içerir.Tüm
android.hardware.sensors
hizmetini veservice.rc
dosyayı şuradan kaldır:device.mk
dosyasını yükleyin veandroid.hardware.sensors@2.1-service.multihal
ekleyin veandroid.hardware.sensors@2.1-service.multihal.rc
ilePRODUCT_PACKAGES
.
HalProxy
başlatma sırasında başlatılır, yeni uygulanan alt HAL'yi arar ve
çağırarak başlatır
sensorsHalGetSubHal_2_1
Sensörler Multi-HAL 2.0'dan Multi-HAL 2.1'e Bağlantı Noktası
Multi-HAL 2.0'dan Multi-HAL 2.1'e bağlamak için
SubHal
arayüzünü kullanıp alt HAL'nizi yeniden derleyin.
2.0 ve 2.1 SubHal
arayüzleri arasındaki farklar şunlardır:
IHalProxyCallback
, şurada oluşturulan türleri kullanır:ISensors.hal
spesifikasyonunun 2.1 sürümüinitialize()
işlevi, yeni birIHalProxyCallback
2.0SubHal
arayüzü yerine- Sub-HAL'ler
getSensorsList_2_1
veinjectSensorData_2_1
uygulamalıdır yerinegetSensorsList
veinjectSensorData
yerineISensors.hal
spesifikasyonunun 2.1 sürümünde eklenen yeni türler. - Sub-HAL'ler,
sensorsHalGetSubHal_2_1
Multi-HAL'nin bunları sürüm 2.1 olarak değerlendirmesi içinsensorsHalGetSubHal
alt HAL'ler içerir.
Sensörlerden HAL 2.0 bağlantı noktası
Sensör HAL'si özelliğinden Sensör Multi-HAL 2.0 sürümüne geçerken 2.0, HAL aşağıdaki şartları karşıladığını gösterir.
HAL'yi başlatma
HAL 2.0 sensörleri, sensör hizmetinin aşağıdaki işlemleri gerçekleştirmesini sağlayan bir başlatma işlevine sahiptir:
FMQ'ları iletme ve dinamik sensör geri çağırması. Multi-HAL 2.0 Sensörleri'nde,
initialize()
işlevi, aşağıdakileri yayınlamak için kullanılması gereken tek bir geri çağırma iletir
oluşturabilir, uyanık kalma kilitlerini alabilir ve dinamik sensör bağlantısı ve
neden olabilir.
Sensör etkinliklerini Multi-HAL uygulamasında yayınlama
Sub-HAL, sensör etkinliklerini FMQ üzerinden yayınlamak yerine sensörü yazmalıdır
şu tarihe kadar:
IHalProxyCallback
olup olmadığını kontrol edin.
WAKE_UP etkinlikleri
Sensörler HAL 2.0'da HAL, uygulanması için uyanık kalma kilidini yönetebilir. İçinde
Multi-HAL 2.0 sensörü olan alt HAL'ler, Multi-HAL uygulamasının
uyanık kalma kilitlerini yönetebilir ve
createScopedWakelock
.
Şu durumlarda, kilitli kapsamlı bir uyanık kalma kilidi edinilmeli ve postEvents
öğesine geçirilmelidir
Uyandırma etkinliklerini Multi-HAL uygulamasına gönderebilirsiniz.
Dinamik sensörler
Multi-HAL 2.0 sensörü için onDynamicSensorsConnected
ve
onDynamicSensorsDisconnected
inç
IHalProxyCallback
dinamik sensör bağlantıları her değiştiğinde çağrılır. Bu geri çağırma işlevleri
sağlanan IHalProxyCallback
işaretçisinin bir parçası olarak kullanılabilir
initialize()
işlevi.
Sensörlerden HAL 1.0 bağlantı noktası
Sensör HAL'si özelliğinden Sensör Multi-HAL 2.0 sürümüne geçerken 1.0, HAL aşağıdaki şartları karşıladığını gösterir.
HAL'yi başlatma
Geri çağırmanın yapılması için initialize()
işlevi desteklenmelidir.
alt HAL ve Multi-HAL uygulaması.
Kullanılabilir sensörleri kullanıma aç
Sensörler Multi-HAL 2.0'da getSensorsList()
işlevi aynı değeri döndürmelidir
değeri (HAL yeniden başlatılsa bile) Bu da
sistem sunucusu devre dışıysa sensör bağlantılarını yeniden
yeniden başlatılır. getSensorsList()
tarafından döndürülen değer cihaz sonrasında değişebilir
yeniden başlatma işlemi gerçekleştirir.
Sensör etkinliklerini Multi-HAL uygulamasında yayınlama
Sensörler HAL 2.0'daki alt HAL, poll()
çağrılmasını beklemek yerine
sensör etkinliklerini proaktif olarak
IHalProxyCallback
.
WAKE_UP etkinlikleri
Sensör HAL 1.0'da HAL, uygulanması için uyanık kalma kilidini yönetebilir. İçinde
Multi-HAL 2.0 sensörü olan alt HAL'ler, Multi-HAL uygulamasının şunları yapmasını sağlar:
uyanık kalma kilitlerini yönetebilir ve
createScopedWakelock
.
Şu durumlarda, kilitli kapsamlı bir uyanık kalma kilidi edinilmeli ve postEvents
öğesine geçirilmelidir
Uyandırma etkinliklerini Multi-HAL uygulamasına gönderebilirsiniz.
Dinamik sensörler
Sensörler HAL 1.0'da, dinamik sensörler poll()
işlevi aracılığıyla döndürülür.
Multi-HAL 2.0 sensörü için onDynamicSensorsConnected
ve
onDynamicSensorsDisconnected
inç
IHalProxyCallback
dinamik sensör bağlantıları her değiştiğinde çağrılır. Bu geri çağırma işlevleri
sağlanan IHalProxyCallback
işaretçisinin bir parçası olarak kullanılabilir
initialize()
işlevi.
Sensörlerden Multi-HAL 1.0 Bağlantı Noktası
Mevcut bir uygulamayı Sensörler Multi-HAL 1.0, bu adımları uygulayın.
- Sensörlerin HAL yapılandırmasının şu konumda olduğundan emin olun:
/vendor/etc/sensors/hals.conf
Bu işlem, küçük resmin bulunduğu dosyayı Yer:/system/etc/sensors/hals.conf
. - Şu sayfaya yapılan tüm referansları kaldırın:
hardware/hardware.h
vehardware/sensors.h
HAL 2.0 için desteklenmez. - HAL Sensörlerinden Taşıma bölümünde açıklandığı üzere bağlantı noktası alt HAL'leri 1.0'da indirilebileceğini lütfen unutmayın.
- 3. ve 3. adımları uygulayarak Sensörler Multi-HAL 2.0'ı atanmış HAL olarak ayarlayın 4, Mutli-HAL 2.0 Sensörlerini Uygulama bölümünde görebilirsiniz.
Doğrulama
VTS'yi çalıştır
Bir veya daha fazla alt HAL'yi Multi-Hal 2.1 Sensörleriyle entegre ettiğinizde alt HAL'nizin belirtildiğinden emin olmak için Tedarikçi Test Paketi (VTS)'yi kullanın. uygulamalar, Sensör HAL arayüzü tarafından belirlenen tüm gereksinimleri karşılamalıdır.
VTS, bir ana makinede kurulu olduğunda yalnızca VTS sensörlerini çalıştırmak için şu komutları yürütün:
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsHalSensorsV2_0Target && \
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsHalSensorsV2_1Target
AIDL Multi-HAL dolgu katmanını çalıştırıyorsanız VtsAidlHalSensorsTargetTest
komutunu çalıştırın.
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsAidlHalSensorsTargetTest
Birim testleri çalıştırma
Birim, HalProxy_test.cpp
testinde HalProxy
testinde kullanılan doğru olmayan alt HAL'ler
ve dinamik olarak yüklenmeyen veriler, birim testinde örneklenir. Bir
bu testler, dönüşüm kabiliyetini artıran birim testlerinin
yeni alt HAL'nin doğru şekilde uygulandığını doğrulayın.
Testleri çalıştırmak için aşağıdaki komutları yürütün:
cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest
Sahte alt HAL'lerle test yapma
Sahte alt HAL'ler, ISensorsSubHal
arayüzünün model uygulamalarıdır.
Sub-HAL'ler farklı sensör listelerini gösterir. Sensörler etkinleştirildiğinde
Düzenli aralıklarla otomatik olarak oluşturulan sensör etkinliklerini HalProxy
ürününe yayınlarlar
belirli bir sensör isteğinde belirtilen aralıklara göre değişir.
Sahte alt HAL'ler, tam Multi-HAL kodunun alt HAL'lerin kullanıldığı durumlara örnek olarak, sisteme yüklenen Sensörlerin Multi-HAL kodu.
Şu konumda iki sahte alt HAL var:
hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/
.
Sahte alt HAL'ler oluşturup bir cihaza aktarmak için aşağıdaki adımları uygulayın:
Üç farklı sahte dosyayı oluşturup aktarmak için aşağıdaki komutları çalıştırın: cihazın alt HAL'leri:
$ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/
mma
adb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so
adb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so
adb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
/vendor/etc/sensors/hals.conf
adresindeki sensörlerin HAL yapılandırmasını şununla güncelle: yollarını keşfedeceğiz./vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
HalProxy
uygulamasını yeniden başlatın ve yapılandırmada listelenen yeni alt HAL'leri yükleyin.adb shell stop
adb shell start
Hata ayıklama
Geliştiriciler, lshal
komutunu kullanarak çerçevedeki hataları ayıklayabilir.
hata ayıklama çıkışını görüntülemek için aşağıdaki komutu çalıştırın:
adb root
adb shell lshal debug android.hardware.sensors@2.1::ISensors/default
Böylece, HalProxy
adlı işletmenin mevcut durumu ve alt HAL'leri hakkında bilgi edinebilirsiniz:
çıkışını terminale yükleyin. Aşağıda,
HalProxy
nesne ve sahte alt HAL'ler.
Internal values:
Threads are running: true
Wakelock timeout start time: 200 ms ago
Wakelock timeout reset time: 73208 ms ago
Wakelock ref count: 0
# of events on pending write queue: 0
# of non-dynamic sensors across all subhals: 8
# of dynamic sensors across all subhals: 0
SubHals (2):
Name: FakeSubHal-OnChange
Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
Name: FakeSubHal-OnChange
Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
# of events on pending write queue
için belirtilen sayı bir
büyük sayı (1000 veya üzeri),
bu, sensörlere yazılmayı bekleyen pek çok etkinlik olduğunu gösterir
bahsedeceğim. Bu mesaj, sensör hizmetinin kilitlendiğini veya kilitlendiğini gösterir ve
sensör etkinliklerini işlemediğini veya büyük miktarda sensör etkinliğinin
kısa süre önce bir alt HAL'den gönderildi.
Uyanık kalma kilidi referans sayısı 0
değerinden büyükse bu, HalProxy
için geçerli olduğu anlamına gelir.
elde etti. Bu değer, ScopedWakelock
ise 0
değerinden büyük olmalıdır.
kasıtlı olarak gerçekleştiriliyorsa veya uyandırma etkinlikleri HalProxy
adresine gönderilmişse
veya sensör çerçevesi tarafından işlenmez.
HalProxy
hata ayıklama yöntemine iletilen dosya tanımlayıcısı, her bir
Böylece geliştiricilerin,
ISensorsSubHal
arayüzü.