@@ -388,13 +388,36 @@ LSM6DS3::LSM6DS3( uint8_t busType, uint8_t inputArg ) : LSM6DS3Core( busType, in
388
388
// "myIMU.settings.accelEnabled = 1;" to configure before calling .begin();
389
389
//
390
390
// ****************************************************************************//
391
- status_t LSM6DS3::begin ()
391
+ status_t LSM6DS3::begin (SensorSettings* pActualSettings )
392
392
{
393
393
// Check the settings structure values to determine how to setup the device
394
394
uint8_t dataToWrite = 0 ; // Temporary variable
395
395
396
396
// Begin the inherited core. This gets the physical wires connected
397
397
status_t returnError = beginCore ();
398
+
399
+ // Copy the values from the user's settings into the output 'pActualSettings'
400
+ // that will reflect if any default choices had to be made
401
+ if (pActualSettings != NULL ){
402
+ pActualSettings->gyroEnabled = settings.gyroEnabled ;
403
+ pActualSettings->gyroRange = settings.gyroRange ;
404
+ pActualSettings->gyroSampleRate = settings.gyroSampleRate ;
405
+ pActualSettings->gyroBandWidth = settings.gyroBandWidth ;
406
+ pActualSettings->gyroFifoEnabled = settings.gyroFifoEnabled ;
407
+ pActualSettings->gyroFifoDecimation = settings.gyroFifoDecimation ;
408
+ pActualSettings->accelEnabled = settings.accelEnabled ;
409
+ pActualSettings->accelODROff = settings.accelODROff ;
410
+ pActualSettings->accelRange = settings.accelRange ;
411
+ pActualSettings->accelSampleRate = settings.accelSampleRate ;
412
+ pActualSettings->accelBandWidth = settings.accelBandWidth ;
413
+ pActualSettings->accelFifoEnabled = settings.accelFifoEnabled ;
414
+ pActualSettings->accelFifoDecimation = settings.accelFifoDecimation ;
415
+ pActualSettings->tempEnabled = settings.tempEnabled ;
416
+ pActualSettings->commMode = settings.commMode ;
417
+ pActualSettings->fifoThreshold = settings.fifoThreshold ;
418
+ pActualSettings->fifoSampleRate = settings.fifoSampleRate ;
419
+ pActualSettings->fifoModeWord = settings.fifoModeWord ;
420
+ }
398
421
399
422
// Setup the accelerometer******************************
400
423
dataToWrite = 0 ; // Start Fresh!
@@ -412,6 +435,7 @@ status_t LSM6DS3::begin()
412
435
dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
413
436
break ;
414
437
default : // set default case to max passthrough
438
+ if (pActualSettings != NULL ){ pActualSettings->accelBandWidth = 400 ; }
415
439
case 400 :
416
440
dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_400Hz;
417
441
break ;
@@ -428,6 +452,7 @@ status_t LSM6DS3::begin()
428
452
dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_8g;
429
453
break ;
430
454
default : // set default case to 16(max)
455
+ if (pActualSettings != NULL ){ pActualSettings->accelRange = 16 ; }
431
456
case 16 :
432
457
dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_16g;
433
458
break ;
@@ -444,6 +469,7 @@ status_t LSM6DS3::begin()
444
469
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_52Hz;
445
470
break ;
446
471
default : // Set default to 104
472
+ if (pActualSettings != NULL ){ pActualSettings->accelSampleRate = 104 ; }
447
473
case 104 :
448
474
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_104Hz;
449
475
break ;
@@ -505,6 +531,7 @@ status_t LSM6DS3::begin()
505
531
dataToWrite |= LSM6DS3_ACC_GYRO_FS_G_1000dps;
506
532
break ;
507
533
default : // Default to full 2000DPS range
534
+ if (pActualSettings != NULL ){ pActualSettings->gyroRange = 2000 ; }
508
535
case 2000 :
509
536
dataToWrite |= LSM6DS3_ACC_GYRO_FS_G_2000dps;
510
537
break ;
@@ -521,6 +548,7 @@ status_t LSM6DS3::begin()
521
548
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_G_52Hz;
522
549
break ;
523
550
default : // Set default to 104
551
+ if (pActualSettings != NULL ){ pActualSettings->gyroSampleRate = gyroSampleRate; }
524
552
case 104 :
525
553
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_G_104Hz;
526
554
break ;
0 commit comments