#include #include "Display.h" #include Display::Display() : _disp(0), _statusFrame(0), _nextFrameTime(0) { } void Display::setup(std::shared_ptr boardConfig) { if(boardConfig->OledReset != 0) { pinMode(boardConfig->OledReset, OUTPUT); digitalWrite(boardConfig->OledReset, HIGH); delay(1); digitalWrite(boardConfig->OledReset, LOW); delay(10); digitalWrite(boardConfig->OledReset, HIGH); } Wire.begin(boardConfig->OledSda, boardConfig->OledScl); _disp = std::shared_ptr(new SSD1306(&Wire, boardConfig->OledAddr)); Bitmap bitmap(_disp->getWidth(), _disp->getHeight()); _disp->display(&bitmap); } void Display::update() { if(_statusFrame->isPrio()) { Bitmap bitmap(_disp.get()); _statusFrame->drawStatusPage(bitmap); _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); _disp->display(&bitmap); _frames.pop_front(); _nextFrameTime = now() + 15; } else { Bitmap bitmap(_disp.get()); _statusFrame->drawStatusPage(bitmap); _disp->display(&bitmap); } } void Display::addFrame(std::shared_ptr frame) { _frames.push_back(frame); } void Display::setStatusFrame(std::shared_ptr frame) { _statusFrame = frame; } void Display::showSpashScreen(String firmwareTitle, String version) { Bitmap bitmap(_disp.get()); bitmap.drawString( 0, 10, firmwareTitle); bitmap.drawString( 0, 20, version); bitmap.drawString( 0, 35, "by Peter Buchegger"); bitmap.drawString(30, 45, "OE5BPA"); _disp->display(&bitmap); } void TextFrame::drawStatusPage(Bitmap & bitmap) { bitmap.drawString(0, 0, _header); bitmap.drawStringLF(0, 10, _text); }