X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/00180a4d18cac71895d4c61d53756bda90cdf447..99f4fcbee0b9774a24ef2428ddce71889e602e3b:/tools/m17rt-fastdemod/src/main.rs?ds=sidebyside diff --git a/tools/m17rt-fastdemod/src/main.rs b/tools/m17rt-fastdemod/src/main.rs new file mode 100644 index 0000000..bc14f71 --- /dev/null +++ b/tools/m17rt-fastdemod/src/main.rs @@ -0,0 +1,44 @@ +use std::{error::Error, fs::File, io::Read, path::PathBuf}; + +use clap::Parser; +use m17core::{ + modem::{Demodulator, SoftDemodulator}, + protocol::Frame, +}; + +#[derive(Parser)] +struct Args { + #[arg(short = 'i', help = "Input RRC file")] + input: PathBuf, +} + +fn main() -> Result<(), Box> { + env_logger::init(); + let args = Args::parse(); + + let mut file = File::open(&args.input)?; + let mut baseband = vec![]; + file.read_to_end(&mut baseband)?; + + let mut total = 0; + let mut demod = SoftDemodulator::new(); + for (idx, sample) in baseband + .chunks(2) + .map(|pair| i16::from_le_bytes([pair[0], pair[1]])) + .enumerate() + { + if let Some((frame, errors)) = demod.demod(sample) { + total += 1; + let frame_desc = match frame { + Frame::Lsf(_) => "lsf", + Frame::Stream(_) => "stream", + Frame::Packet(_) => "packet", + }; + println!("sample {}: {} with {} errors", idx, frame_desc, errors); + } + } + + println!("\ntotal successful decodes: {}", total); + + Ok(()) +}