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},
+ error::{M17Error, SoundmodemError},
+ soundmodem::{InputSource, SoundmodemEvent},
};
pub struct RtlSdr {
}
impl InputSource for RtlSdr {
- fn start(&self, tx: SyncSender<SoundmodemEvent>) {
- // TODO: error handling
+ fn start(&self, tx: SyncSender<SoundmodemEvent>) -> Result<(), SoundmodemError> {
let mut cmd = Command::new("rtl_fm")
.args([
"-E",
"48k",
])
.stdout(Stdio::piped())
- .spawn()
- .unwrap();
+ .spawn()?;
let mut stdout = cmd.stdout.take().unwrap();
let mut buf = [0u8; 1024];
let mut leftover: Option<u8> = None;
}
}
});
+ *self.rtlfm.lock().unwrap() = Some(cmd);
+ Ok(())
}
- fn close(&self) {
+ fn close(&self) -> Result<(), SoundmodemError> {
if let Some(mut process) = self.rtlfm.lock().unwrap().take() {
let _ = process.kill();
}
+ Ok(())
}
}