Penghentian versi HAL

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 sedangkan maxDelay / 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 fungsi batch mungkin gagal adalah kesalahan internal, atau sensor_handle, atau sampling_period_ns negatif, atau max_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 kembalian batch() .)
  • 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 fungsi batch tidak digunakan lagi. DRY_RUN dan WAKE_UPON_FIFO_FULL keduanya tidak digunakan lagi, dan tidak akan pernah diteruskan ke fungsi batch .
  • Argumen batas waktu batch sekarang disebut sebagai argumen max_report_latency .