HAL sürümünün kullanımdan kaldırılması

Android'in L sürümünde bazı sensör HAL sürümlerine yönelik desteği durduruyoruz. Desteklenen sürümler yalnızca SENSORS_DEVICE_API_VERSION_1_0 ve SENSORS_DEVICE_API_VERSION_1_3 .

Sonraki sürümlerde muhtemelen 1_0 desteğini de bırakacağız.

1_0'ın toplu işleme kavramı yoktur. Mümkünse, 1_0 kullanan tüm cihazların 1_3'e yükseltilmesi GEREKİR.

1_1 ve 1_2, toplu işleme konseptinin zayıf tanımından muzdariptir ve artık desteklenmemektedir

Şu anda 1_1 veya 1_2 kullanan tüm cihazların 1_3'e yükseltilmesi ZORUNLUDUR.

1_3'te toplu işlem kavramını basitleştirdik ve uyandırma sensörlerini tanıttık.

1_3'e yükseltmek için aşağıda listelenen değişiklikleri izleyin.

Toplu iş işlevini uygulama

Toplu işlem uygulamasanız bile (donanımınızın FIFO'su yoktur), batch işlevini uygulamanız gerekir. batch belirli bir sensör için örnekleme periyodunu ve maksimum raporlama gecikmesini ayarlamak için kullanılır. setDelay yerini alır. setDelay artık çağrılmayacak.

Toplu işlem uygulamazsanız, yalnızca mevcut setDelay işlevinizi sağlanan sampling_period_ns parametresiyle çağırarak batch uygulayabilirsiniz.

Yıkama fonksiyonunu uygulayın

Toplu işleme uygulamasanız bile flush işlevini uygulamanız gerekir.

Toplu işlem uygulamazsanız, flush bir META_DATA_FLUSH_COMPLETE olayı oluşturması ve 0 (başarılı) döndürmesi gerekir.

Sensor_poll_device_t.common.version'ınızı değiştirin

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Yeni alanları sensörlerinizin tanımına ekleyin

Her bir sensörü tanımlarken, olağan sensör_t alanlarına ek olarak:

.name =       "My magnetic field Sensor",
.vendor =     "My company",
.version
=    1,
.handle =     mag_handle,
.type =       SENSOR_TYPE_MAGNETIC_FIELD,
.maxRange =   200.0f,
.resolution = CONVERT_M,
.power =      5.0f,
.minDelay =
 16667,

ayrıca 1_0 ile 1_3 arasında tanımlanan yeni alanları da ayarlamanız gerekir:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoReservedEventCount : Toplu işlem uygulamıyorsanız bunu 0 olarak ayarlayın.

fifoMaxEventCount : Toplu işlem uygulamıyorsanız bunu 0 olarak ayarlayın

stringType : Çerçeve tarafından bu değerin üzerine yazılacağından, tüm resmi Android sensörleri (sensors.h'de tanımlananlar) için 0'a ayarlayın. Resmi olmayan sensörler için, nasıl ayarlanacağına ilişkin ayrıntılar için sensör_t'ye bakın.

requirePermission : Bu, uygulamaların sensörünüze erişim sağlamak için ihtiyaç duyacağı izindir. Bunu genellikle tüm sensörleriniz için 0'a ayarlayabilirsiniz, ancak HEART_RATE türündeki sensörlerin bunu SENSOR_PERMISSION_BODY_SENSORS.

maxDelay : Bu değer önemlidir ve sensörün ve sürücüsünün yeteneklerine göre ayarlamanız gerekecektir.

Bu değer yalnızca sürekli ve değişen sensörler için tanımlanır. Bu sensörün desteklediği en düşük frekansa karşılık gelen iki sensör olayı arasındaki gecikmedir. batch işlevi aracılığıyla daha düşük frekanslar istendiğinde olaylar bunun yerine bu sıklıkta oluşturulacaktır. Toplu FIFO'nun ne zaman dolabileceğini tahmin etmek için çerçeve veya uygulamalar tarafından kullanılabilir. Bu değer düzgün ayarlanmazsa CTS başarısız olur. Tek atışlı ve özel raporlama modu sensörleri için maxDelay 0 olarak ayarlayın.

Sürekli sensörler için bunu mikrosaniye cinsinden izin verilen maksimum örnekleme periyoduna ayarlayın.

period_ns , maxDelay ve minDelay için aşağıdakiler geçerlidir:

  • period_ns nanosaniye cinsindendir, maxDelay / minDelay ise mikrosaniye cinsindendir.
  • maxDelay her zaman 32 bitlik işaretli bir tamsayıya sığmalıdır. Yalnızca ikili uyumluluk nedeniyle 64 bit mimarilerde 64 bit olarak bildirilir.

flags : Bu alan sensörün raporlama modunu ve sensörün uyandırma sensörü olup olmadığını tanımlar.

Toplu işlem uygulamıyorsanız ve yalnızca 1,0'dan 1,3'e geçiyorsanız, bunu şu şekilde ayarlayın:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE Tek atımlı sensörler için SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE

Sürekli sensörler için SENSOR_FLAG_CONTINUOUS_MODE Yakınlık dışındaki değişim sensörleri için SENSOR_FLAG_ON_CHANGE_MODE Eğim dedektörü dışında özel raporlama moduna sahip sensörler için SENSOR_FLAG_SPECIAL_REPORTING_MODE .

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE Yakınlık sensörü ve Android resmi eğim dedektörü sensörü için SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE .

1_1 veya 1_2'den yükseltmeye ilişkin notlar

  • batch işlevi artık, zaman aşımı bağımsız değişkeninin değerinden bağımsız olarak, toplu işlemi desteklemeyen sensörler için bile neredeyse her zaman başarılı oluyor. batch işlevinin başarısız olabileceği durumlar yalnızca dahili hatalar veya hatalı bir sensor_handle, veya negatif sampling_period_ns veya negatif max_report_latency_ns olabilir.
  • Bir sensörün toplu işlemi destekleyip desteklemediği, fifoMaxEventCount değerinin 0'dan büyük olup olmadığına göre tanımlanır. (Önceki sürümlerde, batch() işlevinin dönüş değerine dayanıyordu.)
  • Toplulaştırmayı destekleyen sensörler her zaman önceki sürümlerde "toplu mod" olarak adlandırdığımız moddadır: max_report_latency_ns parametresi 0 olsa bile sensörün hala toplu olarak işlenmesi gerekir; bu, SoC askıya alma moduna geçtiğinde olayların FIFO'da saklanması gerektiği anlamına gelir .
  • batch fonksiyonunun flags parametresi artık kullanılmamaktadır. DRY_RUN ve WAKE_UPON_FIFO_FULL her ikisi de kullanımdan kaldırılmıştır ve hiçbir zaman batch işlevine aktarılmayacaktır.
  • Toplu zaman aşımı bağımsız değişkenine artık max_report_latency bağımsız değişkeni adı veriliyor.