Skip to content

Commit 440ebe7

Browse files
committed
fix(drivers): add auto-config addresses, unique sensorID generator, swap ism330dlc to dhcx
1 parent 878b3c6 commit 440ebe7

File tree

7 files changed

+50
-119
lines changed

7 files changed

+50
-119
lines changed

src/components/i2c/controller.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ static const std::map<std::string, FnCreateI2CSensorDriver> I2cFactorySensor = {
206206
{"ism330dlc",
207207
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
208208
const char *driver_name) -> drvBase * {
209-
return new drvIsm330dlc(i2c, addr, mux_channel, driver_name);
209+
return new drvIsm330dhcx(i2c, addr, mux_channel, driver_name);
210210
}},
211211
{"ism330dhcx",
212212
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
@@ -457,13 +457,13 @@ static const std::unordered_map<uint16_t, std::vector<const char *>>
457457
{0x0B, {"lc709203f"}},
458458
{0x12, {"pmsa003i"}},
459459
{0x13, {"vncl4020"}},
460-
{0x18, {"ds2484", "mcp9808", "mprls"}},
461-
{0x19, {"mcp9808"}},
460+
{0x18, {"ds2484", "mcp9808", "mprls", "lis3dh"}},
461+
{0x19, {"mcp9808", "lis3dh", "lsm303dlh", "lsm303agr"}},
462462
{0x1A, {"mcp9808"}},
463463
{0x1B, {"mcp9808"}},
464-
{0x1C, {"mcp9808"}},
464+
{0x1C, {"mcp9808", "lis3mdl"}},
465465
{0x1D, {"mcp9808"}},
466-
{0x1E, {"mcp9808"}},
466+
{0x1E, {"mcp9808", "lis2mdl", "lis3mdl"}},
467467
{0x1F, {"mcp9808"}},
468468
{0x23, {"bh1750"}},
469469
{0x28, {"pct2075"}},
@@ -508,7 +508,11 @@ static const std::unordered_map<uint16_t, std::vector<const char *>>
508508
{0x62, {"scd40"}},
509509
{0x68, {"mcp3421"}},
510510
{0x69, {"sen55"}},
511-
{0x6B, {"sen66"}},
511+
{0x6A, {"lsm6dso32", "ism330dhcx", "lsm6ds3"}},
512+
{0x6B, {"sen66", "lsm6ds3", "lsm6dso32", "ism330dhcx"}},
513+
{0x6C, {"lsm303dlh"}},
514+
{0x6D, {"lsm303agr"}},
515+
{0x6E, {"lsm9ds1"}},
512516
{0x70, {"pct2075", "shtc3"}},
513517
{0x71, {"pct2075"}},
514518
{0x72, {"pct2075"}},

src/components/i2c/controller.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
#include "drivers/drvIna238.h"
4141
#include "drivers/drvIna260.h"
4242
#include "drivers/drvIsm330dhcx.h"
43-
#include "drivers/drvIsm330dlc.h"
4443
#include "drivers/drvLc709203f.h"
4544
#include "drivers/drvLis2mdl.h"
4645
#include "drivers/drvLis3dh.h"

src/components/i2c/drivers/drvBaseAccelLsm6.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,27 @@ bool drvBaseAccelLsm6::readAllEvents() {
3939
_last_shake = true;
4040
}
4141

42-
uint16_t step_change = imu->readPedometer();
43-
if (step_change > 0) {
44-
WS_DEBUG_PRINT("[");
45-
WS_DEBUG_PRINT(_name);
46-
WS_DEBUG_PRINT("] Steps detected: ");
47-
WS_DEBUG_PRINTLN(step_change);
48-
_last_steps += step_change;
49-
imu->resetPedometer();
50-
}
42+
// uint16_t step_change = imu->readPedometer();
43+
// if (step_change > 0) {
44+
// WS_DEBUG_PRINT("[");
45+
// WS_DEBUG_PRINT(_name);
46+
// WS_DEBUG_PRINT("] Steps detected !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!: ");
47+
// WS_DEBUG_PRINTLN(step_change);
48+
// _last_steps += step_change;
49+
// imu->resetPedometer();
50+
// }
5151

5252
bool success = imu->getEvent(&_lastAccelEvent, &_lastGyroEvent, &_lastTempEvent);
5353
_has_last_events = success;
5454
return success;
5555
}
5656

57-
bool drvBaseAccelLsm6::computeAccelMagnitude(float &magnitude) {
57+
bool drvBaseAccelLsm6::computeAccelMagnitude(float *magnitude) {
5858
if (!readAllEvents()) {
5959
return false;
6060
}
6161

62-
magnitude = sqrtf(_lastAccelEvent.acceleration.x *
62+
*magnitude = sqrtf(_lastAccelEvent.acceleration.x *
6363
_lastAccelEvent.acceleration.x +
6464
_lastAccelEvent.acceleration.y *
6565
_lastAccelEvent.acceleration.y +
@@ -72,12 +72,19 @@ bool drvBaseAccelLsm6::getEventRaw(sensors_event_t *rawEvent) {
7272
if (!readAllEvents()) {
7373
return false;
7474
}
75+
return computeAccelMagnitude(&(rawEvent->data[0]));
76+
}
77+
78+
bool drvBaseAccelLsm6::getEventAmbientTemp(sensors_event_t *temperatureEvent) {
79+
if (!readAllEvents()) {
80+
return false;
81+
}
7582

76-
rawEvent->data[0] = static_cast<float>(_last_steps);
77-
_last_steps = 0;
83+
*temperatureEvent = _lastTempEvent;
7884
return true;
7985
}
8086

87+
// NO Shake/tap/wakeup for now, using pedometer steps instead on INT1
8188
bool drvBaseAccelLsm6::getEventBoolean(sensors_event_t *booleanEvent) {
8289
if (!readAllEvents()) {
8390
return false;

src/components/i2c/drivers/drvBaseAccelLsm6.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,34 @@ class drvBaseAccelLsm6 : public drvBase {
2121
bool getEventRaw(sensors_event_t *rawEvent) override;
2222
bool getEventAccelerometer(sensors_event_t *accelEvent) override;
2323
bool getEventGyroscope(sensors_event_t *gyroEvent) override;
24+
bool getEventAmbientTemp(sensors_event_t *temperatureEvent) override;
2425

2526
void ConfigureDefaultSensorTypes() override;
2627

2728
void setInternalPollingInterval(uint32_t interval_ms);
2829

2930
protected:
3031
virtual Adafruit_LSM6DS *getLSM6Sensor() const = 0;
32+
33+
uint32_t getLsmSensorID() {
34+
// allow 4 ids per sensor (acc/mag/gyro/temp)
35+
uint32_t sensor_id = 10 * GetAddress();
36+
if (GetMuxAddress() != 0x0) {
37+
sensor_id += 10000 + GetMuxAddress();
38+
sensor_id += 1000 + (1000 * GetMuxChannel());
39+
}
40+
return sensor_id;
41+
}
3142

3243
bool readAllEvents();
33-
bool computeAccelMagnitude(float &magnitude);
44+
bool computeAccelMagnitude(float *magnitude);
3445

3546
bool _has_last_events = false; ///< Flag to track if last events are stored
3647
bool _last_shake = false; ///< Last state of shake / tap detection
3748
sensors_event_t _lastAccelEvent; ///< Last accelerometer event
3849
sensors_event_t _lastGyroEvent; ///< Last gyroscope event
3950
sensors_event_t _lastTempEvent; ///< Last temperature event (raw)
40-
uint16_t _last_steps = 0; ///< Last step count
51+
// uint16_t _last_steps = 0; ///< Last step count
4152
uint32_t _lastPoll = 0; ///< Last poll time
4253
uint32_t _internalPollPeriod = 200; ///< Internal Polling interval in ms
4354
};

src/components/i2c/drivers/drvIsm330dlc.cpp

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/components/i2c/drivers/drvIsm330dlc.h

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/components/i2c/drivers/drvLsm6dso32.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ bool drvLsm6dso32::begin() {
3939
}
4040

4141
_imu->setAccelRange(LSM6DSO32_ACCEL_RANGE_8_G);
42-
_imu->setAccelDataRate(LSM6DS_RATE_104_HZ);
43-
_imu->setGyroRange(LSM6DS_GYRO_RANGE_500_DPS);
44-
_imu->setGyroDataRate(LSM6DS_RATE_104_HZ);
45-
_imu->configInt1(false, false, false, true, true);
46-
_imu->configInt2(false, false, false);
47-
_imu->enablePedometer(true);
42+
_imu->setGyroRange(LSM6DS_GYRO_RANGE_250_DPS);
43+
_imu->setAccelDataRate(LSM6DS_RATE_416_HZ);
44+
_imu->setGyroDataRate(LSM6DS_RATE_416_HZ);
45+
// _imu->highPassFilter(true, LSM6DS_HPF_ODR_DIV_100);
46+
_imu->configInt1(false, false, false, false, true);
47+
// _imu->configInt2(false, false, false);
4848
_imu->enableWakeup(true);
49+
// _imu->enablePedometer(true);
4950

5051
WS_DEBUG_PRINTLN("[drvLsm6dso32] Sensor initialised successfully");
5152
return true;

0 commit comments

Comments
 (0)