diff --git a/embassy-rp/src/gpio.rs b/embassy-rp/src/gpio.rs index 28dfce47..596dd64c 100644 --- a/embassy-rp/src/gpio.rs +++ b/embassy-rp/src/gpio.rs @@ -131,6 +131,16 @@ impl<'d, T: Pin> Output<'d, T> { let val = 1 << self.pin.pin(); unsafe { (self.pin.sio_out().value().read() & val) == 0 } } + + /// Toggle pin output + #[inline] + pub fn toggle(&mut self) { + if self.is_set_low() { + self.set_high() + } else { + self.set_low() + } + } } impl<'d, T: Pin> Drop for Output<'d, T> { @@ -295,6 +305,14 @@ mod eh02 { Ok(self.is_set_low()) } } + + impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for Output<'d, T> { + type Error = Infallible; + #[inline] + fn toggle(&mut self) -> Result<(), Self::Error> { + Ok(self.toggle()) + } + } } #[cfg(feature = "unstable-traits")]