Add void pointer for initializing sensors

This commit is contained in:
Niklas Jensen
2025-11-27 23:00:01 +01:00
parent 0047810098
commit fcf058921a
4 changed files with 29 additions and 21 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ struct BarometerMsg {
class Barometer : public SensorBase<BarometerMsg> { class Barometer : public SensorBase<BarometerMsg> {
public: public:
bool initialize() override { bool initialize(void* _) override {
_msg.success = _bmp.begin(); _msg.success = _bmp.begin();
if (_msg.success) { if (_msg.success) {
ESP_LOGI("BMP", "BMP180 initialized successfully"); ESP_LOGI("BMP", "BMP180 initialized successfully");
+19 -18
View File
@@ -24,7 +24,7 @@ struct IMUAnglesMsg {
class IMU : public SensorBase<IMUAnglesMsg> { class IMU : public SensorBase<IMUAnglesMsg> {
public: public:
bool initialize() override { bool initialize(void* _arg = nullptr) override {
#if FT_ENABLED(USE_MPU6050) #if FT_ENABLED(USE_MPU6050)
_msg.success = _imu.begin(); _msg.success = _imu.begin();
if (!_msg.success) { if (!_msg.success) {
@@ -42,24 +42,25 @@ class IMU : public SensorBase<IMUAnglesMsg> {
#endif #endif
#if FT_ENABLED(USE_ICM20948) #if FT_ENABLED(USE_ICM20948)
#if USE_ICM20948_SPIMODE > 0 #if USE_ICM20948_SPIMODE > 0
_imu.begin(CS_PIN, SPI_PORT); _imu = (ICM_20948_SPI*)_arg;
_imu->begin(CS_PIN, SPI_PORT);
#else #else
_imu.begin(Wire, 1, 0xFF); _imu = (ICM_20948_I2C*)_arg;
_imu->begin(Wire, 1, 0xFF);
#endif #endif
if (_imu.status != ICM_20948_Stat_Ok){ return false; } if (_imu->status != ICM_20948_Stat_Ok){ return false; }
_imu.setSampleMode((ICM_20948_Internal_Acc | ICM_20948_Internal_Gyr), ICM_20948_Sample_Mode_Continuous); _imu->setSampleMode((ICM_20948_Internal_Acc | ICM_20948_Internal_Gyr), ICM_20948_Sample_Mode_Continuous);
if (_imu.status != ICM_20948_Stat_Ok){ return false; } if (_imu->status != ICM_20948_Stat_Ok){ return false; }
ICM_20948_fss_t myFSS; ICM_20948_fss_t myFSS;
myFSS.a = gpm2; myFSS.a = gpm2;
myFSS.g = dps250; myFSS.g = dps250;
_imu.setFullScale((ICM_20948_Internal_Acc | ICM_20948_Internal_Gyr), myFSS); _imu->setFullScale((ICM_20948_Internal_Acc | ICM_20948_Internal_Gyr), myFSS);
if (_imu.status != ICM_20948_Stat_Ok){ return false; } if (_imu->status != ICM_20948_Stat_Ok){ return false; }
// TODO: Setup low pass filter config // TODO: Setup low pass filter config
_imu.startupMagnetometer(); _imu->startupMagnetometer();
if (_imu.status != ICM_20948_Stat_Ok){ return false; } if (_imu->status != ICM_20948_Stat_Ok){ return false; }
ESP_LOGI("IMU", "BNO055 initialized successfully");
#endif #endif
return _msg.success; return _msg.success;
} }
@@ -74,12 +75,12 @@ class IMU : public SensorBase<IMUAnglesMsg> {
_msg.temperature = _imu.getTemperature(); _msg.temperature = _imu.getTemperature();
#endif #endif
#if FT_ENABLED(USE_ICM20948) #if FT_ENABLED(USE_ICM20948)
if (_imu.dataReady()) if (_imu->dataReady())
{ {
_imu.getAGMT(); _imu->getAGMT();
_msg.rpy[0] = _imu.gyrX(); _msg.rpy[0] = _imu->gyrX();
_msg.rpy[1] = _imu.gyrY(); _msg.rpy[1] = _imu->gyrY();
_msg.rpy[2] = _imu.gyrZ(); _msg.rpy[2] = _imu->gyrZ();
} }
#endif #endif
#if FT_ENABLED(USE_BNO055) #if FT_ENABLED(USE_BNO055)
@@ -135,10 +136,10 @@ class IMU : public SensorBase<IMUAnglesMsg> {
#if FT_ENABLED(USE_ICM20948_SPIMODE) > 0 #if FT_ENABLED(USE_ICM20948_SPIMODE) > 0
#define SPI_PORT SPI // TODO in periphearals_seetings.h #define SPI_PORT SPI // TODO in periphearals_seetings.h
#define CS_PIN 2 #define CS_PIN 2
ICM_20948_SPI _imu; ICM_20948_SPI* _imu;
#else #else
//#define WIRE_PORT Wire //#define WIRE_PORT Wire
ICM_20948_I2C _imu; ICM_20948_I2C* _imu;
#endif #endif
#endif #endif
}; };
+1 -1
View File
@@ -12,7 +12,7 @@ struct MagnetometerMsg {
class Magnetometer : public SensorBase<MagnetometerMsg> { class Magnetometer : public SensorBase<MagnetometerMsg> {
public: public:
bool initialize() override { bool initialize(void* _) override {
_msg.success = _mag.begin(); _msg.success = _mag.begin();
if (_msg.success) { if (_msg.success) {
ESP_LOGI("MAG", "HMC5883L initialized successfully"); ESP_LOGI("MAG", "HMC5883L initialized successfully");
+8 -1
View File
@@ -16,8 +16,15 @@ void Peripherals::begin() {
updatePins(); updatePins();
#if FT_ENABLED(USE_MPU6050 || USE_BNO055 || USE_ICM20948) #if FT_ENABLED(USE_MPU6050 || USE_BNO055)
if (!_imu.initialize()) ESP_LOGE("IMUService", "IMU initialize failed"); if (!_imu.initialize()) ESP_LOGE("IMUService", "IMU initialize failed");
#elif FT_ENABLED(USE_ICM20948)
#if USE_ICM20948_SPIMODE > 0
ICM_20948_SPI* icm20948 = new ICM_20948_SPI;
#else
ICM_20948_I2C* icm20948 = new ICM_20948_I2C;
#endif
if (!_imu.initialize(icm20948)) ESP_LOGE("IMUService", "IMU initialize failed (ICM20948)");
#endif #endif
#if FT_ENABLED(USE_HMC5883) // TODO: Add USE_ICM20948 #if FT_ENABLED(USE_HMC5883) // TODO: Add USE_ICM20948
if (!_mag.initialize()) ESP_LOGE("IMUService", "MAG initialize failed"); if (!_mag.initialize()) ESP_LOGE("IMUService", "MAG initialize failed");