Skip to content

Commit b65a10b

Browse files
committed
Added configuration parameter on begin to select the sensor mounted on the board:
- Only Accelerometer - Only Magnetometer - Both present Default value -> Both present
1 parent d4e5ee3 commit b65a10b

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

src/BMI270.cpp

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void BoschSensorClass::onInterrupt(mbed::Callback<void(void)> cb)
3434
irq.rise(mbed::callback(this, &BoschSensorClass::interrupt_handler));
3535
}
3636
#endif
37-
int BoschSensorClass::begin() {
37+
int BoschSensorClass::begin(CfgBoshSensor_t cfg) {
3838

3939
_wire->begin();
4040

@@ -60,20 +60,43 @@ int BoschSensorClass::begin() {
6060
mag_dev_info._wire = _wire;
6161
mag_dev_info.dev_addr = bmm1.chip_id;
6262

63-
int8_t bmi270InitResult = bmi270_init(&bmi2);
64-
print_rslt(bmi270InitResult);
63+
bool success = false;
6564

66-
int8_t bmi270ConfigResult = configure_sensor(&bmi2);
67-
print_rslt(bmi270ConfigResult);
65+
if(cfg == BOSCH_ACCEL_AND_MAGN) {
66+
int8_t bmi270InitResult = bmi270_init(&bmi2);
67+
print_rslt(bmi270InitResult);
6868

69-
int8_t bmm150InitResult = bmm150_init(&bmm1);
70-
print_rslt(bmm150InitResult);
69+
int8_t bmi270ConfigResult = configure_sensor(&bmi2);
70+
print_rslt(bmi270ConfigResult);
7171

72-
int8_t bmm150ConfigResult = configure_sensor(&bmm1);
73-
print_rslt(bmm150ConfigResult);
72+
int8_t bmm150InitResult = bmm150_init(&bmm1);
73+
print_rslt(bmm150InitResult);
74+
75+
int8_t bmm150ConfigResult = configure_sensor(&bmm1);
76+
print_rslt(bmm150ConfigResult);
77+
78+
success = bmi270InitResult == BMI2_OK && bmi270ConfigResult == BMI2_OK &&
79+
bmm150InitResult == BMM150_OK && bmm150ConfigResult == BMM150_OK;
80+
}
81+
else if(cfg == BOSCH_ACCELEROMETER_ONLY) {
82+
int8_t bmi270InitResult = bmi270_init(&bmi2);
83+
print_rslt(bmi270InitResult);
84+
85+
int8_t bmi270ConfigResult = configure_sensor(&bmi2);
86+
print_rslt(bmi270ConfigResult);
87+
88+
success = bmi270InitResult == BMI2_OK && bmi270ConfigResult == BMI2_OK;
89+
}
90+
else if(cfg == BOSCH_MAGNETOMETER_ONLY) {
91+
int8_t bmm150InitResult = bmm150_init(&bmm1);
92+
print_rslt(bmm150InitResult);
93+
94+
int8_t bmm150ConfigResult = configure_sensor(&bmm1);
95+
print_rslt(bmm150ConfigResult);
96+
97+
success = bmm150InitResult == BMM150_OK && bmm150ConfigResult == BMM150_OK;
98+
}
7499

75-
bool success = bmi270InitResult == BMI2_OK && bmi270ConfigResult == BMI2_OK &&
76-
bmm150InitResult == BMM150_OK && bmm150ConfigResult == BMM150_OK;
77100
_initialized = success;
78101

79102
return success;

src/BoschSensorClass.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
#include "utilities/BMI270-Sensor-API/bmi270.h"
2323
#include "utilities/BMM150-Sensor-API/bmm150.h"
2424

25+
typedef enum {
26+
BOSCH_ACCELEROMETER_ONLY,
27+
BOSCH_MAGNETOMETER_ONLY,
28+
BOSCH_ACCEL_AND_MAGN
29+
} CfgBoshSensor_t;
30+
31+
32+
2533
struct dev_info {
2634
TwoWire* _wire;
2735
uint8_t dev_addr;
@@ -35,7 +43,7 @@ class BoschSensorClass {
3543
void setContinuousMode();
3644
void oneShotMode();
3745

38-
int begin();
46+
int begin(CfgBoshSensor_t cfg = BOSCH_ACCEL_AND_MAGN);
3947
void end();
4048

4149
void debug(Stream&);

0 commit comments

Comments
 (0)