Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Penghentian versi HAL

Dalam rilis Android L, 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 .

Dalam rilis berikutnya, kami kemungkinan besar akan menghentikan dukungan untuk 1_0 juga.

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 pengaktifan.

Untuk meningkatkan ke 1_3, ikuti perubahan yang tercantum di bawah ini.

Menerapkan fungsi batch

Meskipun Anda tidak mengimplementasikan batching (perangkat keras Anda tidak memiliki FIFO), Anda harus mengimplementasikan fungsi batch . batch digunakan untuk menyetel periode pengambilan sampel dan latensi pelaporan maksimum untuk sensor tertentu. Ini menggantikan setDelay . setDelay tidak akan dipanggil lagi.

Jika Anda tidak mengimplementasikan batching, Anda dapat mengimplementasikan batch hanya dengan memanggil fungsi setDelay ada dengan parameter sampling_period_ns disediakan.

Terapkan fungsi flush

Meskipun Anda tidak mengimplementasikan batching, Anda harus mengimplementasikan fungsi flush .

Jika Anda tidak mengimplementasikan batching, flush harus menghasilkan satu event META_DATA_FLUSH_COMPLETE dan mengembalikan 0 (sukses).

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 menentukan 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 mengimplementasikan batching, setel yang ini ke 0.

fifoMaxEventCount : Jika tidak mengimplementasikan batching, setel yang ini ke 0

stringType : Setel ke 0 untuk semua sensor android resmi (yang ditentukan dalam sensor.h), karena nilai ini akan ditimpa oleh framework. Untuk sensor tidak resmi, lihat sensor_t untuk detail tentang cara menyetelnya.

requiredPermission : Ini adalah izin yang dibutuhkan aplikasi untuk mendapatkan akses ke sensor Anda. Anda biasanya dapat menyetelnya ke 0 untuk semua sensor Anda, tetapi sensor dengan jenis HEART_RATE harus menyetelnya ke SENSOR_PERMISSION_BODY_SENSORS.

maxDelay : Nilai ini penting dan Anda harus menyetelnya sesuai dengan kemampuan sensor dan drivernya.

Nilai ini ditentukan hanya untuk sensor yang terus menerus dan terus berubah. Ini adalah jeda antara dua kejadian 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 one-shot dan pelaporan khusus, setel 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 integer bertanda tangan 32-bit. Ini dideklarasikan sebagai 64-bit pada arsitektur 64-bit hanya untuk alasan kompatibilitas biner.

flags : Kolom ini menentukan mode pelaporan dari sensor dan apakah sensor tersebut adalah sensor pengaktifan.

Jika Anda tidak mengimplementasikan batching, dan hanya berpindah dari 1.0 ke 1.3, setel ini ke:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE untuk sensor satu jepretan

SENSOR_FLAG_CONTINUOUS_MODE untuk sensor kontinu SENSOR_FLAG_ON_CHANGE_MODE untuk sensor yang 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 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 waktu tunggu. Satu-satunya kasus di mana fungsi batch mungkin gagal adalah kesalahan internal, atau sensor_handle, buruk sensor_handle, atau sampling_period_ns negatif atau max_report_latency_ns negatif.
  • Apakah sensor mendukung batching ditentukan oleh apakah ia memiliki fifoMaxEventCount lebih besar dari 0. (Dalam versi sebelumnya, ini didasarkan pada nilai yang dikembalikan dari batch() .)
  • Sensor yang mendukung pengelompokan selalu dalam apa yang kita sebut "mode batch" di versi sebelumnya: meskipun parameter max_report_latency_ns adalah 0, sensor harus tetap di-batch, yang berarti peristiwa harus disimpan dalam 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 .