commit fa0ba18d12305ca08b485f12b7cb1fd054c74f87 Author: hodasemi Date: Fri Nov 22 11:24:12 2019 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11de2f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/target +**/*.rs.bk + +Cargo.lock \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..beb018a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "macroboard" +version = "0.1.0" +authors = ["hodasemi "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serial = "*" +utilities = { git = "http://dimov.cloud:80/hodasemi/Context.git" } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..aef9eea --- /dev/null +++ b/src/main.rs @@ -0,0 +1,55 @@ +use serial; +use serial::prelude::*; + +use utilities::prelude::*; + +use std::ffi::OsStr; +use std::time::Duration; + +fn main() -> VerboseResult<()> { + let mut port = open("/dev/ttyACM0")?; + + write(&mut port, "hello world")?; + let msg = read(&mut port)?; + + println!("{}", msg); + + Ok(()) +} + +fn open + ?Sized>(port: &T) -> VerboseResult { + let mut port = serial::open(port).map_err(|_| "could not open serial port")?; + + port.reconfigure(&|port_settings| { + port_settings.set_baud_rate(serial::Baud9600)?; + + port_settings.set_char_size(serial::Bits8); + port_settings.set_parity(serial::ParityNone); + port_settings.set_stop_bits(serial::Stop1); + port_settings.set_flow_control(serial::FlowNone); + + Ok(()) + }) + .map_err(|_| "failed configuring serial port")?; + + port.set_timeout(Duration::from_millis(1000)) + .map_err(|_| "failed setting time out for serial port")?; + + Ok(port) +} + +fn read(port: &mut T) -> VerboseResult { + let mut buf: Vec = (0..255).collect(); + + port.read(&mut buf[..]) + .map_err(|_| "failed reading serial port")?; + + Ok(String::from_utf8(buf).map_err(|_| "failed converting utf8 buffer")?) +} + +fn write(port: &mut T, msg: &str) -> VerboseResult<()> { + port.write(msg.as_bytes()) + .map_err(|_| "failed writing to serial port")?; + + Ok(()) +}