]> code.octet-stream.net Git - m17rt/blobdiff - m17app/src/serial.rs
Error handler for soundmodem components
[m17rt] / m17app / src / serial.rs
index d3eec1936eab13cd8725b0b67f43de07fb5e5dab..7747c3de73a03bdea38d37898e910bdf184cd621 100644 (file)
@@ -1,6 +1,6 @@
 use serialport::SerialPort;
 
-use crate::soundmodem::Ptt;
+use crate::{error::SoundmodemError, soundmodem::Ptt};
 
 /// The pin on the serial port which is driving PTT
 pub enum PttPin {
@@ -23,25 +23,26 @@ impl SerialPtt {
             .map(|i| i.port_name)
     }
 
-    pub fn new(port_name: &str, pin: PttPin) -> Self {
-        // TODO: error handling
-        let port = serialport::new(port_name, 9600).open().unwrap();
-        Self { port, pin }
+    pub fn new(port_name: &str, pin: PttPin) -> Result<Self, SoundmodemError> {
+        let port = serialport::new(port_name, 9600).open()?;
+        let mut s = Self { port, pin };
+        s.ptt_off()?;
+        Ok(s)
     }
 }
 
 impl Ptt for SerialPtt {
-    fn ptt_on(&mut self) {
-        let _ = match self.pin {
+    fn ptt_on(&mut self) -> Result<(), SoundmodemError> {
+        Ok(match self.pin {
             PttPin::Rts => self.port.write_request_to_send(true),
             PttPin::Dtr => self.port.write_data_terminal_ready(true),
-        };
+        }?)
     }
 
-    fn ptt_off(&mut self) {
-        let _ = match self.pin {
+    fn ptt_off(&mut self) -> Result<(), SoundmodemError> {
+        Ok(match self.pin {
             PttPin::Rts => self.port.write_request_to_send(false),
             PttPin::Dtr => self.port.write_data_terminal_ready(false),
-        };
+        }?)
     }
 }