Sensörler HAL 1.0

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.