diff --git a/lib/Display/Display.cpp b/lib/Display/Display.cpp index 1556487..b39e285 100644 --- a/lib/Display/Display.cpp +++ b/lib/Display/Display.cpp @@ -3,7 +3,7 @@ #include Display::Display() - : _disp(0), _statusFrame(0), _nextFrameTime(0) + : _disp(0), _statusFrame(0), _displayOff(false) { } @@ -23,6 +23,8 @@ void Display::setup(std::shared_ptr boardConfig) Bitmap bitmap(_disp->getWidth(), _disp->getHeight()); _disp->display(&bitmap); + _displayTimeout.setTimeout(10); + _frameTimeout.setTimeout(15); } void Display::turn180() @@ -32,33 +34,42 @@ void Display::turn180() void Display::update() { - if(_statusFrame->isPrio()) + if(_frameTimeout.check()) { - Bitmap bitmap(_disp.get()); - _statusFrame->drawStatusPage(bitmap); - _disp->display(&bitmap); - return; - } + if(_statusFrame->isPrio()) + { + Bitmap bitmap(_disp.get()); + _statusFrame->drawStatusPage(bitmap); + activateDisplay(); + _disp->display(&bitmap); + return; + } - if(_nextFrameTime > now()) - { - return; - } + if(_frames.size() > 0) + { + std::shared_ptr frame = *_frames.begin(); + Bitmap bitmap(_disp.get()); + frame->drawStatusPage(bitmap); + activateDisplay(); + _disp->display(&bitmap); + _frames.pop_front(); + _frameTimeout.start(); + return; + } - if(_frames.size() > 0) - { - std::shared_ptr frame = *_frames.begin(); - Bitmap bitmap(_disp.get()); - frame->drawStatusPage(bitmap); - _disp->display(&bitmap); - _frames.pop_front(); - _nextFrameTime = now() + 15; - } - else - { - Bitmap bitmap(_disp.get()); - _statusFrame->drawStatusPage(bitmap); - _disp->display(&bitmap); + if(!_displayOff && !_displayTimeout.isActive()) + { + Bitmap bitmap(_disp.get()); + _statusFrame->drawStatusPage(bitmap); + activateDisplay(); + _disp->display(&bitmap); + _displayTimeout.start(); + } + if(_displayTimeout.check()) + { + deactivateDisplay(); + _displayTimeout.reset(); + } } } @@ -82,6 +93,21 @@ void Display::showSpashScreen(String firmwareTitle, String version) _disp->display(&bitmap); } +void Display::activateDisplay() +{ + if(_displayOff) + { + _disp->displayOn(); + _displayOff = false; + } +} + +void Display::deactivateDisplay() +{ + _disp->displayOff(); + _displayOff = true; +} + void TextFrame::drawStatusPage(Bitmap & bitmap) { diff --git a/lib/Display/Display.h b/lib/Display/Display.h index 86ddcb4..438c221 100644 --- a/lib/Display/Display.h +++ b/lib/Display/Display.h @@ -9,7 +9,9 @@ #include #include #include +#include +class Timer; class StatusFrame; class DisplayFrame @@ -46,12 +48,17 @@ private: std::list> _frames; std::shared_ptr _statusFrame; + Timer _frameTimeout; - time_t _nextFrameTime; + Timer _displayTimeout; + bool _displayOff; Display(); Display(const Display &); Display & operator = (const Display &); + + void activateDisplay(); + void deactivateDisplay(); }; class TextFrame : public DisplayFrame