From 46a8b1e19d39231dc5c61e92714146f074f8403a Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Tue, 16 Apr 2024 12:29:45 +0200
Subject: [PATCH] Added CloseAll command
---
src/lib.rs | 10 +++++++++-
src/serial.rs | 5 +++++
src/types.rs | 2 ++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/lib.rs b/src/lib.rs
index cae93d4..ee10f14 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -78,6 +78,7 @@ fn serialbridge(lhs: Lhs, rhs: Rhs) -> rustmex::Result<()> {
match mode {
Mode::Open => open_serial(args)?,
Mode::Close => close_serial(args)?,
+ Mode::CloseAll => close_all_serials(args)?,
Mode::Read => read_from_serial(out, args)?,
Mode::Write => write_to_serial(args)?,
}
@@ -121,7 +122,7 @@ fn open_serial(args: Args<'_>) -> SResult<()> {
Ok(())
}
-/// Close the serial port if it is open (didn't expect any arguments)
+/// Close the serial port specified by the first argument, if it is open
fn close_serial(args: Args<'_>) -> SResult<()> {
args.assert_params_max_len(1)?;
let port = get_port_name(1, &args)?;
@@ -130,6 +131,13 @@ fn close_serial(args: Args<'_>) -> SResult<()> {
Ok(())
}
+/// Close all serial ports that are open (didn't expect any arguments)
+fn close_all_serials(args: Args<'_>) -> SResult<()> {
+ args.assert_params_max_len(0)?;
+ SERIAL.write().close_all();
+ Ok(())
+}
+
/// Read `n` doubles from the serial port and return them as a vector
fn read_from_serial(mut outputs: Output<'_>, args: Args<'_>) -> SResult<()> {
args.assert_params_max_len(2)?;
diff --git a/src/serial.rs b/src/serial.rs
index f6e107f..4011d74 100644
--- a/src/serial.rs
+++ b/src/serial.rs
@@ -56,6 +56,11 @@ impl SerialManager {
}
}
+ /// Close all serial that are open
+ pub fn close_all(&mut self) {
+ self.serial_map.write().clear();
+ }
+
/// Read `n` bytes from the serial port
pub fn read_n_bytes(&self, name: &str, n: usize) -> SResult<Vec<u8>> {
let map = self.serial_map.read();
diff --git a/src/types.rs b/src/types.rs
index 97fca4f..e177f8d 100644
--- a/src/types.rs
+++ b/src/types.rs
@@ -110,6 +110,7 @@ impl IntoMatlabType for Vec<f32> {
pub enum Mode {
Open,
Close,
+ CloseAll,
Read,
Write,
}
@@ -121,6 +122,7 @@ impl FromStr for Mode {
match s {
"Open" => Ok(Mode::Open),
"Close" => Ok(Mode::Close),
+ "CloseAll" => Ok(Mode::CloseAll),
"Read" => Ok(Mode::Read),
"Write" => Ok(Mode::Write),
_ => Err(Error::InvalidMode),
--
GitLab