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