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