use devices::GPIODevice;
use traits::*;
use sysfs_gpio::{Direction,Pin};
#[derive(Debug)]
pub struct InputDevice {
pub pin : Pin
}
impl InputDevice {
pub fn new(pin:u64) -> InputDevice{
let gpiodevice = GPIODevice::new(pin);
gpiodevice.pin.set_direction(Direction::In).expect("Could not set pin to Input mode");
InputDevice {
pin: gpiodevice.pin
}
}
}
impl Device for InputDevice {
fn pin(&self) -> Pin {
self.pin
}
fn value(&self) -> i8 {
let value = self.pin.get_value().expect("Could not check if device is active");
value as i8
}
}
pub struct DigitalInputDevice {
pin : Pin
}
impl DigitalInputDevice{
pub fn new(pin:u64) -> DigitalInputDevice {
let inpin = InputDevice::new(pin);
DigitalInputDevice { pin: inpin.pin }
}
}
impl Device for DigitalInputDevice {
fn pin(&self) -> Pin {
self.pin
}
fn value(&self) -> i8 {
let value = self.pin.get_value().expect("Could not check if device is active");
value as i8
}
}
impl EventsTrait for DigitalInputDevice {}
pub struct Button {
pin: Pin
}
impl Device for Button {
fn pin(&self) -> Pin {
self.pin
}
fn value(&self) -> i8 {
let value = self.pin.get_value().expect("Could not check if device is active");
value as i8
}
}
impl EventsTrait for Button {}
impl Button {
pub fn new(pin:u64) -> Button{
let din = DigitalInputDevice::new(pin);
Button{
pin : din.pin
}
}
pub fn wait_for_press(&self){
self.wait_for_active();
}
pub fn wait_for_release(&self){
self.wait_for_inactive();
}
}
pub struct SmoothedInputDevice;