-
Notifications
You must be signed in to change notification settings - Fork 0
/
OperatorButton.cpp
102 lines (88 loc) · 1.62 KB
/
OperatorButton.cpp
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
#include "OperatorButton.h"
// Constructor for Joystick Button
OperatorButton::OperatorButton(Joystick *js, uint32_t number) :
m_js(js)
, m_buttonNum(number)
, m_lastState(false)
{
m_pressedTimer = new Timer();
}
OperatorButton::OperatorButton(uint32_t js, uint32_t number) :
m_buttonNum(number)
, m_lastState(false)
{
m_js = Joystick::GetStickForPort(js);
m_pressedTimer = new Timer();
}
// Constructor for button from DigitalIO Board
/* OperatorButton::OperatorButton(uint32_t number) :
m_js(NULL)
, m_buttonNum(number)
, m_lastState(false)
{
}
*/
OperatorButton::~OperatorButton()
{
}
OperatorButton::ButtonState OperatorButton::Get(void)
{
bool curr_state;
ButtonState state;
if (m_js)
{
curr_state = m_js->GetRawButton(m_buttonNum);
}
state = DetermineState(curr_state, m_lastState);
if (state == kJustReleased)
{
m_pressedTimer->Start();
}
m_lastState = curr_state;
return state;
}
bool OperatorButton::GetBool(void)
{
if (m_js)
{
return m_js->GetRawButton(m_buttonNum);
}
return (1 << (m_buttonNum-1));
}
OperatorButton::ButtonState OperatorButton::DetermineState(bool current, bool previous)
{
if (current)
{
if (previous)
{
return kPressed;
}
else
{
return kJustPressed;
}
}
else
{
if (previous)
{
return kJustReleased;
}
else
{
return kReleased;
}
}
}
bool OperatorButton::GetDelayOccurred(double delay) //Takes input of how long you want the delay,
{ //then returns true when the button has been released for that period of time
if (m_pressedTimer->Get() > delay)
{
m_pressedTimer->Reset();
return true;
}
else
{
return false;
}
}