use crate::atmega328p::hal::port::*;
#[repr(C, packed)]
#[derive(Clone, Copy)]
pub struct Pins {
pub analog: [AnalogPin; 6],
pub digital: [DigitalPin; 14],
}
#[repr(C, packed)]
#[derive(Clone, Copy)]
pub struct AnalogPin {
pub pin: Pin,
pub pinno: u32,
}
#[repr(C, packed)]
#[derive(Clone, Copy)]
pub struct DigitalPin {
pub pin: Pin,
pub pinno: usize,
}
impl Pins {
pub fn new() -> Pins {
Pins {
analog: [
AnalogPin {
pin: Pin::new(PortName::C, 0).unwrap(),
pinno: 0,
},
AnalogPin {
pin: Pin::new(PortName::C, 1).unwrap(),
pinno: 1,
},
AnalogPin {
pin: Pin::new(PortName::C, 2).unwrap(),
pinno: 2,
},
AnalogPin {
pin: Pin::new(PortName::C, 3).unwrap(),
pinno: 3,
},
AnalogPin {
pin: Pin::new(PortName::C, 4).unwrap(),
pinno: 4,
},
AnalogPin {
pin: Pin::new(PortName::C, 5).unwrap(),
pinno: 5,
},
],
digital: [
DigitalPin {
pin: Pin::new(PortName::D, 0).unwrap(),
pinno: 0,
},
DigitalPin {
pin: Pin::new(PortName::D, 1).unwrap(),
pinno: 1,
},
DigitalPin {
pin: Pin::new(PortName::D, 2).unwrap(),
pinno: 2,
},
DigitalPin {
pin: Pin::new(PortName::D, 3).unwrap(),
pinno: 3,
},
DigitalPin {
pin: Pin::new(PortName::D, 4).unwrap(),
pinno: 4,
},
DigitalPin {
pin: Pin::new(PortName::D, 5).unwrap(),
pinno: 5,
},
DigitalPin {
pin: Pin::new(PortName::D, 6).unwrap(),
pinno: 6,
},
DigitalPin {
pin: Pin::new(PortName::D, 7).unwrap(),
pinno: 7,
},
DigitalPin {
pin: Pin::new(PortName::B, 0).unwrap(),
pinno: 0,
},
DigitalPin {
pin: Pin::new(PortName::B, 1).unwrap(),
pinno: 1,
},
DigitalPin {
pin: Pin::new(PortName::B, 2).unwrap(),
pinno: 2,
},
DigitalPin {
pin: Pin::new(PortName::B, 3).unwrap(),
pinno: 3,
},
DigitalPin {
pin: Pin::new(PortName::B, 4).unwrap(),
pinno: 4,
},
DigitalPin {
pin: Pin::new(PortName::B, 5).unwrap(),
pinno: 5,
},
],
}
}
}
fn _make_pin(pin: u8) -> Pin {
match pin {
0 => return Pin::new(PortName::D, 0).unwrap(),
1 => return Pin::new(PortName::D, 1).unwrap(),
2 => return Pin::new(PortName::D, 2).unwrap(),
3 => return Pin::new(PortName::D, 3).unwrap(),
4 => return Pin::new(PortName::D, 4).unwrap(),
5 => return Pin::new(PortName::D, 5).unwrap(),
6 => return Pin::new(PortName::D, 6).unwrap(),
7 => return Pin::new(PortName::D, 7).unwrap(),
8 => return Pin::new(PortName::B, 8).unwrap(),
9 => return Pin::new(PortName::B, 9).unwrap(),
10 => return Pin::new(PortName::B, 10).unwrap(),
11 => return Pin::new(PortName::B, 11).unwrap(),
12 => return Pin::new(PortName::B, 12).unwrap(),
13 => return Pin::new(PortName::B, 13).unwrap(),
_ => unreachable!(),
}
}