diff --git a/lib/Display/Display.cpp b/lib/Display/Display.cpp index d4f1799..b2c911d 100644 --- a/lib/Display/Display.cpp +++ b/lib/Display/Display.cpp @@ -2,7 +2,7 @@ #include #include -Display::Display() : _disp(0), _statusFrame(0), _displayOff(false) { +Display::Display() : _disp(0), _statusFrame(0), _displayOff(false), _displaySaveMode(false) { } void Display::setup(std::shared_ptr boardConfig) { @@ -27,6 +27,14 @@ void Display::turn180() { _disp->flipScreenVertically(); } +void Display::activateDisplaySaveMode() { + _displaySaveMode = true; +} + +void Display::setDisplayTimeout(time_t timeout) { + _displayTimeout.setTimeout(timeout); +} + void Display::update() { if (_frameTimeout.check()) { if (_statusFrame->isPrio()) { @@ -53,7 +61,9 @@ void Display::update() { _statusFrame->drawStatusPage(bitmap); activateDisplay(); _disp->display(&bitmap); - _displayTimeout.start(); + if (_displaySaveMode) { + _displayTimeout.start(); + } } if (_displayTimeout.check()) { deactivateDisplay(); diff --git a/lib/Display/Display.h b/lib/Display/Display.h index 5fd57dd..fa0aa26 100644 --- a/lib/Display/Display.h +++ b/lib/Display/Display.h @@ -35,6 +35,8 @@ public: void setup(std::shared_ptr boardConfig); void turn180(); + void activateDisplaySaveMode(); + void setDisplayTimeout(time_t timeout); void update(); void addFrame(std::shared_ptr frame); @@ -52,6 +54,7 @@ private: Timer _displayTimeout; bool _displayOff; + bool _displaySaveMode; Display(); Display(const Display &); diff --git a/src/TaskDisplay.cpp b/src/TaskDisplay.cpp index 626b9fb..3a42829 100644 --- a/src/TaskDisplay.cpp +++ b/src/TaskDisplay.cpp @@ -17,6 +17,10 @@ bool DisplayTask::setup(std::shared_ptr config, std::shared_ptr statusFrame = std::shared_ptr(new StatusFrame(TaskManager::instance().getTasks())); Display::instance().setStatusFrame(statusFrame); + if (!config->display.alwaysOn) { + Display::instance().activateDisplaySaveMode(); + Display::instance().setDisplayTimeout(config->display.timeout); + } _stateInfo = config->callsign; return true; }