-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathInput.cpp
More file actions
114 lines (103 loc) · 3.68 KB
/
Input.cpp
File metadata and controls
114 lines (103 loc) · 3.68 KB
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
#include "Input.h"
#include "Settings.h"
#include "Arduino.h"
Input theInput;
extern "C" void __NoInputFunction(void)
{
}
#define InputFunction(FunctionName) void FunctionName(void) __attribute__((weak, alias("__NoInputFunction")))
//went from !down to down
InputFunction(OnRightButtonPressed);
InputFunction(OnLeftButtonPressed);
InputFunction(OnDownButtonPressed);
InputFunction(OnUpButtonPressed);
InputFunction(OnSpecialButtonPressed);
InputFunction(OnInfoButtonPressed);
InputFunction(OnReloadButtonPressed);
InputFunction(OnFireButtonPressed);
InputFunction(OnEnterButtonPressed);
InputFunction(OnResetButtonPressed);
//went from down to !down
InputFunction(OnRightButtonReleased);
InputFunction(OnLeftButtonReleased);
InputFunction(OnDownButtonReleased);
InputFunction(OnUpButtonReleased);
InputFunction(OnSpecialButtonReleased);
InputFunction(OnInfoButtonReleased);
InputFunction(OnReloadButtonReleased);
InputFunction(OnFireButtonReleased);
InputFunction(OnEnterButtonReleased);
InputFunction(OnResetButtonReleased);
//down
InputFunction(OnRightButtonDown);
InputFunction(OnLeftButtonDown);
InputFunction(OnDownButtonDown);
InputFunction(OnUpButtonDown);
InputFunction(OnSpecialButtonDown);
InputFunction(OnInfoButtonDown);
InputFunction(OnReloadButtonDown);
InputFunction(OnFireButtonDown);
InputFunction(OnEnterButtonDown);
InputFunction(OnResetButtonDown);
//up
InputFunction(OnRightButtonUp);
InputFunction(OnLeftButtonUp);
InputFunction(OnDownButtonUp);
InputFunction(OnUpButtonUp);
InputFunction(OnSpecialButtonUp);
InputFunction(OnInfoButtonUp);
InputFunction(OnReloadButtonUp);
InputFunction(OnFireButtonUp);
InputFunction(OnEnterButtonUp);
InputFunction(OnResetButtonUp);
//TODO[Failee]: Do we want to also consider 'clicked' up->down->up in a given time frame?
#define HandleButton(button, pin, downFun, upFun, pressedFun, releasedFun) \
{ \
uint8_t curBtnState = digitalRead(pin); \
if(curBtnState != button) \
{ \
if(curBtnState == HIGH) \
{ \
pressedFun(); \
} \
else \
{ \
releasedFun(); \
} \
} \
if(curBtnState) \
{ \
downFun(); \
} \
else \
{ \
upFun(); \
} \
button = curBtnState; \
}
Input::Input()
{
myRightBtnState = 0;
myLeftBtnState = 0;
myDownBtnState = 0;
myUpBtnState = 0;
mySpecialBtnState = 0;
myInfoBtnState = 0;
myReloadBtnState = 0;
myFireBtnState = 0;
myEnterBtnState = 0;
myResetBtnState = 0;
}
void Input::Fetch()
{
HandleButton(myRightBtnState, RIGHT_BTN_PIN, OnRightButtonDown, OnRightButtonUp, OnRightButtonPressed, OnRightButtonReleased);
HandleButton(myLeftBtnState, LEFT_BTN_PIN, OnLeftButtonDown, OnLeftButtonUp, OnLeftButtonPressed, OnLeftButtonReleased);
HandleButton(myDownBtnState, DOWN_BTN_PIN, OnDownButtonDown, OnDownButtonUp, OnDownButtonPressed, OnDownButtonReleased);
HandleButton(myUpBtnState, UP_BTN_PIN, OnUpButtonDown, OnUpButtonUp, OnUpButtonPressed, OnUpButtonReleased);
HandleButton(mySpecialBtnState, SPECIAL_BTN_PIN, OnSpecialButtonDown, OnSpecialButtonUp, OnSpecialButtonPressed, OnSpecialButtonReleased);
HandleButton(myInfoBtnState, INFO_BTN_PIN, OnInfoButtonDown, OnInfoButtonUp, OnInfoButtonPressed, OnInfoButtonReleased);
HandleButton(myReloadBtnState, RELOAD_BTN_PIN, OnReloadButtonDown, OnReloadButtonUp, OnReloadButtonPressed, OnReloadButtonReleased);
HandleButton(myFireBtnState, FIRE_BTN_PIN, OnFireButtonDown, OnFireButtonUp, OnFireButtonPressed, OnFireButtonReleased);
HandleButton(myEnterBtnState, ENTER_BTN_PIN, OnEnterButtonDown, OnEnterButtonUp, OnEnterButtonPressed, OnEnterButtonReleased);
HandleButton(myResetBtnState, RESET_BTN_PIN, OnResetButtonDown, OnResetButtonUp, OnResetButtonPressed, OnResetButtonReleased);
}