X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/608ca7e33ab51d812607ddcc3429bfa9aa3c34b0..2fb25de49daca6ddff6f5af13bcf7c314aafafb3:/m17app/src/rtlsdr.rs diff --git a/m17app/src/rtlsdr.rs b/m17app/src/rtlsdr.rs index 33f8070..7829f96 100644 --- a/m17app/src/rtlsdr.rs +++ b/m17app/src/rtlsdr.rs @@ -1,21 +1,12 @@ 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 { @@ -35,8 +26,7 @@ impl RtlSdr { } impl InputSource for RtlSdr { - fn start(&self, tx: SyncSender) { - // TODO: error handling + fn start(&self, tx: SyncSender) -> Result<(), SoundmodemError> { let mut cmd = Command::new("rtl_fm") .args([ "-E", @@ -49,8 +39,7 @@ impl InputSource for RtlSdr { "48k", ]) .stdout(Stdio::piped()) - .spawn() - .unwrap(); + .spawn()?; let mut stdout = cmd.stdout.take().unwrap(); let mut buf = [0u8; 1024]; let mut leftover: Option = None; @@ -80,11 +69,14 @@ impl InputSource for RtlSdr { } } }); + *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(()) } }