espforge_common/hardware/
i2c.rs

1use super::ResolvePeripheral;
2use crate::EspforgeConfiguration;
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Deserialize, Serialize, Clone)]
7pub struct I2cConfig {
8    #[serde(default)]
9    pub i2c: u8,
10    pub sda: u8,
11    pub scl: u8,
12    #[serde(
13        default = "default_i2c_frequency",
14        alias = "frequency_kHz",
15        alias = "frequency_khz"
16    )]
17    pub frequency: u32,
18}
19
20fn default_i2c_frequency() -> u32 {
21    100
22}
23
24pub struct I2cRef<'a>(pub &'a str);
25
26impl<'a> AsRef<str> for I2cRef<'a> {
27    fn as_ref(&self) -> &str {
28        self.0
29    }
30}
31
32impl<'a> ResolvePeripheral<'a> for I2cRef<'a> {
33    type Config = I2cConfig;
34
35    fn get_map(root: &'a EspforgeConfiguration) -> Option<&'a HashMap<String, Self::Config>> {
36        Some(&root.esp32.as_ref()?.i2c)
37    }
38
39    fn as_str(&self) -> &str {
40        self.0
41    }
42    fn section_name() -> &'static str {
43        "i2c"
44    }
45}