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
: Bir sensörün örnekleme sıklığı ve maksimum raporlama gecikmesi gibi parametrelerini belirler.setDelay
: Yalnızca HAL 1.0 sürümünde kullanılır. Belirli bir sensör için örnekleme sıklığını belirler.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üzde, bu işlevler tarafından kullanılan çeşitli türler de tanımlanır. 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(list)
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 önce temel sensörler, ardından karma sensörler görünür.
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.
sensor_handle
, etkinleştirilecek/devre dışı bırakılacak sensörün adı. 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ı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ırma dışı sensörler, SoC'nin askıya alma moduna geçmesini hiçbir zaman engellemez. Yani HAL, uygulamalar adına kısmi uyanma kilidi tutmaz.
Uyandırma sensörleri, sürekli olarak etkinlik yayınlarken SoC'nin askıya alma moduna girmesini önleyebilir ancak etkinlik gönderilmesi gerekmiyorsa kısmi uyandırma kilidi kaldırı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ılı olduğunda 0, aksi takdirde negatif bir hata numarası 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 etkinken çağrılabilir. Bu durumda, sensör ölçümlerinin kaybedilmesine neden olmamalıdır: Bir örnekleme hızından diğerine geçiş, etkinliklerin kaybedilmesine neden olamaz. Yüksek maksimum rapor gecikmesinden düşük maksimum rapor gecikmesine geçiş de bu durumu etkilemez.
sensor_handle
, yapılandırılacak sensörün adı.
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ılı olduğunda 0, aksi takdirde negatif bir hata numarası 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 1.0 sürümünden sonra bu işlevin desteği sonlandırıldı ve işlev hiçbir zaman çağrılmadı.
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ı.
flush(sensör)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
Belirtilen sensör için donanım FIFO'sunun sonuna bir flush complete etkinliği ekleyin ve FIFO'yu temizleyin; bu etkinlikler her zamanki gibi (ör. maksimum raporlama gecikmesi sona ermiş gibi) yayınlanır ve FIFO'dan kaldırılır.
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 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, söz konusu sensör için FIFO'da zaten bir temizleme etkinliği olsa bile ek bir etkinlik oluşturulup FIFO'nun sonuna eklenmeli ve FIFO 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.
poll()
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 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 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 etkinken istenen özellikleri değiştiğinde batch
işlevi çağrılır.
flush
, etkinleştirilmemiş sensörlerde bile (bu durumda -EINVAL
döndürmelidir) dilediğiniz zaman çağrılabilir.
Bir sensör devre dışı bırakıldığında activate(..., enable=0)
çağrılır.
Bu çağrılara paralel olarak, veri isteğinde bulunmak için poll
işlevi tekrar tekrar çağrılır. poll
, sensör etkinleştirilmediğinde bile çağrılabilir.
sensörler_modül_t
sensors_module_t
, sensörler için Android donanım modülünü oluşturmak HAL'ın uygulanması, get_sensors_list işlevini göstermek için bu türde bir HAL_MODULE_INFO_SYM
nesnesi tanımlamalıdır. Daha fazla bilgi için sensors.h dosyasında sensors_module_t
ve hw_module_t
tanımına bakın.
sensors_poll_device_t / sensors_poll_device_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.
sensor_t
sensor_t
, Android sensörünü temsil eder. Bunun önemli alanlarından bazıları şunlardır:
ad: Sensörü temsil eden, kullanıcı tarafından görülebilen bir dize. Bu dize genellikle temel sensörün parça adını, sensörün türünü ve uyandırma sensörü olup olmadığını içerir. Örneğin, "LIS2HH12 İvme Ölçer", "MAX21000 Kalibre Edilmemiş Jiroskop", "BMP280 Uyandırma Barometresi", "MPU6515 Oyun Dönme 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 bir türü varsa SENSOR_STRING_TYPE_*
olarak ayarlayın. 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ür ve dize türleri hakkında daha fazla bilgi için sensors.h dosyasını inceleyin.
requiredPermission: İzni temsil eden bir dize
sensörü görmek, ona kaydolmak ve bu sensöre kaydolabilmek için
sahip olması gerekir. Boş bir dize, uygulamaların bu sensöre erişmek için herhangi bir izne ihtiyaç duymadığı anlamına gelir. 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) 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. İşaretin geçerli HAL sürümünde kullanılmayan bitleri 0 değerine ayarlanmalı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.
power: Sensörün etkinleştirilmesinin güç maliyeti (miliamper cinsinden).
Bu değer, neredeyse her zaman temel sensörün veri sayfasında bildirilen güç tüketiminden daha fazladır. 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
alanında hareket halindeyken güç tüketimi raporlanır.
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. Bu değerin nasıl kullanıldığıyla ilgili ayrıntılar için sampling_period_ns bölümüne bakın. 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örler için bu değer -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. Bu değerin nasıl kullanıldığıyla ilgili ayrıntılar için sampling_period_ns bölümüne bakın. 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şı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 bilgi için Gruplandırma bölümüne bakın.
Resmi bir sensör türüne sahip sensörlerde, bazı alanların üzerine çerçeve tarafından yazılı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.
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. sensors_event_t
'ün bazı önemli alanları şunlardır:
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 sensor_t.type
tarafından tanımlanan sensör türü.
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 damgaları ayarlamak için yalnızca SoC kesinti süresinin kullanılması çok yüksek titreşime neden olduğundan ve zaman damgaları ayarlamak için yalnızca sensör çipi süresinin kullanılması, sensör saati kaydığında elapsedRealtimeNano
saatiyle senkronizasyonun bozulmasına neden olabileceğinden, CDD şartlarını karşılamak için zaman damgası filtreleme bazen gereklidir.
veriler ve örtüşen alanlar: Sensör tarafından ölçülen değerler. 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örler için durum alanının ayarlanması gerektiği, sensör türü tanımında belirtilir.
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
. Bu etkinlikler, anket aracılığıyla diğer sensör etkinlikleriyle birlikte döndürülür. 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 anda tek geçerli meta veri türü META_DATA_FLUSH_COMPLETE
'tür.
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. 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.