pub struct SysfsPin(pub Pin);
Expand description

Sysfs pin re-export Newtype around sysfs_gpio::Pin that implements the embedded-hal traits

Tuple Fields§

§0: Pin

Implementations§

source§

impl SysfsPin

source

pub fn new(pin_num: u64) -> Self

See sysfs_gpio::Pin::new for details.

source

pub fn from_path<P>(path: P) -> Result<Self>
where P: AsRef<Path>,

See sysfs_gpio::Pin::from_path for details.

source

pub fn into_input_pin(self) -> Result<SysfsPin, Error>

Convert this pin to an input pin

source

pub fn into_output_pin(self, state: PinState) -> Result<SysfsPin, Error>

Convert this pin to an output pin

Methods from Deref<Target = Pin>§

source

pub fn get_pin_num(&self) -> u64

Get the pin number

source

pub fn with_exported<F>(&self, closure: F) -> Result<(), Error>
where F: FnOnce() -> Result<(), Error>,

Run a closure with the GPIO exported

Prior to the provided closure being executed, the GPIO will be exported. After the closure execution is complete, the GPIO will be unexported.

Example
use sysfs_gpio::{Pin, Direction};

let gpio = Pin::new(24);
let res = gpio.with_exported(|| {
    println!("At this point, the Pin is exported");
    gpio.set_direction(Direction::Low)?;
    gpio.set_value(1)?;
    // ...
    Ok(())
});
source

pub fn is_exported(&self) -> bool

Determines whether the GPIO is exported

This function will error out if the kernel does not support the GPIO sysfs interface (i.e. /sys/class/gpio does not exist).

source

pub fn export(&self) -> Result<(), Error>

Export the GPIO

This is equivalent to echo N > /sys/class/gpio/export with the exception that the case where the GPIO is already exported is not an error.

Errors

The main cases in which this function will fail and return an error are the following:

  1. The system does not support the GPIO sysfs interface
  2. The requested GPIO is out of range and cannot be exported
  3. The requested GPIO is in use by the kernel and cannot be exported by use in userspace
Example
use sysfs_gpio::Pin;

let gpio = Pin::new(24);
match gpio.export() {
    Ok(()) => println!("Gpio {} exported!", gpio.get_pin()),
    Err(err) => println!("Gpio {} could not be exported: {}", gpio.get_pin(), err),
}
source

pub fn unexport(&self) -> Result<(), Error>

Unexport the GPIO

This function will unexport the provided by from syfs if it is currently exported. If the pin is not currently exported, it will return without error. That is, whenever this function returns Ok, the GPIO is not exported.

source

pub fn get_pin(&self) -> u64

Get the pin number for the Pin

source

pub fn get_direction(&self) -> Result<Direction, Error>

Get the direction of the Pin

source

pub fn set_direction(&self, dir: Direction) -> Result<(), Error>

Set this GPIO as either an input or an output

The basic values allowed here are Direction::In and Direction::Out which set the Pin as either an input or output respectively. In addition to those, two additional settings of Direction::High and Direction::Low. These both set the Pin as an output but do so with an initial value of high or low respectively. This allows for glitch-free operation.

Note that this entry may not exist if the kernel does not support changing the direction of a pin in userspace. If this is the case, you will get an error.

source

pub fn get_value(&self) -> Result<u8, Error>

Get the value of the Pin (0 or 1)

If successful, 1 will be returned if the pin is high and 0 will be returned if the pin is low (this may or may not match the signal level of the actual signal depending on the GPIO “active_low” entry).

source

pub fn set_value(&self, value: u8) -> Result<(), Error>

Set the value of the Pin

This will set the value of the pin either high or low. A 0 value will set the pin low and any other value will set the pin high (1 is typical).

source

pub fn get_edge(&self) -> Result<Edge, Error>

Get the currently configured edge for this pin

This value will only be present if the Pin allows for interrupts.

source

pub fn set_edge(&self, edge: Edge) -> Result<(), Error>

Set the edge on which this GPIO will trigger when polled

The configured edge determines what changes to the Pin will result in poll() returning. This call will return an Error if the pin does not allow interrupts.

source

pub fn get_active_low(&self) -> Result<bool, Error>

Get polarity of the Pin (true is active low)

source

pub fn set_active_low(&self, active_low: bool) -> Result<(), Error>

Set the polarity of the Pin (true is active low)

This will affect “rising” and “falling” edge triggered configuration.

source

pub fn get_poller(&self) -> Result<PinPoller, Error>

Get a PinPoller object for this pin

This pin poller object will register an interrupt with the kernel and allow you to poll() on it and receive notifications that an interrupt has occured with minimal delay.

Trait Implementations§

source§

impl Deref for SysfsPin

§

type Target = Pin

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for SysfsPin

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl ErrorType for SysfsPin

§

type Error = SysfsPinError

Error type
source§

impl InputPin for SysfsPin

source§

fn is_high(&mut self) -> Result<bool, Self::Error>

Is the input pin high?
source§

fn is_low(&mut self) -> Result<bool, Self::Error>

Is the input pin low?
source§

impl OutputPin for SysfsPin

source§

fn set_low(&mut self) -> Result<(), Self::Error>

Drives the pin low. Read more
source§

fn set_high(&mut self) -> Result<(), Self::Error>

Drives the pin high. Read more
source§

fn set_state(&mut self, state: PinState) -> Result<(), Self::Error>

Drives the pin high or low depending on the provided value. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.