espforge_lib/config/
esp32.rs1use 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 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