Hacky read workaround
This commit is contained in:
parent
273dbaa630
commit
f9f324475b
2 changed files with 46 additions and 22 deletions
13
src/main.rs
13
src/main.rs
|
@ -131,10 +131,15 @@ fn main() -> ! {
|
||||||
critical_section::with(|_| {
|
critical_section::with(|_| {
|
||||||
let serial = custom_hid::serial();
|
let serial = custom_hid::serial();
|
||||||
|
|
||||||
serial.send_text("---");
|
// serial.send_text("---");
|
||||||
serial.send_number(mouse_sensor.operation_mode(), 10);
|
// serial.send_number(mouse_sensor.product_id_1(), 10);
|
||||||
serial.send_text(" - ");
|
// serial.send_text(" - ");
|
||||||
serial.send_number(0xB8, 10);
|
// serial.send_number(0x30, 10);
|
||||||
|
|
||||||
|
// serial.send_text("---");
|
||||||
|
// serial.send_number(mouse_sensor.product_id_2(), 10);
|
||||||
|
// serial.send_text(" - ");
|
||||||
|
// serial.send_number(0x02, 10);
|
||||||
|
|
||||||
// custom_hid::serial().send_number(mouse_sensor.product_id_2(), 10);
|
// custom_hid::serial().send_number(mouse_sensor.product_id_2(), 10);
|
||||||
});
|
});
|
||||||
|
|
|
@ -109,16 +109,27 @@ where
|
||||||
log,
|
log,
|
||||||
};
|
};
|
||||||
|
|
||||||
if me.led.set_low().is_err() {
|
if me.led.set_high().is_err() {
|
||||||
(me.log)("led low failed");
|
(me.log)("led high failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
if !me.verify_product_id_1() || !me.verify_product_id_2() {
|
// verify initialization
|
||||||
if me.led.set_high().is_err() {
|
loop {
|
||||||
(me.log)("led high failed");
|
if me.verify_product_id_1() {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if me.verify_product_id_2() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if me.led.set_low().is_err() {
|
||||||
|
(me.log)("led low failed");
|
||||||
|
}
|
||||||
|
|
||||||
me
|
me
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,21 +155,29 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read(&mut self, address: u8) -> u8 {
|
pub fn read(&mut self, address: u8) -> u8 {
|
||||||
self.access(|me| {
|
loop {
|
||||||
if me.spi.send(address & Self::READ).is_err() {
|
let res = self.access(|me| {
|
||||||
(me.log)("send address (read) failed");
|
if me.spi.send(address & Self::READ).is_err() {
|
||||||
}
|
(me.log)("send address (read) failed");
|
||||||
|
|
||||||
me.delay.delay_us(50);
|
|
||||||
|
|
||||||
match me.spi.read() {
|
|
||||||
Ok(res) => res,
|
|
||||||
Err(_) => {
|
|
||||||
(me.log)("read failed");
|
|
||||||
0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if me.spi.send(0).is_err() {
|
||||||
|
(me.log)("send dummy (read) failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
match me.spi.read() {
|
||||||
|
Ok(r) => r << 1,
|
||||||
|
Err(_) => {
|
||||||
|
(me.log)("read failed");
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if res != address {
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write(&mut self, address: u8, value: u8) {
|
pub fn write(&mut self, address: u8, value: u8) {
|
||||||
|
|
Loading…
Reference in a new issue