Skip to content

Commit 32aca21

Browse files
author
Owen
authored
Make changes to supplied settings visible via pointer - .cpp
User can now provide a pointer to their own SensorSettings structure. If it is supplied it is first filled out to be identical to the desired settings, and then when default cases are selected (because other cases do not match the switch value) the appropriate field is updated in the output SensorSettings. Then the user can double check that SensorSettings matches the settings that they intended. If not then that sub-setting was not a valid choice.
1 parent 94517fc commit 32aca21

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/SparkFunLSM6DS3.cpp

+29-1
Original file line numberDiff line numberDiff line change
@@ -388,13 +388,36 @@ LSM6DS3::LSM6DS3( uint8_t busType, uint8_t inputArg ) : LSM6DS3Core( busType, in
388388
// "myIMU.settings.accelEnabled = 1;" to configure before calling .begin();
389389
//
390390
//****************************************************************************//
391-
status_t LSM6DS3::begin()
391+
status_t LSM6DS3::begin(SensorSettings* pActualSettings)
392392
{
393393
//Check the settings structure values to determine how to setup the device
394394
uint8_t dataToWrite = 0; //Temporary variable
395395

396396
//Begin the inherited core. This gets the physical wires connected
397397
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+
}
398421

399422
//Setup the accelerometer******************************
400423
dataToWrite = 0; //Start Fresh!
@@ -412,6 +435,7 @@ status_t LSM6DS3::begin()
412435
dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
413436
break;
414437
default: //set default case to max passthrough
438+
if(pActualSettings != NULL){ pActualSettings->accelBandWidth = 400; }
415439
case 400:
416440
dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_400Hz;
417441
break;
@@ -428,6 +452,7 @@ status_t LSM6DS3::begin()
428452
dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_8g;
429453
break;
430454
default: //set default case to 16(max)
455+
if(pActualSettings != NULL){ pActualSettings->accelRange = 16; }
431456
case 16:
432457
dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_16g;
433458
break;
@@ -444,6 +469,7 @@ status_t LSM6DS3::begin()
444469
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_52Hz;
445470
break;
446471
default: //Set default to 104
472+
if(pActualSettings != NULL){ pActualSettings->accelSampleRate = 104; }
447473
case 104:
448474
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_104Hz;
449475
break;
@@ -505,6 +531,7 @@ status_t LSM6DS3::begin()
505531
dataToWrite |= LSM6DS3_ACC_GYRO_FS_G_1000dps;
506532
break;
507533
default: //Default to full 2000DPS range
534+
if(pActualSettings != NULL){ pActualSettings->gyroRange = 2000; }
508535
case 2000:
509536
dataToWrite |= LSM6DS3_ACC_GYRO_FS_G_2000dps;
510537
break;
@@ -521,6 +548,7 @@ status_t LSM6DS3::begin()
521548
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_G_52Hz;
522549
break;
523550
default: //Set default to 104
551+
if(pActualSettings != NULL){ pActualSettings->gyroSampleRate = gyroSampleRate; }
524552
case 104:
525553
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_G_104Hz;
526554
break;

0 commit comments

Comments
 (0)