Skip to content

Commit e559065

Browse files
committed
tmp debugging
1 parent 3878c54 commit e559065

File tree

4 files changed

+84
-26
lines changed

4 files changed

+84
-26
lines changed

firmware/Cargo.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

firmware/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,8 @@ dotenvy = "0.15"
223223
# Enable non-default I2C addresses and InitError
224224
mpu6050-dmp = { git = "https://github.com/TheButlah/mpu6050-dmp-rs", rev = "77128a75a51547baadc0f0ef99aba4432e848f10" }
225225
bmi160 = { git = "https://github.com/TheButlah/bmi160-rs", rev = "e99802b" }
226+
# has a way to release i2c that isn't published
227+
bno080 = { git = "https://github.com/tstellanova/bno080", rev = "f95e860" }
226228

227229
# Emable use of `atomic-polyfill`
228230
defmt = { git = "https://github.com/TheButlah/defmt", rev = "b5d5e316ea56250dcb25b3549bcf4bfdb1687796" }

firmware/src/imu/bno080.rs

Lines changed: 80 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ use crate::aliases::{Delay, I2c};
22
use crate::imu::{Imu, Quat};
33
use crate::utils;
44

5-
use ::bno080::interface::I2cInterface;
5+
use bno080::interface::I2cInterface;
66
use bno080::interface::SensorInterface;
77
use defmt::{debug, trace, warn};
88
use firmware_protocol::ImuType;
99

1010
pub const IMU_REPORT_INTERVAL_MS: u16 = 10;
11-
pub const I2C_ADDR: u8 = ::bno080::interface::i2c::DEFAULT_ADDRESS;
11+
pub const I2C_ADDR: u8 = ::bno080::interface::i2c::ALTERNATE_ADDRESS;
1212

1313
pub type DriverError<I2c> = ::bno080::wrapper::WrapperError<
1414
<I2cInterface<I2c> as SensorInterface>::SensorError,
@@ -24,28 +24,85 @@ impl<I: crate::aliases::I2c> Bno080<I> {
2424
) -> Result<Self, DriverError<I>> {
2525
let interface = ::bno080::interface::I2cInterface::new(i2c, I2C_ADDR);
2626
let mut driver = ::bno080::wrapper::BNO080::new_with_interface(interface);
27-
utils::retry(
28-
4,
29-
(),
30-
|_| -> Result<(), ((), DriverError<I>)> {
31-
delay.delay_ms(100u32);
32-
trace!("Flushing comms");
33-
let _ = driver.eat_all_messages(delay);
34-
delay.delay_ms(100u32);
35-
trace!("Constructing IMU");
3627

37-
driver.init(delay).map_err(|e| ((), e))?;
38-
debug!("Initialized bno080 driver");
39-
delay.delay_ms(100u32);
40-
driver
41-
.enable_rotation_vector(IMU_REPORT_INTERVAL_MS)
42-
.map_err(|e| ((), e))?;
43-
debug!("Enabled rotation vector");
44-
Ok(())
45-
},
46-
|i| warn!("Retrying IMU connection (attempts so far: {})", i + 1),
47-
)
48-
.map_err(|(_, e)| panic!("{:?}", e))?;
28+
let mut last_err = Ok(());
29+
for i in 0..4 {
30+
delay.delay_ms(100u32);
31+
if let Err(e) = driver.soft_reset() {
32+
warn!(
33+
"Error resetting bno080 (atmpt {}): {:?}",
34+
i + 1,
35+
defmt::Debug2Format(&e)
36+
);
37+
last_err = Err(e);
38+
} else {
39+
last_err = Ok(());
40+
break;
41+
}
42+
}
43+
last_err?;
44+
45+
let mut last_err = Ok(());
46+
for i in 0..4 {
47+
delay.delay_ms(500u32);
48+
if let Err(e) = driver.init(delay) {
49+
warn!(
50+
"Error initializing bno080 (atmpt {}): {:?}",
51+
i + 1,
52+
defmt::Debug2Format(&e)
53+
);
54+
last_err = Err(e);
55+
} else {
56+
last_err = Ok(());
57+
break;
58+
}
59+
}
60+
last_err?;
61+
62+
let mut last_err = Ok(());
63+
for i in 0..4 {
64+
if let Err(e) = driver.enable_rotation_vector(IMU_REPORT_INTERVAL_MS) {
65+
warn!(
66+
"Error enabling rotation (atmpt {}): {:?}",
67+
i + 1,
68+
defmt::Debug2Format(&e)
69+
);
70+
last_err = Err(e);
71+
} else {
72+
last_err = Ok(());
73+
break;
74+
}
75+
}
76+
last_err?;
77+
78+
// utils::retry(
79+
// 4,
80+
// (),
81+
// |_| -> Result<(), ((), DriverError<I>)> {
82+
// // delay.delay_ms(400u32);
83+
// // trace!("Flushing comms");
84+
// // let _ = i2c.write(I2C_ADDR, &[0]);
85+
//
86+
// // delay.delay_ms(400u32);
87+
// trace!("Constructing IMU");
88+
//
89+
// // if let Err(e) = driver.init(delay) {
90+
// // return Err((driver.free().free(), e));
91+
// // }
92+
// debug!("Initialized bno080 driver");
93+
// // delay.delay_ms(100u32);
94+
// // if let Err(e) = driver.enable_rotation_vector(IMU_REPORT_INTERVAL_MS) {
95+
// // return Err((driver.free().free(), e));
96+
// // }
97+
// driver
98+
// .enable_rotation_vector(IMU_REPORT_INTERVAL_MS)
99+
// .map_err(|e| ((), e))?;
100+
// debug!("Enabled rotation vector");
101+
// Ok(())
102+
// },
103+
// |i| warn!("Retrying IMU connection (attempts so far: {})", i + 1),
104+
// )
105+
// .map_err(|(_, e)| panic!("{:?}", e))?;
49106
Ok(Self { driver })
50107
}
51108
}

firmware/src/peripherals/esp32c3.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ pub fn get_peripherals() -> Peripherals<I2cConcrete<'static>, DelayConcrete> {
6969
p.I2C0,
7070
sda,
7171
scl,
72-
400u32.kHz(),
72+
100u32.kHz(),
7373
&mut system.peripheral_clock_control,
7474
&clocks,
7575
);

0 commit comments

Comments
 (0)