HAL sürümünün desteğinin sonlandırılması

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 negatif sampling_period_ns veya negatif max_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ümlerde batch() 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şlevinin flags parametresi artık kullanılmıyor. Hem DRY_RUN hem de WAKE_UPON_FIFO_FULL için destek sonlandırıldı ve bu parametreler hiçbir zaman batch 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.