extern crate sysfs_gpio;
use sysfs_gpio::{Direction, Edge, Pin};
use std::env;
use std::io::prelude::*;
use std::io::stdout;
fn interrupt(pin: u64) -> sysfs_gpio::Result<()> {
let input = Pin::new(pin);
input.with_exported(|| {
input.set_direction(Direction::In)?;
input.set_edge(Edge::BothEdges)?;
let mut poller = input.get_poller()?;
loop {
match poller.poll(1000)? {
Some(value) => println!("{}", value),
None => {
let mut stdout = stdout();
stdout.write_all(b".")?;
stdout.flush()?;
}
}
}
})
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
println!("Usage: ./interrupt <pin>");
} else {
match args[1].parse::<u64>() {
Ok(pin) => {
match interrupt(pin) {
Ok(()) => println!("Interrupting Complete!"),
Err(err) => println!("Error: {}", err),
}
}
Err(_) => println!("Usage: ./interrupt <pin>"),
}
}
}