Set frequency.

This commit is contained in:
mattbk
2026-09-10 19:31:15 -05:00
parent fb09318837
commit 0fffecf5b9
2 changed files with 52 additions and 21 deletions
+52 -1
View File
@@ -22,10 +22,15 @@ struct Cli {
com: Option<String>,
/// Format
#[arg(short = 'f', long, default_value = "result.csv")]
#[arg(short = 'o', long, default_value = "result.csv")]
file: Option<String>,
/// Frequency
#[arg(short = 'f', long)]
freq: Option<u32>,
}
// Read S-meter
fn get_smeter(comport: &str) -> String {
let mut port = serialport::new(comport, 4800)
.data_bits(DataBits::Eight)
@@ -71,6 +76,41 @@ fn get_smeter(comport: &str) -> String {
}
}
// Set frequency
fn set_freq(comport: &str, freq: u32) -> 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;"; // set VFO A frequency
let output = format!("FA{};", freq);
//println!("{output}");
match port.write(output.as_bytes()) {
Ok(_) => {
std::io::stdout().flush().unwrap();
}
Err(ref e) if e.kind() == ErrorKind::TimedOut => (),
Err(e) => eprintln!("{:?}", e)
}
let mut buf = [0u8; 1024];
match port.read(&mut buf) {
Ok(_) => {
return format!("Frequency set.");
}
Err(_) => {
return format!("Failed to set frequency.");
}
}
}
// Write row to a file
fn write_row(str_arr: [String; 4], file: &String, fmt: &str) -> Result<(), Box<dyn Error>> {
// From https://docs.rs/csv/latest/csv/tutorial/index.html#writing-csv
@@ -99,6 +139,7 @@ fn write_row(str_arr: [String; 4], file: &String, fmt: &str) -> Result<(), Box<d
}
}
// Main funtion
fn main() {
// Arguments
let cli = Cli::parse();
@@ -124,6 +165,16 @@ fn main() {
} //todo!()
};
let frequency = match cli.freq {
Some(frequency) => frequency,
None => {
return;
} //todo!()
};
// Set the requested frequency
set_freq(&com, frequency);
// Simple test loop to make sure we are getting values each time
for _i in 1..11 {
let s_val = get_smeter(&com);