penghentian versi HAL

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 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 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 fungsi batch mungkin gagal adalah kesalahan internal, atau sensor_handle, atau sampling_period_ns negatif atau max_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 dari 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 peristiwa harus disimpan di FIFO saat SoC beralih ke mode tunda .
  • 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 .