use nrf51_hal::gpio::{Floating, Input};
use nrf51_hal::gpio::gpio::{PIN17, PIN26};
use crate::gpio::ButtonPins;
use crate::buttons::core::Button;
use crate::buttons::debouncing::TrivialDebouncer;
use crate::buttons::monitors::holding::DefaultHoldDescriptor;
use crate::buttons::monitors::single;
use crate::buttons::monitors::dual;
use crate::buttons::monitors::single_with_hold;
use crate::buttons::monitors::dual_with_hold;
pub type ButtonA = Button<PIN17<Input<Floating>>, TrivialDebouncer>;
pub type ButtonB = Button<PIN26<Input<Floating>>, TrivialDebouncer>;
pub fn from_pins(pins: ButtonPins) -> (ButtonA, ButtonB) {
(ButtonA::new(pins.pin17.into_floating_input()),
ButtonB::new(pins.pin26.into_floating_input()))
}
pub type LazyButtonAMonitor = single::LazyMonitor<ButtonA>;
pub type LazyButtonBMonitor = single::LazyMonitor<ButtonB>;
pub type EagerButtonAMonitor = single::EagerMonitor<ButtonA>;
pub type EagerButtonBMonitor = single::EagerMonitor<ButtonB>;
pub type ButtonAMonitorWithHold =
single_with_hold::Monitor<ButtonA, DefaultHoldDescriptor>;
pub type ButtonBMonitorWithHold =
single_with_hold::Monitor<ButtonB, DefaultHoldDescriptor>;
pub type ABMonitor = dual::Monitor<ButtonA, ButtonB>;
pub type ABMonitorWithHold =
dual_with_hold::Monitor<ButtonA, ButtonB, DefaultHoldDescriptor>;