]> code.octet-stream.net Git - m17rt/blob - tools/m17rt-fastdemod/src/main.rs
fast demod bin
[m17rt] / tools / m17rt-fastdemod / src / main.rs
1 use std::{error::Error, fs::File, io::Read, path::PathBuf};
2
3 use clap::Parser;
4 use m17core::{
5 modem::{Demodulator, SoftDemodulator},
6 protocol::Frame,
7 };
8
9 #[derive(Parser)]
10 struct Args {
11 #[arg(short = 'i', help = "Input RRC file")]
12 input: PathBuf,
13 }
14
15 fn main() -> Result<(), Box<dyn Error>> {
16 env_logger::init();
17 let args = Args::parse();
18
19 let mut file = File::open(&args.input)?;
20 let mut baseband = vec![];
21 file.read_to_end(&mut baseband)?;
22
23 let mut total = 0;
24 let mut demod = SoftDemodulator::new();
25 for (idx, sample) in baseband
26 .chunks(2)
27 .map(|pair| i16::from_le_bytes([pair[0], pair[1]]))
28 .enumerate()
29 {
30 if let Some((frame, errors)) = demod.demod(sample) {
31 total += 1;
32 let frame_desc = match frame {
33 Frame::Lsf(_) => "lsf",
34 Frame::Stream(_) => "stream",
35 Frame::Packet(_) => "packet",
36 };
37 println!("sample {}: {} with {} errors", idx, frame_desc, errors);
38 }
39 }
40
41 println!("\ntotal successful decodes: {}", total);
42
43 Ok(())
44 }