Penghentian penggunaan versi HAL

Dalam rilis L Android, kami menghentikan dukungan untuk beberapa versi HAL sensor. Satu-satunya versi yang didukung adalah SENSORS_DEVICE_API_VERSION_1_0 dan SENSORS_DEVICE_API_VERSION_1_3.

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

1_0 tidak memiliki konsep pengelompokan. Jika memungkinkan, semua perangkat yang menggunakan 1_0 HARUS diupgrade ke 1_3.

1_1 dan 1_2 memiliki definisi konsep pengelompokan yang buruk, dan tidak didukung lagi

Semua perangkat yang saat ini menggunakan 1_1 atau 1_2 HARUS diupgrade ke 1_3.

Di 1_3, kami menyederhanakan konsep pengelompokan, dan kami memperkenalkan sensor bangun.

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

Mengimplementasikan fungsi batch

Meskipun tidak menerapkan pengelompokan (hardware Anda tidak memiliki FIFO), Anda harus menerapkan fungsi batch. batch digunakan untuk menetapkan periode pengambilan sampel dan latensi pelaporan maksimum untuk sensor tertentu. Ini mengganti setDelay. setDelay tidak akan dipanggil lagi.

Jika tidak menerapkan pengelompokan, Anda dapat menerapkan batch dengan hanya memanggil fungsi setDelay yang ada dengan parameter sampling_period_ns yang disediakan.

Mengimplementasikan fungsi flush

Meskipun tidak menerapkan pengelompokan, Anda harus menerapkan fungsi flush.

Jika Anda tidak menerapkan pengelompokan, flush harus menghasilkan satu peristiwa META_DATA_FLUSH_COMPLETE dan menampilkan 0 (berhasil).

Ubah sensors_poll_device_t.common.version

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Tambahkan kolom baru ke definisi sensor Anda

Saat menentukan setiap sensor, selain kolom 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 menetapkan 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, tetapkan nilai ini ke 0.

fifoMaxEventCount: Jika tidak menerapkan pengelompokan, tetapkan nilai ini ke 0

stringType: Tetapkan ke 0 untuk semua sensor Android resmi (yang ditentukan dalam sensors.h), karena nilai ini akan ditimpa oleh framework. Untuk sensor non-resmi, lihat sensor_t untuk mengetahui detail tentang cara menyetelnya.

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

maxDelay: Nilai ini penting dan Anda harus menetapkannya sesuai dengan kemampuan sensor dan driver-nya.

Nilai ini hanya ditentukan untuk sensor berkelanjutan dan saat berubah. Ini adalah jeda antara dua peristiwa sensor yang sesuai dengan frekuensi terendah yang didukung sensor ini. Jika frekuensi yang lebih rendah diminta melalui fungsi batch, peristiwa akan dihasilkan pada frekuensi ini. Ini dapat digunakan oleh framework atau aplikasi untuk memperkirakan kapan FIFO batch mungkin penuh. Jika nilai ini tidak ditetapkan dengan benar, CTS akan gagal. Untuk sensor mode pelaporan satu kali dan khusus, tetapkan maxDelay ke 0.

Untuk sensor kontinu, tetapkan ke periode sampling maksimum yang diizinkan dalam mikrodetik.

Hal berikut berlaku untuk period_ns, maxDelay, dan minDelay:

  • period_ns dalam nanodetik, sedangkan maxDelay/minDelay dalam mikrodetik.
  • maxDelay harus selalu sesuai dengan bilangan bulat 32-bit yang telah ditandai. Hal ini dideklarasikan sebagai 64-bit pada arsitektur 64-bit hanya karena alasan kompatibilitas biner.

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

Jika Anda tidak menerapkan pengelompokan, dan hanya beralih dari 1.0 ke 1.3, tetapkan ini ke:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE untuk sensor one-shot

SENSOR_FLAG_CONTINUOUS_MODE untuk sensor kontinu SENSOR_FLAG_ON_CHANGE_MODE untuk sensor saat 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 kedekatan dan sensor detektor kemiringan resmi Android.

Catatan saat mengupgrade dari 1_1 atau 1_2

  • Fungsi batch kini hampir selalu berhasil, bahkan untuk sensor yang tidak mendukung pengelompokan, terlepas dari nilai argumen waktu tunggu. Satu-satunya kasus saat fungsi batch mungkin gagal adalah error internal, atau sensor_handle, yang buruk atau sampling_period_ns negatif atau max_report_latency_ns negatif.
  • Apakah sensor mendukung pengelompokan ditentukan oleh apakah sensor memiliki fifoMaxEventCount yang lebih besar dari 0. (Pada versi sebelumnya, nilai ini didasarkan pada nilai yang ditampilkan batch().)
  • Sensor yang mendukung pengelompokan selalu berada dalam apa yang kita sebut “mode batch” di versi sebelumnya: meskipun parameter max_report_latency_ns adalah 0, sensor masih harus dikelompokkan, yang berarti peristiwa harus disimpan di FIFO saat SoC beralih ke mode penangguhan.
  • Parameter flags dari fungsi batch tidak digunakan lagi. DRY_RUN dan WAKE_UPON_FIFO_FULL tidak digunakan lagi, dan tidak akan pernah diteruskan ke fungsi batch.
  • Argumen waktu tunggu batch kini disebut sebagai argumen max_report_latency.