Migrate Display_Graphic to TaskScheduler
This commit is contained in:
parent
ad1f1b690c
commit
ab8679e7b9
@ -2,6 +2,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "defaults.h"
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
#include <U8g2lib.h>
|
||||
|
||||
enum DisplayType_t {
|
||||
@ -16,8 +17,7 @@ public:
|
||||
DisplayGraphicClass();
|
||||
~DisplayGraphicClass();
|
||||
|
||||
void init(DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset);
|
||||
void loop();
|
||||
void init(Scheduler* scheduler, DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset);
|
||||
void setContrast(uint8_t contrast);
|
||||
void setStatus(bool turnOn);
|
||||
void setOrientation(uint8_t rotation = DISPLAY_ROTATION);
|
||||
@ -28,10 +28,13 @@ public:
|
||||
bool enableScreensaver = true;
|
||||
|
||||
private:
|
||||
void loop();
|
||||
void printText(const char* text, uint8_t line);
|
||||
void calcLineHeights();
|
||||
void setFont(uint8_t line);
|
||||
|
||||
Task _loopTask;
|
||||
|
||||
U8G2* _display;
|
||||
|
||||
bool _displayTurnedOn;
|
||||
@ -41,7 +44,6 @@ private:
|
||||
uint8_t _mExtra;
|
||||
uint16_t _period = 1000;
|
||||
uint16_t _interval = 60000; // interval at which to power save (milliseconds)
|
||||
uint32_t _lastDisplayUpdate = 0;
|
||||
uint32_t _previousMillis = 0;
|
||||
char _fmtText[32];
|
||||
bool _isLarge = false;
|
||||
|
||||
@ -39,7 +39,7 @@ DisplayGraphicClass::~DisplayGraphicClass()
|
||||
delete _display;
|
||||
}
|
||||
|
||||
void DisplayGraphicClass::init(DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset)
|
||||
void DisplayGraphicClass::init(Scheduler* scheduler, DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset)
|
||||
{
|
||||
_display_type = type;
|
||||
if (_display_type > DisplayType_t::None) {
|
||||
@ -49,6 +49,12 @@ void DisplayGraphicClass::init(DisplayType_t type, uint8_t data, uint8_t clk, ui
|
||||
setContrast(DISPLAY_CONTRAST);
|
||||
setStatus(true);
|
||||
}
|
||||
|
||||
scheduler->addTask(_loopTask);
|
||||
_loopTask.setCallback(std::bind(&DisplayGraphicClass::loop, this));
|
||||
_loopTask.setIterations(TASK_FOREVER);
|
||||
_loopTask.setInterval(_period);
|
||||
_loopTask.enable();
|
||||
}
|
||||
|
||||
void DisplayGraphicClass::calcLineHeights()
|
||||
@ -137,7 +143,7 @@ void DisplayGraphicClass::loop()
|
||||
return;
|
||||
}
|
||||
|
||||
if ((millis() - _lastDisplayUpdate) > _period) {
|
||||
_loopTask.setInterval(_period);
|
||||
|
||||
_display->clearBuffer();
|
||||
bool displayPowerSave = false;
|
||||
@ -185,14 +191,12 @@ void DisplayGraphicClass::loop()
|
||||
_display->sendBuffer();
|
||||
|
||||
_mExtra++;
|
||||
_lastDisplayUpdate = millis();
|
||||
|
||||
if (!_displayTurnedOn) {
|
||||
displayPowerSave = true;
|
||||
}
|
||||
|
||||
_display->setPowerSave(displayPowerSave);
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayGraphicClass::setContrast(uint8_t contrast)
|
||||
|
||||
@ -114,6 +114,7 @@ void setup()
|
||||
// Initialize Display
|
||||
MessageOutput.print("Initialize Display... ");
|
||||
Display.init(
|
||||
&scheduler,
|
||||
static_cast<DisplayType_t>(pin.display_type),
|
||||
pin.display_data,
|
||||
pin.display_clk,
|
||||
@ -156,6 +157,4 @@ void loop()
|
||||
|
||||
WebApi.loop();
|
||||
yield();
|
||||
Display.loop();
|
||||
yield();
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user