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_ns
nanosaniye cinsinden,maxDelay
/minDelay
ise mikrosaniye cinsindendir.maxDelay
her 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
-
batch
iş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.batch
işlevinin başarısız olabileceği tek durumlar dahili hatalar veya hatalısensor_handle,
ya da negatifsampling_period_ns
veya negatifmax_report_latency_ns
değerleridir. - Bir sensörün gruplamayı destekleyip desteklemediği,
fifoMaxEventCount
değ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_ns
parametresi 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. -
batch
işlevininflags
parametresi artık kullanılmıyor. HemDRY_RUN
hem deWAKE_UPON_FIFO_FULL
için destek sonlandırıldı ve bu parametreler hiçbir zamanbatch
işlevine iletilmez. - Toplu zaman aşımı bağımsız değişkeni artık
max_report_latency
bağımsız değişkeni olarak adlandırılmaktadır.