Dalam rilis L Android, kami menghentikan dukungan untuk beberapa versi sensor HAL. Satu-satunya versi yang didukung adalah SENSORS_DEVICE_API_VERSION_1_0
dan SENSORS_DEVICE_API_VERSION_1_3
.
Dalam rilis berikutnya, kami kemungkinan juga akan menghentikan dukungan untuk 1_0.
1_0 tidak memiliki konsep batching. Jika memungkinkan, semua perangkat yang menggunakan 1_0 HARUS ditingkatkan ke 1_3.
1_1 dan 1_2 mengalami definisi yang buruk dari konsep batching, dan tidak didukung lagi
Semua perangkat yang saat ini menggunakan 1_1 atau 1_2 HARUS meningkatkan ke 1_3.
Dalam 1_3, kami menyederhanakan gagasan pengelompokan, dan kami memperkenalkan sensor bangun.
Untuk meningkatkan ke 1_3, ikuti perubahan yang tercantum di bawah ini.
Terapkan fungsi batch
Bahkan jika Anda tidak menerapkan batching (perangkat keras Anda tidak memiliki FIFO), Anda harus mengimplementasikan fungsi batch
. batch
digunakan untuk mengatur periode pengambilan sampel dan latensi pelaporan maksimum untuk sensor yang diberikan. Ini menggantikan setDelay
. setDelay
tidak akan dipanggil lagi.
Jika Anda tidak mengimplementasikan batching, Anda dapat mengimplementasikan batch
hanya dengan memanggil fungsi setDelay
yang ada dengan parameter sampling_period_ns
yang disediakan.
Menerapkan fungsi flush
Bahkan jika Anda tidak mengimplementasikan batching, Anda harus mengimplementasikan fungsi flush
.
Jika Anda tidak menerapkan batching, flush
harus menghasilkan satu peristiwa META_DATA_FLUSH_COMPLETE
dan mengembalikan 0 (berhasil).
Ubah sensor_poll_device_t.common.version Anda
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
Tambahkan bidang baru ke definisi sensor Anda
Saat mendefinisikan setiap sensor, selain bidang 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 menyetel bidang 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 batching, setel yang ini ke 0.
fifoMaxEventCount : Jika tidak menerapkan batching, setel yang ini ke 0
stringType : Setel ke 0 untuk semua sensor android resmi (yang didefinisikan dalam sensor.h), karena nilai ini akan ditimpa oleh kerangka kerja. Untuk sensor non-resmi, lihat sensor_t untuk detail tentang cara menyetelnya.
diperlukanPermission : Ini adalah izin yang harus dimiliki aplikasi untuk mendapatkan akses ke sensor Anda. Anda biasanya dapat menyetel ini ke 0 untuk semua sensor Anda, tetapi sensor dengan tipe HEART_RATE
harus menyetel ini ke SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : Nilai ini penting dan Anda harus mengaturnya sesuai dengan kemampuan sensor dan drivernya.
Nilai ini ditentukan hanya untuk sensor yang terus menerus dan berubah. Ini adalah penundaan antara dua peristiwa sensor yang sesuai dengan frekuensi terendah yang didukung sensor ini. Ketika frekuensi yang lebih rendah diminta melalui fungsi batch
, peristiwa akan dihasilkan pada frekuensi ini sebagai gantinya. Ini dapat digunakan oleh kerangka kerja atau aplikasi untuk memperkirakan kapan FIFO batch mungkin penuh. Jika nilai ini tidak disetel dengan benar, CTS akan gagal. Untuk sensor mode pelaporan satu bidikan dan khusus, atur maxDelay
ke 0.
Untuk sensor kontinu, setel ke periode pengambilan sampel maksimum yang diizinkan dalam mikrodetik.
Berikut ini berlaku untuk period_ns
, maxDelay
, dan minDelay
:
-
period_ns
dalam nanodetik sedangkanmaxDelay
/minDelay
dalam mikrodetik. -
maxDelay
harus selalu sesuai dengan bilangan bulat bertanda 32-bit. Ini dinyatakan sebagai 64-bit pada arsitektur 64-bit hanya untuk alasan kompatibilitas biner.
flags : Bidang ini menentukan mode pelaporan sensor dan apakah sensor tersebut merupakan sensor bangun.
Jika Anda tidak menerapkan pengelompokan, dan hanya berpindah dari 1.0 ke 1.3, setel ini ke:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
untuk sensor sekali tembak
SENSOR_FLAG_CONTINUOUS_MODE
untuk sensor kontinu SENSOR_FLAG_ON_CHANGE_MODE
untuk sensor yang sedang berubah kecuali proximity SENSOR_FLAG_SPECIAL_REPORTING_MODE
untuk sensor dengan mode pelaporan khusus kecuali untuk pendeteksi kemiringan .
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
untuk sensor jarak dan sensor pendeteksi kemiringan resmi Android.
Catatan saat meningkatkan dari 1_1 atau 1_2
- Fungsi
batch
sekarang hampir selalu berhasil, bahkan untuk sensor yang tidak mendukung batching, terlepas dari nilai argumen timeout. Satu-satunya kasus di mana fungsibatch
mungkin gagal adalah kesalahan internal, atausensor_handle,
atausampling_period_ns
negatif ataumax_report_latency_ns
negatif. - Apakah sensor mendukung pengelompokan ditentukan oleh apakah ia memiliki
fifoMaxEventCount
lebih besar dari 0. (Di versi sebelumnya, itu didasarkan pada nilai kembalian daribatch()
.) - Sensor yang mendukung batching selalu dalam apa yang kami sebut "mode batch" di versi sebelumnya: meskipun parameter
max_report_latency_ns
adalah 0, sensor harus tetap di-batch, artinya peristiwa harus disimpan di FIFO saat SoC beralih ke mode tunda . - Parameter
flags
dari fungsibatch
tidak digunakan lagi.DRY_RUN
danWAKE_UPON_FIFO_FULL
keduanya tidak digunakan lagi, dan tidak akan pernah diteruskan ke fungsibatch
. - Argumen batas waktu batch sekarang disebut sebagai argumen
max_report_latency
.