diff --git a/src/inputs/Idle.cpp b/src/inputs/Idle.cpp new file mode 100644 index 0000000..55212f8 --- /dev/null +++ b/src/inputs/Idle.cpp @@ -0,0 +1,41 @@ +#include "Idle.h" +#include "../Static.h" + +IdleTimer::IdleTimer() + : InputSource("IdleTimer"), + m_idleTime(60), m_secondsRemaining(0) +{ +} + +InputEvent +IdleTimer::read() +{ + EVERY_N_SECONDS(1) { + if (m_secondsRemaining > 0) { + m_secondsRemaining -= 1; + if (m_secondsRemaining == 0) { + return InputEvent::IdleStart; + } + } + } + + return InputEvent::None; +} + +void +IdleTimer::handleEvent(const InputEvent& evt) +{ + switch(evt.intent) { + case InputEvent::IdleStart: + m_secondsRemaining = 0; + break; + case InputEvent::IdleStop: + m_secondsRemaining = m_idleTime; + break; + default: + break; + } +} + +STATIC_ALLOC(IdleTimer); +STATIC_TASK(IdleTimer); diff --git a/src/inputs/Idle.h b/src/inputs/Idle.h new file mode 100644 index 0000000..ba24663 --- /dev/null +++ b/src/inputs/Idle.h @@ -0,0 +1,12 @@ +#pragma once +#include + +class IdleTimer : public InputSource { + public: + IdleTimer(); + void handleEvent(const InputEvent& evt); + virtual InputEvent read() override; + private: + uint16_t m_idleTime; + uint16_t m_secondsRemaining; +};