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 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
44/// M5Stack CoreS3 K128 board constants.
45pub 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}