diff --git a/esp-hal/src/gpio/mod.rs b/esp-hal/src/gpio/mod.rs index 02540005b..ce02de8df 100644 --- a/esp-hal/src/gpio/mod.rs +++ b/esp-hal/src/gpio/mod.rs @@ -2601,11 +2601,11 @@ mod embedded_hal_02_impls { type Error = core::convert::Infallible; fn set_high(&mut self) -> Result<(), Self::Error> { - self.pin.is_set_high(); + self.pin.set_high(); Ok(()) } fn set_low(&mut self) -> Result<(), Self::Error> { - self.pin.is_set_low(); + self.pin.set_low(); Ok(()) } } diff --git a/hil-test/tests/gpio.rs b/hil-test/tests/gpio.rs index 6c23d3311..6a9adcd50 100644 --- a/hil-test/tests/gpio.rs +++ b/hil-test/tests/gpio.rs @@ -140,6 +140,100 @@ mod tests { assert_eq!(test_gpio2.is_set_high(), true); } + #[test] + fn test_gpio_output_embedded_hal_0_2(ctx: Context) { + let test_gpio1 = Input::new(ctx.test_gpio1, Pull::Down); + let mut test_gpio2 = Output::new(ctx.test_gpio2, Level::Low); + + fn set(pin: &mut T, state: bool) + where + T: embedded_hal_02::digital::v2::OutputPin, + { + if state { + pin.set_high().ok(); + } else { + pin.set_low().ok(); + } + } + + fn toggle(pin: &mut T) + where + T: embedded_hal_02::digital::v2::ToggleableOutputPin, + { + pin.toggle().ok(); + } + + // `StatefulOutputPin`: + assert_eq!(test_gpio2.is_set_low(), true); + assert_eq!(test_gpio2.is_set_high(), false); + assert_eq!(test_gpio1.is_low(), true); + assert_eq!(test_gpio1.is_high(), false); + set(&mut test_gpio2, true); + assert_eq!(test_gpio2.is_set_low(), false); + assert_eq!(test_gpio2.is_set_high(), true); + assert_eq!(test_gpio1.is_low(), false); + assert_eq!(test_gpio1.is_high(), true); + + // `ToggleableOutputPin`: + toggle(&mut test_gpio2); + assert_eq!(test_gpio2.is_set_low(), true); + assert_eq!(test_gpio2.is_set_high(), false); + assert_eq!(test_gpio1.is_low(), true); + assert_eq!(test_gpio1.is_high(), false); + toggle(&mut test_gpio2); + assert_eq!(test_gpio2.is_set_low(), false); + assert_eq!(test_gpio2.is_set_high(), true); + assert_eq!(test_gpio1.is_low(), false); + assert_eq!(test_gpio1.is_high(), true); + } + + #[test] + fn test_gpio_output_embedded_hal_1_0(ctx: Context) { + let test_gpio1 = Input::new(ctx.test_gpio1, Pull::Down); + let mut test_gpio2 = Output::new(ctx.test_gpio2, Level::Low); + + fn set(pin: &mut T, state: bool) + where + T: embedded_hal::digital::OutputPin, + { + if state { + pin.set_high().ok(); + } else { + pin.set_low().ok(); + } + } + + fn toggle(pin: &mut T) + where + T: embedded_hal::digital::StatefulOutputPin, + { + pin.toggle().ok(); + } + + // `StatefulOutputPin`: + assert_eq!(test_gpio2.is_set_low(), true); + assert_eq!(test_gpio2.is_set_high(), false); + assert_eq!(test_gpio1.is_low(), true); + assert_eq!(test_gpio1.is_high(), false); + set(&mut test_gpio2, true); + assert_eq!(test_gpio2.is_set_low(), false); + assert_eq!(test_gpio2.is_set_high(), true); + assert_eq!(test_gpio1.is_low(), false); + assert_eq!(test_gpio1.is_high(), true); + + // `ToggleableOutputPin`: + toggle(&mut test_gpio2); + assert_eq!(test_gpio2.is_set_low(), true); + assert_eq!(test_gpio2.is_set_high(), false); + assert_eq!(test_gpio1.is_low(), true); + assert_eq!(test_gpio1.is_high(), false); + toggle(&mut test_gpio2); + assert_eq!(test_gpio2.is_set_low(), false); + assert_eq!(test_gpio2.is_set_high(), true); + assert_eq!(test_gpio1.is_low(), false); + assert_eq!(test_gpio1.is_high(), true); + } + #[test] fn test_gpio_interrupt(ctx: Context) { let mut test_gpio1 = Input::new(ctx.test_gpio1, Pull::Down);