Skip to content

Commit 90c8318

Browse files
committed
user SerialStream in cheat
1 parent c297fa2 commit 90c8318

File tree

2 files changed

+16
-25
lines changed

2 files changed

+16
-25
lines changed

src/commands/cheat.rs

+15-24
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::args::CheatArgs;
22
use crate::config::Config;
33
use crate::net::connect;
4-
use crate::serial::read_cobs_frame;
4+
use crate::serial::SerialStream;
55
use anyhow::{bail, Context, Result};
66
use firefly_types::{serial, Encode};
77
use std::io::{Read, Write};
@@ -34,7 +34,7 @@ pub fn cheat_emulator(args: &CheatArgs) -> Result<()> {
3434
stream.read(&mut buf).context("read response")?;
3535
let resp = serial::Response::decode(&buf).context("decode response")?;
3636
if let serial::Response::Cheat(result) = resp {
37-
println!("✅ response: {result}");
37+
println!("✅ response: {result}");
3838
return Ok(());
3939
}
4040
}
@@ -44,39 +44,30 @@ pub fn cheat_emulator(args: &CheatArgs) -> Result<()> {
4444
/// Run cheat on the connected device.
4545
pub fn cheat_device(args: &CheatArgs, port: &str) -> Result<()> {
4646
println!("⏳️ connecting...");
47-
let mut stream = serialport::new(port, args.baud_rate)
47+
let port = serialport::new(port, args.baud_rate)
4848
.timeout(Duration::from_secs(5))
4949
.open()
5050
.context("open the serial port")?;
51+
let mut stream = SerialStream::new(port);
5152

5253
{
53-
let buf = serialize_request(args)?;
54+
let cmd = parse_command(&args.command, &args.root)?;
55+
let val = parse_value(&args.value)?;
56+
let req = serial::Request::Cheat(cmd, val);
5457
println!("⌛ sending request...");
55-
stream.write_all(&buf).context("send request")?;
56-
stream.flush().context("flush request")?;
58+
stream.send(&req)?;
5759
}
5860

5961
println!("⌛ waiting for response...");
60-
let mut buf = Vec::new();
6162
for _ in 0..5 {
62-
let mut chunk = vec![0; 64];
63-
let n = stream.read(&mut chunk).context("read response")?;
64-
buf.extend_from_slice(&chunk[..n]);
65-
loop {
66-
let (frame, rest) = read_cobs_frame(&buf);
67-
buf = Vec::from(rest);
68-
if frame.is_empty() {
69-
break;
70-
}
71-
match serial::Response::decode(&frame).context("decode response") {
72-
Ok(serial::Response::Cheat(result)) => {
73-
println!("✅ response: {result}");
74-
return Ok(());
75-
}
76-
Ok(serial::Response::Log(log)) => println!("🪵 {log}"),
77-
Ok(_) => (),
78-
Err(err) => println!("❌ ERROR(cli): {err}"),
63+
match stream.next() {
64+
Ok(serial::Response::Cheat(result)) => {
65+
println!("✅ response: {result}");
66+
return Ok(());
7967
}
68+
Ok(serial::Response::Log(log)) => println!("🪵 {log}"),
69+
Ok(_) => (),
70+
Err(err) => println!("❌ ERROR(cli): {err}"),
8071
}
8172
}
8273
bail!("timed out waiting for response")

src/serial.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use firefly_types::{
66
use serialport::SerialPort;
77

88
// Given the binary stream so far, read the first COBS frame and return the rest of bytes.
9-
pub fn read_cobs_frame(chunk: &[u8]) -> (Vec<u8>, &[u8]) {
9+
fn read_cobs_frame(chunk: &[u8]) -> (Vec<u8>, &[u8]) {
1010
let max_len = chunk.len();
1111
let mut out_buf = vec![0; max_len];
1212
let mut dec = cobs::CobsDecoder::new(&mut out_buf);

0 commit comments

Comments
 (0)