Lines Matching +full:data +full:- +full:shift

4  * SPDX-License-Identifier: Apache-2.0
17 static int icm42688_get_shift(enum sensor_channel channel, int accel_fs, int gyro_fs, int8_t *shift) in icm42688_get_shift() argument
26 *shift = 5; in icm42688_get_shift()
29 *shift = 6; in icm42688_get_shift()
32 *shift = 7; in icm42688_get_shift()
35 *shift = 8; in icm42688_get_shift()
38 return -EINVAL; in icm42688_get_shift()
46 *shift = -1; in icm42688_get_shift()
49 *shift = 0; in icm42688_get_shift()
52 *shift = 1; in icm42688_get_shift()
55 *shift = 2; in icm42688_get_shift()
58 *shift = 3; in icm42688_get_shift()
61 *shift = 4; in icm42688_get_shift()
64 *shift = 5; in icm42688_get_shift()
67 *shift = 6; in icm42688_get_shift()
70 return -EINVAL; in icm42688_get_shift()
73 *shift = 9; in icm42688_get_shift()
76 return -EINVAL; in icm42688_get_shift()
86 int8_t shift; in icm42688_convert_raw_to_q31() local
89 rc = icm42688_get_shift(chan, cfg->accel_fs, cfg->gyro_fs, &shift); in icm42688_convert_raw_to_q31()
111 return -ENOTSUP; in icm42688_convert_raw_to_q31()
114 if (shift < 0) { in icm42688_convert_raw_to_q31()
116 intermediate * ((int64_t)INT32_MAX + 1) * (1 << -shift) / INT64_C(1000000); in icm42688_convert_raw_to_q31()
117 } else if (shift > 0) { in icm42688_convert_raw_to_q31()
119 intermediate * ((int64_t)INT32_MAX + 1) / ((1 << shift) * INT64_C(1000000)); in icm42688_convert_raw_to_q31()
184 struct icm42688_dev_data *data = dev->data; in icm42688_encode() local
187 edata->channels = 0; in icm42688_encode()
190 edata->channels |= icm42688_encode_channel(channels[i].chan_type); in icm42688_encode()
193 edata->header.is_fifo = false; in icm42688_encode()
194 edata->header.accel_fs = data->cfg.accel_fs; in icm42688_encode()
195 edata->header.gyro_fs = data->cfg.gyro_fs; in icm42688_encode()
196 edata->header.timestamp = k_ticks_to_ns_floor64(k_uptime_ticks()); in icm42688_encode()
210 /* Temperature always assumes a shift of 9 for a range of (-273,273) C */ in icm42688_read_temperature_from_packet()
228 ((temperature100 - whole * sensitivity) * INT64_C(1000000)) / sensitivity; in icm42688_read_temperature_from_packet()
230 __ASSERT_NO_MSG(whole >= -512 && whole <= 511); in icm42688_read_temperature_from_packet()
245 scale = INT64_C(2) * BIT(31 - 5) * 9.80665; in icm42688_read_imu_from_packet()
248 scale = INT64_C(4) * BIT(31 - 6) * 9.80665; in icm42688_read_imu_from_packet()
251 scale = INT64_C(8) * BIT(31 - 7) * 9.80665; in icm42688_read_imu_from_packet()
254 scale = INT64_C(16) * BIT(31 - 8) * 9.80665; in icm42688_read_imu_from_packet()
297 /* In 20 bit mode, FS can only be +/-16g and +/-2000dps */ in icm42688_read_imu_from_packet()
300 if (value == -524288) { in icm42688_read_imu_from_packet()
302 return -ENODATA; in icm42688_read_imu_from_packet()
305 if (value <= -32767) { in icm42688_read_imu_from_packet()
307 return -ENODATA; in icm42688_read_imu_from_packet()
352 const uint8_t *buffer_end = buffer + sizeof(struct icm42688_fifo_data) + edata->fifo_count; in icm42688_fifo_decode()
362 ((struct sensor_data_header *)data_out)->base_timestamp_ns = edata->header.timestamp; in icm42688_fifo_decode()
391 struct sensor_q31_data *data = (struct sensor_q31_data *)data_out; in icm42688_fifo_decode() local
393 data->shift = 9; in icm42688_fifo_decode()
395 data->readings[count].timestamp_delta = in icm42688_fifo_decode()
396 accel_period_ns[edata->accel_odr] * (accel_frame_count - 1); in icm42688_fifo_decode()
398 data->readings[count].timestamp_delta = in icm42688_fifo_decode()
399 gyro_period_ns[edata->gyro_odr] * (gyro_frame_count - 1); in icm42688_fifo_decode()
401 data->readings[count].temperature = in icm42688_fifo_decode()
405 struct sensor_three_axis_data *data = in icm42688_fifo_decode() local
407 uint64_t period_ns = accel_period_ns[edata->accel_odr]; in icm42688_fifo_decode()
409 icm42688_get_shift(SENSOR_CHAN_ACCEL_XYZ, edata->header.accel_fs, in icm42688_fifo_decode()
410 edata->header.gyro_fs, &data->shift); in icm42688_fifo_decode()
412 data->readings[count].timestamp_delta = (accel_frame_count - 1) * period_ns; in icm42688_fifo_decode()
413 rc = icm42688_read_imu_from_packet(buffer, true, edata->header.accel_fs, 0, in icm42688_fifo_decode()
414 &data->readings[count].x); in icm42688_fifo_decode()
415 rc |= icm42688_read_imu_from_packet(buffer, true, edata->header.accel_fs, 1, in icm42688_fifo_decode()
416 &data->readings[count].y); in icm42688_fifo_decode()
417 rc |= icm42688_read_imu_from_packet(buffer, true, edata->header.accel_fs, 2, in icm42688_fifo_decode()
418 &data->readings[count].z); in icm42688_fifo_decode()
420 accel_frame_count--; in icm42688_fifo_decode()
426 struct sensor_three_axis_data *data = in icm42688_fifo_decode() local
428 uint64_t period_ns = accel_period_ns[edata->gyro_odr]; in icm42688_fifo_decode()
430 icm42688_get_shift(SENSOR_CHAN_GYRO_XYZ, edata->header.accel_fs, in icm42688_fifo_decode()
431 edata->header.gyro_fs, &data->shift); in icm42688_fifo_decode()
433 data->readings[count].timestamp_delta = (gyro_frame_count - 1) * period_ns; in icm42688_fifo_decode()
434 rc = icm42688_read_imu_from_packet(buffer, false, edata->header.gyro_fs, 0, in icm42688_fifo_decode()
435 &data->readings[count].x); in icm42688_fifo_decode()
436 rc |= icm42688_read_imu_from_packet(buffer, false, edata->header.gyro_fs, 1, in icm42688_fifo_decode()
437 &data->readings[count].y); in icm42688_fifo_decode()
438 rc |= icm42688_read_imu_from_packet(buffer, false, edata->header.gyro_fs, 2, in icm42688_fifo_decode()
439 &data->readings[count].z); in icm42688_fifo_decode()
441 gyro_frame_count--; in icm42688_fifo_decode()
457 const struct icm42688_decoder_header *header = &edata->header; in icm42688_one_shot_decode()
459 .accel_fs = edata->header.accel_fs, in icm42688_one_shot_decode()
460 .gyro_fs = edata->header.gyro_fs, in icm42688_one_shot_decode()
469 return -EINVAL; in icm42688_one_shot_decode()
478 if ((channel_request & edata->channels) != channel_request) { in icm42688_one_shot_decode()
479 return -ENODATA; in icm42688_one_shot_decode()
484 out->header.base_timestamp_ns = edata->header.timestamp; in icm42688_one_shot_decode()
485 out->header.reading_count = 1; in icm42688_one_shot_decode()
486 rc = icm42688_get_shift(SENSOR_CHAN_ACCEL_XYZ, header->accel_fs, header->gyro_fs, in icm42688_one_shot_decode()
487 &out->shift); in icm42688_one_shot_decode()
489 return -EINVAL; in icm42688_one_shot_decode()
494 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_ACCEL_X)], in icm42688_one_shot_decode()
495 &out->readings[0].x); in icm42688_one_shot_decode()
498 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_ACCEL_Y)], in icm42688_one_shot_decode()
499 &out->readings[0].y); in icm42688_one_shot_decode()
502 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_ACCEL_Z)], in icm42688_one_shot_decode()
503 &out->readings[0].z); in icm42688_one_shot_decode()
512 if ((channel_request & edata->channels) != channel_request) { in icm42688_one_shot_decode()
513 return -ENODATA; in icm42688_one_shot_decode()
518 out->header.base_timestamp_ns = edata->header.timestamp; in icm42688_one_shot_decode()
519 out->header.reading_count = 1; in icm42688_one_shot_decode()
520 rc = icm42688_get_shift(SENSOR_CHAN_GYRO_XYZ, header->accel_fs, header->gyro_fs, in icm42688_one_shot_decode()
521 &out->shift); in icm42688_one_shot_decode()
523 return -EINVAL; in icm42688_one_shot_decode()
526 out->readings[0].timestamp_delta = 0; in icm42688_one_shot_decode()
529 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_GYRO_X)], in icm42688_one_shot_decode()
530 &out->readings[0].x); in icm42688_one_shot_decode()
533 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_GYRO_Y)], in icm42688_one_shot_decode()
534 &out->readings[0].y); in icm42688_one_shot_decode()
537 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_GYRO_Z)], in icm42688_one_shot_decode()
538 &out->readings[0].z); in icm42688_one_shot_decode()
544 if ((channel_request & edata->channels) != channel_request) { in icm42688_one_shot_decode()
545 return -ENODATA; in icm42688_one_shot_decode()
550 out->header.base_timestamp_ns = edata->header.timestamp; in icm42688_one_shot_decode()
551 out->header.reading_count = 1; in icm42688_one_shot_decode()
553 rc = icm42688_get_shift(SENSOR_CHAN_DIE_TEMP, header->accel_fs, header->gyro_fs, in icm42688_one_shot_decode()
554 &out->shift); in icm42688_one_shot_decode()
556 return -EINVAL; in icm42688_one_shot_decode()
558 out->readings[0].timestamp_delta = 0; in icm42688_one_shot_decode()
561 edata->readings[icm42688_get_channel_position(SENSOR_CHAN_DIE_TEMP)], in icm42688_one_shot_decode()
562 &out->readings[0].temperature); in icm42688_one_shot_decode()
567 return -EINVAL; in icm42688_one_shot_decode()
577 if (header->is_fifo) { in icm42688_decoder_decode()
587 const struct icm42688_fifo_data *data = (const struct icm42688_fifo_data *)buffer; in icm42688_decoder_get_frame_count() local
588 const struct icm42688_decoder_header *header = &data->header; in icm42688_decoder_get_frame_count()
591 return -ENOTSUP; in icm42688_decoder_get_frame_count()
594 if (!header->is_fifo) { in icm42688_decoder_get_frame_count()
608 return -ENOTSUP; in icm42688_decoder_get_frame_count()
617 const uint8_t *end = buffer + data->fifo_count; in icm42688_decoder_get_frame_count()
664 return -ENOTSUP; in icm42688_decoder_get_size_info()
672 if (!edata->header.is_fifo) { in icm24688_decoder_has_trigger()
678 return FIELD_GET(BIT_INT_STATUS_DATA_RDY, edata->int_status); in icm24688_decoder_has_trigger()
680 return FIELD_GET(BIT_INT_STATUS_FIFO_THS, edata->int_status); in icm24688_decoder_has_trigger()
682 return FIELD_GET(BIT_INT_STATUS_FIFO_FULL, edata->int_status); in icm24688_decoder_has_trigger()