From 3e89d2a33a53ce2c51f11795369e8445115a64d0 Mon Sep 17 00:00:00 2001 From: Blizzard Finnegan Date: Fri, 5 May 2023 15:47:53 -0400 Subject: [PATCH] Start writing rust --- .gitignore | 2 + Cargo.lock | 395 +++++++++++++++++++++++++++- Cargo.toml | 10 +- output.log | 4 - src/{serial_facade.rs => device.rs} | 0 src/gpio_facade.rs | 16 ++ src/lib.rs | 7 +- src/log_facade.rs | 30 +++ src/main.rs | 32 +-- src/tty.rs | 77 ++++++ 10 files changed, 525 insertions(+), 48 deletions(-) delete mode 100644 output.log rename src/{serial_facade.rs => device.rs} (100%) create mode 100644 src/tty.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..806522a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +/logs +/output \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index fc36a6e..fa5760b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,18 +32,120 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bumpalo" +version = "3.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.15", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "fern" version = "0.6.2" @@ -54,16 +156,37 @@ dependencies = [ ] [[package]] -name = "gpio" -version = "0.4.1" +name = "iana-time-zone" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe6783270536547ac473c9d2ae5a7e0e715ea43f29004ced47fbd1c1372d2c7" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "iana-time-zone-haiku" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] [[package]] name = "libc" @@ -91,6 +214,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "log" version = "0.4.17" @@ -135,12 +267,55 @@ dependencies = [ "libc", ] +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + [[package]] name = "pkg-config" version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + [[package]] name = "regex" version = "1.8.1" @@ -158,6 +333,21 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +[[package]] +name = "rppal" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612e1a22e21f08a246657c6433fe52b773ae43d07c9ef88ccfc433cc8683caba" +dependencies = [ + "libc", +] + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + [[package]] name = "serialport" version = "4.2.0" @@ -179,13 +369,127 @@ dependencies = [ name = "seymour_poc_rust" version = "0.1.0" dependencies = [ + "chrono", "fern", - "gpio", - "humantime", "log", + "rppal", "serialport", ] +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + [[package]] name = "winapi" version = "0.3.9" @@ -202,8 +506,83 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/Cargo.toml b/Cargo.toml index e7ec920..7f0bee7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,6 @@ +#cargo-features = ["per-package-target"] + +forced-target = "arm-unknown-linux-gnueabihf" [package] name = "seymour_poc_rust" version = "0.1.0" @@ -5,12 +8,9 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -#[build] -#target = "arm-unknown-linux-gnueabihf" - [dependencies] -gpio = "0.4.1" +rppal = "0.14.1" serialport = "4.2.0" log = "0.4" fern = "0.6.2" -humantime = "2.1.0" +chrono = "0.4.24" diff --git a/output.log b/output.log deleted file mode 100644 index 1eae7d2..0000000 --- a/output.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-05-05T14:18:31Z - [WARN, seymour_poc_rust] - Test trace message -2023-05-05T14:18:31Z - [ERROR, seymour_poc_rust] - Test trace message -2023-05-05T14:19:58.579Z - [WARN, seymour_poc_rust] - Test trace message -2023-05-05T14:19:58.579Z - [ERROR, seymour_poc_rust] - Test trace message diff --git a/src/serial_facade.rs b/src/device.rs similarity index 100% rename from src/serial_facade.rs rename to src/device.rs diff --git a/src/gpio_facade.rs b/src/gpio_facade.rs index e69de29..04d8dc4 100644 --- a/src/gpio_facade.rs +++ b/src/gpio_facade.rs @@ -0,0 +1,16 @@ +use rppal::gpio::{Gpio, OutputPin}; +use std::collections::HashMap; + +const GPIO: rppal::gpio::Gpio = Gpio::new()?; +const RELAY_ADDRESSES: u8 = [4,5,6,12,13,17,18,19,20,26]; +static mut RELAYS: HashMap = HashMap::new(); + +fn setup() { + for pin in RELAY_ADDRESSES.iter(){ + gpio_facade::RELAYS.insert(pin,GPIO.get(pin)?.into_output()); + } +} + +fn remove_pin(address:u8) -> OutputPin{ + return gpio_facade::RELAYS.remove(&address); +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 254f72f..fffd6d9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,3 @@ -mod gpio_facade; -mod output_facade; -mod log_facade; -mod serial_facade; +pub mod log_facade; +pub mod gpio_facade; +pub mod device; \ No newline at end of file diff --git a/src/log_facade.rs b/src/log_facade.rs index e69de29..809b474 100644 --- a/src/log_facade.rs +++ b/src/log_facade.rs @@ -0,0 +1,30 @@ +use chrono::prelude::*; + +pub fn setup_logs() -> Result<(), fern::InitError>{ + let chrono_now: DateTime = Local::now(); + fern::Dispatch::new() + .format(|out,message,record|{ + out.finish(format_args!( + "{} - [{}, {}] - {}", + Local::now().to_rfc3339(), + record.level(), + record.target(), + message + )) + }) + .chain( + fern::Dispatch::new() + .level(log::LevelFilter::Trace) + .chain(fern::log_file( + format!("logs\\output-{0}.log", + chrono_now.format("%Y-%m-%d_%H.%M.%S").to_string() + ))?), + ) + .chain( + fern::Dispatch::new() + .level(log::LevelFilter::Warn) + .chain(std::io::stdout()) + ) + .apply()?; + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 9e301a2..92f401e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,30 +1,8 @@ -use log::{trace,debug,info,warn,error}; -use std::time::SystemTime; - -fn setup_logger() -> Result<(), fern::InitError>{ - fern::Dispatch::new() - .format(|out,message,record|{ - out.finish(format_args!( - "{} - [{}, {}] - {}", - humantime::format_rfc3339_millis(SystemTime::now()), - record.level(), - record.target(), - message - )) - }) - .chain(fern::log_file("output.log")?) - .level(log::LevelFilter::Warn) - .chain(std::io::stdout()) - .apply()?; - Ok(()) -} - +pub mod log_facade; +pub mod tty; +pub mod gpio_facade; fn main() -> Result<(), Box> { - setup_logger()?; - trace!("Test trace message"); - debug!("Test trace message"); - info!("Test trace message"); - warn!("Test trace message"); - error!("Test trace message"); + log_facade::setup_logs()?; + error!("Test log creation"); Ok(()) } diff --git a/src/tty.rs b/src/tty.rs new file mode 100644 index 0000000..7a28825 --- /dev/null +++ b/src/tty.rs @@ -0,0 +1,77 @@ +use std::collections::HashMap; + +use serialport::{SerialPortInfo, SerialPort}; + +const BAUD_RATE:u32 = 115200; +const AVAILABLE_TTYS: Vec = serialport::available_ports(); + +enum State{ + LoginPrompt, + DebugMenu, + LifecycleMenu, + BrightnessMenu +} + +const COMMAND_MAP:HashMap, + state: State +} + +impl TTY{ + pub fn new(serial_location:String) -> Self{ + } +} + +//use std::collections::HashMap; +// +// +//static mut OPEN_TTYS: HashMap = HashMap::new(); +// +//pub fn setup() -> Vec{ +// let output:Vec = Vec::new(); +// for tty in device::AVAILABLE_TTYS.iter(){ +// if tty.port_type == serialport::SerialPortType::UsbPort(ANY()){ +// let tty_port:Box = serialport::new(tty.port_name,BAUD_RATE) +// .open().expect("Failed to open port"); +// device::OPEN_TTYS.insert(tty.port_name,*tty_port); +// output.push(*tty_port); +// } +// } +// return output; +//} +// \ No newline at end of file