Files
ThatProject/ESP32_OTA/Simple_OTA_Solution/Simple_OTA_Application/Display.cpp

139 lines
4.0 KiB
C++

#include "Display.h"
Display::Display() {
tft = new TFT_eSPI();
}
Display::~Display() {
delete tft;
}
void Display::initTFT() {
tft->init();
tft->fillScreen(TFT_BLACK);
tft->setRotation(1);
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setTextDatum(MC_DATUM);
tft->setFreeFont(&Orbitron_Light_24);
tft->drawString("Waiting for WIFI-", tft->width() / 2, 50);
}
void Display::fillBlackScreen() {
tft->fillScreen(TFT_BLACK);
}
void Display::showVersion(int buildNum) {
String text = "Build#: ";
text += buildNum;
tft->drawString(text, tft->width() / 2, 80);
}
void Display::timeUpdate(String date, String time) {
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setTextDatum(MC_DATUM);
//tft->setFreeFont(&Orbitron_Light_24);
tft->setFreeFont(&Satisfy_24);
tft->setTextPadding(0);
tft->drawString(date, tft->width() / 2, 50);
tft->setTextPadding(tft->width() - 20);
tft->drawString(time, tft->width() / 2, 80);
}
void Display::showVersionBelow(int buildNum) {
tft->setFreeFont(&FreeSansBold9pt7b);
tft->setTextColor(TFT_YELLOW, TFT_BLACK);
tft->setTextDatum(BL_DATUM);
String text = "Current Build#: ";
text += buildNum;
tft->drawString(text, 0, tft->height());
}
void Display::newMessage(String msg) {
tft->setFreeFont(&FreeSansBold9pt7b);
tft->setTextColor(TFT_GREEN, TFT_BLACK);
tft->setTextDatum(TR_DATUM);
tft->drawString(msg, tft->width(), 0);
}
void Display::downloadScreen(int percent) {
if (percent == 0) {
this->fillBlackScreen();
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setFreeFont(&Orbitron_Light_24);
tft->setTextDatum(MC_DATUM);
tft->drawString("Downloading...", tft->width() / 2, 50);
}
this->drawProgressBar(20, tft->height() / 2 + 20, tft->width() - 40, 20, percent, TFT_RED, TFT_YELLOW);
}
void Display::drawProgressBar(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t percent, uint16_t frameColor, uint16_t barColor) {
if (percent == 0) {
tft->fillRoundRect(x, y, w, h, 3, TFT_BLACK);
}
uint8_t margin = 2;
uint16_t barHeight = h - 2 * margin;
uint16_t barWidth = w - 2 * margin;
tft->drawRoundRect(x, y, w, h, 3, frameColor);
tft->fillRect(x + margin, y + margin, barWidth * percent / 100.0, barHeight, barColor);
}
void Display::downloadFailure(String cpName) {
this->fillBlackScreen();
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setFreeFont(&Orbitron_Light_24);
tft->setTextDatum(MC_DATUM);
tft->drawString("MD5 checksum", tft->width() / 2, 10);
tft->drawString("Wrong!", tft->width() / 2, 40);
tft->drawString("Contact to ", tft->width() / 2, 70);
tft->drawString(cpName, tft->width() / 2, 100);
}
void Display::downloadSuccess() {
this->fillBlackScreen();
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setFreeFont(&Orbitron_Light_24);
tft->setTextDatum(MC_DATUM);
tft->drawString("MD5 checksum", tft->width() / 2, 10);
tft->drawString("Correct!", tft->width() / 2, 40);
tft->drawString("Countdown", tft->width() / 2, 70);
tft->setTextColor(TFT_RED, TFT_BLACK);
tft->setTextPadding(tft->width() - 20);
for (int i = 3; i > -1; --i) {
tft->drawString(String(i), tft->width() / 2, 100);
delay(1000);
}
}
void Display::firmwareScreen(bool isStart, bool isDone) {
this->fillBlackScreen();
tft->setTextColor(TFT_WHITE, TFT_BLACK);
tft->setFreeFont(&Orbitron_Light_24);
tft->setTextDatum(MC_DATUM);
if (isStart) {
tft->drawString("Updating", tft->width() / 2, 40);
tft->drawString("Firmware!", tft->width() / 2, 70);
return;
}
if (isDone) {
tft->drawString("OTA Done!", tft->width() / 2, 10);
tft->drawString("Rebooting", tft->width() / 2, 40);
tft->drawString("Countdown", tft->width() / 2, 70);
} else {
tft->drawString("Sorry.", tft->width() / 2, 10);
tft->drawString("OTA Failure!", tft->width() / 2, 40);
tft->drawString("Try it again.", tft->width() / 2, 70);
}
tft->setTextColor(TFT_RED, TFT_BLACK);
tft->setTextPadding(tft->width() - 20);
for (int i = 3; i > -1; --i) {
tft->drawString(String(i), tft->width() / 2, 100);
delay(1000);
}
}