Read linewise from serial port
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
finga 2022-04-22 00:16:22 +02:00
parent a1dcd606d9
commit 70d55e909d
3 changed files with 18 additions and 23 deletions

7
Cargo.lock generated
View file

@ -32,6 +32,12 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "anyhow"
version = "1.0.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@ -119,6 +125,7 @@ dependencies = [
name = "mightyohm-gc-exporter" name = "mightyohm-gc-exporter"
version = "0.1.0-dev" version = "0.1.0-dev"
dependencies = [ dependencies = [
"anyhow",
"serialport", "serialport",
] ]

View file

@ -9,4 +9,5 @@ keywords = ["prometheus", "metrics"]
categories = ["api-bindings", "command-line-utilities", "visualization"] categories = ["api-bindings", "command-line-utilities", "visualization"]
[dependencies] [dependencies]
anyhow = "1.0"
serialport = "4.1" serialport = "4.1"

View file

@ -1,34 +1,21 @@
use anyhow::Result;
use std::{ use std::{
io::{self, Write}, io::{BufRead, BufReader},
time::Duration, time::Duration,
}; };
fn main() { fn main() -> Result<()> {
let port_name = "/dev/serial0"; let port_name = "/dev/serial0";
let baud_rate = 9600; let baud_rate = 9600;
let port = serialport::new(port_name, baud_rate) let port = serialport::new(port_name, baud_rate)
.timeout(Duration::from_millis(100)) .timeout(Duration::from_millis(1000))
.open(); .open()?;
match port { let mut port = BufReader::new(port);
Ok(mut port) => { loop {
let mut serial_buf: Vec<u8> = vec![0; 1000]; let mut line = String::new();
println!("Receiving data on {} at {} baud:", &port_name, &baud_rate); port.read_line(&mut line)?;
loop { println!("{:?}", line);
match port.read(serial_buf.as_mut_slice()) {
Ok(t) => io::stdout().write_all(&serial_buf[..t]).unwrap(),
Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (),
Err(e) => {
eprintln!("Failed to read \"{}\". Error: {}", port_name, e);
::std::process::exit(1);
}
}
}
}
Err(e) => {
eprintln!("Failed to open \"{}\". Error: {}", port_name, e);
::std::process::exit(1);
}
} }
} }