use super::{hal, target_device};
use crate::hal::gpio::{self, *};
use hal::define_pins;
define_pins!(
struct Pins,
target_device: target_device,
pin speaker = a2,
pin speaker_enable = a27,
pin light = a7,
pin d3 = a4,
pin d4 = a5,
pin d13 = b23,
pin neopixel = b22,
pin tft_reset = a0,
pin tft_rd = b4,
pin tft_rs = b5,
pin tft_cs = b6,
pin tft_te = b7,
pin tft_wr = b9,
pin tft_backlight = b31,
pin lcd_data0 = a16,
pin lcd_data1 = a17,
pin lcd_data2 = a18,
pin lcd_data3 = a19,
pin lcd_data4 = a20,
pin lcd_data5 = a21,
pin lcd_data6 = a22,
pin lcd_data7 = a23,
pin touch_yd = b0,
pin touch_xl = b1,
pin touch_yu = a6,
pin touch_xr = b8,
pin esp_cs = b14,
pin esp_gpio0 = b15,
pin esp_busy = b16,
pin esp_reset = b17,
pin esp_rts = a15,
pin esp_tx = b12,
pin esp_rx = b13,
pin mosi = a12,
pin sck = a13,
pin miso = a14,
pin sda = b2,
pin scl = b3,
pin sd_cs = b30,
pin sd_card_detect = a1,
);
impl Pins {
pub fn split(self) -> Sets {
let speaker = Speaker {
speaker: self.speaker,
enable: self.speaker_enable,
};
let stemma = Stemma {
d3: self.d3,
d4: self.d4,
};
let display = Display {
tft_reset: self.tft_reset,
tft_rd: self.tft_rd,
tft_rs: self.tft_rs,
tft_cs: self.tft_cs,
tft_te: self.tft_te,
tft_wr: self.tft_wr,
tft_backlight: self.tft_backlight,
lcd_data0: self.lcd_data0,
lcd_data1: self.lcd_data1,
lcd_data2: self.lcd_data2,
lcd_data3: self.lcd_data3,
lcd_data4: self.lcd_data4,
lcd_data5: self.lcd_data5,
lcd_data6: self.lcd_data6,
lcd_data7: self.lcd_data7,
};
let touchscreen = Touchscreen {
yd: self.touch_yd,
xl: self.touch_xl,
yu: self.touch_yu,
xr: self.touch_xr,
};
let esp = Esp {
cs: self.esp_cs,
gpio0: self.esp_gpio0,
busy: self.esp_busy,
reset: self.esp_reset,
rts: self.esp_rts,
};
let esp_uart = EspUart {
tx: self.esp_tx,
rx: self.esp_rx,
};
let spi = Spi {
mosi: self.mosi,
sck: self.sck,
miso: self.miso,
};
let i2c = I2C {
sda: self.sda,
scl: self.scl,
};
let sd = SdCard {
cs: self.sd_cs,
card_detect: self.sd_card_detect,
};
Sets {
port: self.port,
display,
esp,
light: self.light,
i2c,
sd,
speaker,
spi,
stemma,
touchscreen,
esp_uart,
d13: self.d13,
neopixel: self.neopixel,
}
}
}
pub struct Sets {
pub port: Port,
pub display: Display,
pub d13: Pb23<Input<Floating>>,
pub neopixel: Pb22<Input<Floating>>,
pub esp: Esp,
pub light: Pa7<Input<Floating>>,
pub i2c: I2C,
pub sd: SdCard,
pub speaker: Speaker,
pub spi: Spi,
pub stemma: Stemma,
pub touchscreen: Touchscreen,
pub esp_uart: EspUart,
}
pub struct Display {
pub tft_reset: Pa0<Input<Floating>>,
pub tft_rd: Pb4<Input<Floating>>,
pub tft_rs: Pb5<Input<Floating>>,
pub tft_cs: Pb6<Input<Floating>>,
pub tft_te: Pb7<Input<Floating>>,
pub tft_wr: Pb9<Input<Floating>>,
pub tft_backlight: Pb31<Input<Floating>>,
pub lcd_data0: Pa16<Input<Floating>>,
pub lcd_data1: Pa17<Input<Floating>>,
pub lcd_data2: Pa18<Input<Floating>>,
pub lcd_data3: Pa19<Input<Floating>>,
pub lcd_data4: Pa20<Input<Floating>>,
pub lcd_data5: Pa21<Input<Floating>>,
pub lcd_data6: Pa22<Input<Floating>>,
pub lcd_data7: Pa23<Input<Floating>>,
}
pub struct Esp {
pub cs: Pb14<Input<Floating>>,
pub gpio0: Pb15<Input<Floating>>,
pub busy: Pb16<Input<Floating>>,
pub reset: Pb17<Input<Floating>>,
pub rts: Pa15<Input<Floating>>,
}
pub struct I2C {
pub sda: Pb2<Input<Floating>>,
pub scl: Pb3<Input<Floating>>,
}
pub struct SdCard {
pub cs: Pb30<Input<Floating>>,
pub card_detect: Pa1<Input<Floating>>,
}
pub struct Speaker {
pub speaker: Pa2<Input<Floating>>,
pub enable: Pa27<Input<Floating>>,
}
pub struct Spi {
pub mosi: Pa12<Input<Floating>>,
pub sck: Pa13<Input<Floating>>,
pub miso: Pa14<Input<Floating>>,
}
pub struct Stemma {
pub d3: Pa4<Input<Floating>>,
pub d4: Pa5<Input<Floating>>,
}
pub struct Touchscreen {
pub yd: Pb0<Input<Floating>>,
pub xl: Pb1<Input<Floating>>,
pub yu: Pa6<Input<Floating>>,
pub xr: Pb8<Input<Floating>>,
}
pub struct EspUart {
pub tx: Pb12<Input<Floating>>,
pub rx: Pb13<Input<Floating>>,
}