1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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;