From a7491791f8dabafe349e03fb794a19e36411e77b Mon Sep 17 00:00:00 2001 From: maidnl Date: Mon, 4 Nov 2024 15:20:14 +0100 Subject: [PATCH] added possibilty to configure the kind of sensor --- src/BMI270.cpp | 32 +++++++++++++++++++------------- src/BoschSensorClass.h | 8 +++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/BMI270.cpp b/src/BMI270.cpp index 00a155d..ae13785 100644 --- a/src/BMI270.cpp +++ b/src/BMI270.cpp @@ -34,7 +34,7 @@ void BoschSensorClass::onInterrupt(mbed::Callback cb) irq.rise(mbed::callback(this, &BoschSensorClass::interrupt_handler)); } #endif -int BoschSensorClass::begin() { +int BoschSensorClass::begin(CfgBoshSensor_t cfg) { _wire->begin(); @@ -60,23 +60,29 @@ int BoschSensorClass::begin() { mag_dev_info._wire = _wire; mag_dev_info.dev_addr = bmm1.chip_id; - int8_t bmi270InitResult = bmi270_init(&bmi2); - print_rslt(bmi270InitResult); + int8_t result = 0; - int8_t bmi270ConfigResult = configure_sensor(&bmi2); - print_rslt(bmi270ConfigResult); + if(cfg != BOSCH_MAGNETOMETER_ONLY) { - int8_t bmm150InitResult = bmm150_init(&bmm1); - print_rslt(bmm150InitResult); + result |= bmi270_init(&bmi2); + print_rslt(result); - int8_t bmm150ConfigResult = configure_sensor(&bmm1); - print_rslt(bmm150ConfigResult); + result |= configure_sensor(&bmi2); + print_rslt(result); + } + + if(cfg != BOSCH_ACCELEROMETER_ONLY) { + + result |= bmm150_init(&bmm1); + print_rslt(result); + + result = configure_sensor(&bmm1); + print_rslt(result); + } - bool success = bmi270InitResult == BMI2_OK && bmi270ConfigResult == BMI2_OK && - bmm150InitResult == BMM150_OK && bmm150ConfigResult == BMM150_OK; - _initialized = success; + _initialized = (result == 0); - return success; + return _initialized; } diff --git a/src/BoschSensorClass.h b/src/BoschSensorClass.h index 6fa489b..5192f10 100644 --- a/src/BoschSensorClass.h +++ b/src/BoschSensorClass.h @@ -22,6 +22,12 @@ #include "utilities/BMI270-Sensor-API/bmi270.h" #include "utilities/BMM150-Sensor-API/bmm150.h" +typedef enum { + BOSCH_ACCELEROMETER_ONLY, + BOSCH_MAGNETOMETER_ONLY, + BOSCH_ACCEL_AND_MAGN +} CfgBoshSensor_t; + struct dev_info { TwoWire* _wire; uint8_t dev_addr; @@ -35,7 +41,7 @@ class BoschSensorClass { void setContinuousMode(); void oneShotMode(); - int begin(); + int begin(CfgBoshSensor_t cfg = BOSCH_ACCEL_AND_MAGN); void end(); void debug(Stream&);