Pada rilis L Android, kami menghentikan dukungan untuk beberapa versi sensor HAL. Versi yang didukung hanya SENSORS_DEVICE_API_VERSION_1_0
dan SENSORS_DEVICE_API_VERSION_1_3
.
Pada rilis berikutnya, kami kemungkinan juga akan menghentikan dukungan untuk 1_0.
1_0 tidak memiliki konsep pengelompokan. Jika memungkinkan, semua perangkat yang menggunakan 1_0 HARUS ditingkatkan ke 1_3.
1_1 dan 1_2 mengalami definisi konsep batching yang buruk, dan tidak didukung lagi
Semua perangkat yang saat ini menggunakan 1_1 atau 1_2 HARUS ditingkatkan ke 1_3.
Di 1_3, kami menyederhanakan gagasan pengelompokan, dan kami memperkenalkan sensor bangun.
Untuk meningkatkan ke 1_3, ikuti perubahan yang tercantum di bawah.
Menerapkan fungsi batch
Meskipun 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 tertentu. Ini menggantikan setDelay
. setDelay
tidak akan dipanggil lagi.
Jika Anda tidak menerapkan batching, Anda dapat mengimplementasikan batch
hanya dengan memanggil fungsi setDelay
yang ada dengan parameter sampling_period_ns
yang disediakan.
Menerapkan fungsi siram
Meskipun Anda tidak menerapkan batching, Anda harus menerapkan 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 kolom baru ke definisi sensor Anda
Saat mendefinisikan setiap sensor, selain bidang sensor_t yang 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 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, setel yang ini ke 0.
fifoMaxEventCount : Jika tidak menerapkan pengelompokan, setel yang ini ke 0
stringType : Setel ke 0 untuk semua sensor Android resmi (yang ditentukan di sensor.h), karena nilai ini akan ditimpa oleh kerangka kerja. Untuk sensor non-resmi, lihat sensor_t untuk detail cara menyetelnya.
diperlukan Izin : Ini adalah izin yang diperlukan aplikasi untuk mendapatkan akses ke sensor Anda. Biasanya Anda dapat menyetelnya ke 0 untuk semua sensor Anda, namun sensor dengan tipe HEART_RATE
harus menyetelnya ke SENSOR_PERMISSION_BODY_SENSORS.
maxDelay : Nilai ini penting dan Anda perlu mengaturnya sesuai dengan kemampuan sensor dan drivernya.
Nilai ini ditentukan hanya untuk sensor kontinu dan sensor yang terus 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
, kejadian akan dihasilkan pada frekuensi ini. Ini dapat digunakan oleh kerangka kerja atau aplikasi untuk memperkirakan kapan FIFO batch mungkin penuh. Jika nilai ini tidak diatur dengan benar, CTS akan gagal. Untuk sensor mode one-shot dan pelaporan khusus, setel maxDelay
ke 0.
Untuk sensor kontinu, atur ke periode pengambilan sampel maksimum yang diperbolehkan 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 batching, dan hanya berpindah dari 1.0 ke 1.3, setel ini ke:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
untuk sensor sekali jepret
SENSOR_FLAG_CONTINUOUS_MODE
untuk sensor kontinu SENSOR_FLAG_ON_CHANGE_MODE
untuk sensor yang berubah-ubah kecuali jarak 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 jarak dan sensor pendeteksi kemiringan resmi Android.
Catatan saat meningkatkan versi dari 1_1 atau 1_2
- Fungsi
batch
sekarang hampir selalu berhasil, bahkan untuk sensor yang tidak mendukung batching, terlepas dari nilai argumen batas waktu. 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 batching ditentukan oleh apakah sensor tersebut memiliki
fifoMaxEventCount
lebih besar dari 0. (Dalam versi sebelumnya, ini didasarkan pada nilai kembalianbatch()
.) - 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 kejadian harus disimpan di FIFO ketika SoC beralih ke mode penangguhan . - 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
.