This commit is contained in:
mattbk
2026-09-08 21:50:54 -05:00
commit 21412f010e
4 changed files with 1457 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
/target
Generated
+1385
View File
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
[package]
name = "rfim-rust"
version = "0.1.0"
edition = "2024"
[dependencies]
clap = "4.6.6"
io = "0.0.2"
serialport = "4.10.0"
+61
View File
@@ -0,0 +1,61 @@
use serialport::DataBits;
use serialport::Parity;
use serialport::StopBits;
use std::io::ErrorKind;
use std::io::Write;
use std::thread::sleep;
use std::time::Duration;
fn get_smeter(comport: &str) -> String {
let mut port = serialport::new(comport, 4800)
.data_bits(DataBits::Eight)
.stop_bits(StopBits::Two)
.parity(Parity::None)
.timeout(Duration::from_millis(100))
.open()
.expect("Failed to open port");
// Duh, you need the ";" on the end!
// let output = "FA14075000;";
let output = "SM;";
// What are we actually sending?
//dbg!(output.as_bytes());
// port.write(output).expect("Write failed!");
match port.write(output.as_bytes()) {
Ok(_) => {
//print!("{}", &output);
std::io::stdout().flush().unwrap();
}
Err(ref e) if e.kind() == ErrorKind::TimedOut => (),
Err(e) => eprintln!("{:?}", e),
}
// Sleep to allow the device to switch from read to write
sleep(Duration::from_millis(50));
let mut buf = [0u8; 1024];
loop {
match port.read(&mut buf) {
Ok(n) => {
let data = String::from_utf8_lossy(&buf[..n]).to_string();
//dbg!(data.as_bytes());
//let value = data;
let value = &data[2..5];
return format!("{}", value);
// return;
}
Err(_) => {} // lol that I can just not put a return in?
}
}
}
fn main() {
let port: &str = "/dev/tty.usbmodem1101";
// Simple test loop to make sure we are getting values each time
for _i in 1..101 {
let a = get_smeter(port);
println!("{a}");
}
}