1use crate::{devices, pins};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq)]
5pub struct Board {
6 pub name: &'static str,
7 pub chip: &'static str,
8 pub psram: MemorySize,
9 pub flash: MemorySize,
10 pub display: DisplaySpec,
11 pub i2c: pins::I2cBusPins,
12 pub spi_display: pins::SpiDisplayPins,
13 pub sd: crate::sd::SdCardSlot,
14 pub camera: pins::CameraPins,
15 pub i2s: pins::I2sAudioPins,
16}
17
18#[derive(Clone, Copy, Debug, Eq, PartialEq)]
19pub struct MemorySize {
20 pub bytes: usize,
21}
22
23impl MemorySize {
24 pub const fn mib(mib: usize) -> Self {
25 Self {
26 bytes: mib * 1024 * 1024,
27 }
28 }
29}
30
31#[derive(Clone, Copy, Debug, Eq, PartialEq)]
32pub struct DisplaySpec {
33 pub width: u16,
34 pub height: u16,
35 pub controller: &'static str,
36 pub color_order: ColorOrder,
37}
38
39#[derive(Clone, Copy, Debug, Eq, PartialEq)]
40pub enum ColorOrder {
41 Rgb,
42 Bgr,
43}
44
45pub struct CoreS3;
47
48impl CoreS3 {
49 pub const BOARD: Board = Board {
50 name: "M5Stack CoreS3 K128",
51 chip: "ESP32-S3R8",
52 psram: MemorySize::mib(8),
53 flash: MemorySize::mib(16),
54 display: DisplaySpec {
55 width: devices::display::WIDTH,
56 height: devices::display::HEIGHT,
57 controller: devices::display::CONTROLLER,
58 color_order: ColorOrder::Bgr,
59 },
60 i2c: pins::I2cBusPins::INTERNAL,
61 spi_display: pins::SpiDisplayPins::LCD,
62 sd: crate::sd::SdCardSlot::CORE_S3,
63 camera: pins::CameraPins::GC0308,
64 i2s: pins::I2sAudioPins::CODECS,
65 };
66
67 pub const fn board() -> Board {
68 Self::BOARD
69 }
70}