From 8b9aee4b00630f3d25f1a4757e8d21cf203bde06 Mon Sep 17 00:00:00 2001 From: Julian Date: Sun, 29 Dec 2019 20:21:07 +0100 Subject: [PATCH 1/4] use delay only non-owning --- src/lib.rs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9248918..5a81c19 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -309,25 +309,22 @@ pub enum Mpu6050Error { } /// Handles all operations on/with Mpu6050 -pub struct Mpu6050 { +pub struct Mpu6050 { i2c: I, - delay: D, bias: Option, variance: Option, acc_sensitivity: f32, gyro_sensitivity: f32, } -impl Mpu6050 +impl Mpu6050 where - I: Write + WriteRead, - D: DelayMs, + I: Write + WriteRead, { /// Side effect free constructor with default sensitivies, no calibration - pub fn new(i2c: I, delay: D) -> Self { + pub fn new(i2c: I) -> Self { Mpu6050 { i2c, - delay, bias: None, variance: None, acc_sensitivity: AFS_SEL.0, @@ -336,10 +333,9 @@ where } /// custom sensitivity - pub fn new_with_sens(i2c: I, delay: D, arange: AccelRange, grange: GyroRange) -> Self { + pub fn new_with_sens(i2c: I, arange: AccelRange, grange: GyroRange) -> Self { Mpu6050 { i2c, - delay, bias: None, variance: None, acc_sensitivity: Sensitivity::from(arange).0, @@ -348,21 +344,21 @@ where } /// Wakes MPU6050 with all sensors enabled (default) - pub fn wake(&mut self) -> Result<(), Mpu6050Error> { + fn wake>(&mut self, delay: &mut D) -> Result<(), Mpu6050Error> { self.write_u8(POWER_MGMT_1.addr(), 0)?; - self.delay.delay_ms(100u8); + delay.delay_ms(100u8); Ok(()) } /// Init wakes MPU6050 and verifies register addr, e.g. in i2c - pub fn init(&mut self) -> Result<(), Mpu6050Error> { - self.wake()?; + pub fn init>(&mut self, delay: &mut D) -> Result<(), Mpu6050Error> { + self.wake(delay)?; self.verify()?; Ok(()) } /// Verifies device to address 0x68 with WHOAMI.addr() Register - pub fn verify(&mut self) -> Result<(), Mpu6050Error> { + fn verify(&mut self) -> Result<(), Mpu6050Error> { let address = self.read_u8(WHOAMI.addr())?; if address != SLAVE_ADDR.addr() { return Err(Mpu6050Error::InvalidChipId(address)); @@ -550,7 +546,9 @@ where pub fn write_u8(&mut self, reg: u8, byte: u8) -> Result<(), Mpu6050Error> { self.i2c.write(SLAVE_ADDR.addr(), &[reg, byte]) .map_err(Mpu6050Error::I2c)?; - self.delay.delay_ms(10u8); + // delat disabled for dev build + // TODO: check effects with physical unit + // self.delay.delay_ms(10u8); Ok(()) } From 600d3e6b0317dafebffbdfb7a9beb9b73a6a88ef Mon Sep 17 00:00:00 2001 From: Julian Date: Sun, 29 Dec 2019 20:23:10 +0100 Subject: [PATCH 2/4] update linux example --- examples/linux.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/linux.rs b/examples/linux.rs index 5221e64..53e0168 100644 --- a/examples/linux.rs +++ b/examples/linux.rs @@ -6,10 +6,10 @@ fn main() -> Result<(), Mpu6050Error> { let i2c = I2cdev::new("/dev/i2c-1") .map_err(Mpu6050Error::I2c)?; - let delay = Delay; + let mut delay = Delay; - let mut mpu = Mpu6050::new(i2c, delay); - mpu.init()?; + let mut mpu = Mpu6050::new(i2c); + mpu.init(&mut delay)?; mpu.soft_calib(Steps(100))?; mpu.calc_variance(Steps(50))?; From 96d02f99fc6f35d9027f78ac5da3291193fafc5b Mon Sep 17 00:00:00 2001 From: Julian Date: Sun, 29 Dec 2019 20:25:24 +0100 Subject: [PATCH 3/4] formatting --- examples/linux.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/linux.rs b/examples/linux.rs index 53e0168..a5d85f9 100644 --- a/examples/linux.rs +++ b/examples/linux.rs @@ -7,8 +7,8 @@ fn main() -> Result<(), Mpu6050Error> { .map_err(Mpu6050Error::I2c)?; let mut delay = Delay; - let mut mpu = Mpu6050::new(i2c); + mpu.init(&mut delay)?; mpu.soft_calib(Steps(100))?; mpu.calc_variance(Steps(50))?; From f0fe23b1ab9da30e2e28de90fe86e14b367ef932 Mon Sep 17 00:00:00 2001 From: Julian Gaal <22290570+juliangaal@users.noreply.github.com> Date: Thu, 24 Sep 2020 14:15:07 +0200 Subject: [PATCH 4/4] Update comments to reflect changes to non owning delay --- src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5a81c19..811bad0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,10 +14,10 @@ //! let i2c = I2cdev::new("/dev/i2c-1") //! .map_err(Mpu6050Error::I2c)?; //! -//! let delay = Delay; -//! -//! let mut mpu = Mpu6050::new(i2c, delay); -//! mpu.init()?; +//! let mut delay = Delay; +//! let mut mpu = Mpu6050::new(i2c); +//! +//! mpu.init(&mut delay)?; //! mpu.soft_calib(Steps(100))?; //! mpu.calc_variance(Steps(50))?; //!