Android L sürümünde bazı sensör HAL sürümleri için desteği durduruyoruz. Yalnızca SENSORS_DEVICE_API_VERSION_1_0
ve SENSORS_DEVICE_API_VERSION_1_3 sürümleri desteklenir.
Sonraki sürümlerde 1_0 için de desteği sonlandıracağız.
1_0'da gruplandırma kavramı yoktur. Mümkünse 1_0 sürümünü kullanan tüm cihazlar 1_3 sürümüne yükseltilmelidir.
1_1 ve 1_2, gruplandırma kavramının kötü tanımlanmasından dolayı artık desteklenmemektedir
Şu anda 1_1 veya 1_2 sürümünü kullanan tüm cihazlar 1_3 sürümüne YÜKSELTİLMELİDİR.
1_3 sürümünde gruplandırma kavramını basitleştirdik ve uyanma sensörlerini kullanıma sunduk.
1_3 sürümüne yükseltmek için aşağıda listelenen değişiklikleri uygulayın.
Toplu işlevi uygulama
Gruplandırmayı uygulamasanız bile (donanımınızda FIFO yok) batch işlevini uygulamanız gerekir. batch, belirli bir sensör için örnekleme dönemini ve maksimum raporlama gecikmesini ayarlamak amacıyla kullanılır. setDelay yerine kullanılır. setDelay artık çağrılmayacak.
Toplu işlem uygulamazsanız mevcut setDelay işlevinizi sağlanan sampling_period_ns parametresiyle çağırarak batch işlevini uygulayabilirsiniz.
Boşaltma işlevini uygulama
Gruplandırmayı uygulamasanız bile flush işlevini uygulamanız gerekir.
Gruplandırmayı uygulamazsanız flush bir META_DATA_FLUSH_COMPLETE etkinliği oluşturmalı ve 0 (başarı) döndürmelidir.
sensors_poll_device_t.common.version değerinizi değiştirme
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Yeni alanları sensörlerinizin tanımına ekleyin
Her sensörü tanımlarken normal sensor_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: Gruplandırma uygulanmıyorsa bu ayarı 0 olarak ayarlayın.
fifoMaxEventCount: Gruplandırma uygulanmıyorsa bunu 0 olarak ayarlayın.
stringType: Bu değer çerçeve tarafından üzerine yazılacağından, tüm resmi Android sensörleri (sensors.h dosyasında tanımlananlar) için 0 olarak ayarlanır. Resmi olmayan sensörler için nasıl ayarlanacağıyla ilgili ayrıntılar için sensor_t bölümüne bakın.
requiredPermission: Uygulamaların sensörünüze erişmek için sahip olması gereken izindir. Bu değeri genellikle tüm sensörleriniz için 0 olarak ayarlayabilirsiniz ancak HEART_RATE türüne sahip sensörlerde bu değer SENSOR_PERMISSION_BODY_SENSORS. olarak ayarlanmalıdır.
maxDelay: Bu değer önemlidir ve sensörün ve sürücüsünün özelliklerine göre ayarlamanız gerekir.
Bu değer yalnızca sürekli ve değişiklikte sensörler için tanımlanır. Bu sensörün desteklediği en düşük frekansa karşılık gelen iki sensör etkinliği arasındaki gecikmedir. batch işlevi aracılığıyla daha düşük sıklıklar istendiğinde etkinlikler bunun yerine bu sıklıkta oluşturulur. Çerçeve veya uygulamalar tarafından, toplu FIFO'nun ne zaman dolabileceğini tahmin etmek için kullanılabilir. Bu değer doğru şekilde ayarlanmazsa CTS başarısız olur.
Tek seferlik ve özel raporlama modu sensörleri için maxDelay değerini 0 olarak ayarlayın.
Sürekli sensörler için mikrosaniye cinsinden izin verilen maksimum örnekleme dönemine ayarlayın.
Aşağıdakiler period_ns, maxDelay ve minDelay için geçerlidir:
period_nsnanosaniye cinsinden,maxDelay/minDelayise mikrosaniye cinsindendir.maxDelayher zaman 32 bitlik bir imzalı tam sayıya sığmalıdır. Yalnızca ikili uyumluluk nedeniyle 64 bit mimarilerde 64 bit olarak beyan edilir.
flags: Bu alan, sensörün raporlama modunu ve sensörün bir uyanma sensörü olup olmadığını tanımlar.
Gruplandırmayı uygulamıyorsanız ve yalnızca 1.0 sürümünden 1.3 sürümüne geçiyorsanız bu değeri şu şekilde ayarlayın:
Tek seferlik
sensörler için SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
Devamlı SENSOR_FLAG_CONTINUOUS_MODE, yakınlık hariç değişiklik SENSOR_FLAG_ON_CHANGE_MODE, eğim algılayıcı hariç özel raporlama moduna sahip SENSOR_FLAG_SPECIAL_REPORTING_MODE sensörler.
Yakınlık sensörü ve Android resmi eğim algılayıcısı sensörü için SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE.
1_1 veya 1_2 sürümünden yükseltme yaparken dikkat edilmesi gereken noktalar
-
batchişlevi artık zaman aşımı bağımsız değişkeninin değerinden bağımsız olarak, gruplandırmayı desteklemeyen sensörlerde bile neredeyse her zaman başarılı oluyor.batchişlevinin başarısız olabileceği tek durumlar dahili hatalar veya hatalısensor_handle,ya da negatifsampling_period_nsveya negatifmax_report_latency_nsdeğerleridir. - Bir sensörün gruplamayı destekleyip desteklemediği,
fifoMaxEventCountdeğerinin 0'dan büyük olup olmadığına göre belirlenir. (Önceki sürümlerdebatch()işlevinin döndürdüğü değere dayanıyordu.) - Gruplandırmayı destekleyen sensörler, önceki sürümlerde "grup modu" olarak adlandırdığımız moddadır:
max_report_latency_nsparametresi 0 olsa bile sensör gruplandırılmalıdır. Yani SoC askıya alma moduna geçtiğinde etkinlikler FIFO'da depolanmalıdır. -
batchişlevininflagsparametresi artık kullanılmıyor. HemDRY_RUNhem deWAKE_UPON_FIFO_FULLiçin destek sonlandırıldı ve bu parametreler hiçbir zamanbatchişlevine iletilmez. - Toplu zaman aşımı bağımsız değişkeni artık
max_report_latencybağımsız değişkeni olarak adlandırılmaktadır.