Skip to content
Snippets Groups Projects
Select Git revision
  • 0ba359bb29c0ce3c8a95e8111d05b6811f1cb2d5
  • master default
2 results

led.rs

Blame
  • Forked from Per Lindgren / stm32f4-hal
    Source project has a limited visibility.
    led.rs 3.04 KiB
    //! On-board user LEDs
    
    use core::ops;
    
    use prelude::*;
    
    use gpio::gpioa::{self, PA5, PAx};
    use gpio::{Output, PushPull};
    
    /// LED
    pub type LD1 = PA5<Output<PushPull>>;
    
    // /// Array of all the user LEDs on the board
    // pub struct Leds {
    //     leds: [Led; 8],
    // }
    
    // impl Leds {
    //     /// Initializes all the user LEDs
    //     pub fn new(mut gpioa: gpioa::Parts) -> Self {
    //         let n = gpioe
    //                          .pe9
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let ne = gpioe
    //             .pe10
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let e = gpioe
    //             .pe11
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let se = gpioe
    //             .pe12
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let s = gpioe
    //             .pe13
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let sw = gpioe
    //             .pe14
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let w = gpioe
    //             .pe15
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    //         let nw = gpioe
    //             .pe8
    //             .into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
    
    //         Leds {
    //             leds: [
    //                 n.into(),
    //                 ne.into(),
    //                 e.into(),
    //                 se.into(),
    //                 s.into(),
    //                 sw.into(),
    //                 w.into(),
    //                 nw.into(),
    //             ],
    //         }
    //     }
    // }
    
    // impl ops::Deref for Leds {
    //     type Target = [Led];
    
    //     fn deref(&self) -> &[Led] {
    //         &self.leds
    //     }
    // }
    
    // impl ops::DerefMut for Leds {
    //     fn deref_mut(&mut self) -> &mut [Led] {
    //         &mut self.leds
    //     }
    // }
    
    // impl ops::Index<usize> for Leds {
    //     type Output = Led;
    
    //     fn index(&self, i: usize) -> &Led {
    //         &self.leds[i]
    //     }
    // }
    
    // impl ops::Index<Direction> for Leds {
    //     type Output = Led;
    
    //     fn index(&self, d: Direction) -> &Led {
    //         &self.leds[d as usize]
    //     }
    // }
    
    // impl ops::IndexMut<usize> for Leds {
    //     fn index_mut(&mut self, i: usize) -> &mut Led {
    //         &mut self.leds[i]
    //     }
    // }
    
    // impl ops::IndexMut<Direction> for Leds {
    //     fn index_mut(&mut self, d: Direction) -> &mut Led {
    //         &mut self.leds[d as usize]
    //     }
    // }
    
    /// One of the on-board user LEDs
    pub struct Led {
        pax: PAx<Output<PushPull>>,
    }
    
    macro_rules! ctor {
        ($($ldx:ident),+) => {
            $(
                impl Into<Led> for $ldx {
                    fn into(self) -> Led {
                        Led {
                            pax: self.downgrade(),
                        }
                    }
                }
            )+
        }
    }
    
    ctor!(LD1);
    
    impl Led {
        /// Turns the LED off
        pub fn off(&mut self) {
            self.pax.set_low()
        }
    
        /// Turns the LED on
        pub fn on(&mut self) {
            self.pax.set_high()
        }
    }