Browse Source

fix mpu9250: wrong buffer size

sbg
rfu 5 years ago committed by Beat Küng
parent
commit
0becd29b46
  1. 2
      src/drivers/imu/mpu9250/mpu9250.cpp
  2. 2
      src/drivers/imu/mpu9250/mpu9250.h
  3. 6
      src/drivers/imu/mpu9250/mpu9250_i2c.cpp

2
src/drivers/imu/mpu9250/mpu9250.cpp

@ -495,7 +495,7 @@ MPU9250::check_registers()
if ((v = read_reg(_checked_registers[_checked_next], MPU9250_HIGH_BUS_SPEED)) != _checked_values[_checked_next]) { if ((v = read_reg(_checked_registers[_checked_next], MPU9250_HIGH_BUS_SPEED)) != _checked_values[_checked_next]) {
PX4_DEBUG("reg: %d = %d (should be %d) _reset_wait: %llu", _checked_registers[_checked_next], v, PX4_DEBUG("reg: %d = %d (should be %d) _reset_wait: %lu", _checked_registers[_checked_next], v,
_checked_values[_checked_next], _reset_wait); _checked_values[_checked_next], _reset_wait);
/* /*

2
src/drivers/imu/mpu9250/mpu9250.h

@ -214,7 +214,7 @@ struct MPUReport {
*/ */
#define MPU9250_LOW_BUS_SPEED 0 #define MPU9250_LOW_BUS_SPEED 0
#define MPU9250_HIGH_BUS_SPEED 0x8000 #define MPU9250_HIGH_BUS_SPEED 0x8000
#define MPU9250_REG_MASK 0x00FF #define MPU9250_REG_MASK 0x00FF
# define MPU9250_IS_HIGH_SPEED(r) ((r) & MPU9250_HIGH_BUS_SPEED) # define MPU9250_IS_HIGH_SPEED(r) ((r) & MPU9250_HIGH_BUS_SPEED)
# define MPU9250_REG(r) ((r) & MPU9250_REG_MASK) # define MPU9250_REG(r) ((r) & MPU9250_REG_MASK)
# define MPU9250_SET_SPEED(r, s) ((r)|(s)) # define MPU9250_SET_SPEED(r, s) ((r)|(s))

6
src/drivers/imu/mpu9250/mpu9250_i2c.cpp

@ -43,7 +43,7 @@
#ifdef USE_I2C #ifdef USE_I2C
device::Device *MPU9250_I2C_interface(int bus, uint32_t address); device::Device *MPU9250_I2C_interface(int bus, uint32_t address, int bus_frequency);
class MPU9250_I2C : public device::I2C class MPU9250_I2C : public device::I2C
{ {
@ -55,7 +55,7 @@ public:
int write(unsigned address, void *data, unsigned count) override; int write(unsigned address, void *data, unsigned count) override;
protected: protected:
virtual int probe(); virtual int probe() override;
private: private:
@ -97,7 +97,7 @@ MPU9250_I2C::read(unsigned reg_speed, void *data, unsigned count)
*/ */
uint32_t offset = count < sizeof(MPUReport) ? 0 : offsetof(MPUReport, ACCEL_XOUT_H); uint32_t offset = count < sizeof(MPUReport) ? 0 : offsetof(MPUReport, ACCEL_XOUT_H);
uint8_t cmd = MPU9250_REG(reg_speed); uint8_t cmd = MPU9250_REG(reg_speed);
return transfer(&cmd, 1, &((uint8_t *)data)[offset], count); return transfer(&cmd, 1, &((uint8_t *)data)[offset], count - offset);
} }
int int

Loading…
Cancel
Save