sensors.h bölümünde belirtilen Sensör HAL arayüzü, Android çerçevesi ile donanıma özgü yazılımlardan kaçının. HAL uygulaması, her bir işlevi tanımlamalıdır sensörler.h olarak belirtilir. Ana işlevleri şunlardır:
get_sensors_list
- Tüm sensörlerin listesini döndürür.activate
: Bir sensörü başlatır veya durdurur.batch
- Örnekleme sıklığı ve maksimum gibi sensör parametrelerini ayarlar raporlama gecikmesi.setDelay
: Yalnızca HAL 1.0 sürümünde kullanılır. Örnekleme sıklığını görebilirsiniz.flush
- Belirtilen sensörün FIFO'sunu temizler ve yıkama işleminin tamamlandığını bildirir etkinliği oluşturabilirsiniz.poll
: Mevcut sensör etkinliklerini döndürür.
Uygulama, iş parçacığı açısından güvenli olmalı ve şu işlevlerin çağrılmasına izin vermelidir: farklı ileti dizilerinden oluşur.
Arayüz, bu işlevler tarafından kullanılan çeşitli türleri de tanımlar. Ana türler şunlardır:
sensors_module_t
sensors_poll_device_t
sensor_t
sensors_event_t
Aşağıdaki bölümlere ek olarak bu türler hakkında daha fazla bilgi için sensors.h bölümüne bakın.
get_sensors_list(liste)
int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);
HAL tarafından uygulanan sensörlerin listesini sağlar. Sensörlerin nasıl tanımlandığıyla ilgili ayrıntılar için sensor_t bölümüne bakın.
Sensörlerin listede görünme sırası, sensörlerin uygulamalara bildirilecek. Genellikle tabandaki sensörler ardından kompozit sensörlere bakıyoruz.
Birden fazla sensör aynı sensör türünü ve uyandırma özelliğini paylaşıyorsa
en az bir tanesi "varsayılan" sensördür. Bu,
getDefaultSensor(int sensorType, bool wakeUp)
Bu işlev, listedeki sensör sayısını döndürür.
etkinleştir(sensör, doğru/yanlış)
int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int enabled);
Bir sensörü etkinleştirir veya devre dışı bırakır.
Sensörün etkinleştirilip devre dışı bırakılacağı tutma yeri sensor_handle
. Sensörün
herkese açık kullanıcı adı, sensor_t yapısının handle
alanıyla tanımlanır.
enabled
, sensörü etkinleştirmek için 1'e, devre dışı bırakmak için 0'a ayarlanır.
Tek seferlik sensörler bir etkinlik aldığında kendilerini otomatik olarak devre dışı bırakır.
ve activate(...,
enabled=0)
numaralı telefona yapılacak bir aramayla devre dışı bırakılmayı yine de kabul etmeleri gerekir.
Uyandırmayan sensörler hiçbir zaman SoC'nin askıya alma moduna girmesini engellemez; verileri HAL, uygulamalar adına kısmi bir uyanık kalma kilidi tutmayacaktır.
Sürekli etkinlik sunarken uyandırma sensörleri SoC'nin çalışmasını engelleyebilir ancak herhangi bir etkinliğin teslim edilmesi gerekmiyorsa uyanık kalma kilidi serbest bırakılmalıdır.
enabled
değeri 1 ise ve sensör zaten etkinleştirilmişse bu işlev kullanılamaz
ve başarılı olur.
enabled
değeri 0 ise ve sensör zaten devre dışıysa bu işlev kullanılamaz
ve başarılı olur.
Bu işlev, başarı durumunda 0, aksi takdirde negatif hata sayısı döndürür.
toplu işlemler(sensör, işaretler, örnekleme süresi, maksimum rapor gecikmesi)
int (*batch)( struct sensors_poll_device_1* dev, int sensor_handle, int flags, int64_t sampling_period_ns, int64_t max_report_latency_ns);
Sensörün parametrelerini ayarlar (örnekleme sıklığı ve maksimum rapor hakkında daha fazla bilgi edinin. Bu işlev, sensör etkinleştirildiğinde Bu durumda sensör ölçümünün kaybolmasına yol açmamalıdır: Geçiş yapılıyor arasında veri toplama işlemi, kayıp etkinliklere neden olamaz veya Yüksek maksimum rapor gecikmesinden düşük maksimum rapora geçiş
sensor_handle
, yapılandırılacak sensörün tutma yeridir.
flags
şu anda kullanılmıyor.
sampling_period_ns
, sensörün çalıştığı örnekleme süresidir
nanosaniye cinsinden çalışmalıdır. Aşağıdakiler için sampling_period_ns bölümüne bakın:
inceleyebilirsiniz.
max_report_latency_ns
, etkinliklerin gerçekleştirilebileceği maksimum süredir
nanosaniye cinsinden HAL üzerinden raporlanmadan önce gecikir. max_report_latency_ns raporunu inceleyin.
paragrafını inceleyebilirsiniz.
Bu işlev, başarı durumunda 0, aksi takdirde negatif hata sayısı döndürür.
setGecikme(sensör, örnekleme süresi)
int (*setDelay)( struct sensors_poll_device_t *dev, int sensor_handle, int64_t sampling_period_ns);
HAL sürüm 1.0'dan sonra bu işlev kullanımdan kaldırılmıştır ve hiçbir zaman çağrılmaz.
Bunun yerine, batch
işlevi
sampling_period_ns
parametresinden yararlanın.
HAL sürüm 1.0'da sampling_period_ns değerini ayarlamak için toplu işlem yerine SetGecikme özelliği kullanıldı.
sifon(sensör)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
Belirtilen sensör için donanım FIFO'nun sonuna bir tam temizlik etkinliği ekler ve FIFO'yu boşaltır; bu etkinlikler her zamanki gibi (yani maksimum raporlama gecikmesi geçerlilik süresi dolmuştu) ve FIFO'dan çıkarılmıştı.
Temizlik eşzamansız olarak gerçekleşir (yani bu işlev hemen dönmelidir). Uygulama birkaç sensör için tek bir FIFO kullanıyorsa bu FIFO temizlenir ve yıkama tamamlandı etkinliği yalnızca belirtilen sensör için eklenir.
Belirtilen sensörde FIFO yoksa (arabelleğe alma mümkün değilse) veya FIFO varsa
çağrı sırasında boşsa flush
, yine de başarılı olmalıdır ve
gönderebilir. Bu, diğer tüm sensörler için geçerlidir
daha hızlı üretiyor.
flush
çağrıldığında, bir sökme etkinliği halihazırda
varsa, ek bir sensör oluşturulmalı ve sonuna eklenmelidir
gerekir. FIFO temizlenmelidir. flush
sayısı
çağrılarının, oluşturulan tam temizlik etkinliklerinin sayısına eşit olması gerekir.
flush
, tek çekim için geçerli değildir
sensörler; sensor_handle
tek seferlik bir sensörden bahsediyorsa
flush
, -EINVAL
değerini döndürmeli ve herhangi bir değer oluşturmamalıdır
tam meta veri etkinliğini temizle.
Bu işlev başarılı olduğunda 0 değerini döndürür. Belirtilen sensör bir değer ise -EINVAL
değerini döndürür.
tek seferlik sensör veya etkin değildir, aksi halde negatif hata sayısı gösterilir.
anket()
int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int count);
data
bağımsız değişkenini doldurarak bir sensör verileri dizisi döndürür. Bu işlev
etkinlikler mevcut olana kadar engelleme yapmalıdır. Bu, okunan etkinliklerin sayısını döndürür
hata durumunda negatif bir hata sayısı değeri girin.
data
içinde döndürülen etkinliklerin sayısı en fazla olmalıdır
count
bağımsız değişkeni. Bu işlev hiçbir zaman 0 değerini döndürmez (etkinlik yok).
Arama sırası
Cihaz başlatıldığında get_sensors_list
çağrılır.
Bir sensör etkinleştirildiğinde batch
işlevi
istenen parametreler ve ardından activate(..., enable=1)
.
HAL sürüm 1_0'da sıranın tam tersi olduğunu unutmayın: activate
çağrıldı
önce, ardından set_delay
gelir.
Bir sensörün istenen özellikleri
batch
işlevi çağrılır.
flush
, etkinleştirilmemiş sensörlerde bile herhangi bir zamanda çağrılabilir (bu durumda
-EINVAL
değerini döndürmelidir)
Bir sensör devre dışı bırakıldığında activate(..., enable=0)
çağrılır.
Bu çağrılara paralel olarak poll
işlevi,
verileri talep edebilirsiniz. poll
, sensör etkinleştirilmediğinde bile çağrılabilir.
sensörler_modül_t
sensors_module_t
, Android donanımını oluşturmak için kullanılan türdür
modülünü kullanabilirsiniz. HAL uygulaması, bir nesne tanımlamalıdır.
get_sensors_list işlevini göstermek için bu türün HAL_MODULE_INFO_SYM
kullanılması gerekir. Bkz.
sensors.h içindeki sensors_module_t
tanımı ve hw_module_t
tanımı
konulu videomuzu izleyin.
sensör_anketi_cihaz_t / sensör_anketi_cihaz_1_t
sensors_poll_device_1_t
, yukarıda tanımlanan diğer yöntemleri içerir:
activate
, batch
, flush
ve
poll
. common
alanı (hw_device_t türünde)
HAL'nin sürüm numarasını tanımlar.
sensör_t
sensor_t
, Android'i temsil eder
sensör. Bunun önemli alanlarından bazıları şunlardır:
name: Sensörü temsil eden, kullanıcının görebildiği bir dize. Bu dize genellikle altta yatan sensörün parça adını, sensörün türünü ve olup olmadığını kontrol edin. Örneğin, "LIS2HH12 İvmeölçer", “MAX21000 Kalibre edilmemiş Jiroskop”, “BMP280 Uyandırma Barometresi”, “MPU6515 Oyunu” Rotasyon Vektörü"
handle:Kendisine kaydolurken sensöre referans vermek için kullanılan tam sayı veya etkinlik oluşturabilirsiniz.
type: Sensörün türü. Sensörün açıklamasına bakın
Ayrıntılı bilgi için Android sensörleri nedir? yazın ve resmi sensör türleri için Sensör türleri başlıklı makaleyi inceleyin. Örneğin,
resmi olmayan sensör türleri; type
, SENSOR_TYPE_DEVICE_PRIVATE_BASE
ile başlamalıdır
stringType: Dize olarak sensörün türü.
sensörün resmi türü SENSOR_STRING_TYPE_*
olarak ayarlanmış. Zaman
sensörün üreticiye özel türü var, stringType
üreticinin ters alan adıyla başlar. Örneğin, bir sensör (mesela:
tek boynuzlu at dedektörü) Cool-product ekibi tarafından tanımlanan
Kurgusal-Şirket
stringType=”com.fictional_company.cool_product.unicorn_detector”
.
stringType
, resmi olmayan sensörleri benzersiz şekilde tanımlamak için kullanılır
bulunur. Türler ve dize hakkında daha fazla bilgi için sensors.h bölümüne bakın.
bulunur.
requiredPermission: İzni temsil eden bir dize
sensörü görmek, ona kaydolmak ve bu sensöre kaydolabilmek için
sahip olması gerekir. Boş dize, uygulamaların
bu sensöre erişin. Nabız monitörü gibi bazı sensör türlerinde bir
zorunlu requiredPermission
. Hassas veri sağlayan tüm sensörler
kullanıcı bilgileri (nabız gibi)
iznidir.
flags: Bu sensör için, sensörün raporlama modunu ve
sensörün uyanma sensörü olup olmadığını kontrol edin. Örneğin, tek seferlik bir uyandırma sensörü
flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP
olacak. Bu kursta
geçerli HAL sürümünde kullanılmayan bayrak, 0'a eşit olmalıdır.
maxRange: Sensörün raporlayabileceği maksimum değer.
raporlanan değerleri ifade eder. Sensör, doymadan değerleri raporlayabilmelidir
[-maxRange; maxRange]
içinde Bunun, kontrol panelinin toplam aralığı anlamına geldiğini
sensör ise genel anlamda 2*maxRange
. Sensör,
aralığı varsa, aralık her eksene uygulanır. Örneğin, "+/- 2g"
ivme ölçer maxRange = 2*9.81 = 2g
değerini bildirir.
Çözünürlük: Sensörün ölçebileceği en küçük değer farkı.
Genellikle maxRange
ve ölçümdeki bit sayısına göre hesaplanır.
güç: Sensörü etkinleştirmenin güç maliyeti (milisaniye cinsinden).
Bu, neredeyse her zaman ABD'de raporlanan güç tüketiminin
altında bulunan sensörün
veri sayfasını kontrol edin. Temel sensörler != fiziksel bölümüne bakın.
daha fazla bilgi için Güç ölçümüne bakın ve
işlemini inceleyebilirsiniz.
Sensörün güç tüketimi cihazın hareket edip etmediğine bağlıysa
power
içinde bildirilen veri, hareket sırasındaki güç tüketimidir
girin.
minGecikme: Sürekli sensörler için örnekleme süresi,
mikrosaniye (sensörün desteklediği en yüksek hıza karşılık gelir). Aşağıdakiler için sampling_period_ns bölümüne bakın:
bu değerin nasıl kullanıldığına dair ayrıntılar. minDelay
sampling_period_ns
cinsinden belirtilirken, mikrosaniye cinsinden ifade edilir.
nanosaniyedir. Değişim sırasında ve özel raporlama modu sensörleri için
aksi takdirde minDelay
değeri 0 olmalıdır. Tek seferlik sensörlerde
-1 olmalıdır.
maxGecikme: Sürekli ve değişiklik gösteren sensörler için örnekleme işlemi,
sensörün en yavaş hızına karşılık gelen mikrosaniye cinsinden süre
destekler. Aşağıdakiler için sampling_period_ns bölümüne bakın:
bu değerin nasıl kullanıldığına dair ayrıntılar. maxDelay
sampling_period_ns
cinsinden belirtilirken, mikrosaniye cinsinden ifade edilir.
nanosaniyedir. Özel ve tek seferlik sensörlerde maxDelay
değeri şu olmalıdır:
0
fifoReserveEventCount: Bu sensör için ayrılmış etkinliklerin sayısı
donanım FIFO'su var. Bu sensör için özel bir FIFO varsa
fifoReservedEventCount
, bu özel FIFO'nun boyutudur. FIFO
diğer sensörlerle paylaşıldığında, fifoReservedEventCount
boyutun
o sensör için ayrılmış FIFO'dur. Paylaşılan FIFO sistemlerinin çoğunda ve
donanım FIFO'su olmayan sistemlerde bu değer 0'dır.
fifoMaxEventCount: Gerçekleştirilebilecek maksimum etkinlik sayısı
depolanan verileri içerebilir. Bu her zaman şundan büyük veya şuna eşittir:
fifoReservedEventCount
Bu değer,
belirli bir noktada sensöre kaydolurken FIFO çok kısa sürede
diğer sensörlerin devreye girmediğini varsayar.
fifoMaxEventCount
donanım FIFO'su 0'dır. Daha fazla ayrıntı için Gruplandırma konusuna bakın.
Resmi sensör türüne sahip sensörlerde bazı alanların üzerine yazılır
karar vermenize yardımcı olacaktır. Örneğin, ivme ölçer sensörleri
sürekli raporlama moduna sahip olmak zorunda ve nabız monitörleri ise
SENSOR_PERMISSION_BODY_SENSORS
tarafından korunmaya zorlandı
iznidir.
sensörler_etkinlik_t
Android sensörleri tarafından oluşturulan ve anket işlevi aracılığıyla bildirilen sensör etkinlikleri type sensors_event_t
değerleridir. Aşağıda bazı örnekler verilmiştir:
önemli sensors_event_t
alanları:
version: sizeof(struct sensors_event_t)
olmalıdır
sensor: Etkinliği oluşturan sensörün tutma yeri
sensor_t.handle
.
type: Etkinliği oluşturan sensörün aşağıdaki şekilde tanımlandığı şekilde:
sensor_t.type
.
timestamp: Etkinliğin nanosaniye cinsinden zaman damgası. Bu,
etkinlik gerçekleştiyse (bir adım atıldı veya ivme ölçer ölçümü yapıldı),
etkinliğin bildirildiği zaman değil. timestamp
,
elapsedRealtimeNano
saat ve sürekli sensörlerde titreşim
küçük olmalıdır. Zaman damgası filtrelemesi, bazen CDD'yi karşılamak için gereklidir.
zaman damgalarını ayarlamak için yalnızca SoC kesme zamanının kullanılması gibi,
çok yüksek ses dalgalanmasına neden olur ve
zaman damgaları,
Sensör saati kaydırıldığında elapsedRealtimeNano
saati.
veriler ve çakışan alanlar:
görebilirsiniz. Bu alanların anlamı ve birimleri her sensör için farklıdır
türü.
veri alanları. Bazı sensörlerde okumaların doğruluğu da raporlanır.
status
alanı aracılığıyla verilerin bir parçası olarak gösterilir. Bu alan yalnızca
Bu belirli sensör türleri için ardışık olarak, SDK katmanında
doğruluk değeridir. Bu sensörlerde durum alanının ayarlanmış olması gerekir.
sensör türünde geçen
belirler.
Meta veri temizleme işlemi tamamlandı etkinlikleri
Meta veri etkinlikleri normal sensör etkinlikleriyle aynı türdedir:
sensors_event_meta_data_t = sensors_event_t
Bunlar,
olup olmadığını kontrol edin. Bu kullanıcılar aşağıdaki alanlara sahiptir:
version: META_DATA_VERSION
olmalıdır
type: SENSOR_TYPE_META_DATA
olmalıdır
sensor, Reserve and timestamp (sensör, ayrılmış ve zaman damgası): 0 olmalıdır
meta_data.what: Bu etkinliğin meta veri türünü içerir. Şu an için bir
tek geçerli meta veri türü: META_DATA_FLUSH_COMPLETE
.
META_DATA_FLUSH_COMPLETE
etkinlikleri, temizleme işleminin tamamlandığını
sensör: FIFO. Zaman: meta_data.what=META_DATA_FLUSH_COMPLETE
, meta_data.sensor
temizlenen sensörün tutma yerine ayarlanmalıdır. Bunlar:
yalnızca sensörde flush
çağrıldığında oluşturulur. Bu bölümde,
flush işlevini kullanabilirsiniz.