Penghentian versi HAL

Dalam rilis L Android, kami menghentikan dukungan untuk beberapa HAL sensor versi. 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 pengelompokan. Jika memungkinkan, semua perangkat yang menggunakan 1_0 SEHARUSNYA upgrade ke 1_3.

1_1 dan 1_2 mengalami definisi yang buruk dari konsep batch, dan tidak didukung lagi

Semua perangkat yang saat ini menggunakan 1_1 atau 1_2 HARUS meng-upgrade ke 1_3.

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

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

Mengimplementasikan fungsi batch

Bahkan jika Anda tidak mengimplementasikan pengelompokan (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 tidak mengimplementasikan pengelompokan, Anda dapat mengimplementasikan batch dengan cukup memanggil fungsi setDelay yang ada dengan Parameter sampling_period_ns.

Mengimplementasikan fungsi flush

Bahkan jika Anda tidak mengimplementasikan batch, Anda harus mengimplementasikan metode Fungsi flush.

Jika Anda tidak mengimplementasikan pengelompokan, flush harus membuatnya Peristiwa META_DATA_FLUSH_COMPLETE dan hasilkan 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

Saat menentukan setiap sensor, selain sensor_t biasa bidang:

.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, tetapkan nilai ini ke 0.

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

stringType: Setel ke 0 untuk semua sensor Android resmi (yang didefinisikan di sensor.h), karena nilai ini akan ditimpa oleh framework. Sebagai sensor tidak resmi, lihat sensor_t untuk detail tentang cara mengaturnya.

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

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

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

Untuk sensor berkelanjutan, tetapkan ke periode pengambilan sampel maksimum yang diizinkan dalam dalam mikrodetik.

Hal berikut berlaku untuk period_ns, maxDelay, dan minDelay:

  • period_ns dalam nanodetik sedangkan maxDelay/minDelay dalam mikrodetik.
  • maxDelay harus selalu pas dalam bilangan bulat 32-bit yang ditandai. Ini dideklarasikan sebagai 64-bit pada arsitektur 64-bit hanya karena alasan kompatibilitas biner.

flag: Kolom ini menentukan mode pelaporan sensor dan apakah sensor sensor bangun.

Jika Anda tidak mengimplementasikan batching, dan hanya beralih dari 1.0 ke 1.3, atur ini menjadi:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE untuk satu kali sensor

SENSOR_FLAG_CONTINUOUS_MODE untuk continuous sensor SENSOR_FLAG_ON_CHANGE_MODE untuk saat berubah sensor kecuali kedekatan SENSOR_FLAG_SPECIAL_REPORTING_MODE untuk sensor dengan khusus mode pelaporan kecuali untuk kemiringan pendeteksi.

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

  • Sekarang fungsi batch 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 error internal, atau sensor_handle, atau negatif sampling_period_ns atau max_report_latency_ns negatif.
  • Apakah sensor mendukung pengelompokan ditentukan oleh apakah sensor memiliki fifoMaxEventCount lebih besar dari 0. (Di versi sebelumnya, berdasarkan nilai yang ditampilkan batch().)
  • Sensor yang mendukung pengelompokan selalu ada dalam istilah yang kita sebut mode” di versi sebelumnya: meskipun parameter max_report_latency_ns adalah 0, sensor tetap harus dikelompokkan, yang berarti peristiwa harus disimpan dalam FIFO ketika SoC beralih ke mode ditangguhkan.
  • Parameter flags dari fungsi batch adalah tidak digunakan lagi. DRY_RUN dan WAKE_UPON_FIFO_FULL adalah tidak digunakan lagi, dan tidak akan pernah diteruskan ke fungsi batch.
  • Argumen waktu tunggu batch sekarang disebut sebagai Argumen max_report_latency.