switch-controller: resolve #21
This commit is contained in:
parent
9358ede4df
commit
b8780772a1
@ -28,6 +28,8 @@ private:
|
|||||||
StateHandler *h;
|
StateHandler *h;
|
||||||
bool b_state;
|
bool b_state;
|
||||||
int b_mode;
|
int b_mode;
|
||||||
|
void buttonOnHold ();
|
||||||
|
void buttonInLoop ();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SWITCHCONTROLLER_H_ */
|
#endif /* SWITCHCONTROLLER_H_ */
|
||||||
|
|||||||
@ -25,13 +25,51 @@ SwitchController::~SwitchController ()
|
|||||||
void
|
void
|
||||||
SwitchController::listen ()
|
SwitchController::listen ()
|
||||||
{
|
{
|
||||||
if (b->read ())
|
int timer = t->getCounter ();
|
||||||
|
/** Button is pressed for the first time*/
|
||||||
|
if (b->read () && !b_state)
|
||||||
{
|
{
|
||||||
|
t->resetCounter ();
|
||||||
b_state = true;
|
b_state = true;
|
||||||
}
|
}
|
||||||
if (!b->read () && b_state)
|
/** Button is released before 2 seconds*/
|
||||||
|
if (!b->read () && b_state && timer < 2000)
|
||||||
{
|
{
|
||||||
h->HandleState (Event (Event::eKey, b_mode));
|
h->HandleState (Event (Event::eKey, b_mode));
|
||||||
b_state = false;
|
b_state = false;
|
||||||
|
t->resetCounter ();
|
||||||
}
|
}
|
||||||
}
|
/** Button is pressed after 2 seconds*/
|
||||||
|
if (b->read () && b_state && timer >= 2000)
|
||||||
|
{
|
||||||
|
buttonOnHold ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SwitchController::buttonOnHold ()
|
||||||
|
{
|
||||||
|
t->resetCounter ();
|
||||||
|
while (b->read ())
|
||||||
|
{
|
||||||
|
buttonInLoop ();
|
||||||
|
}
|
||||||
|
if (b_mode == BUTTON_CONTROL_TOG_MODE)
|
||||||
|
{
|
||||||
|
h->HandleState (Event (Event::eKey, b_mode));
|
||||||
|
}
|
||||||
|
b_state = false;
|
||||||
|
t->resetCounter ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SwitchController::buttonInLoop ()
|
||||||
|
{
|
||||||
|
if (t->getCounter () > 50 && b_mode != BUTTON_CONTROL_TOG_MODE)
|
||||||
|
{
|
||||||
|
h->HandleState (Event (Event::eKey, b_mode));
|
||||||
|
h->HandleState (Event (Event::eTick));
|
||||||
|
t->resetCounter ();
|
||||||
|
}
|
||||||
|
t->tickCounter (2);
|
||||||
|
}
|
||||||
|
|||||||
@ -55,11 +55,11 @@ Timer::Sleep (int ms)
|
|||||||
int
|
int
|
||||||
Timer::getCounter ()
|
Timer::getCounter ()
|
||||||
{
|
{
|
||||||
return counter;
|
return counter.load (std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Timer::resetCounter ()
|
Timer::resetCounter ()
|
||||||
{
|
{
|
||||||
counter = 0;
|
counter.store (0, std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user