onebitsy 0.2.0

Board Support Crate for the 1Bitsy development board
Documentation
//! Board support crate for the 1Bitsy
//!
//! # Usage
//!
//! ```
//! use onebitsy::{self, stm32, Led, Button};
//! use cortex_m_rt::{entry, exception};
//!
//! #![entry]
//! fn main() -> ! {
//!   if let (Some(dp), Some(_cp)) = (
//!       stm32::Peripherals::take(),
//!       cortex_m::peripheral::Peripherals::take(),
//!   ) {
//!       let _clocks = onebitsy::configure_clocks(dp.RCC.constrain());
//!
//!       let pins = onebitsy::Pins::new(
//!           dp.GPIOA.split(),
//!           dp.GPIOB.split(),
//!           dp.GPIOC.split(),
//!           dp.GPIOD.split(),
//!       );
//!       let mut led = onebitsy::led(pins.pa8);
//!       let button = onebitsy::button(pins.pc1);
//!
//!       loop {
//!           if button.is_pressed() {
//!               led.on();
//!           } else {
//!               led.off();
//!           }
//!       }
//!   }
//!
//!   loop {}
//! }
//! ```

#![deny(warnings)]
#![no_std]

pub use stm32f4xx_hal as hal;
pub use stm32f4xx_hal::stm32;

use hal::gpio::{gpioa, gpiob, gpioc, gpiod};
use hal::gpio::{Floating, Input};

pub mod button;
pub mod clocks;
pub mod led;

pub use button::Button;
pub use clocks::configure as configure_clocks;
pub use led::Led;

pub struct Pins {
    pub pa0: gpioa::PA0<Input<Floating>>,
    pub pa1: gpioa::PA1<Input<Floating>>,
    pub pa2: gpioa::PA2<Input<Floating>>,
    pub pa3: gpioa::PA3<Input<Floating>>,
    pub pa4: gpioa::PA4<Input<Floating>>,
    pub pa5: gpioa::PA5<Input<Floating>>,
    pub pa6: gpioa::PA6<Input<Floating>>,
    pub pa7: gpioa::PA7<Input<Floating>>,
    pub pa8: gpioa::PA8<Input<Floating>>,
    pub pa9: gpioa::PA9<Input<Floating>>,
    pub pa10: gpioa::PA10<Input<Floating>>,
    pub pa11: gpioa::PA11<Input<Floating>>,
    pub pa12: gpioa::PA12<Input<Floating>>,
    pub pa13: gpioa::PA13<Input<Floating>>,
    pub pa14: gpioa::PA14<Input<Floating>>,
    pub pa15: gpioa::PA15<Input<Floating>>,

    pub pb0: gpiob::PB0<Input<Floating>>,
    pub pb1: gpiob::PB1<Input<Floating>>,
    pub pb2: gpiob::PB2<Input<Floating>>,
    pub pb3: gpiob::PB3<Input<Floating>>,
    pub pb4: gpiob::PB4<Input<Floating>>,
    pub pb5: gpiob::PB5<Input<Floating>>,
    pub pb6: gpiob::PB6<Input<Floating>>,
    pub pb7: gpiob::PB7<Input<Floating>>,
    pub pb8: gpiob::PB8<Input<Floating>>,
    pub pb9: gpiob::PB9<Input<Floating>>,
    pub pb10: gpiob::PB10<Input<Floating>>,
    pub pb11: gpiob::PB11<Input<Floating>>,
    pub pb12: gpiob::PB12<Input<Floating>>,
    pub pb13: gpiob::PB13<Input<Floating>>,
    pub pb14: gpiob::PB14<Input<Floating>>,
    pub pb15: gpiob::PB15<Input<Floating>>,

    pub pc1: gpioc::PC1<Input<Floating>>,
    pub pc2: gpioc::PC2<Input<Floating>>,
    pub pc3: gpioc::PC3<Input<Floating>>,
    pub pc4: gpioc::PC4<Input<Floating>>,
    pub pc5: gpioc::PC5<Input<Floating>>,
    pub pc6: gpioc::PC6<Input<Floating>>,
    pub pc7: gpioc::PC7<Input<Floating>>,
    pub pc8: gpioc::PC8<Input<Floating>>,
    pub pc9: gpioc::PC9<Input<Floating>>,
    pub pc10: gpioc::PC10<Input<Floating>>,
    pub pc11: gpioc::PC11<Input<Floating>>,
    pub pc12: gpioc::PC12<Input<Floating>>,
    pub pc13: gpioc::PC13<Input<Floating>>,
    pub pc14: gpioc::PC14<Input<Floating>>,
    pub pc15: gpioc::PC15<Input<Floating>>,

    pub pd2: gpiod::PD2<Input<Floating>>,
}

impl Pins {
    pub fn new(
        gpioa: gpioa::Parts,
        gpiob: gpiob::Parts,
        gpioc: gpioc::Parts,
        gpiod: gpiod::Parts,
    ) -> Self {
        Self {
            pa0: gpioa.pa0,
            pa1: gpioa.pa1,
            pa2: gpioa.pa2,
            pa3: gpioa.pa3,
            pa4: gpioa.pa4,
            pa5: gpioa.pa5,
            pa6: gpioa.pa6,
            pa7: gpioa.pa7,
            pa8: gpioa.pa8,
            pa9: gpioa.pa9,
            pa10: gpioa.pa10,
            pa11: gpioa.pa11,
            pa12: gpioa.pa12,
            pa13: gpioa.pa13,
            pa14: gpioa.pa14,
            pa15: gpioa.pa15,

            pb0: gpiob.pb0,
            pb1: gpiob.pb1,
            pb2: gpiob.pb2,
            pb3: gpiob.pb3,
            pb4: gpiob.pb4,
            pb5: gpiob.pb5,
            pb6: gpiob.pb6,
            pb7: gpiob.pb7,
            pb8: gpiob.pb8,
            pb9: gpiob.pb9,
            pb10: gpiob.pb10,
            pb11: gpiob.pb11,
            pb12: gpiob.pb12,
            pb13: gpiob.pb13,
            pb14: gpiob.pb14,
            pb15: gpiob.pb15,

            pc1: gpioc.pc1,
            pc2: gpioc.pc2,
            pc3: gpioc.pc3,
            pc4: gpioc.pc4,
            pc5: gpioc.pc5,
            pc6: gpioc.pc6,
            pc7: gpioc.pc7,
            pc8: gpioc.pc8,
            pc9: gpioc.pc9,
            pc10: gpioc.pc10,
            pc11: gpioc.pc11,
            pc12: gpioc.pc12,
            pc13: gpioc.pc13,
            pc14: gpioc.pc14,
            pc15: gpioc.pc15,

            pd2: gpiod.pd2,
        }
    }
}

pub fn led(pin: gpioa::PA8<Input<Floating>>) -> led::LED {
    pin.into_push_pull_output()
}

pub fn button(pin: gpioc::PC1<Input<Floating>>) -> button::BUTTON {
    pin
}