embedded_trace/instruments/
gpio.rs1use crate::Instrument;
8use embedded_hal_1 as embedded_hal;
9
10#[cfg(feature = "embedded-hal_0_2")]
11use embedded_hal_0_2 as embedded_hal_legacy;
12
13pub struct Gpio<P: embedded_hal::digital::OutputPin> {
22 pin: P,
23}
24
25impl<P: embedded_hal::digital::OutputPin> From<P> for Gpio<P> {
26 #[inline]
27 fn from(pin: P) -> Self {
28 Self::new(pin)
29 }
30}
31
32impl<P: embedded_hal::digital::OutputPin> Gpio<P> {
33 #[inline]
35 pub fn new(pin: P) -> Self {
36 Self { pin }
37 }
38
39 #[inline]
41 pub fn free(self) -> P {
42 self.pin
43 }
44}
45
46impl<P: embedded_hal::digital::OutputPin> Instrument for Gpio<P> {
47 #[inline]
48 fn on_enter(&mut self) {
49 let _ = self.pin.set_high();
50 }
51
52 #[inline]
53 fn on_exit(&mut self) {
54 let _ = self.pin.set_low();
55 }
56}
57
58pub struct GpioRef<'a, P: embedded_hal::digital::OutputPin> {
67 pin: &'a mut P,
68}
69
70impl<'a, P: embedded_hal::digital::OutputPin> GpioRef<'a, P> {
71 #[inline]
73 pub fn new(pin: &'a mut P) -> Self {
74 Self { pin }
75 }
76}
77
78impl<'a, P: embedded_hal::digital::OutputPin> Instrument for GpioRef<'a, P> {
79 #[inline]
80 fn on_enter(&mut self) {
81 let _ = self.pin.set_high();
82 }
83
84 #[inline]
85 fn on_exit(&mut self) {
86 let _ = self.pin.set_low();
87 }
88}
89
90#[cfg(feature = "embedded-hal_0_2")]
99pub struct LegacyGpio<P: embedded_hal_legacy::digital::v2::OutputPin> {
100 pin: P,
101}
102
103#[cfg(feature = "embedded-hal_0_2")]
104impl<P: embedded_hal_legacy::digital::v2::OutputPin> From<P> for LegacyGpio<P> {
105 fn from(pin: P) -> Self {
106 Self { pin }
107 }
108}
109
110#[cfg(feature = "embedded-hal_0_2")]
111impl<P: embedded_hal_legacy::digital::v2::OutputPin> LegacyGpio<P> {
112 #[inline]
114 pub fn new(pin: P) -> Self {
115 Self { pin }
116 }
117
118 #[inline]
121 pub fn free(self) -> P {
122 self.pin
123 }
124}
125
126#[cfg(feature = "embedded-hal_0_2")]
127impl<P: embedded_hal_legacy::digital::v2::OutputPin> Instrument for LegacyGpio<P> {
128 #[inline]
129 fn on_enter(&mut self) {
130 let _ = self.pin.set_high();
131 }
132
133 #[inline]
134 fn on_exit(&mut self) {
135 let _ = self.pin.set_low();
136 }
137}
138
139#[cfg(feature = "embedded-hal_0_2")]
148pub struct LegacyGpioRef<'a, P: embedded_hal_legacy::digital::v2::OutputPin> {
149 pin: &'a mut P,
150}
151
152#[cfg(feature = "embedded-hal_0_2")]
153impl<'a, P: embedded_hal_legacy::digital::v2::OutputPin> LegacyGpioRef<'a, P> {
154 #[inline]
156 pub fn new(pin: &'a mut P) -> Self {
157 Self { pin }
158 }
159}
160
161#[cfg(feature = "embedded-hal_0_2")]
162impl<'a, P: embedded_hal_legacy::digital::v2::OutputPin> Instrument for LegacyGpioRef<'a, P> {
163 #[inline]
164 fn on_enter(&mut self) {
165 let _ = self.pin.set_high();
166 }
167
168 #[inline]
169 fn on_exit(&mut self) {
170 let _ = self.pin.set_low();
171 }
172}