pub struct Flex<'d> { /* private fields */ }
unstable
only.Expand description
Flexible pin driver.
This pin driver can act as either input, or output, or both at the same time. The input and output are (not counting the shared pull direction) separately configurable, and they have independent enable states.
Enabling the input stage does not change the output stage, and vice versa. Disabling the input or output stages don’t forget their configuration. Disabling the output stage will not change the output level, but it will disable the driver.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Implementations§
Source§impl Flex<'_>
impl Flex<'_>
Sourcepub async fn wait_for(&mut self, event: Event)
pub async fn wait_for(&mut self, event: Event)
Wait until the pin experiences a particular Event
.
The GPIO driver will disable listening for the event once it occurs,
or if the Future
is dropped - which also means this method is not
cancellation-safe, it will always wait for a future event.
Note that calling this function will overwrite previous
listen
operations for this pin.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub async fn wait_for_high(&mut self)
pub async fn wait_for_high(&mut self)
Wait until the pin is high.
See Self::wait_for for more information.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub async fn wait_for_low(&mut self)
pub async fn wait_for_low(&mut self)
Wait until the pin is low.
See Self::wait_for for more information.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub async fn wait_for_rising_edge(&mut self)
pub async fn wait_for_rising_edge(&mut self)
Wait for the pin to undergo a transition from low to high.
See Self::wait_for for more information.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub async fn wait_for_falling_edge(&mut self)
pub async fn wait_for_falling_edge(&mut self)
Wait for the pin to undergo a transition from high to low.
See Self::wait_for for more information.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub async fn wait_for_any_edge(&mut self)
pub async fn wait_for_any_edge(&mut self)
Wait for the pin to undergo any transition, i.e low to high OR high to low.
See Self::wait_for for more information.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§impl<'d> Flex<'d>
impl<'d> Flex<'d>
Sourcepub fn apply_input_config(&mut self, config: &InputConfig)
pub fn apply_input_config(&mut self, config: &InputConfig)
Applies the given input configuration to the pin.
This function does not set the pin as input (i.e. it does not enable the input buffer). Note that the pull direction is common between the input and output configuration.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn set_input_enable(&mut self, enable_input: bool)
pub fn set_input_enable(&mut self, enable_input: bool)
Enable or disable the GPIO pin input buffer.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_high(&self) -> bool
pub fn is_high(&self) -> bool
Get whether the pin input level is high.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_low(&self) -> bool
pub fn is_low(&self) -> bool
Get whether the pin input level is low.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn level(&self) -> Level
pub fn level(&self) -> Level
Get the current pin input level.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn listen(&mut self, event: Event)
pub fn listen(&mut self, event: Event)
Listen for interrupts.
See Input::listen
for more information and an example.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn unlisten(&mut self)
pub fn unlisten(&mut self)
Stop listening for interrupts.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_listening(&self) -> bool
pub fn is_listening(&self) -> bool
Check if the pin is listening for interrupts.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn clear_interrupt(&mut self)
pub fn clear_interrupt(&mut self)
Clear the interrupt status bit for this Pin
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_interrupt_set(&self) -> bool
pub fn is_interrupt_set(&self) -> bool
Checks if the interrupt status bit for this Pin is set
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn wakeup_enable(
&mut self,
enable: bool,
event: WakeEvent,
) -> Result<(), WakeConfigError>
pub fn wakeup_enable( &mut self, enable: bool, event: WakeEvent, ) -> Result<(), WakeConfigError>
Enable as a wake-up source.
This will unlisten for interrupts
§Error
Configuring pin to wake up from light sleep on an edge
trigger is currently not supported, corresponding variant of
WakeConfigError
will be returned.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn apply_output_config(&mut self, config: &OutputConfig)
pub fn apply_output_config(&mut self, config: &OutputConfig)
Applies the given output configuration to the pin.
This function does not set the pin to output (i.e. it does not enable the output driver). Note that the pull direction is common between the input and output configuration.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn set_output_enable(&mut self, enable_output: bool)
pub fn set_output_enable(&mut self, enable_output: bool)
Enable or disable the GPIO pin output driver.
The output level will be set to the last value. Use Self::set_high
,
Self::set_low
or Self::set_level
to set the output level before
enabling the output.
This function does not disable the input buffer.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn set_high(&mut self)
pub fn set_high(&mut self)
Set the output as high.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn set_low(&mut self)
pub fn set_low(&mut self)
Set the output as low.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn set_level(&mut self, level: Level)
pub fn set_level(&mut self, level: Level)
Set the output level.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_set_high(&self) -> bool
pub fn is_set_high(&self) -> bool
Is the output pin set as high?
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn is_set_low(&self) -> bool
pub fn is_set_low(&self) -> bool
Is the output pin set as low?
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn output_level(&self) -> Level
pub fn output_level(&self) -> Level
What level output is set to
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn toggle(&mut self)
pub fn toggle(&mut self)
Toggle pin output
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn peripheral_input(&self) -> InputSignal<'d>
pub fn peripheral_input(&self) -> InputSignal<'d>
Returns a peripheral input connected to this pin.
The input signal can be passed to peripherals in place of an input pin.
Note that the signal returned by this function is frozen.
use esp_hal::gpio::Flex;
let pin1_gpio = Flex::new(peripherals.GPIO1);
// Can be passed as an input.
let pin1 = pin1_gpio.peripheral_input();
// You can keep using the Flex, as well as connect the pin to a
// peripheral input.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn split(self) -> (InputSignal<'d>, OutputSignal<'d>)
pub fn split(self) -> (InputSignal<'d>, OutputSignal<'d>)
Split the pin into an input and output signal pair.
Peripheral signals allow connecting peripherals together without using external hardware.
Note that the signals returned by this function is frozen.
use esp_hal::gpio::Flex;
let pin1 = Flex::new(peripherals.GPIO1);
let (input, output) = pin1.split();
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub unsafe fn split_into_drivers(self) -> (Input<'d>, Output<'d>)
pub unsafe fn split_into_drivers(self) -> (Input<'d>, Output<'d>)
Split the pin into an Input and an Output driver pair.
Note that the signal returned by this function is frozen. On the other hand, the pin driver is free to change settings.
This function allows you to configure an input-output pin, then keep working with the output half. This is mainly intended for testing, allowing you to drive a peripheral from a signal generated by software.
§Safety
The caller must ensure that the pins are not being configured via their
apply_config
functions in the same time in multiple places. The pin
drivers must not be turned back into Flex
, unless one of the
drivers is dropped first.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn into_peripheral_output(self) -> OutputSignal<'d>
pub fn into_peripheral_output(self) -> OutputSignal<'d>
Turns the pin object into a peripheral output.
The output signal can be passed to peripherals in place of an output pin.
Note that the signal returned by this function is frozen.
use esp_hal::gpio::Flex;
let pin1_gpio = Flex::new(peripherals.GPIO1);
// Can be passed as an output.
let pin1 = pin1_gpio.into_peripheral_output();
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Trait Implementations§
Source§impl ErrorType for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl ErrorType for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§impl<'d> From<Flex<'d>> for InputSignal<'d>
impl<'d> From<Flex<'d>> for InputSignal<'d>
Source§impl<'d> From<Flex<'d>> for OutputSignal<'d>
impl<'d> From<Flex<'d>> for OutputSignal<'d>
Source§impl InputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl InputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§impl OutputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl OutputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§impl StatefulOutputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl StatefulOutputPin for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§impl Wait for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl Wait for Flex<'_>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Source§async fn wait_for_high(&mut self) -> Result<(), Self::Error>
async fn wait_for_high(&mut self) -> Result<(), Self::Error>
Source§async fn wait_for_low(&mut self) -> Result<(), Self::Error>
async fn wait_for_low(&mut self) -> Result<(), Self::Error>
Source§async fn wait_for_rising_edge(&mut self) -> Result<(), Self::Error>
async fn wait_for_rising_edge(&mut self) -> Result<(), Self::Error>
Source§async fn wait_for_falling_edge(&mut self) -> Result<(), Self::Error>
async fn wait_for_falling_edge(&mut self) -> Result<(), Self::Error>
Source§async fn wait_for_any_edge(&mut self) -> Result<(), Self::Error>
async fn wait_for_any_edge(&mut self) -> Result<(), Self::Error>
impl<'d> PeripheralInput<'d> for Flex<'d>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl<'d> PeripheralOutput<'d> for Flex<'d>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
impl<'d> PeripheralSignal<'d> for Flex<'d>
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.