embedded_counters/
gpio.rs

1use core::convert::Infallible;
2use std::fmt::Display;
3
4use embedded_hal::digital::v2::OutputPin;
5
6use serde::Serialize;
7
8#[derive(Debug, Default, Serialize)]
9pub struct PinCounter {
10    pub changes: usize,
11}
12
13impl OutputPin for PinCounter {
14    type Error = Infallible;
15
16    fn set_low(&mut self) -> Result<(), Self::Error> {
17        self.changes += 1;
18
19        Ok(())
20    }
21
22    fn set_high(&mut self) -> Result<(), Self::Error> {
23        self.changes += 1;
24
25        Ok(())
26    }
27}
28
29impl Display for PinCounter {
30    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31        write!(f, "Changes: {}", self.changes)
32    }
33}