New input system work in progress

This commit is contained in:
2021-12-28 01:06:25 +01:00
parent 31fdbae77b
commit 1a3fb0a0a9
13 changed files with 271 additions and 45 deletions

View File

@ -52,6 +52,9 @@ set(headers
debuginputhandler.h
debugtexthelpers.h
displays/bmsdisplay.h
displays/bobbydisplay.h
displays/bobbychangevaluedisplay.h
displays/bobbymenudisplay.h
displays/calibratedisplay.h
displays/calibratevoltagedisplay.h
displays/qrdisplay.h
@ -270,6 +273,9 @@ set(sources
debuginputhandler.cpp
debugtexthelpers.cpp
displays/bmsdisplay.cpp
displays/bobbydisplay.cpp
displays/bobbychangevaluedisplay.cpp
displays/bobbymenudisplay.cpp
displays/calibratedisplay.cpp
displays/calibratevoltagedisplay.cpp
displays/qrdisplay.cpp

View File

View File

@ -0,0 +1,66 @@
#include "bobbydisplay.h"
void BobbyDisplay::rawButtonPressed(uint8_t button)
{
Base::rawButtonPressed(button);
switch (button)
{
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
}
void BobbyDisplay::rawButtonReleased(uint8_t button)
{
Base::rawButtonReleased(button);
switch (button)
{
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
}
void BobbyDisplay::buttonPressed(espgui::Button button)
{
Base::buttonPressed(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
}
void BobbyDisplay::buttonReleased(espgui::Button button)
{
Base::buttonReleased(button);
}

View File

@ -0,0 +1,31 @@
#pragma once
// system includes
#include <type_traits>
// 3rdparty lib includes
#include <display.h>
enum BobbyButton
{
Profile0 = espgui::Button::ButtonMax + 1,
Profile1,
Profile2,
Profile3,
Left2,
Right2,
Up2,
Down2
};
class BobbyDisplay : public espgui::Display
{
using Base = espgui::Display;
public:
void rawButtonPressed(uint8_t button) override;
void rawButtonReleased(uint8_t button) override;
void buttonPressed(espgui::Button button) override;
void buttonReleased(espgui::Button button) override;
};

View File

@ -0,0 +1,66 @@
#include "bobbymenudisplay.h"
void BobbyMenuDisplay::rawButtonPressed(uint8_t button)
{
Base::rawButtonPressed(button);
switch (button)
{
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
}
void BobbyMenuDisplay::rawButtonReleased(uint8_t button)
{
Base::rawButtonReleased(button);
switch (button)
{
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
}
void BobbyMenuDisplay::buttonPressed(espgui::Button button)
{
Base::buttonPressed(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
}
void BobbyMenuDisplay::buttonReleased(espgui::Button button)
{
Base::buttonReleased(button);
}

View File

@ -0,0 +1,22 @@
#pragma once
// system includes
#include <type_traits>
// 3rdparty lib includes
#include <menudisplay.h>
// local includes
#include "bobbydisplay.h"
class BobbyMenuDisplay : public espgui::MenuDisplay
{
using Base = espgui::MenuDisplay;
public:
void rawButtonPressed(uint8_t button) override;
void rawButtonReleased(uint8_t button) override;
void buttonPressed(espgui::Button button) override;
void buttonReleased(espgui::Button button) override;
};

View File

@ -1,17 +1,20 @@
#pragma once
// 3rdparty lib includes
#include <accessorinterface.h>
#include <qrcode.h>
// local includes
#include "accessorinterface.h"
#include "menudisplay.h"
#include "displays/bobbymenudisplay.h"
#include "texts.h"
class GreenPassMenu :
public espgui::MenuDisplay,
public BobbyMenuDisplay,
public espgui::StaticText<TEXT_GREENPASS>
{
using Base = espgui::MenuDisplay;
using Base = BobbyMenuDisplay;
public:
GreenPassMenu();
void back() override;

View File

@ -9,7 +9,11 @@
using namespace espgui;
QrDisplay::QrDisplay(std::string_view msg, uint8_t ver) : m_msg{msg}, m_ver{ver} {}
QrDisplay::QrDisplay(std::string_view msg, uint8_t ver) :
m_msg{msg},
m_ver{ver}
{
}
void QrDisplay::initScreen()
{
@ -35,12 +39,15 @@ void QrDisplay::initScreen()
}
}
void QrDisplay::back()
void QrDisplay::buttonPressed(espgui::Button button)
{
switchScreen<GreenPassMenu>();
}
Base::buttonPressed(button);
void QrDisplay::confirm()
{
switchScreen<GreenPassMenu>();
switch (button)
{
using espgui::Button;
case Button::Left: switchScreen<GreenPassMenu>(); break;
case Button::Right: switchScreen<GreenPassMenu>(); break;
default:;
}
}

View File

@ -1,17 +1,22 @@
#pragma once
// 3rd party includes
#include <display.h>
#include <qrcode.h>
class QrDisplay :
public espgui::Display
// local includes
#include "bobbydisplay.h"
class QrDisplay : public BobbyDisplay
{
using Base = BobbyDisplay;
public:
QrDisplay(std::string_view msg, uint8_t ver);
void initScreen() override;
void confirm() override;
void back() override;
void buttonPressed(espgui::Button button) override;
private:
std::string_view m_msg;
uint8_t m_ver;

View File

@ -16,39 +16,24 @@ constexpr const char * const TAG = "qrimport";
using namespace espgui;
QrImportDisplay::QrImportDisplay(std::string nvs_key) : m_nvs_key{nvs_key} {}
QrImportDisplay::QrImportDisplay(std::string nvs_key) :
m_nvs_key{nvs_key}
{
}
void QrImportDisplay::start()
{
Base::start();
m_statuslabel.start();
qrimport::setup_request();
m_statuslabel.redraw(fmt::format("Request not running."));
}
void QrImportDisplay::back()
{
if (!qrimport::get_request_running())
{
switchScreen<GreenPassMenu>();
}
}
void QrImportDisplay::confirm()
{
// start request
if (!m_confirmLocked)
{
if (const auto result = qrimport::start_qr_request(); !result)
{
switchScreen<GreenPassMenu>();
}
else
m_confirmLocked = true;
}
}
void QrImportDisplay::update()
{
Base::update();
m_expected = qrimport::check_request();
if (m_expected)
{
@ -69,6 +54,8 @@ void QrImportDisplay::update()
void QrImportDisplay::redraw()
{
Base::redraw();
if (qrimport::get_request_running())
{
if (!m_expected)
@ -83,3 +70,31 @@ void QrImportDisplay::redraw()
m_statuslabel.redraw("Request not running");
}
}
void QrImportDisplay::buttonPressed(espgui::Button button)
{
Base::buttonPressed(button);
switch (button)
{
using espgui::Button;
case Button::Left:
if (!qrimport::get_request_running())
{
switchScreen<GreenPassMenu>();
}
break;
case Button::Right:
// start request
if (!m_confirmLocked)
{
if (const auto result = qrimport::start_qr_request(); !result)
{
switchScreen<GreenPassMenu>();
}
else
m_confirmLocked = true;
}
break;
}
}

View File

@ -1,21 +1,26 @@
#pragma once
// 3rd party includes
#include <display.h>
#include <widgets/label.h>
#include <tftinstance.h>
#include <tl/expected.hpp>
class QrImportDisplay : public espgui::Display
// local includes
#include "bobbydisplay.h"
class QrImportDisplay : public BobbyDisplay
{
using Base = espgui::Display;
using Base = BobbyDisplay;
public:
QrImportDisplay(std::string nvs_key);
void start() override;
void back() override;
void update() override;
void redraw() override;
void confirm() override;
void buttonPressed(espgui::Button button) override;
private:
bool m_confirmLocked{false};
espgui::Label m_statuslabel{5,(espgui::tft.height() / 2)-espgui::tft.fontHeight(4)};