From 1d095eb8614a2a225491ab42f45bc91d52c42a3f Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Mon, 19 Feb 2024 00:24:29 +0100
Subject: [PATCH] tested static memory

---
 .gitignore |  5 +++--
 Cargo.lock |  7 +++++++
 Cargo.toml |  1 +
 justfile   |  4 ++--
 src/lib.rs | 33 ++++++++++++++++++++++++++-------
 5 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/.gitignore b/.gitignore
index ddd332c..07b3ea4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 /target
-
 documentation.pdf
 functions.pdf
-libserial_bridge.mexmaci64
\ No newline at end of file
+serialbridge.mexmaci64
+
+.cargo/config.toml
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index b896872..2a274e6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -61,6 +61,12 @@ dependencies = [
  "mach2",
 ]
 
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
 [[package]]
 name = "libc"
 version = "0.2.153"
@@ -295,6 +301,7 @@ name = "serial-bridge"
 version = "0.1.0"
 dependencies = [
  "cstr",
+ "lazy_static",
  "rustmex",
  "serialport",
  "thiserror",
diff --git a/Cargo.toml b/Cargo.toml
index 4ae0e27..943c409 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,6 +8,7 @@ crate-type = ["cdylib"]
 
 [dependencies]
 cstr = "0.2.11"
+lazy_static = "1.4.0"
 rustmex = { path = "../rustmex/rustmex", features = ["matlab800"] }
 serialport = "4.3.0"
 thiserror = "1.0.57"
diff --git a/justfile b/justfile
index 202eee7..b633750 100644
--- a/justfile
+++ b/justfile
@@ -12,11 +12,11 @@ default:
 
 build:
     cargo build --release
-    mv target/release/libserial_bridge.dylib libserial_bridge.mexmaci64
+    mv target/release/libserial_bridge.dylib serialbridge.mexmaci64
 
 clean:
     cargo clean
-    rm libserial_bridge.mexmaci64
+    rm serialbridge.mexmaci64
 
 docs:
     typst watch {{source}} {{dest}} --open
diff --git a/src/lib.rs b/src/lib.rs
index de878c3..fb660aa 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,13 +1,24 @@
 mod error;
 mod types;
 
-use rustmex::{char::CharArray, prelude::*, MatlabClass};
+use std::sync::RwLock;
+
+use rustmex::{char::CharArray, convert::ToMatlab, prelude::*, MatlabClass};
 
 use error::{Error, MapMexError};
 use types::Mode;
 
+lazy_static::lazy_static! {
+    static ref TEST: RwLock<i32> = RwLock::new(42);
+}
+
 #[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 arg0 = rhs.first().mexerr(Error::MissingSerialMode)?;
 
     // Get the mode argument ("Open", "Close", "Read", "Write")
@@ -15,8 +26,8 @@ fn serialbridge(lhs: Lhs, rhs: Rhs) -> rustmex::Result<()> {
 
     // Dispatch to the appropriate function
     match mode {
-        Mode::Open => open_serial(rhs)?,
-        Mode::Close => todo!(),
+        Mode::Open => open_serial(lhs, rhs)?,
+        Mode::Close => {}
         Mode::Read => todo!(),
         Mode::Write => todo!(),
     }
@@ -31,14 +42,22 @@ fn get_mode(arg: &mxArray) -> Result<Mode, Error> {
         .parse()
 }
 
-fn open_serial(rhs: Rhs) -> Result<(), Error> {
-    let port = rhs.get(1).mexerr(Error::MissingPortName)?;
-    let baudrate = rhs.get(2).mexerr(Error::MissingBaudrate)?;
+fn open_serial(lhs: Lhs, rhs: Rhs) -> Result<(), Error> {
+    let nw = *TEST.read().unwrap() + 1;
+    *TEST.write().unwrap() = nw;
+
+    if let Some(r) = lhs.get_mut(0) {
+        let res = TEST.read().unwrap().to_matlab();
+        r.replace(res);
+    };
+
+    // let port = rhs.get(1).mexerr(Error::MissingPortName)?;
+    // let baudrate = rhs.get(2).mexerr(Error::MissingBaudrate)?;
 
     // let port = CharArray::from_mx_array(port)?.get_cstring().into_string()?;
     // let baudrate = CharArray::from_mx_array(baudrate)?.get_cstring().into_string()?;
 
-    todo!();
+    // todo!();
 
     Ok(())
 }
-- 
GitLab