From c8e412fa34af020c6f0b2408af3eb52aad984c2e Mon Sep 17 00:00:00 2001 From: George Kaklamanos Date: Fri, 30 Jun 2023 20:44:37 +0300 Subject: [PATCH] Add configuration options for GPIO --- labadoor-gpio/src/lib.rs | 12 ++++++------ labadoor/config.toml | 6 ++++++ labadoor/src/cli.rs | 15 ++++++++++++++- labadoor/src/main.rs | 10 ++++++++-- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/labadoor-gpio/src/lib.rs b/labadoor-gpio/src/lib.rs index 980afb3..a638896 100644 --- a/labadoor-gpio/src/lib.rs +++ b/labadoor-gpio/src/lib.rs @@ -1,13 +1,13 @@ use gpio_cdev::{Chip, LineRequestFlags}; -pub fn gpio() { - let mut chip = Chip::new("/dev/gpiochip0").unwrap(); +pub fn gpio(device: String, pin: u8, active_low: bool, active_time: u32) { + let mut chip = Chip::new(device).unwrap(); let handle = chip - .get_line(6) + .get_line(pin as u32) .unwrap() .request(LineRequestFlags::OUTPUT, 1, "labadoor-gpio") .unwrap(); - handle.set_value(1).unwrap(); - std::thread::sleep(std::time::Duration::from_millis(2000)); - handle.set_value(0).unwrap(); + handle.set_value(!active_low as u8).unwrap(); + std::thread::sleep(std::time::Duration::from_millis(active_time as u64)); + handle.set_value(active_low as u8).unwrap(); } diff --git a/labadoor/config.toml b/labadoor/config.toml index 8222edf..b1a4807 100644 --- a/labadoor/config.toml +++ b/labadoor/config.toml @@ -4,3 +4,9 @@ token = "" [matrix] username = "" password = "" + +[gpio] +device = "" +pin = 1 +active_low = false +active_time = 2000 diff --git a/labadoor/src/cli.rs b/labadoor/src/cli.rs index 1ae060f..85edeb1 100644 --- a/labadoor/src/cli.rs +++ b/labadoor/src/cli.rs @@ -16,7 +16,7 @@ pub enum Command { #[cfg(feature = "csv")] CSV, #[cfg(feature = "gpio")] - GPIO, + GPIO(GPIO), } #[cfg(feature = "telegram")] @@ -35,6 +35,19 @@ pub struct Matrix { pub password: Option, } +#[cfg(feature = "gpio")] +#[derive(Deserialize, Parser, Debug)] +pub struct GPIO { + #[clap(short, long)] + pub device: Option, + #[clap(short, long)] + pub pin: Option, + #[clap(short, long)] + pub active_low: Option, + #[clap(short = 't', long)] + pub active_time: Option, +} + pub fn parse() -> Cli { Cli::parse() } diff --git a/labadoor/src/main.rs b/labadoor/src/main.rs index 20d0898..a57c9df 100644 --- a/labadoor/src/main.rs +++ b/labadoor/src/main.rs @@ -23,8 +23,14 @@ fn main() { labadoor_csv::csv(); } #[cfg(feature = "gpio")] - cli::Command::GPIO => { - labadoor_gpio::gpio(); + cli::Command::GPIO(_) => { + let gpio = config.get::("gpio").unwrap(); + labadoor_gpio::gpio( + gpio.device.unwrap(), + gpio.pin.unwrap(), + gpio.active_low.unwrap(), + gpio.active_time.unwrap(), + ); } } }