diff --git a/build_all/410_o_411_o_412/VESC_0005ohm.bin b/build_all/410_o_411_o_412/VESC_0005ohm.bin index 67fdc98d..0db9affd 100755 Binary files a/build_all/410_o_411_o_412/VESC_0005ohm.bin and b/build_all/410_o_411_o_412/VESC_0005ohm.bin differ diff --git a/build_all/410_o_411_o_412/VESC_default.bin b/build_all/410_o_411_o_412/VESC_default.bin index 03eca070..99cf7aeb 100755 Binary files a/build_all/410_o_411_o_412/VESC_default.bin and b/build_all/410_o_411_o_412/VESC_default.bin differ diff --git a/build_all/410_o_411_o_412/VESC_default_no_hw_limits.bin b/build_all/410_o_411_o_412/VESC_default_no_hw_limits.bin index 9d10384c..8fcb908c 100755 Binary files a/build_all/410_o_411_o_412/VESC_default_no_hw_limits.bin and b/build_all/410_o_411_o_412/VESC_default_no_hw_limits.bin differ diff --git a/build_all/410_o_411_o_412/VESC_servoout.bin b/build_all/410_o_411_o_412/VESC_servoout.bin index 60789727..565ce4c2 100755 Binary files a/build_all/410_o_411_o_412/VESC_servoout.bin and b/build_all/410_o_411_o_412/VESC_servoout.bin differ diff --git a/build_all/410_o_411_o_412/VESC_ws2811.bin b/build_all/410_o_411_o_412/VESC_ws2811.bin index 825ff681..34402bdc 100755 Binary files a/build_all/410_o_411_o_412/VESC_ws2811.bin and b/build_all/410_o_411_o_412/VESC_ws2811.bin differ diff --git a/build_all/46_o_47/VESC_0005ohm.bin b/build_all/46_o_47/VESC_0005ohm.bin index 0e4b3b36..976df55e 100755 Binary files a/build_all/46_o_47/VESC_0005ohm.bin and b/build_all/46_o_47/VESC_0005ohm.bin differ diff --git a/build_all/46_o_47/VESC_33k.bin b/build_all/46_o_47/VESC_33k.bin index d82bc193..19210759 100755 Binary files a/build_all/46_o_47/VESC_33k.bin and b/build_all/46_o_47/VESC_33k.bin differ diff --git a/build_all/46_o_47/VESC_default.bin b/build_all/46_o_47/VESC_default.bin index c01b1b4c..11143b8c 100755 Binary files a/build_all/46_o_47/VESC_default.bin and b/build_all/46_o_47/VESC_default.bin differ diff --git a/build_all/46_o_47/VESC_servoout.bin b/build_all/46_o_47/VESC_servoout.bin index c01197f1..01a46b4a 100755 Binary files a/build_all/46_o_47/VESC_servoout.bin and b/build_all/46_o_47/VESC_servoout.bin differ diff --git a/build_all/46_o_47/VESC_ws2811.bin b/build_all/46_o_47/VESC_ws2811.bin index e873f7ad..1f423083 100755 Binary files a/build_all/46_o_47/VESC_ws2811.bin and b/build_all/46_o_47/VESC_ws2811.bin differ diff --git a/build_all/46_o_47/VESC_ws2811_33k.bin b/build_all/46_o_47/VESC_ws2811_33k.bin index a3c7f26a..538ec9c1 100755 Binary files a/build_all/46_o_47/VESC_ws2811_33k.bin and b/build_all/46_o_47/VESC_ws2811_33k.bin differ diff --git a/build_all/48/VESC_0005ohm.bin b/build_all/48/VESC_0005ohm.bin index 0318bb03..dc3a37a3 100755 Binary files a/build_all/48/VESC_0005ohm.bin and b/build_all/48/VESC_0005ohm.bin differ diff --git a/build_all/48/VESC_default.bin b/build_all/48/VESC_default.bin index 874df9c1..c9beeb9c 100755 Binary files a/build_all/48/VESC_default.bin and b/build_all/48/VESC_default.bin differ diff --git a/build_all/48/VESC_servoout.bin b/build_all/48/VESC_servoout.bin index f77413e0..cc78dc72 100755 Binary files a/build_all/48/VESC_servoout.bin and b/build_all/48/VESC_servoout.bin differ diff --git a/build_all/48/VESC_ws2811.bin b/build_all/48/VESC_ws2811.bin index afb70610..be0626aa 100755 Binary files a/build_all/48/VESC_ws2811.bin and b/build_all/48/VESC_ws2811.bin differ diff --git a/build_all/60/VESC_default.bin b/build_all/60/VESC_default.bin index 7fabcf5c..9b51368b 100755 Binary files a/build_all/60/VESC_default.bin and b/build_all/60/VESC_default.bin differ diff --git a/build_all/60/VESC_default_no_hw_limits.bin b/build_all/60/VESC_default_no_hw_limits.bin index dbf4b3cf..d1ac15bf 100755 Binary files a/build_all/60/VESC_default_no_hw_limits.bin and b/build_all/60/VESC_default_no_hw_limits.bin differ diff --git a/build_all/60/VESC_servoout.bin b/build_all/60/VESC_servoout.bin index bc0c62b3..4bccca6d 100755 Binary files a/build_all/60/VESC_servoout.bin and b/build_all/60/VESC_servoout.bin differ diff --git a/build_all/60/VESC_ws2811.bin b/build_all/60/VESC_ws2811.bin index 11b5a73f..e5ee4327 100755 Binary files a/build_all/60/VESC_ws2811.bin and b/build_all/60/VESC_ws2811.bin differ diff --git a/build_all/75_300/VESC_default.bin b/build_all/75_300/VESC_default.bin index 3840de46..86b55316 100755 Binary files a/build_all/75_300/VESC_default.bin and b/build_all/75_300/VESC_default.bin differ diff --git a/build_all/75_300/VESC_default_no_hw_limits.bin b/build_all/75_300/VESC_default_no_hw_limits.bin index 3c61cda3..0c8f8b29 100755 Binary files a/build_all/75_300/VESC_default_no_hw_limits.bin and b/build_all/75_300/VESC_default_no_hw_limits.bin differ diff --git a/build_all/75_300/VESC_servoout.bin b/build_all/75_300/VESC_servoout.bin index 4860fd3d..47fa15a2 100755 Binary files a/build_all/75_300/VESC_servoout.bin and b/build_all/75_300/VESC_servoout.bin differ diff --git a/build_all/75_300/VESC_ws2811.bin b/build_all/75_300/VESC_ws2811.bin index 92b81c7a..4db78c7d 100755 Binary files a/build_all/75_300/VESC_ws2811.bin and b/build_all/75_300/VESC_ws2811.bin differ diff --git a/build_all/75_300_R2/VESC_default.bin b/build_all/75_300_R2/VESC_default.bin index 5a51ad9c..3193b8d7 100755 Binary files a/build_all/75_300_R2/VESC_default.bin and b/build_all/75_300_R2/VESC_default.bin differ diff --git a/build_all/75_300_R2/VESC_default_no_hw_limits.bin b/build_all/75_300_R2/VESC_default_no_hw_limits.bin index 3ac2ae65..53e83e30 100755 Binary files a/build_all/75_300_R2/VESC_default_no_hw_limits.bin and b/build_all/75_300_R2/VESC_default_no_hw_limits.bin differ diff --git a/build_all/75_300_R2/VESC_servoout.bin b/build_all/75_300_R2/VESC_servoout.bin index f3bf8b30..84f25696 100755 Binary files a/build_all/75_300_R2/VESC_servoout.bin and b/build_all/75_300_R2/VESC_servoout.bin differ diff --git a/build_all/75_300_R2/VESC_ws2811.bin b/build_all/75_300_R2/VESC_ws2811.bin index 4eae5614..f1b2902a 100755 Binary files a/build_all/75_300_R2/VESC_ws2811.bin and b/build_all/75_300_R2/VESC_ws2811.bin differ diff --git a/build_all/AXIOM/VESC_default.bin b/build_all/AXIOM/VESC_default.bin index 4b5c4328..f50b3443 100755 Binary files a/build_all/AXIOM/VESC_default.bin and b/build_all/AXIOM/VESC_default.bin differ diff --git a/build_all/DAS_RS/VESC_default.bin b/build_all/DAS_RS/VESC_default.bin index 45cac2c2..bedf4fa6 100755 Binary files a/build_all/DAS_RS/VESC_default.bin and b/build_all/DAS_RS/VESC_default.bin differ diff --git a/imu/icm20948.c b/imu/icm20948.c index d04ba571..264c7f85 100644 --- a/imu/icm20948.c +++ b/imu/icm20948.c @@ -34,9 +34,6 @@ static void terminal_read_reg(int argc, const char **argv); static uint8_t read_single_reg(ICM20948_STATE *s, uint8_t reg); static bool write_single_reg(ICM20948_STATE *s, uint8_t reg, uint8_t value); -// Function pointers -static void(*m_read_callback)(float *accel, float *gyro, float *mag) = 0; - // Private variables static ICM20948_STATE *m_terminal_state = 0; @@ -45,6 +42,7 @@ void icm20948_init(ICM20948_STATE *s, i2c_bb_state *i2c_state, int ad0_val, s->i2cs = i2c_state; s->i2c_address = ad0_val ? 0x69 : 0x68; + s->read_callback = 0; if (reset_init_icm(s)) { chThdCreateStatic(work_area, work_area_size, NORMALPRIO, icm_thread, s); @@ -61,8 +59,8 @@ void icm20948_init(ICM20948_STATE *s, i2c_bb_state *i2c_state, int ad0_val, } } -void icm20948_set_read_callback(void(*func)(float *accel, float *gyro, float *mag)) { - m_read_callback = func; +void icm20948_set_read_callback(ICM20948_STATE *s, void(*func)(float *accel, float *gyro, float *mag)) { + s->read_callback = func; } static void terminal_read_reg(int argc, const char **argv) { @@ -169,8 +167,8 @@ static THD_FUNCTION(icm_thread, arg) { // TODO: Read magnetometer as well memset(mag, 0, sizeof(mag)); - if (m_read_callback) { - m_read_callback(accel, gyro, mag); + if (s->read_callback) { + s->read_callback(accel, gyro, mag); } } else { reset_init_icm(s); diff --git a/imu/icm20948.h b/imu/icm20948.h index 6e405282..059f034a 100644 --- a/imu/icm20948.h +++ b/imu/icm20948.h @@ -31,11 +31,12 @@ typedef struct { i2c_bb_state *i2cs; uint8_t i2c_address; + void(*read_callback)(float *accel, float *gyro, float *mag); } ICM20948_STATE; void icm20948_init(ICM20948_STATE *s, i2c_bb_state *i2c_state, int ad0_val, stkalign_t *work_area, size_t work_area_size); -void icm20948_set_read_callback(void(*func)(float *accel, float *gyro, float *mag)); +void icm20948_set_read_callback(ICM20948_STATE *s, void(*func)(float *accel, float *gyro, float *mag)); // All banks #define ICM20948_BANK_SEL 0x7F diff --git a/imu/imu.c b/imu/imu.c index 1f38580c..14b28f17 100644 --- a/imu/imu.c +++ b/imu/imu.c @@ -85,7 +85,7 @@ void imu_init_icm20948(stm32_gpio_t *sda_gpio, int sda_pin, icm20948_init(&m_icm20948_state, &m_i2c_bb, ad0_val, m_thd_work_area, sizeof(m_thd_work_area)); - icm20948_set_read_callback(imu_read_callback); + icm20948_set_read_callback(&m_icm20948_state, imu_read_callback); } float imu_get_roll(void) {