From b5da325946b19c7ae6b41d6fbc07ca9d6f16e543 Mon Sep 17 00:00:00 2001 From: eraden Date: Mon, 23 Sep 2024 20:31:51 +0200 Subject: [PATCH] Keypad mapping --- src/main.rs | 177 ++++++++++++++++++---------------------------------- 1 file changed, 59 insertions(+), 118 deletions(-) diff --git a/src/main.rs b/src/main.rs index 45acc22..7586b57 100644 --- a/src/main.rs +++ b/src/main.rs @@ -115,37 +115,17 @@ fn main() -> ! { // .unwrap(); driver.clear_frame(&mut spi, &mut delay).unwrap(); - let mut gpio2 = Input::new(io.pins.gpio2, Pull::Up); - let mut gpio3 = Input::new(io.pins.gpio3, Pull::Up); - let mut gpio4 = Input::new(io.pins.gpio4, Pull::Up); - let mut gpio5 = Input::new(io.pins.gpio5, Pull::Up); - - let mut gpio6 = OutputOpenDrain::new(io.pins.gpio6, Level::Low, Pull::Up); - let mut gpio7 = OutputOpenDrain::new(io.pins.gpio7, Level::Low, Pull::Up); - let mut gpio8 = OutputOpenDrain::new(io.pins.gpio8, Level::Low, Pull::Up); - let mut gpio10 = OutputOpenDrain::new(io.pins.gpio10, Level::Low, Pull::Up); - - let mut kbd = Keypad(( - (&mut gpio2, &mut gpio6), - (&mut gpio3, &mut gpio6), - (&mut gpio4, &mut gpio6), - (&mut gpio5, &mut gpio6), - // -------------------------------------- - (&mut gpio2, &mut gpio7), - (&mut gpio3, &mut gpio7), - (&mut gpio4, &mut gpio7), - (&mut gpio5, &mut gpio7), - // -------------------------------------- - (&mut gpio2, &mut gpio8), - (&mut gpio3, &mut gpio8), - (&mut gpio4, &mut gpio8), - (&mut gpio5, &mut gpio8), - // -------------------------------------- - (&mut gpio2, &mut gpio10), - (&mut gpio3, &mut gpio10), - (&mut gpio4, &mut gpio10), - (&mut gpio5, &mut gpio10), - )); + let mut kbd = Keypad { + i1: Input::new(io.pins.gpio2, Pull::Up), + i2: Input::new(io.pins.gpio3, Pull::Up), + i3: Input::new(io.pins.gpio4, Pull::Up), + i4: Input::new(io.pins.gpio5, Pull::Up), + //--------------------------- + o1: OutputOpenDrain::new(io.pins.gpio6, Level::Low, Pull::Up), + o2: OutputOpenDrain::new(io.pins.gpio7, Level::Low, Pull::Up), + o3: OutputOpenDrain::new(io.pins.gpio8, Level::Low, Pull::Up), + o4: OutputOpenDrain::new(io.pins.gpio10, Level::Low, Pull::Up), + }; let mut ctx = Context { button_pressed: None, @@ -227,101 +207,62 @@ pub struct Context<'d> { pub spi: SPI<'d>, pub delay: Delay, } - -struct Rows<'d> { - gpio2: Input<'d, Gpio2>, // - gpio3: Input<'d, Gpio3>, // - gpio4: Input<'d, Gpio4>, // - gpio5: Input<'d, Gpio5>, // +struct Keypad<'d> { + o1: OutputOpenDrain<'d, Gpio6>, // + o2: OutputOpenDrain<'d, Gpio7>, // + o3: OutputOpenDrain<'d, Gpio8>, // + o4: OutputOpenDrain<'d, Gpio10>, // + // -------------------------------------- + i1: Input<'d, Gpio2>, // + i2: Input<'d, Gpio3>, // + i3: Input<'d, Gpio4>, // + i4: Input<'d, Gpio5>, // } -struct Cols<'d> { - gpio6: OutputOpenDrain<'d, Gpio6>, // - gpio7: OutputOpenDrain<'d, Gpio7>, // - gpio8: OutputOpenDrain<'d, Gpio8>, // - gpio10: OutputOpenDrain<'d, Gpio10>, // -} -pub type OOD<'d, T> = OutputOpenDrain<'d, T>; - -struct Keypad<'d>( - pub ( - // -------------------------------------- - (&'d mut Input<'d, Gpio2>, &'d mut OOD<'d, Gpio6>), - (&'d mut Input<'d, Gpio3>, &'d mut OOD<'d, Gpio6>), - (&'d mut Input<'d, Gpio4>, &'d mut OOD<'d, Gpio6>), - (&'d mut Input<'d, Gpio5>, &'d mut OOD<'d, Gpio6>), - // -------------------------------------- - (&'d mut Input<'d, Gpio2>, &'d mut OOD<'d, Gpio7>), - (&'d mut Input<'d, Gpio3>, &'d mut OOD<'d, Gpio7>), - (&'d mut Input<'d, Gpio4>, &'d mut OOD<'d, Gpio7>), - (&'d mut Input<'d, Gpio5>, &'d mut OOD<'d, Gpio7>), - // -------------------------------------- - (&'d mut Input<'d, Gpio2>, &'d mut OOD<'d, Gpio8>), - (&'d mut Input<'d, Gpio3>, &'d mut OOD<'d, Gpio8>), - (&'d mut Input<'d, Gpio4>, &'d mut OOD<'d, Gpio8>), - (&'d mut Input<'d, Gpio5>, &'d mut OOD<'d, Gpio8>), - // -------------------------------------- - (&'d mut Input<'d, Gpio2>, &'d mut OOD<'d, Gpio10>), - (&'d mut Input<'d, Gpio3>, &'d mut OOD<'d, Gpio10>), - (&'d mut Input<'d, Gpio4>, &'d mut OOD<'d, Gpio10>), - (&'d mut Input<'d, Gpio5>, &'d mut OOD<'d, Gpio10>), - ), -); impl<'d> Keypad<'d> { pub fn pressed(&mut self) -> Option