#include "HibernateService.h" #include "defines.h" #include "Logs.h" #include "globals.h" #include HibernateService::HibernateService() : m_buttons{ &g_btnCancel, &g_btnOk, &g_btnMinus, &g_btnPlus, nullptr } , m_lastEventMs(0) , m_paused(false) { } void HibernateService::begin() { m_lastEventMs = millis(); setValue(false); g_lcdLed.setEnabled(!m_lastValue); } void HibernateService::loop() { auto currentMs = millis(); bool shouldHibernate = m_lastValue; for (auto i = 0; m_buttons[i]; ++i) { if (m_buttons[i]->wasReleased()) { m_lastEventMs = currentMs; shouldHibernate = false; break; } } if (!m_lastValue && !m_paused && currentMs - m_lastEventMs > HIBERNATE_DELAY) { shouldHibernate = true; } setValue(shouldHibernate); if (hasChanged()) { LOG(1, "Hibernate event"); g_lcdLed.setEnabled(!m_lastValue); if (m_lastValue && g_appCore.getCurrentActivity() != &g_homeActivity) { g_appCore.setActivity(&g_homeActivity); } } } void HibernateService::setPaused(bool paused) { m_paused = paused; }