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ı birsensor_handle,
veya negatifsampling_period_ns
veya negatifmax_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
fonksiyonununflags
parametresi artık kullanılmamaktadır.DRY_RUN
veWAKE_UPON_FIFO_FULL
her ikisi de kullanımdan kaldırılmıştır ve hiçbir zamanbatch
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.