espforge_lib/nibblers/
esp32.rs1use crate::{
2 config::EspforgeConfiguration,
3 nibblers::{ConfigNibbler, NibblerResult, NibblerStatus},
4 register_nibbler,
5};
6use espforge_macros::auto_register_nibbler;
7
8#[derive(Default)]
9#[auto_register_nibbler]
10pub struct HardwareNibbler;
11
12impl ConfigNibbler for HardwareNibbler {
13 fn name(&self) -> &str {
14 "HardwareNibbler"
15 }
16
17 fn priority(&self) -> u8 {
18 10
19 }
20
21 fn process(&self, config: &EspforgeConfiguration) -> Result<NibblerResult, String> {
22 let mut findings = Vec::new();
23 let mut status = NibblerStatus::Ok;
24
25 if let Some(esp32) = &config.esp32 {
26 for (name, pin_config) in &esp32.gpio {
28 if pin_config.pin > 48 {
29 findings.push(format!(
30 "Error: GPIO '{}' uses pin {}, which is out of range.",
31 name, pin_config.pin
32 ));
33 status = NibblerStatus::Error;
34 } else {
35 findings.push(format!("GPIO '{}' mapped to pin {}.", name, pin_config.pin));
36 }
37 }
38
39 for (name, spi_config) in &esp32.spi {
41 findings.push(format!(
42 "SPI '{}' configured (SCK:{}, MOSI:{}, MISO:{})",
43 name, spi_config.sck, spi_config.mosi, spi_config.miso
44 ));
45 }
47 }
48
49 Ok(NibblerResult {
50 nibbler_name: self.name().to_string(),
51 findings,
52 status,
53 })
54 }
55}