espforge_common/hardware/
i2c.rs1use 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}