use serialport::SerialPortInfo; use std::time::Duration; const BAUD: u32 = 9600; const TIMEOUT: u64 = 1000; fn get_port(ports: Vec) -> Option { for p in ports { if p.port_name.contains("ttyACM") { return Some(p); } } None } pub fn read_messages(mut request: curl::easy::Easy, data: String) { let ports = serialport::available_ports().expect("No ports found!"); let r = get_port(ports) .expect("[ERROR] Failed to get the port") .port_name; let mut connection = serialport::new(r, BAUD) .timeout(Duration::from_millis(TIMEOUT)) .open() .expect("Failed to open the port"); let mut serial_buf: Vec = vec![0; 1024]; loop { if let Ok(bytes) = connection.read(serial_buf.as_mut_slice()) { if bytes < 1 { continue; } let output = String::from_utf8_lossy(&serial_buf[..bytes]); if output.contains("1") { // send curl request let res = crate::curl::request(&mut request, &data); match res { Ok((code, response)) => { println!("Response code: {code}"); match crate::json::get_state(response) { Ok(state) => { if let Some(valid_state) = state { println!("State: {}", valid_state); } } Err(e) => eprintln!("[ERROR] Failed to acquire entity state:\n{e}"), } } Err(e) => eprintln!("[ERROR] Something went wrong with the CURL request:\n{e}"), } } } } }