espforge_lib/config/
esp32.rs

1use std::collections::HashMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
5pub struct Esp32Config {
6    #[serde(default)]
7    pub gpio: HashMap<String, GpioPinConfig>,
8    #[serde(default)]
9    pub spi: HashMap<String, SpiConfig>,
10    #[serde(default)]
11    pub i2c: HashMap<String, I2cConfig>,
12    #[serde(default)]
13    pub uart: HashMap<String, UartConfig>,
14}
15
16impl Esp32Config {
17    /// Checks if a resource name exists in any of the configured peripheral maps
18    pub fn contains_resource(&self, name: &str) -> bool {
19        self.gpio.contains_key(name) ||
20        self.spi.contains_key(name) ||
21        self.i2c.contains_key(name) ||
22        self.uart.contains_key(name)
23    }
24}
25
26#[derive(Debug, Deserialize, Serialize, Clone)]
27pub struct UartConfig {
28    #[serde(default)]
29    pub uart: u8,
30    pub tx: u8,
31    pub rx: u8,
32    #[serde(default = "default_uart_baud")]
33    pub baud: u32,    
34}
35
36#[derive(Debug, Deserialize, Serialize)]
37pub struct SpiConfig {
38    #[serde(default)]
39    pub spi: u8, 
40     #[serde(default)]   
41    pub miso: Option<u8>,
42    pub mosi: u8,
43    pub sck: u8,
44    #[serde(default)]
45    pub cs: Option<u8>,
46    #[serde(default = "default_spi_frequency", alias = "frequency_kHz", alias = "frequency_khz")]
47    pub frequency: u32,
48    #[serde(default)]
49    pub mode: u8,
50}
51
52#[derive(Debug, Deserialize, Serialize, Clone)]
53pub struct I2cConfig {
54    #[serde(default)]
55    pub i2c: u8,
56    pub sda: u8,
57    pub scl: u8,
58    #[serde(default = "default_i2c_frequency", alias = "frequency_kHz", alias = "frequency_khz")]
59    pub frequency: u32,
60}
61
62fn default_i2c_frequency() -> u32 {
63    100
64}
65
66fn default_spi_frequency() -> u32 {
67    1000
68}
69
70fn default_uart_baud() -> u32 {
71    9600
72}
73
74#[derive(Debug, Deserialize, Serialize,Clone, Copy)]
75pub struct GpioPinConfig {
76    pub pin: u8,
77    pub direction: PinDirection,
78    #[serde(default)]
79    pub pullup: bool,
80    #[serde(default)]
81    pub pulldown: bool,
82}
83
84#[derive(Debug, Deserialize, Serialize, PartialEq,  Clone, Copy)]
85#[serde(rename_all = "lowercase")]
86pub enum PinDirection {
87    Input,
88    Output,
89}
90