transmit-receive data working correct but with only one settings port

This commit is contained in:
Danila Gamkov 2025-03-12 14:14:32 +03:00
parent 45f145ca2f
commit 120aaadbb9

View File

@ -1,14 +1,8 @@
// use std::time::Duration;
// use std::{thread, time};
// use serialport::{SerialPort, StopBits, Parity, FlowControl, DataBits};
// use std::io::{self, Read, Write, BufWriter};
use regex::Regex;
use rustyline::Editor;
use rustyline::error::ReadlineError;
// use std::fs::OpenOptions;
use std::io::{BufReader, BufRead, Write};
use std::net::{TcpListener, TcpStream};
// use std::collections::HashMap;
use clap::{Parser};
pub mod perf {
@ -170,6 +164,18 @@ pub mod uart_transact {
}
Ok(())
}
fn log_cmd_data(&mut self, msg_cmd: &str, msg_data: &str) -> Result<(), io::Error> {
if self.log_flag == true {
writeln!(&mut self.out, "{} {};{:?};{:?}",
Perf::cur_time("%Y.%m.%d"),
Perf::cur_time("%H:%M:%S.%3f"),
msg_cmd.trim(),
msg_data.trim())?;
self.out.flush()?;
}
Ok(())
}
}
pub struct UartTransact {
@ -184,6 +190,7 @@ pub mod uart_transact {
save_cmd_flag: bool,
data_writer: Logger,
cmd_writer: Logger,
cmd_data_writer: Logger,
}
impl UartTransact {
@ -203,10 +210,13 @@ pub mod uart_transact {
let data_writer = Logger::new(filename.clone(), save_data_flag)?;
filename = format!("../log/commands_{}.log", Perf::cur_time("%Y%m%d"));
let cmd_writer = Logger::new(filename.clone(), save_data_flag)?;
filename = format!("../log/cmd_data_{}.log", Perf::cur_time("%Y%m%d"));
let cmd_data_writer = Logger::new(filename.clone(), save_data_flag)?;
let mut port = Self::set_port_settings(port_name,
port_settings.clone()).unwrap();
println!("{:#?}", port);
let tx_packet = String::new();
let rx_packet = String::new();
@ -217,6 +227,7 @@ pub mod uart_transact {
save_cmd_flag,
data_writer,
cmd_writer,
cmd_data_writer,
port,
tx_packet,
rx_packet,
@ -245,10 +256,6 @@ pub mod uart_transact {
self.port.flush().unwrap();
// let mut buffer = [0u8; 4096];
// self.port.read(&mut buffer);
// let s = std::str::from_utf8(&buffer).unwrap().to_string();
let mut reader = BufReader::new(&mut self.port);
let mut s = String::new();
if let Err(err) = reader.read_line(&mut s) {
@ -259,6 +266,7 @@ pub mod uart_transact {
if s.len() > 0 {
self.rx_packet = s.clone();
self.data_writer.log(&s).unwrap();
self.cmd_data_writer.log_cmd_data(&self.tx_packet, &s).unwrap();
}
}
Ok(())
@ -364,9 +372,10 @@ fn uart_cmd_interp(cmd: &str) -> String {
if args_cnt != 3 { return format!("Error while parse command! {}", "arguments count must be 2"); }
else {
let port_name = &args[1];
// let mut perf = Perf::new();
// perf.start();
println!("port_set: {:#?}", port_set);
let mut uart_trans = UartTransact::new(trans_type, port_name,
port_set, save_data_flag, save_cmd_flag).unwrap();
@ -374,6 +383,7 @@ fn uart_cmd_interp(cmd: &str) -> String {
let mut data_out = args[2].clone();
data_out.push_str(std::str::from_utf8(b"\x0D\x0A").unwrap()); // CR + LF
println!("data out: {:?}", data_out);
uart_trans.add_packet_for_tx(data_out.clone(), data_out.len() as u32).unwrap();
uart_trans.start_transact().unwrap();
@ -399,7 +409,8 @@ fn uart_cmd_interp(cmd: &str) -> String {
port_set = PortSettingsT::new(speed, data_bits, parity, stop_bits,
flow_ctrl, timeout).unwrap();
println!("port_set: {:#?}", port_set);
let uart_trans = UartTransact::new(trans_type, &port_name,
port_set.clone(), save_data_flag, save_cmd_flag).unwrap();