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