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ı, sensors.h dosyasında tanımlanan her işlevi tanımlamalıdır. Ana işlevler ş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 bu işlem tamamlandığında temizleme tamamlandı etkinliğini bildirir.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
Bu türlerle ilgili daha fazla bilgi için aşağıdaki bölümlere ve sensors.h dosyasına 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.
Birkaç sensör aynı sensör türünü ve uyandırma özelliğini paylaşıyorsa listedeki ilk sensör "varsayılan" sensör olarak adlandırılı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
. Bir sensörün herkese açık adı, sensor_t yapısının handle
alanıyla tanımlanır.
enabled
, sensörü etkinleştirmek için 1'e veya devre dışı bırakmak için 0'a ayarlanır.
Tek seferlik sensörler, bir etkinlik aldıktan sonra kendilerini otomatik olarak devre dışı bırakır ve activate(...,
enabled=0)
çağrısı üzerinden devre dışı bırakılmayı 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
1 ise ve sensör zaten etkinse bu işlev hiçbir işlem yapmaz 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);
Örnekleme sıklığı ve maksimum rapor gecikmesi dahil olmak üzere bir sensörün parametrelerini ayarlar. 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 veri kaybı yaşanmasına 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ılmamaktadır.
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 HAL üzerinden bildirilmeden önce geciktirebileceği maksimum süredir (nanosaniye cinsinden). Daha fazla bilgi için max_report_latency_ns paragrafına bakın.
Bu işlev, başarı durumunda 0, aksi takdirde negatif hata sayısı döndürür.
setDelay(sensör, örnekleme dönemi)
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, sampling_period_ns
parametresini ayarlamak için batch
işlevi çağrılır.
HAL 1.0 sürümünde, sampling_period_ns değerini ayarlamak için batch yerine setDelay kullanılıyordu.
flush(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). Uygulamada birkaç sensör için tek bir FIFO kullanılıyorsa bu FIFO temizlenir ve temizleme tamamlandı etkinliği yalnızca belirtilen sensör için eklenir.
Belirtilen sensörde FIFO yoksa (arabelleğe alma yapılamaz) veya FIFO, çağrı sırasında boşsa flush
yine de başarılı olmalı ve söz konusu sensör için bir temizleme tamamlandı etkinliği göndermelidir. Bu, tek seferlik sensörler dışındaki tüm sensörler için geçerlidir.
flush
çağrıldığında, bir fırça etkinliği halihazırda
varsa, ek bir kod oluşturulmalı ve sonuna eklenmelidir
gerekir. FIFO da temizlenmelidir. flush
çağrısı sayısı, oluşturulan temizleme tamamlandı etkinliklerinin sayısına eşit olmalıdır.
flush
, tek seferlik sensörler için geçerli değildir; sensor_handle
tek seferlik bir sensörü ifade ediyorsa flush
, -EINVAL
döndürmeli ve eksiksiz meta verileri temizleme etkinliği oluşturmamalıdır.
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 verisi dizisi döndürür. Bu işlev, etkinlikler kullanıma sunulana kadar engellemelidir. 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 etkinlik sayısı, count
bağımsız değişkeninden az veya bu değere eşit olmalıdır. Bu işlev hiçbir zaman 0 değerini döndürmez (etkinlik yok).
Arama sırası
Cihaz açıldığında get_sensors_list
çağrılır.
Bir sensör etkinleştirildiğinde, batch
işlevi istenen parametrelerle çağrılır ve ardından activate(..., enable=1)
çağrılır.
HAL 1_0 sürümünde sıranın tam tersini olduğunu unutmayın: Önce activate
, ardından set_delay
çağrılır.
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
, hiçbir sensör etkinleştirilmemiş olsa bile çağrılabilir.
sensors_module_t
sensors_module_t
, sensörler için Android donanım modülünü oluşturmak 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. Daha fazla bilgi için sensors.h dosyasında sensors_module_t
ve hw_module_t
tanımına bakın.
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ü), HAL'ın sürüm numarasını tanımlar.
sensör_t
sensor_t
, Android sensörünü temsil eder. Önemli alanlarından bazıları şunlardır:
ad: Sensörü temsil eden, kullanıcı tarafından görülebilen 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 Oyun Dönme Vektörü"
handle: Sensöre kaydolurken veya sensörden etkinlik oluştururken sensörü belirtmek için kullanılan tam sayı.
type: Sensörün türü. Daha fazla bilgi için Android sensörleri nedir? başlıklı makalede sensör türü açıklamasına, resmi sensör türleri için de Sensör türleri bölümüne bakın. Ö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, Hayali Şirket'teki Cool-product ekibi tarafından tanımlanan bir sensör (ör. tek boynuzlu at algılayıcı) stringType=”com.fictional_company.cool_product.unicorn_detector”
kullanabilir.
stringType
, resmi olmayan sensör türlerini benzersiz şekilde tanımlamak için kullanılır. Türler ve dize hakkında daha fazla bilgi için sensors.h bölümüne bakın.
bulunur.
requiredPermission: Uygulamaların sensörü görmek, kaydetmek ve verilerini almak için sahip olması gereken izni temsil eden bir dize. Boş dize, uygulamaların
bu sensöre erişin. Nabız monitörü gibi bazı sensör türlerinde zorunlu bir requiredPermission
bulunur. Hassas veri sağlayan tüm sensörler
kullanıcı bilgileri (nabız gibi) bir
izni gerekir.
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 bildirebileceği maksimum değer (bildirilen değerlerle aynı birimde). Sensör, [-maxRange; maxRange]
içinde doygunluk olmadan değerleri bildirebilmelidir. Bunun, kontrol panelinin toplam aralığı anlamına geldiğini
sensör ise genel anlamda 2*maxRange
. Sensör birkaç eksen üzerinde değer bildirdiğinde aralık her eksen için geçerli olur. Ö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. Daha fazla bilgi için Temel sensörler != fiziksel sensörler bölümüne, bir sensörün güç tüketiminin nasıl ölçüleceği hakkında ayrıntılı bilgi için de Güç ölçüm süreci bölümüne göz atın.
Sensörün güç tüketimi cihazın hareket edip etmediğine bağlıysa
hareket sırasında tüketilen güç tüketimi power
.
girin.
minDelay: Sürekli sensörler için, sensörün desteklediği en hızlı hıza karşılık gelen mikrosaniye cinsinden örnekleme dönemi. 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
'ün mikrosaniye cinsinden, sampling_period_ns
'ün ise nanosaniye cinsinden ifade edildiğine dikkat edin. 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.
maxDelay: Sürekli ve değişiklikte olan sensörler için, sensörün desteklediği en yavaş hıza karşılık gelen mikrosaniye cinsinden örnekleme dönemi. 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
fifoReservedEventCount: Donanım FIFO'sunda bu sensör için ayrılan etkinliklerin sayısı. Bu sensör için özel bir FIFO varsa
fifoReservedEventCount
, bu özel FIFO'nun boyutudur. FIFO diğer sensörlerle paylaşılıyorsa fifoReservedEventCount
, FIFO'nun söz konusu sensör için ayrılmış kısmının boyutudur. Çoğu paylaşılan FIFO sisteminde ve donanım FIFO'su olmayan sistemlerde bu değer 0'dır.
fifoMaxEventCount: Bu sensör için FIFO'larda depolanabilecek maksimum etkinlik sayısı. 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. Donanım FIFO'su olmayan sistemlerde fifoMaxEventCount
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örlerinin sürekli raporlama moduna sahip olması, nabız monitörlerinin ise SENSOR_PERMISSION_BODY_SENSORS
iznine sahip olması zorunludur.
sensors_event_t
Android sensörleri tarafından oluşturulan ve poll işlevi aracılığıyla raporlanan sensör etkinlikleri type sensors_event_t
türündedir. Aşağıda bazı örnekler verilmiştir:
önemli sensors_event_t
alanları:
version: sizeof(struct sensors_event_t)
olmalıdır.
sensor: sensor_t.handle
tarafından tanımlandığı üzere, etkinliği oluşturan sensörün herkese açık kullanıcı adı.
type: Etkinliği oluşturan sensörün aşağıdaki şekilde tanımlandığı şekilde:
sensor_t.type
.
zaman damgası: Etkinliğin nanosaniye cinsinden zaman damgası. Bu, etkinliğin bildirildiği saat değil, etkinliğin gerçekleştiği saattir (bir adım atıldı veya bir ivmeölçer ölçümü yapıldı). 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ının açıklaması için sensors.h dosyasını ve farklı sensör türlerinin tanımını inceleyin. Bazı sensörlerde, ölçümlerin doğruluğu da status
alanı aracılığıyla verilerin bir parçası olarak raporlanır. 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 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 raporlarda aşağıdaki alanlar bulunur:
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. meta_data.what=META_DATA_FLUSH_COMPLETE
olduğunda meta_data.sensor
, temizlenen sensörün koluna ayarlanmalıdır. Yalnızca bir sensörde flush
çağrıldığında oluşturulurlar. Daha fazla bilgi için flush işlevi bölümünü inceleyin.