use crate::nrf51::GPIO;
use nrf51_hal::gpio::{Input, Floating, GpioExt};
pub struct DisplayPins {
pub pin4: nrf51_hal::gpio::gpio::PIN4<Input<Floating>>,
pub pin5: nrf51_hal::gpio::gpio::PIN5<Input<Floating>>,
pub pin6: nrf51_hal::gpio::gpio::PIN6<Input<Floating>>,
pub pin7: nrf51_hal::gpio::gpio::PIN7<Input<Floating>>,
pub pin8: nrf51_hal::gpio::gpio::PIN8<Input<Floating>>,
pub pin9: nrf51_hal::gpio::gpio::PIN9<Input<Floating>>,
pub pin10: nrf51_hal::gpio::gpio::PIN10<Input<Floating>>,
pub pin11: nrf51_hal::gpio::gpio::PIN11<Input<Floating>>,
pub pin12: nrf51_hal::gpio::gpio::PIN12<Input<Floating>>,
pub pin13: nrf51_hal::gpio::gpio::PIN13<Input<Floating>>,
pub pin14: nrf51_hal::gpio::gpio::PIN14<Input<Floating>>,
pub pin15: nrf51_hal::gpio::gpio::PIN15<Input<Floating>>,
}
pub struct ButtonPins {
pub pin17: nrf51_hal::gpio::gpio::PIN17<Input<Floating>>,
pub pin26: nrf51_hal::gpio::gpio::PIN26<Input<Floating>>,
}
pub struct SerialPins {
pub pin24: nrf51_hal::gpio::gpio::PIN24<Input<Floating>>,
pub pin25: nrf51_hal::gpio::gpio::PIN25<Input<Floating>>,
}
pub struct I2cPins {
pub pin0: nrf51_hal::gpio::gpio::PIN0<Input<Floating>>,
pub pin30: nrf51_hal::gpio::gpio::PIN30<Input<Floating>>,
}
pub struct EdgeConnectorPins {
pub pin1: nrf51_hal::gpio::gpio::PIN1<Input<Floating>>,
pub pin2: nrf51_hal::gpio::gpio::PIN2<Input<Floating>>,
pub pin3: nrf51_hal::gpio::gpio::PIN3<Input<Floating>>,
pub pin16: nrf51_hal::gpio::gpio::PIN16<Input<Floating>>,
pub pin18: nrf51_hal::gpio::gpio::PIN18<Input<Floating>>,
pub pin20: nrf51_hal::gpio::gpio::PIN20<Input<Floating>>,
pub pin21: nrf51_hal::gpio::gpio::PIN21<Input<Floating>>,
pub pin22: nrf51_hal::gpio::gpio::PIN22<Input<Floating>>,
pub pin23: nrf51_hal::gpio::gpio::PIN23<Input<Floating>>,
}
pub struct OtherPins {
pub pin19: nrf51_hal::gpio::gpio::PIN19<Input<Floating>>,
pub pin27: nrf51_hal::gpio::gpio::PIN27<Input<Floating>>,
pub pin28: nrf51_hal::gpio::gpio::PIN28<Input<Floating>>,
pub pin29: nrf51_hal::gpio::gpio::PIN29<Input<Floating>>,
pub pin31: nrf51_hal::gpio::gpio::PIN31<Input<Floating>>,
}
pub struct PinsByKind {
pub display_pins: DisplayPins,
pub button_pins: ButtonPins,
pub serial_pins: SerialPins,
pub i2c_pins: I2cPins,
pub edge_connector_pins: EdgeConnectorPins,
pub other_pins: OtherPins,
_reserved: (),
}
pub trait MicrobitGpioExt {
fn split_by_kind(self) -> PinsByKind;
}
impl MicrobitGpioExt for GPIO {
fn split_by_kind(self) -> PinsByKind {
let parts = self.split();
let display_pins = DisplayPins {
pin4: parts.pin4,
pin5: parts.pin5,
pin6: parts.pin6,
pin7: parts.pin7,
pin8: parts.pin8,
pin9: parts.pin9,
pin10: parts.pin10,
pin11: parts.pin11,
pin12: parts.pin12,
pin13: parts.pin13,
pin14: parts.pin14,
pin15: parts.pin15,
};
let button_pins = ButtonPins {
pin17: parts.pin17,
pin26: parts.pin26,
};
let serial_pins = SerialPins {
pin24: parts.pin24,
pin25: parts.pin25,
};
let i2c_pins = I2cPins {
pin0: parts.pin0,
pin30: parts.pin30,
};
let edge_connector_pins = EdgeConnectorPins {
pin1: parts.pin1,
pin2: parts.pin2,
pin3: parts.pin3,
pin16: parts.pin16,
pin18: parts.pin18,
pin20: parts.pin20,
pin21: parts.pin21,
pin22: parts.pin22,
pin23: parts.pin23,
};
let other_pins = OtherPins {
pin19: parts.pin19,
pin27: parts.pin27,
pin28: parts.pin28,
pin29: parts.pin29,
pin31: parts.pin31,
};
PinsByKind{
display_pins,
button_pins,
serial_pins,
i2c_pins,
edge_connector_pins,
other_pins,
_reserved: (),
}
}
}