diff --git a/rust/arduino/Cargo.toml b/rust/arduino/Cargo.toml index 756c5e8..816ff40 100644 --- a/rust/arduino/Cargo.toml +++ b/rust/arduino/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] panic-halt = "0.2.0" -avr-device = "0.5.0" +avr-device = { version = "0.5.0", features = ["atmega328p"] } arduino-hal = { git = "https://github.com/Rahix/avr-hal", features = ["arduino-uno"], rev = "1aacefb335517f85d0de858231e11055d9768cdf" } ufmt = "0.2.0" diff --git a/rust/serial_reader/src/main.rs b/rust/serial_reader/src/main.rs index d76ceca..0a94514 100644 --- a/rust/serial_reader/src/main.rs +++ b/rust/serial_reader/src/main.rs @@ -104,7 +104,7 @@ fn main() { timeout: Duration::from_millis(2500), }; - if let Ok(port) = Port::open(usb_id, serialport_settings) { + if let Ok(port) = Port::open(usb_id, serialport_settings, 50, 1) { CONNECTED.store(true, SeqCst); *PORT.lock().unwrap() = Some(port); @@ -130,7 +130,15 @@ fn main() { rx.attach(None, move |message| { if !message.is_empty() { - buffer.insert(&mut buffer.end_iter(), &format!("{}\n", message)); + match message.parse::() { + Ok(n) => { + buffer.insert(&mut buffer.end_iter(), &format!("{:#02x}\n", n)); + } + Err(_) => { + buffer.insert(&mut buffer.end_iter(), &format!("{}\n", message)); + } + } + serial_info.scroll_to_iter(&mut buffer.end_iter(), 0.0, true, 0.0, 0.0); } diff --git a/rust/serial_reader/src/port.rs b/rust/serial_reader/src/port.rs index 2793b70..68622d8 100644 --- a/rust/serial_reader/src/port.rs +++ b/rust/serial_reader/src/port.rs @@ -30,8 +30,13 @@ pub struct Port { } impl Port { - pub fn open(usb_device: UsbId, settings: SerialPortSettings) -> Result { - let port_path = Self::loop_usb_devices(usb_device)?; + pub fn open( + usb_device: UsbId, + settings: SerialPortSettings, + retries: usize, + wait_time: u64, + ) -> Result { + let port_path = Self::loop_usb_devices(usb_device, retries, wait_time)?; println!("found device at path {}", port_path); @@ -68,8 +73,8 @@ impl Port { Ok(()) } - fn loop_usb_devices(usb_device: UsbId) -> Result { - for _ in 0..3 { + fn loop_usb_devices(usb_device: UsbId, retries: usize, wait_time: u64) -> Result { + for _ in 0..retries { if let Some(device) = Self::find_macroboard(&usb_device)? { return Ok(device); } @@ -79,7 +84,7 @@ impl Port { usb_device.vendor_id, usb_device.product_id ); - std::thread::sleep(Duration::from_secs(2)); + std::thread::sleep(Duration::from_secs(wait_time)); } Err(anyhow!("no device found"))