Struct sysfs_gpio::Pin [] [src]

pub struct Pin { /* fields omitted */ }

Methods

impl Pin
[src]

[src]

Create a new Pin with the provided pin_num

This function does not export the provided pin_num.

[src]

Create a new Pin with the provided path

This form is useful when there are other scripts which may have already exported the GPIO and created a symlink with a nice name that you already have reference to. Otherwise, it is generally preferrable to use new directly.

The provided path must be either the already exported directory for a GPIO or a symlink to one. If the directory does not look sufficiently like this (i.e. does not resolve to a path starting with /sys/class/gpioXXX), then this function will return an error.

[src]

Get the pin number

[src]

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");
    try!(gpio.set_direction(Direction::Low));
    try!(gpio.set_value(1));
    // ...
    Ok(())
});

[src]

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).

[src]

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),
}

[src]

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.

[src]

Get the pin number for the Pin

[src]

Get the direction of the Pin

[src]

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.

[src]

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).

[src]

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).

[src]

Get the currently configured edge for this pin

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

[src]

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.

[src]

Get polarity of the Pin (true is active low)

[src]

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

This will affect "rising" and "falling" edge triggered configuration.

[src]

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.

[src]

Get an AsyncPinPoller object for this pin

The async pin poller object can be used with the mio crate. You should probably call set_edge() before using this.

This method is only available when the mio-evented crate feature is enabled.

[src]

Get a Stream of pin interrupts for this pin

The PinStream object can be used with the tokio-core crate. You should probably call set_edge() before using this.

This method is only available when the tokio crate feature is enabled.

[src]

Get a Stream of pin values for this pin

The PinStream object can be used with the tokio-core crate. You should probably call set_edge(Edge::BothEdges) before using this.

Note that the values produced are the value of the pin as soon as we get to handling the interrupt in userspace. Each time this stream produces a value, a change has occurred, but it could end up producing the same value multiple times if the value has changed back between when the interrupt occurred and when the value was read.

This method is only available when the tokio crate feature is enabled.

Trait Implementations

impl Clone for Pin
[src]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl Copy for Pin
[src]

impl Debug for Pin
[src]

[src]

Formats the value using the given formatter. Read more

impl PartialEq for Pin
[src]

[src]

This method tests for self and other values to be equal, and is used by ==. Read more

[src]

This method tests for !=.

impl Eq for Pin
[src]