use std::{
io::Read,
process::{Child, Command, Stdio},
- sync::{
- mpsc::{sync_channel, Receiver, SyncSender},
- Arc, Mutex, RwLock,
- },
- time::{Duration, Instant},
-};
-
-use cpal::{
- traits::{DeviceTrait, HostTrait, StreamTrait},
- SampleFormat, SampleRate, Stream,
+ sync::{mpsc::SyncSender, Mutex},
};
use crate::{
error::M17Error,
- soundmodem::{InputSource, OutputBuffer, OutputSink, SoundmodemEvent},
+ soundmodem::{InputSource, SoundmodemErrorSender, SoundmodemEvent},
};
pub struct RtlSdr {
}
impl InputSource for RtlSdr {
- fn start(&self, tx: SyncSender<SoundmodemEvent>) {
- // TODO: error handling
- let mut cmd = Command::new("rtl_fm")
+ fn start(&self, tx: SyncSender<SoundmodemEvent>, errors: SoundmodemErrorSender) {
+ let mut cmd = match Command::new("rtl_fm")
.args([
"-E",
"offset",
])
.stdout(Stdio::piped())
.spawn()
- .unwrap();
+ {
+ Ok(c) => c,
+ Err(e) => {
+ errors.send_error(e);
+ return;
+ }
+ };
let mut stdout = cmd.stdout.take().unwrap();
let mut buf = [0u8; 1024];
let mut leftover: Option<u8> = None;
}
}
});
+ *self.rtlfm.lock().unwrap() = Some(cmd);
}
fn close(&self) {