@@ -434,42 +434,36 @@ static int icm42688_one_shot_decode(const uint8_t *buffer, struct sensor_chan_sp
434
434
case SENSOR_CHAN_ACCEL_X :
435
435
case SENSOR_CHAN_ACCEL_Y :
436
436
case SENSOR_CHAN_ACCEL_Z :
437
- case SENSOR_CHAN_ACCEL_XYZ : {
438
- channel_request = icm42688_encode_channel (SENSOR_CHAN_ACCEL_XYZ );
437
+ case SENSOR_CHAN_GYRO_X :
438
+ case SENSOR_CHAN_GYRO_Y :
439
+ case SENSOR_CHAN_GYRO_Z :
440
+ case SENSOR_CHAN_DIE_TEMP : {
441
+ channel_request = icm42688_encode_channel (chan_spec .chan_type );
439
442
if ((channel_request & edata -> channels ) != channel_request ) {
440
443
return - ENODATA ;
441
444
}
442
445
443
- struct sensor_three_axis_data * out = data_out ;
446
+ struct sensor_q31_data * out = data_out ;
444
447
445
448
out -> header .base_timestamp_ns = edata -> header .timestamp ;
446
449
out -> header .reading_count = 1 ;
447
- rc = icm42688_get_shift (SENSOR_CHAN_ACCEL_XYZ , header -> accel_fs , header -> gyro_fs ,
450
+
451
+ rc = icm42688_get_shift (chan_spec .chan_type , header -> accel_fs , header -> gyro_fs ,
448
452
& out -> shift );
449
453
if (rc != 0 ) {
450
454
return - EINVAL ;
451
455
}
452
456
453
457
icm42688_convert_raw_to_q31 (
454
- & cfg , SENSOR_CHAN_ACCEL_X ,
455
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_ACCEL_X )],
456
- & out -> readings [0 ].x );
457
- icm42688_convert_raw_to_q31 (
458
- & cfg , SENSOR_CHAN_ACCEL_Y ,
459
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_ACCEL_Y )],
460
- & out -> readings [0 ].y );
461
- icm42688_convert_raw_to_q31 (
462
- & cfg , SENSOR_CHAN_ACCEL_Z ,
463
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_ACCEL_Z )],
464
- & out -> readings [0 ].z );
458
+ & cfg , chan_spec .chan_type ,
459
+ edata -> readings [icm42688_get_channel_position (chan_spec .chan_type )],
460
+ & out -> readings [0 ].value );
465
461
* fit = 1 ;
466
462
return 1 ;
467
463
}
468
- case SENSOR_CHAN_GYRO_X :
469
- case SENSOR_CHAN_GYRO_Y :
470
- case SENSOR_CHAN_GYRO_Z :
464
+ case SENSOR_CHAN_ACCEL_XYZ :
471
465
case SENSOR_CHAN_GYRO_XYZ : {
472
- channel_request = icm42688_encode_channel (SENSOR_CHAN_GYRO_XYZ );
466
+ channel_request = icm42688_encode_channel (chan_spec . chan_type );
473
467
if ((channel_request & edata -> channels ) != channel_request ) {
474
468
return - ENODATA ;
475
469
}
@@ -478,52 +472,27 @@ static int icm42688_one_shot_decode(const uint8_t *buffer, struct sensor_chan_sp
478
472
479
473
out -> header .base_timestamp_ns = edata -> header .timestamp ;
480
474
out -> header .reading_count = 1 ;
481
- rc = icm42688_get_shift (SENSOR_CHAN_GYRO_XYZ , header -> accel_fs , header -> gyro_fs ,
475
+ rc = icm42688_get_shift (chan_spec . chan_type , header -> accel_fs , header -> gyro_fs ,
482
476
& out -> shift );
483
477
if (rc != 0 ) {
484
478
return - EINVAL ;
485
479
}
486
480
487
- out -> readings [0 ].timestamp_delta = 0 ;
488
481
icm42688_convert_raw_to_q31 (
489
- & cfg , SENSOR_CHAN_GYRO_X ,
490
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_GYRO_X )],
482
+ & cfg , chan_spec . chan_type - 3 ,
483
+ edata -> readings [icm42688_get_channel_position (chan_spec . chan_type - 3 )],
491
484
& out -> readings [0 ].x );
492
485
icm42688_convert_raw_to_q31 (
493
- & cfg , SENSOR_CHAN_GYRO_Y ,
494
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_GYRO_Y )],
486
+ & cfg , chan_spec . chan_type - 2 ,
487
+ edata -> readings [icm42688_get_channel_position (chan_spec . chan_type - 2 )],
495
488
& out -> readings [0 ].y );
496
489
icm42688_convert_raw_to_q31 (
497
- & cfg , SENSOR_CHAN_GYRO_Z ,
498
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_GYRO_Z )],
490
+ & cfg , chan_spec . chan_type - 1 ,
491
+ edata -> readings [icm42688_get_channel_position (chan_spec . chan_type - 1 )],
499
492
& out -> readings [0 ].z );
500
493
* fit = 1 ;
501
494
return 1 ;
502
495
}
503
- case SENSOR_CHAN_DIE_TEMP : {
504
- channel_request = icm42688_encode_channel (SENSOR_CHAN_DIE_TEMP );
505
- if ((channel_request & edata -> channels ) != channel_request ) {
506
- return - ENODATA ;
507
- }
508
-
509
- struct sensor_q31_data * out = data_out ;
510
-
511
- out -> header .base_timestamp_ns = edata -> header .timestamp ;
512
- out -> header .reading_count = 1 ;
513
-
514
- rc = icm42688_get_shift (SENSOR_CHAN_DIE_TEMP , header -> accel_fs , header -> gyro_fs ,
515
- & out -> shift );
516
- if (rc != 0 ) {
517
- return - EINVAL ;
518
- }
519
- out -> readings [0 ].timestamp_delta = 0 ;
520
- icm42688_convert_raw_to_q31 (
521
- & cfg , SENSOR_CHAN_DIE_TEMP ,
522
- edata -> readings [icm42688_get_channel_position (SENSOR_CHAN_DIE_TEMP )],
523
- & out -> readings [0 ].temperature );
524
- * fit = 1 ;
525
- return 1 ;
526
- }
527
496
default :
528
497
return - EINVAL ;
529
498
}
@@ -606,17 +575,17 @@ static int icm42688_decoder_get_size_info(struct sensor_chan_spec chan_spec, siz
606
575
size_t * frame_size )
607
576
{
608
577
switch (chan_spec .chan_type ) {
578
+ case SENSOR_CHAN_ACCEL_XYZ :
579
+ case SENSOR_CHAN_GYRO_XYZ :
580
+ * base_size = sizeof (struct sensor_three_axis_data );
581
+ * frame_size = sizeof (struct sensor_three_axis_sample_data );
582
+ return 0 ;
609
583
case SENSOR_CHAN_ACCEL_X :
610
584
case SENSOR_CHAN_ACCEL_Y :
611
585
case SENSOR_CHAN_ACCEL_Z :
612
- case SENSOR_CHAN_ACCEL_XYZ :
613
586
case SENSOR_CHAN_GYRO_X :
614
587
case SENSOR_CHAN_GYRO_Y :
615
588
case SENSOR_CHAN_GYRO_Z :
616
- case SENSOR_CHAN_GYRO_XYZ :
617
- * base_size = sizeof (struct sensor_three_axis_data );
618
- * frame_size = sizeof (struct sensor_three_axis_sample_data );
619
- return 0 ;
620
589
case SENSOR_CHAN_DIE_TEMP :
621
590
* base_size = sizeof (struct sensor_q31_data );
622
591
* frame_size = sizeof (struct sensor_q31_sample_data );
0 commit comments