From 9749923974647710c456fedac4d322d4cba4dcb2 Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Mon, 19 Feb 2024 00:24:31 +0100
Subject: [PATCH] added definitions for read and write and a macro for warning
 debug

---
 src/lib.rs | 47 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index 2bc0f89..fe8b0bf 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -16,12 +16,20 @@ lazy_static::lazy_static! {
 }
 
 /// this compiles only in debug mode
-fn warn(msg: &str) {
-    #[cfg(debug_assertions)]
-    warning("serialbridge:debug", msg);
+#[cfg(debug_assertions)]
+macro_rules! warn_debug {
+    ($msg:literal, $($arg:expr),*) => {
+        warning("serialbridge:debug", format!($msg, $($arg),*));
+    };
+}
+
+#[cfg(not(debug_assertions))]
+macro_rules! warn_debug {
+    () => {};
 }
 
 struct Args<'a>(Rhs<'a, 'a>);
+struct Output<'a>(Lhs<'a>);
 
 impl<'a> Args<'a> {
     fn new(rhs: Rhs<'a, 'a>) -> Self {
@@ -43,24 +51,20 @@ impl<'a> Args<'a> {
 
 #[rustmex::entrypoint]
 fn serialbridge(lhs: Lhs, rhs: Rhs) -> rustmex::Result<()> {
-    // if let Some(r) = lhs.get_mut(0) {
-    // let res = TEST.read().unwrap().to_matlab();
-    // r.replace(res);
-    // };
-
     let args = Args::new(rhs);
+    let out = Output(lhs);
 
     // Get the mode argument ("Open", "Close", "Read", "Write")
     let mode = get_mode(args.get(0, Error::MissingSerialMode)?)?;
 
-    println!("Mode: {:?}", mode);
+    warn_debug!("Mode: {:?}", mode);
 
     // Dispatch to the appropriate function
     match mode {
         Mode::Open => open_serial(args)?,
         Mode::Close => close_serial(args)?,
-        Mode::Read => todo!(),
-        Mode::Write => todo!(),
+        Mode::Read => read_from_serial(out, args)?,
+        Mode::Write => write_to_serial(args)?,
     }
 
     Ok(())
@@ -95,10 +99,7 @@ fn open_serial(args: Args<'_>) -> SResult<()> {
     }
     let baudrate = arg2 as u32;
 
-    warn(&format!(
-        "Open serial port {} with baudrate {}",
-        port, baudrate
-    ));
+    warn_debug!("Open serial port {} with baudrate {}", port, baudrate);
 
     SERIAL.lock().unwrap().open(&port, baudrate)?;
 
@@ -111,3 +112,19 @@ fn close_serial(args: Args<'_>) -> SResult<()> {
     SERIAL.lock().unwrap().close()?;
     Ok(())
 }
+
+fn read_from_serial(outputs: Output<'_>, args: Args<'_>) -> SResult<()> {
+    args.assert_params_max_len(1)?;
+
+    todo!();
+
+    Ok(())
+}
+
+fn write_to_serial(args: Args<'_>) -> SResult<()> {
+    args.assert_params_max_len(1)?;
+
+    todo!();
+
+    Ok(())
+}
-- 
GitLab