]> code.octet-stream.net Git - m17rt/blobdiff - m17app/src/rtlsdr.rs
Remove unneeded mutex and provide some sample error handlers
[m17rt] / m17app / src / rtlsdr.rs
index 33f8070621ae1eb08e05eebdc6cf0f496383b08b..269769b4bd2559452a635c5abb2b43e1234b3ec2 100644 (file)
@@ -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},
+    soundmodem::{InputSource, SoundmodemErrorSender, SoundmodemEvent},
 };
 
 pub struct RtlSdr {
@@ -35,9 +26,8 @@ impl 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",
@@ -50,7 +40,13 @@ impl InputSource for RtlSdr {
             ])
             .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;
@@ -80,6 +76,7 @@ impl InputSource for RtlSdr {
                 }
             }
         });
+        *self.rtlfm.lock().unwrap() = Some(cmd);
     }
 
     fn close(&self) {