-
Notifications
You must be signed in to change notification settings - Fork 1
/
EDevice.h
60 lines (53 loc) · 1.95 KB
/
EDevice.h
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
/*
General objects for input and output
EDevice(EObject)
EInputDevice(EDevice)
EOutputDevice(EDevice)
*/
#ifndef EDevice_h
#define EDevice_h
#include <Events.h>
//Generic Input/output device
class EDevice : public EObject {
public:
EDevice();
oid_t init( const port_t port );
virtual void getName( char* result ) const;
protected:
port_t port;
};
class EInputDevice : public EDevice {
public:
EInputDevice();
oid_t initReverse( const port_t port, const InputMode im=imUpDown );
oid_t init( const port_t port, const InputMode im=imUpDown,
bool reverseOn=false, bool pullUp=false );
virtual void idle();
virtual void getName( char* result ) const;
virtual int16_t getData() const; // get data direct
virtual int16_t getDataFromInput(); //Read data from input and return it
protected:
void riseEvent(const event_t evType) const;
InputMode inputMode; //в каком режиме работает устройство
bool reverseOn; //работает с инвертированием ввода
bool debouncingStarted; //запущена обработка дребезга
int16_t currentState; //Current state (after bounce check etc)
int16_t currentData; //Actual data after last measurement
unsigned long lastTime; //время последнего изменения состояни
Timer debounceTimer; //таймер для обработки дребезга
};
class EOutputDevice : public EDevice {
public:
EOutputDevice();
oid_t init( const port_t port, const bool reverse=false );
oid_t initReverse( const port_t port );
virtual int handleEvent( Event& tmpEvent );
virtual void getName( char* result ) const;
virtual void on(); //Turn Output ON
virtual void off(); //Turn Output OFF
void toggle();
protected:
bool reverseOn; //работает с инвертированием вывода
bool isOn; //включен или нет
};
#endif