Sensörler HAL 1.0

Beyan Sensörler HAL arayüzü, sensors.h , Android arasındaki arayüzü temsil çerçeve ve donanıma özgü yazılım. Bir HAL uygulaması, sensor.h içinde bildirilen 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 - başlatır veya bir sensör durur.
  • batch - Böyle örnekleme frekansı ve maksimum raporlama gecikme gibi bir sensör parametrelerini belirler.
  • setDelay - sadece HAL 1.0 sürümü kullanılır. Belirli bir sensör için örnekleme frekansını ayarlar.
  • flush - Belirtilen sensörün FIFO'yu boşaltır ve bu yapıldığında bir floş komple olayı rapor eder.
  • poll - Mevcut sensör olayları döndürür.

Uygulama iş parçacığı için güvenli olmalı ve bu işlevlerin farklı iş parçacıklarından çağrılmasına izin vermelidir.

Arayüz ayrıca bu işlevler tarafından kullanılan çeşitli türleri de tanımlar. Başlıca türleri şunlardır:

  • sensors_module_t
  • sensors_poll_device_t
  • sensor_t
  • sensors_event_t

Aşağıdaki bölümlerde ek olarak, bkz sensors.h bu türleri hakkında daha fazla bilgi için.

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. Bkz sensor_t sensörler tanımlanır ilgili ayrıntılar için.

Sensörlerin listede göründüğü sıra, sensörlerin uygulamalara bildirileceği sıradır. Genellikle, önce temel sensörler, ardından bileşik sensörler görünür.

Birkaç sensör aynı sensör tipini ve uyandırma özelliğini paylaşıyorsa, listedeki ilk sensör “varsayılan” sensör olarak adlandırılır. Bu tarafından döndürülen biridir getDefaultSensor(int sensorType, bool wakeUp) .

Bu işlev, listedeki sensörlerin 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 açmak / kapamak, sensörün tanıtıcı 'dir. Bir sensörün kolu ile tanımlanır handle kendi alanında sensor_t yapısı.

enabled sensörünü devre dışı bırakmak için etkinleştirmek veya 0 1 olarak ayarlanır.

Tek seferlik sensörleri bir olay aldıktan sonra kendilerini otomatik olarak devre dışı bırakmak ve hala bir çağrı yoluyla devre dışı bırakılmasına kabul etmelidir activate(..., enabled=0) .

Uyanmayan sensörler, SoC'nin askıya alma moduna geçmesini asla engellemez; yani HAL, uygulamalar adına kısmi bir uyandırma kilidi tutmaz.

Uyandırma sensörleri, olayları sürekli iletirken, SoC'nin askıya alma moduna geçmesini önleyebilir, ancak herhangi bir olayın iletilmesi gerekmiyorsa, kısmi uyandırma kilidi serbest bırakılmalıdır.

Eğer enabled 1'dir ve sensör zaten etkin, bu işlev no-op ve başarılı olur.

Eğer enabled 0'dır ve sensör zaten devre dışı bırakılır, bu işlev no-op ve başarılı olur.

Bu işlev, başarı durumunda 0, aksi takdirde negatif bir hata numarası döndürür.

toplu (sensör, bayraklar, ö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);

İçeren bir sensör parametrelerini ayarlar örnekleme frekansı ve maksimum rapor gecikmesi . Bu işlev, sensör etkinleştirildiğinde çağrılabilir, bu durumda herhangi bir sensör ölçümünün kaybolmasına neden olmamalıdır: Bir örnekleme hızından diğerine geçiş kayıp olaylara neden olmaz veya yüksek bir maksimum rapor gecikmesinden düşük bir gecikmeye geçişe neden olamaz. maksimum rapor gecikmesi.

sensor_handle configure sensörünün kolu olduğunu.

flags şu anda kullanılmıyor.

sampling_period_ns sensör nanosaniye, çalışması gereken örnekleme dönemdir. Bkz sampling_period_ns Daha fazla ayrıntı için.

max_report_latency_ns etkinlik nanosaniye HAL üzerinden bildirilen önce geciktirilebilir olan maksimum zamandır. Bkz max_report_latency_ns Daha fazla ayrıntı için paragraf.

Bu işlev, başarı durumunda 0, aksi takdirde negatif bir hata numarası döndürür.

setDelay(sensör, örnekleme periyodu)

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 ayarlamak için çağrılır sampling_period_ns parametresini.

HAL 1.0 sürümünde, setDelay yerine seti için yığının kullanıldı sampling_period_ns .

yıkama (sensör)

int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);

Bir ekleme çalkalama tam etkinlik belirtilen sensör için bir donanım, FIFO'nun ucuna ve FIFO boşaltır; bu olaylar her zamanki gibi (yani maksimum raporlama gecikmesinin süresi dolmuş gibi) iletilir ve FIFO'dan kaldırılır.

Yıkama 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ı olayı yalnızca belirtilen sensör için eklenir.

Belirtilen sensör hiçbir FIFO'yu varsa (hayır mümkün tamponlama) veya FIFO, çağrının anda boş olsaydı, flush hala başarılı olup bu sensör için bir floş komple olayı göndermelidir. Bu, tek seferlik sensörler dışındaki tüm sensörler için geçerlidir.

Ne zaman flush denir, floş olay bu sensör için FIFO zaten olsa bile, ek bir tane oluşturulur ve FIFO sonuna eklenen ve FIFO yıkanmalıdır gerekir. Sayısı flush aramalar oluşturulan floş komple olayların sayısına eşit olmalıdır.

flush için geçerli değildir tek seferlik sensörleri; Eğer sensor_handle tek seferlik bir algılayıcıyı ifade eder, flush döndürmelidir -EINVAL ve herhangi bir çalkalama tam meta olayı oluşturmaz.

Başarısına Bu işlev döndürür 0, -EINVAL belirtilen sensör tek seferlik sensörü veya etkin değildi ve negatif hata numarası aksi takdirde.

anket()

int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
  count);

Doldurarak sensör verilerinin bir dizi döner data değişken. Bu işlev, olaylar mevcut olana kadar engellemelidir. Başarı durumunda okunan olay sayısını veya bir hata durumunda negatif bir hata numarasını döndürür.

Döndürülen olayların sayısı data az ya da eşit olmalıdır count değişken. Bu işlev asla 0 (olay yok) döndürmez.

arama sırası

Cihaz botları, zaman get_sensors_list denir.

Bir sensör aktive olduğunda batch fonksiyonu ardından istenilen özelliklere uygun çağrılır activate(..., enable=1) .

HAL sürümünde 1_0 yılında, sipariş tersiydi Not olun: activate ve ardından ilk olarak adlandırıldı set_delay .

Aktive ederken bir sensörün istenen özellikleri değişen zaman, batch fonksiyonu denir.

flush (ki bu durumda geri dönmelidir da aktif olmayan sensörler, herhangi bir zamanda çağrılabilir -EINVAL )

Bir sensör devre dışı bırakıldığı zaman activate(..., enable=0) çağrılacak.

Bu çağrılara paralel olarak, poll fonksiyonu isteği verilerine defalarca çağrılır. poll hiçbir sensörler devreye sokulduğunda bile çağrılabilir.

sensor_module_t

sensors_module_t sensörler için Android donanım modülü oluşturmak için kullanılan türüdür. HAL uygulanması bir amacı tanımlamalıdır HAL_MODULE_INFO_SYM ortaya çıkarmak için, bu tür get_sensors_list fonksiyonu. Tanımını görüntüle sensors_module_t içinde sensors.h ve tanımı hw_module_t fazla bilgi için.

sensor_poll_device_t / sensor_poll_device_1_t

sensors_poll_device_1_t : Yukarıda tanımlanmış yöntemlere kalanını içeren activate , batch , flush ve poll . Onun common (tip alanı hw_device_t ) HAL sürüm numarasını tanımlar.

sensör_t

sensor_t bir temsil Android sensörü . İşte önemli alanlarından bazıları:

isim: sensörünü temsil eden bir kullanıcı tarafından görülen dize. Bu dizi genellikle alttaki sensörün parça adını, sensörün tipini ve bir 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öndürme Vektörü”

sap: buna kayıt ya da etkinlikleri oluştururken tamsayı sensörü ifade etmek için kullanılır.

yazın: sensör türü. Sensör tipi açıklamasına bakın Android sensörler nelerdir? Daha fazla ayrıntı için, bkz ve Sensör türleri resmi sensör tipleri için. Resmi olmayan sensör türleri için, type ile başlamalıdır SENSOR_TYPE_DEVICE_PRIVATE_BASE

stringType: dize olarak sensör tipini. Sensör ayarlı resmi bir türü, sahip olduğunda SENSOR_STRING_TYPE_* . Sensör üretici belirli türde sahip olduğunda, stringType üreticisi ters alan adı ile başlamalıdır. Örneğin, bir sensör Kurmaca-Company'de Cool-ürün ekibi tarafından tanımlanan kullanabilirsiniz (tek boynuzlu dedektör demek) stringType=”com.fictional_company.cool_product.unicorn_detector” . stringType benzersiz olmayan resmi sensörler türlerini tanımlamak için kullanılır. Bkz sensors.h türleri ve dize türleri hakkında daha fazla bilgi için bkz.

requiredPermission: uygulamaları, sensör görmek sahip kendisine kayıt ve veri almak gerektiğini iznini temsil eden bir dize. Boş bir dize, uygulamaların bu sensöre erişmek için herhangi bir izin gerektirmediği anlamına gelir. Gibi bazı sensör tipleri nabız monitörü zorunlu olması requiredPermission . Hassas kullanıcı bilgileri (kalp hızı gibi) sağlayan tüm sensörler bir izinle korunmalıdır.

bayraklar: Bu sensör için Bayraklar, sensör raporlama modunu tanımlayan ve sensör bir uyandırma sensör olup olmamasına. Örneğin, bir atışlık uyandırma sensörü olacak flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP . Geçerli HAL sürümünde kullanılmayan bayrağın bitleri 0'a eşit bırakılmalıdır.

maxRange: maksimum değer sensörü bildirilen değerlerle aynı birimde, raporlayabilir. Sensör içinde doyurmaksızın değerlerini rapor edebilmelidir [-maxRange; maxRange] . Bu genel anlamda sensörün toplam aralık anlamına gelir Not 2*maxRange . Sensör birkaç eksen üzerinden değerler rapor ettiğinde, aralık her eksen için geçerlidir. Örneğin, bir “+/- 2g” ivmeölçer rapor verecek maxRange = 2*9.81 = 2g .

çözünürlük: Sensör ölçebilir değerinde küçük bir fark. Genellikle göre hesaplanmış maxRange ve ölçümde bitlerin sayısı.

Güç: miliamper olarak, sensör sağlayan güç maliyeti. Bu, neredeyse her zaman temel sensörün veri sayfasında bildirilen güç tüketiminden daha fazladır. Bkz Taban sensörleri! = Fiziksel sensörler daha fazla ayrıntı için bkz ve Güç ölçümü işlemini bir sensör güç tüketimini ölçmek için ilgili ayrıntılar için. Sensör güç tüketimi cihaz hareketli olup olmadığına bağlıdır Eğer taşırken güç tüketimi bildirilen biridir power alanında.

minDelay: en yüksek hızda sensör mütekabil destek mikro sürekli sensörler, numune alma süresi, için. Bkz sampling_period_ns bu değer nasıl kullanıldığına ilişkin ayrıntılar için. Sakının minDelay ederken mikrosaniye cinsinden ifade edilir sampling_period_ns nanosaniye içindedir. Aksi belirtilmediği sürece, ilgili değiştirilebilir ve özel bir raporlama modu sensörler, için minDelay tek-atım sensörler için 0 olmalı, bu -1 olmalıdır.

MaxDelay: yavaş oranı sensörü mütekabil destek mikrosaniye sürekli ve on-değişim sensörleri, örnekleme dönemi için. Bkz sampling_period_ns bu değer nasıl kullanıldığına ilişkin ayrıntılar için. Sakının maxDelay ederken mikrosaniye cinsinden ifade edilir sampling_period_ns nanosaniye içindedir. Özel ve tek seferlik sensörler için maxDelay 0 olmalıdır.

fifoReservedEventCount: donanım FIFO bu sensör için ayrılan olay sayısı. Bu sensör için özel bir FIFO varsa, o zaman fifoReservedEventCount bu adanmış FIFO boyutudur. FIFO diğer sensörler ile paylaşılıyorsa, fifoReservedEventCount o sensör için ayrılmıştır FIFO parçası 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 FIFOların saklanabilir olabilir olayların sayısı. Bu her zaman büyük veya eşittir fifoReservedEventCount . Bu değer, başka hiçbir sensörün etkinleştirilmediğini varsayarak, sensöre belirli bir oranda kaydolurken FIFO'nun ne kadar çabuk dolacağını tahmin etmek için kullanılır. Bir donanım FIFO yok sistemlerde, fifoMaxEventCount 0. Bkz olan Harmanlama fazla ayrıntı için.

Resmi sensör tipine sahip sensörler için, çerçeve tarafından bazı alanların üzerine yazılır. Örneğin, ivmeölçer sensörleri sürekli raporlama modu var zorlanan ve kalp hızı monitörleri tarafından korunacak zorunda kalıyor SENSOR_PERMISSION_BODY_SENSORS izni.

sensörler_event_t

Üzerinden Android sensörler tarafından oluşturulan ve bildirilen Sensör olayları anket fonksiyonu olan type sensors_event_t . İşte bazı önemli alanlardır sensors_event_t :

versiyon: olmalı sizeof(struct sensors_event_t)

sensörü: ile tanımlanan, olay meydana bu sensör kolu sensor_t.handle .

yazın: ile tanımlanan, olay meydana sensörün sensör türü sensor_t.type .

timestamp: nanosaniye olayın zaman damgası. Bu, olayın gerçekleştiği zamandır (bir adım atıldığı veya bir ivmeölçer ölçümünün yapıldığı), olayın bildirildiği zaman değil. timestamp ile senkronize edilmelidir elapsedRealtimeNano saat ve sürekli sensörler durumunda, titreşim küçük olmalıdır. Zaman Damgası filtreleme damgaları ayarlamak için zaman çok yüksek titremeleri neden kesme sadece SoC'u kullanarak ve gelen de-senkronizasyon neden olabilir damgaları ayarlamak için sadece sensör çipi zamanı kullanma gibi CDD gereksinimleri karşılamak için bazen gereklidir elapsedRealtimeNano olarak, saat sensör saati kayıyor.

veri ve çakışan alanlar: sensörü tarafından ölçülen değerler. Bu alanların anlamı ve birimleri her sensör tipine özeldir. Bkz sensors.h ve farklı tanımı Sensör türleri veri alanlarının açıklaması için. Bazı sensörler için, okuma doğruluğunu da bir geçiş veri parçası olarak verilmekte status alan. Bu alan yalnızca SDK katmanında doğruluk değeri olarak görünen seçili sensör türleri için iletilir. Bu sensörler, durum alan ayarlanmalıdır olduğu gerçeği, belirtilen sensör tipi tanımı.

Meta veri temizleme tamamlama olayları

: Meta veri olayları, normal sensör etkinlikleriyle aynı tip sensors_event_meta_data_t = sensors_event_t . Yoklama yoluyla diğer sensör olaylarıyla birlikte döndürülürler. Aşağıdaki alanlara sahiptirler:

versiyon: olmalı META_DATA_VERSION

yazın: olmalı SENSOR_TYPE_META_DATA

Sensör, ayrılmış ve zaman damgası: 0 olmalı

meta_data.what: Bu etkinlik için meta tipini içerir. Tek geçerli bir meta veri türü şu anda var: META_DATA_FLUSH_COMPLETE .

META_DATA_FLUSH_COMPLETE olaylar bir sensör FIFO floş tamamlayıcıları. Ne zaman meta_data.what=META_DATA_FLUSH_COMPLETE , meta_data.sensor kızarmış olmuştur sensörün koluna ayarlanmalıdır. Yalnızca ne zaman ve onlar oluşturulan flush bir sensör üzerinde denir. Bölümüne bakın floş fazla bilgi için işleve.