Skip to content

Commit 0a011c0

Browse files
committed
Opening serial port.
Added: * Opening of serial port * Following of serial port if it gets disconnected.
1 parent e855702 commit 0a011c0

File tree

4 files changed

+87
-3
lines changed

4 files changed

+87
-3
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## [0.1.1]
2+
3+
Opening serial port.
4+
5+
### Added:
6+
* Opening of serial port
7+
* Following of serial port if it gets disconnected.
8+
9+
110
## [0.1.0]
211

312
Initial release.

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "zephyr-tools-monitor"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

src/main.rs

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1+
use core::time;
2+
use std::{
3+
io::{self, BufRead, BufReader, Write},
4+
thread::sleep,
5+
time::Duration,
6+
};
7+
18
use serde_json;
2-
use serialport::available_ports;
9+
use serialport::{self, available_ports};
310

411
const HELP: &str = "\
512
App
@@ -9,13 +16,19 @@ FLAGS:
916
-h, --help Prints help information
1017
OPTIONS:
1118
--list, -l Lists serial ports avaiable
19+
--follow, Follow serial port if it disconnects
20+
--port, Port to connect to
21+
--baud, Baud to use (default 115200)
1222
ARGS:
1323
<INPUT>
1424
";
1525

1626
#[derive(Debug)]
1727
struct AppArgs {
1828
list: bool,
29+
port: Option<String>,
30+
baud: u32,
31+
follow: bool,
1932
}
2033

2134
fn parse_args() -> Result<AppArgs, pico_args::Error> {
@@ -29,6 +42,9 @@ fn parse_args() -> Result<AppArgs, pico_args::Error> {
2942

3043
let args = AppArgs {
3144
list: pargs.contains(["-l", "--list"]),
45+
port: pargs.opt_value_from_str("--port")?,
46+
baud: pargs.value_from_str("--baud").or(Ok(115_200))?,
47+
follow: pargs.contains(["-f", "--follow"]),
3248
};
3349

3450
// It's up to the caller what to do with the remaining arguments.
@@ -49,6 +65,7 @@ fn main() {
4965
}
5066
};
5167

68+
// Show list of possible ports
5269
if args.list {
5370
match available_ports() {
5471
Ok(ports) => {
@@ -66,5 +83,63 @@ fn main() {
6683
eprintln!("Error listing serial ports");
6784
}
6885
}
86+
87+
return;
6988
}
89+
90+
if args.port.is_some() {
91+
print!("Connecting..");
92+
io::stdout().flush().unwrap();
93+
94+
let port_name = args.port.unwrap();
95+
96+
loop {
97+
// Open with settings
98+
let port = serialport::new(&port_name, args.baud)
99+
.timeout(time::Duration::from_millis(10))
100+
.open();
101+
102+
// Then watch the buffer until terminated..
103+
match port {
104+
Ok(p) => {
105+
// Start incoming data on a new line
106+
println!("\nConnected to {}!", port_name);
107+
108+
let lines = BufReader::new(p).lines();
109+
110+
for line in lines {
111+
match line {
112+
Ok(l) => println!("{}", l),
113+
Err(e) => {
114+
if e.to_string().contains("Operation timed out") {
115+
continue;
116+
} else {
117+
if args.follow {
118+
break;
119+
} else {
120+
eprintln!("Error: {}", e);
121+
std::process::exit(1);
122+
}
123+
}
124+
}
125+
}
126+
}
127+
}
128+
Err(_e) => {
129+
if !args.follow {
130+
eprintln!("Unable to connect to {} with baud {}", port_name, args.baud);
131+
std::process::exit(1);
132+
}
133+
}
134+
}
135+
136+
// Print that we're waiting..
137+
print!(".");
138+
io::stdout().flush().unwrap();
139+
sleep(Duration::from_secs(1));
140+
}
141+
}
142+
143+
// Otherwise print help
144+
print!("{}", HELP);
70145
}

0 commit comments

Comments
 (0)