diff --git a/components/esp-gui-lib b/components/esp-gui-lib index 9cf1c9a..4871df0 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit 9cf1c9a78c4af48d6ee7cc6592179cc4cf7f3997 +Subproject commit 4871df08989755121fd69c55777322e387925141 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index a4890cd..1d350ca 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -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 diff --git a/main/displays/bobbychangevaluedisplay.cpp b/main/displays/bobbychangevaluedisplay.cpp new file mode 100644 index 0000000..e69de29 diff --git a/main/displays/bobbychangevaluedisplay.h b/main/displays/bobbychangevaluedisplay.h new file mode 100644 index 0000000..e69de29 diff --git a/main/displays/bobbydisplay.cpp b/main/displays/bobbydisplay.cpp new file mode 100644 index 0000000..99ee24c --- /dev/null +++ b/main/displays/bobbydisplay.cpp @@ -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); +} diff --git a/main/displays/bobbydisplay.h b/main/displays/bobbydisplay.h new file mode 100644 index 0000000..e0e005e --- /dev/null +++ b/main/displays/bobbydisplay.h @@ -0,0 +1,31 @@ +#pragma once + +// system includes +#include + +// 3rdparty lib includes +#include + +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; +}; diff --git a/main/displays/bobbymenudisplay.cpp b/main/displays/bobbymenudisplay.cpp new file mode 100644 index 0000000..bd455ac --- /dev/null +++ b/main/displays/bobbymenudisplay.cpp @@ -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); +} diff --git a/main/displays/bobbymenudisplay.h b/main/displays/bobbymenudisplay.h new file mode 100644 index 0000000..204579f --- /dev/null +++ b/main/displays/bobbymenudisplay.h @@ -0,0 +1,22 @@ +#pragma once + +// system includes +#include + +// 3rdparty lib includes +#include + +// 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; +}; diff --git a/main/displays/menus/greenpassmenu.h b/main/displays/menus/greenpassmenu.h index b05edf7..b8edfc0 100644 --- a/main/displays/menus/greenpassmenu.h +++ b/main/displays/menus/greenpassmenu.h @@ -1,17 +1,20 @@ #pragma once + +// 3rdparty lib includes +#include #include // 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 { - using Base = espgui::MenuDisplay; + using Base = BobbyMenuDisplay; + public: GreenPassMenu(); void back() override; diff --git a/main/displays/qrdisplay.cpp b/main/displays/qrdisplay.cpp index 2f75d99..01f813d 100644 --- a/main/displays/qrdisplay.cpp +++ b/main/displays/qrdisplay.cpp @@ -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(); -} + Base::buttonPressed(button); -void QrDisplay::confirm() -{ - switchScreen(); + switch (button) + { + using espgui::Button; + case Button::Left: switchScreen(); break; + case Button::Right: switchScreen(); break; + default:; + } } diff --git a/main/displays/qrdisplay.h b/main/displays/qrdisplay.h index 3ed9598..807b26c 100644 --- a/main/displays/qrdisplay.h +++ b/main/displays/qrdisplay.h @@ -1,17 +1,22 @@ #pragma once // 3rd party includes -#include #include -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; diff --git a/main/displays/qrimportdisplay.cpp b/main/displays/qrimportdisplay.cpp index 2a207d3..e96aa7d 100644 --- a/main/displays/qrimportdisplay.cpp +++ b/main/displays/qrimportdisplay.cpp @@ -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(); - } -} - -void QrImportDisplay::confirm() -{ - // start request - if (!m_confirmLocked) - { - if (const auto result = qrimport::start_qr_request(); !result) - { - switchScreen(); - } - 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(); + } + break; + case Button::Right: + // start request + if (!m_confirmLocked) + { + if (const auto result = qrimport::start_qr_request(); !result) + { + switchScreen(); + } + else + m_confirmLocked = true; + } + break; + } +} diff --git a/main/displays/qrimportdisplay.h b/main/displays/qrimportdisplay.h index 9f080d6..c456ed1 100644 --- a/main/displays/qrimportdisplay.h +++ b/main/displays/qrimportdisplay.h @@ -1,21 +1,26 @@ #pragma once // 3rd party includes -#include #include #include #include -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)};