Dalam rilis L Android, kami menghentikan dukungan untuk beberapa versi HAL
sensor. Satu-satunya versi yang didukung adalah SENSORS_DEVICE_API_VERSION_1_0
dan SENSORS_DEVICE_API_VERSION_1_3
.
Dalam rilis berikutnya, kami juga kemungkinan akan menghentikan dukungan untuk 1_0.
1_0 tidak memiliki konsep pengelompokan. Jika memungkinkan, semua perangkat yang menggunakan 1_0 HARUS diupgrade ke 1_3.
1_1 dan 1_2 memiliki definisi konsep pengelompokan yang buruk, dan tidak didukung lagi
Semua perangkat yang saat ini menggunakan 1_1 atau 1_2 HARUS diupgrade ke 1_3.
Di 1_3, kami menyederhanakan konsep pengelompokan, dan kami memperkenalkan sensor bangun.
Untuk mengupgrade ke 1_3, ikuti perubahan yang tercantum di bawah.
Mengimplementasikan fungsi batch
Meskipun tidak menerapkan pengelompokan (hardware Anda tidak memiliki FIFO), Anda harus
menerapkan fungsi batch
. batch
digunakan untuk menetapkan periode pengambilan sampel dan latensi pelaporan maksimum untuk sensor tertentu. Ini
mengganti setDelay
. setDelay
tidak akan dipanggil lagi.
Jika tidak menerapkan pengelompokan, Anda dapat menerapkan batch
dengan
hanya memanggil fungsi setDelay
yang ada dengan parameter
sampling_period_ns
yang disediakan.
Mengimplementasikan fungsi flush
Meskipun tidak menerapkan pengelompokan, Anda harus menerapkan fungsi flush
.
Jika Anda tidak menerapkan pengelompokan, flush
harus menghasilkan satu peristiwa META_DATA_FLUSH_COMPLETE
dan menampilkan 0 (berhasil).
Ubah sensors_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Tambahkan kolom baru ke definisi sensor Anda
Saat menentukan setiap sensor, selain kolom sensor_t biasa:
.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,
Anda juga harus menetapkan kolom baru, yang ditentukan antara 1_0 dan 1_3:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount: Jika tidak menerapkan pengelompokan, tetapkan nilai ini ke 0.
fifoMaxEventCount: Jika tidak menerapkan pengelompokan, tetapkan nilai ini ke 0
stringType: Tetapkan ke 0 untuk semua sensor Android resmi (yang ditentukan dalam sensors.h), karena nilai ini akan ditimpa oleh framework. Untuk sensor non-resmi, lihat sensor_t untuk mengetahui detail tentang cara menyetelnya.
requiredPermission: Ini adalah izin yang harus dimiliki aplikasi untuk mendapatkan
akses ke sensor Anda. Anda biasanya dapat menyetelnya ke 0 untuk semua sensor,
tetapi sensor dengan jenis HEART_RATE
harus menyetelnya ke SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: Nilai ini penting dan Anda harus menetapkannya sesuai dengan kemampuan sensor dan driver-nya.
Nilai ini hanya ditentukan untuk sensor berkelanjutan dan saat berubah. Ini adalah
jeda antara dua peristiwa sensor yang sesuai dengan frekuensi terendah yang
didukung sensor ini. Jika frekuensi yang lebih rendah diminta melalui fungsi batch
, peristiwa akan dihasilkan pada frekuensi ini. Ini dapat digunakan oleh framework atau aplikasi untuk memperkirakan kapan
FIFO batch mungkin penuh. Jika nilai ini tidak ditetapkan dengan benar, CTS akan gagal.
Untuk sensor mode pelaporan satu kali dan khusus, tetapkan maxDelay
ke 0.
Untuk sensor kontinu, tetapkan ke periode sampling maksimum yang diizinkan dalam mikrodetik.
Hal berikut berlaku untuk period_ns
, maxDelay
, dan minDelay
:
period_ns
dalam nanodetik, sedangkanmaxDelay
/minDelay
dalam mikrodetik.maxDelay
harus selalu sesuai dengan bilangan bulat 32-bit yang telah ditandai. Hal ini dideklarasikan sebagai 64-bit pada arsitektur 64-bit hanya karena alasan kompatibilitas biner.
flags: Kolom ini menentukan mode pelaporan sensor dan apakah sensor tersebut adalah sensor bangun.
Jika Anda tidak menerapkan pengelompokan, dan hanya beralih dari 1.0 ke 1.3, tetapkan ini ke:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
untuk sensor one-shot
SENSOR_FLAG_CONTINUOUS_MODE
untuk sensor kontinu
SENSOR_FLAG_ON_CHANGE_MODE
untuk sensor saat berubah
kecuali kedekatan
SENSOR_FLAG_SPECIAL_REPORTING_MODE
untuk sensor dengan mode pelaporan khusus
kecuali untuk detektor kemiringan.
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
untuk sensor kedekatan dan sensor detektor kemiringan resmi Android.
Catatan saat mengupgrade dari 1_1 atau 1_2
- Fungsi
batch
kini hampir selalu berhasil, bahkan untuk sensor yang tidak mendukung pengelompokan, terlepas dari nilai argumen waktu tunggu. Satu-satunya kasus saat fungsibatch
mungkin gagal adalah error internal, atausensor_handle,
yang buruk atausampling_period_ns
negatif ataumax_report_latency_ns
negatif. - Apakah sensor mendukung pengelompokan ditentukan oleh apakah sensor memiliki
fifoMaxEventCount
yang lebih besar dari 0. (Pada versi sebelumnya, nilai ini didasarkan pada nilai yang ditampilkanbatch()
.) - Sensor yang mendukung pengelompokan selalu berada dalam apa yang kita sebut “mode
batch” di versi sebelumnya: meskipun parameter
max_report_latency_ns
adalah 0, sensor masih harus dikelompokkan, yang berarti peristiwa harus disimpan di FIFO saat SoC beralih ke mode penangguhan. - Parameter
flags
dari fungsibatch
tidak digunakan lagi.DRY_RUN
danWAKE_UPON_FIFO_FULL
tidak digunakan lagi, dan tidak akan pernah diteruskan ke fungsibatch
. - Argumen waktu tunggu batch kini disebut sebagai argumen
max_report_latency
.