Again so many tft fixes

This commit is contained in:
2023-08-13 20:37:50 +02:00
parent f32013f782
commit 7b4fd61a39
31 changed files with 78 additions and 78 deletions

View File

@ -3,6 +3,7 @@ constexpr const char * const TAG = "BatteryGraphDisplay";
// 3rdparty lib includes // 3rdparty lib includes
#include <screenmanager.h> #include <screenmanager.h>
#include <tftcolors.h>
// local includes // local includes
#include "battery.h" #include "battery.h"
@ -23,7 +24,7 @@ void BatteryGraphDisplay::initScreen(espgui::TftInterface &tft)
drawBatteryCurve(); drawBatteryCurve();
} }
std::string BatteryGraphDisplay::text() const std::string BatteryGraphDisplay::title() const
{ {
if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage)
{ {
@ -32,10 +33,10 @@ std::string BatteryGraphDisplay::text() const
return TEXT_BATTERY_GRAPH; return TEXT_BATTERY_GRAPH;
} }
void BatteryGraphDisplay::redraw() void BatteryGraphDisplay::redraw(espgui::TftInterface &tft)
{ {
using namespace espgui; using namespace espgui;
Base::redraw(); Base::redraw(TFT);
if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage)
{ {
@ -49,8 +50,8 @@ void BatteryGraphDisplay::redraw()
const uint16_t lastXOffset = onePercent * (100 - getBatteryPercentage(m_lastBatVoltage, cellType)); const uint16_t lastXOffset = onePercent * (100 - getBatteryPercentage(m_lastBatVoltage, cellType));
// clear the old one and draw the new one // clear the old one and draw the new one
tft.fillRect(lastXOffset + 2, TOP_OFFSET, onePercent, tft.height() - TOP_OFFSET, TFT_BLACK); tft.fillRect(lastXOffset + 2, TOP_OFFSET, onePercent, tft.height() - TOP_OFFSET, espgui::TFT_BLACK);
tft.fillRect(xOffset + 2, TOP_OFFSET, onePercent, tft.height() - TOP_OFFSET, TFT_WHITE); tft.fillRect(xOffset + 2, TOP_OFFSET, onePercent, tft.height() - TOP_OFFSET, espgui::TFT_WHITE);
m_lastBatVoltage = *avgVoltage; m_lastBatVoltage = *avgVoltage;
drawBatteryCurve(); drawBatteryCurve();
} }
@ -88,7 +89,7 @@ void BatteryGraphDisplay::drawBatteryCurve()
const int y1 = float_map(point->minVoltage / 100.f, min_voltage, max_voltage, max_height, TOP_OFFSET); const int y1 = float_map(point->minVoltage / 100.f, min_voltage, max_voltage, max_height, TOP_OFFSET);
const int x2 = 2 + part * (points - i); const int x2 = 2 + part * (points - i);
const int y2 = float_map(point->maxVoltage / 100.f, min_voltage, max_voltage, max_height, TOP_OFFSET); const int y2 = float_map(point->maxVoltage / 100.f, min_voltage, max_voltage, max_height, TOP_OFFSET);
tft.drawLine(x1, y1, x2, y2, TFT_WHITE); tft.drawLine(x1, y1, x2, y2, espgui::TFT_WHITE);
} }
} }
} }

View File

@ -7,7 +7,7 @@ class BatteryGraphDisplay : public BobbyDisplayWithTitle {
using Base = BobbyDisplayWithTitle; using Base = BobbyDisplayWithTitle;
public: public:
std::string text() const override; std::string title() const override;
void initScreen(espgui::TftInterface &tft) override; void initScreen(espgui::TftInterface &tft) override;
void redraw(espgui::TftInterface &tft) override; void redraw(espgui::TftInterface &tft) override;

View File

@ -2,6 +2,7 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <screenmanager.h> #include <screenmanager.h>
#include <tftcolors.h>
// local includes // local includes
#include "battery.h" #include "battery.h"
@ -18,15 +19,15 @@ void BatteryInfoDisplay::initScreen(espgui::TftInterface &tft)
using namespace espgui; using namespace espgui;
Base::initScreen(tft); Base::initScreen(tft);
tft.drawRoundRect(m_offset, m_offset, tft.width() - (m_offset * 2), tft.height() - (m_offset * 2), 10, TFT_WHITE); tft.drawRoundRect(m_offset, m_offset, tft.width() - (m_offset * 2), tft.height() - (m_offset * 2), 10, espgui::TFT_WHITE);
tft.drawRoundRect((tft.width() / 2) - (m_offset / 2), m_offset / 2, m_offset, m_offset / 2, 3, TFT_WHITE); tft.drawRoundRect((tft.width() / 2) - (m_offset / 2), m_offset / 2, m_offset, m_offset / 2, 3, espgui::TFT_WHITE);
m_lastBarCount = 0; m_lastBarCount = 0;
} }
void BatteryInfoDisplay::redraw() void BatteryInfoDisplay::redraw(espgui::TftInterface &tft)
{ {
using namespace espgui; using namespace espgui;
Base::redraw(); Base::redraw(tft);
// calculate height of space available for all bars // calculate height of space available for all bars
const auto min_x = m_offset + 3; // leave 2 pixels + 1 pixel for border const auto min_x = m_offset + 3; // leave 2 pixels + 1 pixel for border
@ -50,7 +51,7 @@ void BatteryInfoDisplay::redraw()
for (auto i = 0; i < 10; ++i) for (auto i = 0; i < 10; ++i)
{ {
const auto y = bottomY - (i * segment_height) - segment_height; const auto y = bottomY - (i * segment_height) - segment_height;
tft.fillRoundRect(min_x, y, width, segment_height - 2, 10, segment_count > i ? TFT_GREEN : TFT_DARKGREY); tft.fillRoundRect(min_x, y, width, segment_height - 2, 10, segment_count > i ? espgui::TFT_GREEN : espgui::TFT_DARKGREY);
} }
} }
} }

View File

@ -42,9 +42,9 @@ void BmsDisplay::initScreen(espgui::TftInterface &tft)
m_cycleLabel.start(); m_cycleLabel.start();
} }
void BmsDisplay::redraw() void BmsDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
if (bluetoothSerial.hasClient()) if (bluetoothSerial.hasClient())
tft.setTextColor(TFT_GREEN, TFT_BLACK); tft.setTextColor(TFT_GREEN, TFT_BLACK);

View File

@ -134,7 +134,7 @@ CalibrateVoltageDisplay::CalibrateVoltageDisplay()
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGECALIBRATION_RESET>, ResetCalibrationAction>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGECALIBRATION_RESET>, ResetCalibrationAction>>();
} }
std::string CalibrateVoltageDisplay::text() const std::string CalibrateVoltageDisplay::title() const
{ {
return TEXT_BATTERY_CALIBRATE; return TEXT_BATTERY_CALIBRATE;
} }

View File

@ -8,7 +8,7 @@ class CalibrateVoltageDisplay : public BobbyMenuDisplay
public: public:
CalibrateVoltageDisplay(); CalibrateVoltageDisplay();
std::string text() const override; std::string title() const override;
void back() override; void back() override;
}; };

View File

@ -32,13 +32,11 @@ void ConfiscationDisplay::initScreen(espgui::TftInterface &tft)
{ {
Base::initScreen(tft); Base::initScreen(tft);
tft.setSwapBytes(true);
tft.pushImage(10, 70, bobbyicons::shortcircuit.WIDTH, bobbyicons::shortcircuit.HEIGHT, bobbyicons::shortcircuit.buffer); tft.pushImage(10, 70, bobbyicons::shortcircuit.WIDTH, bobbyicons::shortcircuit.HEIGHT, bobbyicons::shortcircuit.buffer);
tft.setSwapBytes(false);
m_progressBar.start(); m_progressBar.start(tft);
m_label.start(); m_label.start(tft);
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextFont(2); tft.setTextFont(2);
@ -51,9 +49,9 @@ void ConfiscationDisplay::initScreen(espgui::TftInterface &tft)
tft.drawString(fmt::format("der Batterie eingeleitet (ca {:.2f}MJ)", calculateMegaJoules()), 10, y+=lineheight); tft.drawString(fmt::format("der Batterie eingeleitet (ca {:.2f}MJ)", calculateMegaJoules()), 10, y+=lineheight);
} }
void ConfiscationDisplay::redraw() void ConfiscationDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
m_progressBar.redraw(m_progress); m_progressBar.redraw(m_progress);
@ -109,7 +107,7 @@ void ConfiscationDisplay::buttonPressed(espgui::Button button)
} }
} }
std::string ConfiscationDisplay::text() const std::string ConfiscationDisplay::title() const
{ {
return "Explosions-Modus"; return "Explosions-Modus";
} }

View File

@ -23,7 +23,7 @@ public:
void buttonPressed(espgui::Button button) override; void buttonPressed(espgui::Button button) override;
std::string text() const override; std::string title() const override;
private: private:
espgui::ProgressBar m_progressBar{10, 210, 200, 10, 0, 500}; espgui::ProgressBar m_progressBar{10, 210, 200, 10, 0, 500};

View File

@ -4,6 +4,8 @@
#include <randomutils.h> #include <randomutils.h>
#include <esprandom.h> #include <esprandom.h>
#include <screenmanager.h> #include <screenmanager.h>
#include <tftinterface.h>
#include <tftcolors.h>
// local includes // local includes
#include "screens.h" #include "screens.h"
@ -23,16 +25,16 @@ void GameOfLifeDisplay::initScreen(espgui::TftInterface &tft)
disableScreenFlip(true); disableScreenFlip(true);
tft.setRotation(3); tft.setRotation(3);
tft.fillScreen(TFT_BLACK); tft.fillScreen(espgui::TFT_BLACK);
} }
void GameOfLifeDisplay::redraw() void GameOfLifeDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
if (gen == 0) if (gen == 0)
{ {
tft.fillScreen(TFT_BLACK); tft.fillScreen(espgui::TFT_BLACK);
initGrid(); initGrid();
} }
@ -71,7 +73,7 @@ void GameOfLifeDisplay::buttonPressed(espgui::Button button)
void GameOfLifeDisplay::drawGrid() void GameOfLifeDisplay::drawGrid()
{ {
uint16_t color = TFT_WHITE; uint16_t color = espgui::TFT_WHITE;
for (int16_t x = 1; x < GRIDX - 1; x++) { for (int16_t x = 1; x < GRIDX - 1; x++) {
for (int16_t y = 1; y < GRIDY - 1; y++) { for (int16_t y = 1; y < GRIDY - 1; y++) {
if (((*m_grid)[index(x,y)]) != ((*m_newgrid)[index(x,y)])) { if (((*m_grid)[index(x,y)]) != ((*m_newgrid)[index(x,y)])) {

View File

@ -62,9 +62,9 @@ void GametrakCalibrateDisplay::initScreen(espgui::TftInterface &tft)
progressBar.start(); progressBar.start();
} }
void GametrakCalibrateDisplay::redraw() void GametrakCalibrateDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
m_labels[0].redraw(fmt::format("{:.02f}", gametrakX)); m_labels[0].redraw(fmt::format("{:.02f}", gametrakX));
m_labels[1].redraw(std::to_string(raw_gametrakX)); m_labels[1].redraw(std::to_string(raw_gametrakX));

View File

@ -48,9 +48,9 @@ void JoystickDebugDisplay::update()
m_y = map_analog_stick(m_bremsMitte, m_bremsMin, m_bremsMax, configs.deadband.value(), *raw_brems); m_y = map_analog_stick(m_bremsMitte, m_bremsMin, m_bremsMax, configs.deadband.value(), *raw_brems);
} }
void JoystickDebugDisplay::redraw() void JoystickDebugDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
if (m_x && m_y) if (m_x && m_y)
{ {

View File

@ -48,7 +48,7 @@ const std::array<uint16_t, 8> tft_colors = {
}; };
} // namespace } // namespace
std::string LedstripColorsDisplay::text() const std::string LedstripColorsDisplay::title() const
{ {
return TEXT_LEDSTRIPCOLORMENU; return TEXT_LEDSTRIPCOLORMENU;
} }
@ -57,14 +57,12 @@ void LedstripColorsDisplay::initScreen(espgui::TftInterface &tft)
{ {
Base::initScreen(tft); Base::initScreen(tft);
tft.setSwapBytes(true);
tft.pushImage(70, 60, bobbyicons::bobbycar.WIDTH, bobbyicons::bobbycar.HEIGHT, bobbyicons::bobbycar.buffer); tft.pushImage(70, 60, bobbyicons::bobbycar.WIDTH, bobbyicons::bobbycar.HEIGHT, bobbyicons::bobbycar.buffer);
tft.setSwapBytes(false);
} }
void LedstripColorsDisplay::redraw() void LedstripColorsDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
auto y_pos = ((tft.width() - 40) / 8 + 4) + 240; auto y_pos = ((tft.width() - 40) / 8 + 4) + 240;
if (last_state != state_select_color) if (last_state != state_select_color)

View File

@ -15,7 +15,7 @@ class LedstripColorsDisplay : public BobbyDisplayWithTitle
using Base = BobbyDisplayWithTitle; using Base = BobbyDisplayWithTitle;
public: public:
std::string text() const override; std::string title() const override;
void initScreen(espgui::TftInterface &tft) override; void initScreen(espgui::TftInterface &tft) override;
void redraw(espgui::TftInterface &tft) override; void redraw(espgui::TftInterface &tft) override;

View File

@ -76,7 +76,7 @@ void Lockscreen::initScreen(espgui::TftInterface &tft)
} }
for (auto &label : m_labels) for (auto &label : m_labels)
label.start(); label.start(tft);
tft.setTextFont(7); tft.setTextFont(7);

View File

@ -9,17 +9,17 @@
using namespace espgui; using namespace espgui;
namespace bobbygui { namespace bobbygui {
void MenuDisplayWithTime::start() void MenuDisplayWithTime::initScreen(espgui::TftInterface &tft)
{ {
Base::start(); Base::initScreen(tft);
m_label_currentTime.start(); m_label_currentTime.start(tft);
} }
void MenuDisplayWithTime::redraw(espgui::TftInterface &tft) void MenuDisplayWithTime::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(tft); Base::redraw(tft);
tft.setTextFont(use_big_font() ? 4 : 2); tft.setTextFont(use_big_font() ? 4 : 2);
m_label_currentTime.redraw(fmt::format("&7Time: {}", local_clock_string())); m_label_currentTime.redraw(tft, fontRenderer, fmt::format("&7Time: {}", local_clock_string()));
} }
} // namespace } // namespace

View File

@ -10,7 +10,7 @@ class MenuDisplayWithTime :
using Base = BobbyMenuDisplay; using Base = BobbyMenuDisplay;
public: public:
void start() override; void initScreen(espgui::TftInterface &tft) override;
void redraw(espgui::TftInterface &tft) override; void redraw(espgui::TftInterface &tft) override;
espgui::Label m_label_currentTime{145, 6}; espgui::Label m_label_currentTime{145, 6};

View File

@ -91,7 +91,7 @@ BatteryMenu::BatteryMenu()
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string BatteryMenu::text() const std::string BatteryMenu::title() const
{ {
return TEXT_BATTERY; return TEXT_BATTERY;
} }
@ -109,9 +109,9 @@ void BatteryMenu::start()
m_doubleProgressBarBatPercentage.start(); m_doubleProgressBarBatPercentage.start();
} }
void BatteryMenu::redraw() void BatteryMenu::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage)
{ {

View File

@ -12,7 +12,7 @@ class BatteryMenu : public BobbyMenuDisplay
public: public:
BatteryMenu(); BatteryMenu();
std::string text() const override; std::string title() const override;
void initScreen(espgui::TftInterface &tft) override; void initScreen(espgui::TftInterface &tft) override;
void start() override; void start() override;

View File

@ -113,7 +113,7 @@ void FeatureFlagsMenu::start()
isDirty = false; isDirty = false;
} }
std::string FeatureFlagsMenu::text() const std::string FeatureFlagsMenu::title() const
{ {
return TEXT_FEATUREFLAGS; return TEXT_FEATUREFLAGS;
} }

View File

@ -10,7 +10,7 @@ public:
FeatureFlagsMenu(); FeatureFlagsMenu();
void start() override; void start() override;
std::string text() const override; std::string title() const override;
void back() override; void back() override;
}; };

View File

@ -124,7 +124,7 @@ MainMenu::MainMenu()
//#endif //#endif
} }
std::string MainMenu::text() const std::string MainMenu::title() const
{ {
return TEXT_MAINMENU; return TEXT_MAINMENU;
} }

View File

@ -27,7 +27,7 @@ class MainMenu : public bobbygui::MenuDisplayWithTime
public: public:
MainMenu(); MainMenu();
std::string text() const override; std::string title() const override;
void back() override; void back() override;
}; };

View File

@ -29,9 +29,9 @@ void MetersDisplay::initScreen(espgui::TftInterface &tft)
meter.start(); meter.start();
} }
void MetersDisplay::redraw() void MetersDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
m_vuMeter.redraw(avgSpeedKmh); m_vuMeter.redraw(avgSpeedKmh);

View File

@ -29,9 +29,9 @@ void PingPongDisplay::initScreen(espgui::TftInterface &tft)
midline(); midline();
} }
void PingPongDisplay::redraw() void PingPongDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
lpaddle(); lpaddle();
rpaddle(); rpaddle();

View File

@ -66,9 +66,9 @@ void PotisCalibrateDisplay::update()
m_brems = std::nullopt; m_brems = std::nullopt;
} }
void PotisCalibrateDisplay::redraw() void PotisCalibrateDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
m_labels[0].redraw(m_gas ? fmt::format("{:.02f}", *m_gas) : "?"); m_labels[0].redraw(m_gas ? fmt::format("{:.02f}", *m_gas) : "?");
m_labels[1].redraw(raw_gas ? std::to_string(*raw_gas) : "?"); m_labels[1].redraw(raw_gas ? std::to_string(*raw_gas) : "?");

View File

@ -22,9 +22,9 @@ void PowerSupplyDisplay::initScreen(espgui::TftInterface &tft)
m_currentLabel.start(); m_currentLabel.start();
} }
void PowerSupplyDisplay::redraw() void PowerSupplyDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
m_voltageLabel.redraw(std::to_string(50.4) + 'V'); m_voltageLabel.redraw(std::to_string(50.4) + 'V');
m_currentLabel.redraw(std::to_string(15.1) + 'A'); m_currentLabel.redraw(std::to_string(15.1) + 'A');

View File

@ -42,11 +42,11 @@ void SetupInformationDisplay::update()
Base::update(); Base::update();
} }
void SetupInformationDisplay::redraw() void SetupInformationDisplay::redraw(espgui::TftInterface &tft)
{ {
m_init_text_progressbar.redraw(espchrono::ago(m_menu_opened_timestamp) / 50ms); m_init_text_progressbar.redraw(espchrono::ago(m_menu_opened_timestamp) / 50ms);
Base::redraw(); Base::redraw(tft);
} }
void SetupInformationDisplay::buttonPressed(espgui::Button button) void SetupInformationDisplay::buttonPressed(espgui::Button button)

View File

@ -25,11 +25,11 @@ void SpeedInfoDisplay::initScreen(espgui::TftInterface &tft)
m_currentPowerLabel.start(); m_currentPowerLabel.start();
} }
void SpeedInfoDisplay::redraw() void SpeedInfoDisplay::redraw(espgui::TftInterface &tft)
{ {
using namespace espgui; using namespace espgui;
Base::redraw(); Base::redraw(tft);
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextFont(4); tft.setTextFont(4);

View File

@ -33,9 +33,9 @@ void StarfieldDisplay::initScreen(espgui::TftInterface &tft)
//tft.fastSetup(); // Prepare plot window range for fast pixel plotting //tft.fastSetup(); // Prepare plot window range for fast pixel plotting
} }
void StarfieldDisplay::redraw() void StarfieldDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
uint8_t spawnDepthVariation = 255; uint8_t spawnDepthVariation = 255;

View File

@ -73,9 +73,9 @@ void StatusDisplay::initScreen(espgui::TftInterface &tft)
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
} }
void StatusDisplay::redraw() void StatusDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
{ {
const auto now = espchrono::millis_clock::now(); const auto now = espchrono::millis_clock::now();

View File

@ -19,7 +19,7 @@
void UpdateDisplay::initScreen(espgui::TftInterface &tft) void UpdateDisplay::initScreen(espgui::TftInterface &tft)
{ {
Base::initScreen(espgui::TftInterface &tft); Base::initScreen(tft);
tft.setTextFont(4); tft.setTextFont(4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@ -31,17 +31,17 @@ void UpdateDisplay::initScreen(espgui::TftInterface &tft)
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.drawString("Status:", 20, m_statusLabel.y()); tft.drawString("Status:", 20, m_statusLabel.y());
m_statusLabel.start(); m_statusLabel.start(tft);
tft.drawString("Progress:", 20, m_progressLabel.y()); tft.drawString("Progress:", 20, m_progressLabel.y());
m_progressLabel.start(); m_progressLabel.start(tft);
tft.drawString("Total:", 20, m_totalLabel.y()); tft.drawString("Total:", 20, m_totalLabel.y());
m_totalLabel.start(); m_totalLabel.start(tft);
m_messageLabel.start(); m_messageLabel.start(tft);
m_progressBar.start(); m_progressBar.start(tft);
if (const esp_app_desc_t *app_desc = esp_ota_get_app_description()) if (const esp_app_desc_t *app_desc = esp_ota_get_app_description())
{ {
@ -50,12 +50,12 @@ void UpdateDisplay::initScreen(espgui::TftInterface &tft)
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
} }
m_newVersionLabel.start(); m_newVersionLabel.start(tft);
} }
void UpdateDisplay::redraw() void UpdateDisplay::redraw(espgui::TftInterface &tft)
{ {
Base::redraw(); Base::redraw(tft);
if (asyncOta) if (asyncOta)
{ {