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