Skip to main content

core_s3/
board.rs

1use crate::{devices, pins};
2
3/// Static description of the M5Stack CoreS3 board variant supported by this BSP.
4#[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
45/// M5Stack CoreS3 K128 board constants.
46pub 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}