From b9961e2e2f52622e35ecb60dc80f4dedafc71f72 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Jun 2022 22:52:14 +0200 Subject: [PATCH 1/9] Added debug menu for display coordinates --- main/displays/menus/debugmenu.cpp | 3 ++ main/displays/xydebugdisplay.cpp | 77 +++++++++++++++++++++++++++++++ main/displays/xydebugdisplay.h | 29 ++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 main/displays/xydebugdisplay.cpp create mode 100644 main/displays/xydebugdisplay.h diff --git a/main/displays/menus/debugmenu.cpp b/main/displays/menus/debugmenu.cpp index e12639d..96def16 100644 --- a/main/displays/menus/debugmenu.cpp +++ b/main/displays/menus/debugmenu.cpp @@ -19,6 +19,7 @@ #include "esptexthelpers.h" #include "accessors/settingsaccessors.h" #include "displays/qrcodedebug.h" +#include "displays/xydebugdisplay.h" #include "displays/menus/taskmanagermenu.h" #ifdef FEATURE_CAN #include "displays/menus/candebugmenu.h" @@ -38,6 +39,7 @@ constexpr char TEXT_TASKMANAGER[] = "Taskmanager"; constexpr char TEXT_CANDEBUG[] = "CAN Debug"; #endif constexpr char TEXT_QRCODE_DEBUG[] = "QR Debug"; +constexpr char TEXT_XY_DEBUG[] = "XY Debug"; constexpr char TEXT_BATTERYDEBUG[] = "Bat Debug Menu"; constexpr char TEXT_TOGGLECLOUDDEBUG[] = "Cloud Debug"; //constexpr char TEXT_FRONTCOMMAND[] = "Front command"; @@ -67,6 +69,7 @@ DebugMenu::DebugMenu() constructMenuItem, PushScreenAction>>(); #endif constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); if (configs.feature.udpcloud.isEnabled.value()) { diff --git a/main/displays/xydebugdisplay.cpp b/main/displays/xydebugdisplay.cpp new file mode 100644 index 0000000..53d10c9 --- /dev/null +++ b/main/displays/xydebugdisplay.cpp @@ -0,0 +1,77 @@ +#include "xydebugdisplay.h" + +// 3rdparty lib includes +#include +#include +#include + +// local includes +#include "bobbybuttons.h" + +XYDebugDisplay::XYDebugDisplay() : m_labelCoordinates{5, 5} {} + +void XYDebugDisplay::initScreen() +{ + Base::initScreen(); + m_labelCoordinates.start(); +} + +void XYDebugDisplay::redraw() +{ + using namespace espgui; + + Base::redraw(); + m_labelCoordinates.redraw(fmt::format("X: {}, Y: {}", m_current_cursor.x, m_current_cursor.y)); + + if (m_current_cursor.x != m_last_cursor.x || m_current_cursor.y != m_last_cursor.y) + { + tft.fillCircle(m_last_cursor.x, m_last_cursor.y, 2, TFT_BLACK); + tft.fillCircle(m_current_cursor.x, m_current_cursor.y, 2, TFT_WHITE); + + m_last_cursor = m_current_cursor; + } +} + +void XYDebugDisplay::buttonPressed(espgui::Button button) +{ + switch (button) + { + using espgui::Button; + case Button::Left: + case Button::Right: + case Button::Up: + case Button::Down: + espgui::popScreen(); + break; + default:; + } + + switch (BobbyButton(button)) + { + case BobbyButton::Left2: + if (m_current_cursor.x > 0) + { + --m_current_cursor.x; + } + break; + case BobbyButton::Right2: + if (m_current_cursor.x < espgui::tft.width() - 1) + { + ++m_current_cursor.x; + } + break; + case BobbyButton::Up2: + if (m_current_cursor.y > 0) + { + --m_current_cursor.y; + } + break; + case BobbyButton::Down2: + if (m_current_cursor.y < espgui::tft.height() - 1) + { + ++m_current_cursor.y; + } + break; + default:; + } +} diff --git a/main/displays/xydebugdisplay.h b/main/displays/xydebugdisplay.h new file mode 100644 index 0000000..a1d6946 --- /dev/null +++ b/main/displays/xydebugdisplay.h @@ -0,0 +1,29 @@ +#pragma once + +// 3rdparty lib includes +#include + +// local includes +#include "bobbydisplay.h" + +class XYDebugDisplay : public BobbyDisplay +{ + using Base = BobbyDisplay; + +public: + XYDebugDisplay(); + void initScreen() override; + void redraw() override; + + void buttonPressed(espgui::Button button) override; + +private: + typedef struct { + uint8_t x; + uint8_t y; + } cursor_pos_t; + + cursor_pos_t m_current_cursor{0, 0}; + cursor_pos_t m_last_cursor{0, 0}; + espgui::Label m_labelCoordinates; +}; From a5ee6bb55709efa28b0b0670f0b243fdfef68c9d Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Jun 2022 22:52:24 +0200 Subject: [PATCH 2/9] Added battery status display --- main/CMakeLists.txt | 6 +++ main/displays/batteryinfodisplay.cpp | 78 ++++++++++++++++++++++++++++ main/displays/batteryinfodisplay.h | 18 +++++++ main/displays/bmsdisplay.cpp | 4 +- main/displays/metersdisplay.cpp | 11 ++-- main/displays/speedinfodisplay.cpp | 42 +++++++++++++++ main/displays/speedinfodisplay.h | 15 ++++++ main/displays/statusdisplay.cpp | 25 ++++----- main/displays/statusdisplay.h | 12 ++--- 9 files changed, 184 insertions(+), 27 deletions(-) create mode 100644 main/displays/batteryinfodisplay.cpp create mode 100644 main/displays/batteryinfodisplay.h create mode 100644 main/displays/speedinfodisplay.cpp create mode 100644 main/displays/speedinfodisplay.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 3930740..14b9740 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -62,6 +62,7 @@ set(headers debuginputhandler.h debugtexthelpers.h displays/batterygraphdisplay.h + displays/batteryinfodisplay.h displays/bmsdisplay.h displays/bobbychangevaluedisplay.h displays/bobbydisplay.h @@ -156,10 +157,12 @@ set(headers displays/qrcodedebug.h displays/qrdisplay.h displays/qrimportdisplay.h + displays/speedinfodisplay.h displays/spirodisplay.h displays/starfielddisplay.h displays/statusdisplay.h displays/updatedisplay.h + displays/xydebugdisplay.h dnsannounce.h dpad.h dpad3wire.h @@ -308,6 +311,7 @@ set(sources debuginputhandler.cpp debugtexthelpers.cpp displays/batterygraphdisplay.cpp + displays/batteryinfodisplay.cpp displays/bmsdisplay.cpp displays/bobbychangevaluedisplay.cpp displays/bobbydisplay.cpp @@ -400,10 +404,12 @@ set(sources displays/qrcodedebug.cpp displays/qrdisplay.cpp displays/qrimportdisplay.cpp + displays/speedinfodisplay.cpp displays/spirodisplay.cpp displays/starfielddisplay.cpp displays/statusdisplay.cpp displays/updatedisplay.cpp + displays/xydebugdisplay.cpp dnsannounce.cpp dpad.cpp dpad3wire.cpp diff --git a/main/displays/batteryinfodisplay.cpp b/main/displays/batteryinfodisplay.cpp new file mode 100644 index 0000000..c1b7b76 --- /dev/null +++ b/main/displays/batteryinfodisplay.cpp @@ -0,0 +1,78 @@ +#include "batteryinfodisplay.h" + +// 3rdparty lib includes +#include +#include + +// local includes +#include "battery.h" +#include "displays/menus/mainmenu.h" +#include "displays/speedinfodisplay.h" +#include "displays/statusdisplay.h" + +// display with big battery and ten bars (0-100%) + +void BatteryInfoDisplay::initScreen() +{ + using namespace espgui; + Base::initScreen(); + + tft.drawRoundRect(m_offset, m_offset, tft.width() - (m_offset * 2), tft.height() - (m_offset * 2), 10, TFT_WHITE); + tft.drawRoundRect((tft.width() / 2) - (m_offset / 2), m_offset / 2, m_offset, m_offset / 2, 3, TFT_WHITE); + m_lastBarCount = 0; +} + +void BatteryInfoDisplay::redraw() +{ + using namespace espgui; + Base::redraw(); + + // calculate height of space available for all bars + const auto min_x = m_offset + 3; // leave 2 pixels + 1 pixel for border + const auto max_x = tft.width() - m_offset - 3; + const auto topY = m_offset + 3; + const auto bottomY = tft.height() - m_offset - 3; + const auto height = bottomY - topY; + const auto width = max_x - min_x; + const uint16_t segment_height = (height / 10); + + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) + { + const auto cellType = configs.battery.cellType.value(); + const uint16_t percentage = getBatteryPercentage(*avgVoltage, cellType); + const auto segment_count = std::max(percentage / 10, 1); + + if (segment_count != m_lastBarCount) + { + m_lastBarCount = segment_count; + // draw battery + for (auto i = 0; i < 10; ++i) + { + 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.fillRect(0, 0, tft.width(), topY, TFT_CYAN); + // tft.fillRect(0, bottomY, tft.width(), tft.height()-bottomY, TFT_YELLOW); +} + +void BatteryInfoDisplay::buttonPressed(espgui::Button button) +{ + Base::buttonPressed(button); + + switch (button) { + using espgui::Button; + case Button::Right: + espgui::pushScreen(); + break; + case Button::Up: + espgui::switchScreen(); + break; + case Button::Down: + espgui::switchScreen(); + break; + default:; + } +} diff --git a/main/displays/batteryinfodisplay.h b/main/displays/batteryinfodisplay.h new file mode 100644 index 0000000..3e68fc8 --- /dev/null +++ b/main/displays/batteryinfodisplay.h @@ -0,0 +1,18 @@ +#pragma once + +// local includes +#include "bobbydisplay.h" + +class BatteryInfoDisplay : public BobbyDisplay +{ + using Base = BobbyDisplay; + +public: + void initScreen() override; + void redraw() override; + + void buttonPressed(espgui::Button button) override; +private: + static constexpr const auto m_offset = 40; + uint16_t m_lastBarCount{0}; +}; diff --git a/main/displays/bmsdisplay.cpp b/main/displays/bmsdisplay.cpp index 0be70c2..e2e7d24 100644 --- a/main/displays/bmsdisplay.cpp +++ b/main/displays/bmsdisplay.cpp @@ -2,7 +2,7 @@ #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) #include "displays/menus/mainmenu.h" -#include "displays/metersdisplay.h" +#include "displays/speedinfodisplay.h" #include "displays/statusdisplay.h" #include "screenmanager.h" #include "tftinstance.h" @@ -102,7 +102,7 @@ void BmsDisplay::buttonPressed(espgui::Button button) { using espgui::Button; case Button::Right: pushScreen(); break; - case Button::Up: switchScreen(); break; + case Button::Up: switchScreen(); break; case Button::Down: switchScreen(); break; default:; } diff --git a/main/displays/metersdisplay.cpp b/main/displays/metersdisplay.cpp index e413fd8..499e39e 100644 --- a/main/displays/metersdisplay.cpp +++ b/main/displays/metersdisplay.cpp @@ -9,7 +9,6 @@ #include "utils.h" #include "displays/menus/mainmenu.h" #include "displays/statusdisplay.h" -#include "displays/bmsdisplay.h" using namespace espgui; @@ -58,14 +57,12 @@ void MetersDisplay::buttonPressed(espgui::Button button) switch (button) { using espgui::Button; - case Button::Right: pushScreen(); break; - case Button::Up: switchScreen(); break; + case Button::Right: + pushScreen(); + break; + case Button::Up: case Button::Down: -#ifdef FEATURE_BMS - switchScreen(); -#else switchScreen(); -#endif break; default:; } diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp new file mode 100644 index 0000000..a60eee7 --- /dev/null +++ b/main/displays/speedinfodisplay.cpp @@ -0,0 +1,42 @@ +#include "speedinfodisplay.h" + +// 3rdparty lib includes +#include + +// local includes +#include "displays/batteryinfodisplay.h" +#include "displays/menus/mainmenu.h" +#include "displays/statusdisplay.h" + +void SpeedInfoDisplay::initScreen() +{ + Base::initScreen(); +} + +void SpeedInfoDisplay::redraw() +{ + Base::redraw(); +} + +void SpeedInfoDisplay::buttonPressed(espgui::Button button) +{ + Base::buttonPressed(button); + + switch (button) { + using espgui::Button; + case Button::Right: + espgui::pushScreen(); + break; + case Button::Up: + espgui::switchScreen(); + break; + case Button::Down: +#ifdef FEATURE_BMS + espgui::switchScreen(); +#else + espgui::switchScreen(); +#endif + break; + default:; + } +} diff --git a/main/displays/speedinfodisplay.h b/main/displays/speedinfodisplay.h new file mode 100644 index 0000000..0524a77 --- /dev/null +++ b/main/displays/speedinfodisplay.h @@ -0,0 +1,15 @@ +#pragma once + +// local includes +#include "bobbydisplay.h" + +class SpeedInfoDisplay : public BobbyDisplay +{ + using Base = BobbyDisplay; + +public: + void initScreen() override; + void redraw() override; + + void buttonPressed(espgui::Button button) override; +}; diff --git a/main/displays/statusdisplay.cpp b/main/displays/statusdisplay.cpp index d4743ee..4eb7cd6 100644 --- a/main/displays/statusdisplay.cpp +++ b/main/displays/statusdisplay.cpp @@ -4,23 +4,23 @@ #include // 3rdparty lib includes -#include #include +#include #include -#include // local includes -#include "displays/menus/mainmenu.h" +#include "displays/batteryinfodisplay.h" +#include "displays/speedinfodisplay.h" #ifdef FEATURE_BMS #include "displays/bmsdisplay.h" -#else -#include "displays/metersdisplay.h" #endif +#include "displays/menus/mainmenu.h" +#include "displays/metersdisplay.h" #include "drivingstatistics.h" -#include "udpcloud.h" #include "modes/defaultmode.h" -#include "taskmanager.h" #include "newsettings.h" +#include "taskmanager.h" +#include "udpcloud.h" using namespace std::chrono_literals; using namespace espgui; @@ -230,23 +230,24 @@ void StatusDisplay::buttonPressed(espgui::Button button) switch (button) { using espgui::Button; - case Button::Right: pushScreen(); break; + case Button::Right: + pushScreen(); + break; case Button::Up: if (simplified) return; #ifdef FEATURE_BMS switchScreen(); #else - switchScreen(); + switchScreen(); #endif break; case Button::Down: if (simplified) return; - switchScreen(); - break; - default: + switchScreen(); break; + default:; } } diff --git a/main/displays/statusdisplay.h b/main/displays/statusdisplay.h index 469b9dc..ddeffd2 100644 --- a/main/displays/statusdisplay.h +++ b/main/displays/statusdisplay.h @@ -4,17 +4,17 @@ #include // 3rdparty lib includes +#include #include #include -#include // local includes -#include "bobbydisplay.h" -#include "modeinterface.h" -#include "globals.h" -#include "utils.h" -#include "icons/alert.h" #include "battery.h" +#include "bobbydisplay.h" +#include "globals.h" +#include "icons/alert.h" +#include "modeinterface.h" +#include "utils.h" class StatusDisplay : public BobbyDisplay { From ff104923d7b5bb9b9bc74be977ae0e10766f5c16 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Wed, 15 Jun 2022 10:53:19 +0200 Subject: [PATCH 3/9] Updated gui lib --- components/esp-gui-lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp-gui-lib b/components/esp-gui-lib index bb02a6c..15bdca5 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit bb02a6c26790c0012d98711087c6dfcfd76b80bc +Subproject commit 15bdca56459fe05ab405a364d8f0a33f22387694 From d829c0d5cb7f78395e04535c0b4095e477fed3d7 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Wed, 15 Jun 2022 10:55:35 +0200 Subject: [PATCH 4/9] Fixed spelling --- main/actions/ledstripanimationactions.h | 2 +- main/bobbyerrorhandler.cpp | 2 +- main/bobbyerrorhandler.h | 2 +- main/displays/buttoncalibratedisplay.cpp | 8 +++---- main/displays/menus/candebugmenu.cpp | 10 ++++---- main/displays/menus/dynamicdebugmenu.cpp | 2 +- .../menus/extrabuttoncalibratemenu.cpp | 24 +++++++++---------- main/displays/menus/featureflagsmenu.cpp | 4 ++-- main/displays/menus/gitmenu.cpp | 2 +- main/displays/menus/manageprofilesmenu.cpp | 12 ++++++---- .../menus/selectbuildserverbranch.cpp | 2 +- main/displays/menus/selectotabuildmenu.cpp | 2 +- main/displays/menus/typesafeenumchangemenu.h | 2 +- main/displays/qrimportdisplay.h | 2 +- 14 files changed, 40 insertions(+), 36 deletions(-) diff --git a/main/actions/ledstripanimationactions.h b/main/actions/ledstripanimationactions.h index 6b7bd8e..668b1ce 100644 --- a/main/actions/ledstripanimationactions.h +++ b/main/actions/ledstripanimationactions.h @@ -16,7 +16,7 @@ public: void triggered() override { if (auto result = configs.write_config(configs.ledstrip.animationType, type); !result) - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); } }; diff --git a/main/bobbyerrorhandler.cpp b/main/bobbyerrorhandler.cpp index fc90faf..a8cb145 100644 --- a/main/bobbyerrorhandler.cpp +++ b/main/bobbyerrorhandler.cpp @@ -6,7 +6,7 @@ // local includes #include "displays/bobbypopupdisplay.h" -void BobbyErrorHandler::errorOccured(std::string &&error) +void BobbyErrorHandler::errorOccurred(std::string &&error) { auto newDisplay = std::make_unique(std::move(error), std::move(espgui::currentDisplay)); newDisplay->initOverlay(); diff --git a/main/bobbyerrorhandler.h b/main/bobbyerrorhandler.h index c62f8fa..0f24932 100644 --- a/main/bobbyerrorhandler.h +++ b/main/bobbyerrorhandler.h @@ -5,5 +5,5 @@ struct BobbyErrorHandler : public virtual espgui::ErrorHandlerInterface { - void errorOccured(std::string &&error) override; + void errorOccurred(std::string &&error) override; }; diff --git a/main/displays/buttoncalibratedisplay.cpp b/main/displays/buttoncalibratedisplay.cpp index f766053..eb8300d 100644 --- a/main/displays/buttoncalibratedisplay.cpp +++ b/main/displays/buttoncalibratedisplay.cpp @@ -56,7 +56,7 @@ void ButtonCalibrateDisplay::update() if (auto result = configs.write_config(configs.dpadMappingLeft, m_leftButton); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); return; } else @@ -66,7 +66,7 @@ void ButtonCalibrateDisplay::update() if (auto result = configs.write_config(configs.dpadMappingRight, m_rightButton); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); return; } else @@ -75,7 +75,7 @@ void ButtonCalibrateDisplay::update() } if (auto result = configs.write_config(configs.dpadMappingUp, m_upButton); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); return; } else @@ -84,7 +84,7 @@ void ButtonCalibrateDisplay::update() } if (auto result = configs.write_config(configs.dpadMappingDown, m_downButton); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); return; } else diff --git a/main/displays/menus/candebugmenu.cpp b/main/displays/menus/candebugmenu.cpp index 525f147..a67726e 100644 --- a/main/displays/menus/candebugmenu.cpp +++ b/main/displays/menus/candebugmenu.cpp @@ -182,7 +182,7 @@ public: { const auto result = twai_initiate_recovery(); ESP_LOGI(TAG, "twai_initiate_recovery() returned %s", esp_err_to_name(result)); - BobbyErrorHandler{}.errorOccured(fmt::format("twai_initiate_recovery() returned {}", esp_err_to_name(result))); + BobbyErrorHandler{}.errorOccurred(fmt::format("twai_initiate_recovery() returned {}", esp_err_to_name(result))); } }; @@ -193,7 +193,7 @@ public: { const auto result = twai_stop(); ESP_LOGI(TAG, "twai_stop() returned %s", esp_err_to_name(result)); - BobbyErrorHandler{}.errorOccured(fmt::format("twai_stop() returned {}", esp_err_to_name(result))); + BobbyErrorHandler{}.errorOccurred(fmt::format("twai_stop() returned {}", esp_err_to_name(result))); } }; @@ -204,7 +204,7 @@ public: { const auto result = twai_start(); ESP_LOGI(TAG, "twai_start() returned %s", esp_err_to_name(result)); - BobbyErrorHandler{}.errorOccured(fmt::format("twai_start() returned {}", esp_err_to_name(result))); + BobbyErrorHandler{}.errorOccurred(fmt::format("twai_start() returned {}", esp_err_to_name(result))); } }; @@ -215,7 +215,7 @@ public: { const auto result = twai_driver_uninstall(); ESP_LOGI(TAG, "twai_driver_uninstall() returned %s", esp_err_to_name(result)); - BobbyErrorHandler{}.errorOccured(fmt::format("twai_driver_uninstall() returned {}", esp_err_to_name(result))); + BobbyErrorHandler{}.errorOccurred(fmt::format("twai_driver_uninstall() returned {}", esp_err_to_name(result))); } }; @@ -230,7 +230,7 @@ public: const auto result = twai_driver_install(&g_config, &t_config, &f_config); ESP_LOGI(TAG, "twai_driver_install() returned %s", esp_err_to_name(result)); - BobbyErrorHandler{}.errorOccured(fmt::format("twai_driver_install() returned {}", esp_err_to_name(result))); + BobbyErrorHandler{}.errorOccurred(fmt::format("twai_driver_install() returned {}", esp_err_to_name(result))); } }; } // namespace diff --git a/main/displays/menus/dynamicdebugmenu.cpp b/main/displays/menus/dynamicdebugmenu.cpp index 0a708e1..81668a2 100644 --- a/main/displays/menus/dynamicdebugmenu.cpp +++ b/main/displays/menus/dynamicdebugmenu.cpp @@ -101,7 +101,7 @@ class OpenPopupAction : public virtual espgui::ActionInterface public: void triggered() override { - BobbyErrorHandler{}.errorOccured("Das\nist\nein sehr langer text, der nicht in eine zeile passt"); + BobbyErrorHandler{}.errorOccurred("Das\nist\nein sehr langer text, der nicht in eine zeile passt"); } }; } // namespace diff --git a/main/displays/menus/extrabuttoncalibratemenu.cpp b/main/displays/menus/extrabuttoncalibratemenu.cpp index 2fa4e11..b212d5f 100644 --- a/main/displays/menus/extrabuttoncalibratemenu.cpp +++ b/main/displays/menus/extrabuttoncalibratemenu.cpp @@ -129,84 +129,84 @@ void ExtraButtonCalibrateMenu::rawButtonPressed(uint8_t button) case WaitingUp2: if (auto result = configs.write_config(configs.dpadMappingUp2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingDown2: if (auto result = configs.write_config(configs.dpadMappingDown2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingLeft2: if (auto result = configs.write_config(configs.dpadMappingLeft2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingRight2: if (auto result = configs.write_config(configs.dpadMappingRight2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingProfile0: if (auto result = configs.write_config(configs.dpadMappingProfile0, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingProfile1: if (auto result = configs.write_config(configs.dpadMappingProfile1, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingProfile2: if (auto result = configs.write_config(configs.dpadMappingProfile2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingProfile3: if (auto result = configs.write_config(configs.dpadMappingProfile3, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingExtra1: if (auto result = configs.write_config(configs.dpadMappingExtra1, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingExtra2: if (auto result = configs.write_config(configs.dpadMappingExtra2, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingExtra3: if (auto result = configs.write_config(configs.dpadMappingExtra3, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; case WaitingExtra4: if (auto result = configs.write_config(configs.dpadMappingExtra4, button); !result) { - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); break; } break; diff --git a/main/displays/menus/featureflagsmenu.cpp b/main/displays/menus/featureflagsmenu.cpp index 989ea63..75884c6 100644 --- a/main/displays/menus/featureflagsmenu.cpp +++ b/main/displays/menus/featureflagsmenu.cpp @@ -29,7 +29,7 @@ void exitFeatureFlagsMenu() espgui::popScreen(); if (isDirty) { - BobbyErrorHandler{}.errorOccured(TEXT_POPUP); + BobbyErrorHandler{}.errorOccurred(TEXT_POPUP); } } @@ -77,7 +77,7 @@ public: void triggered() override { if (auto result = m_flag.isEnabled.write(configs.nvs_handle_user, !m_flag.isEnabled.value()); !result) - errorOccured(std::move(result).error()); + errorOccurred(std::move(result).error()); else isDirty = true; } diff --git a/main/displays/menus/gitmenu.cpp b/main/displays/menus/gitmenu.cpp index d4681a2..1b0e285 100644 --- a/main/displays/menus/gitmenu.cpp +++ b/main/displays/menus/gitmenu.cpp @@ -29,7 +29,7 @@ namespace { public: void triggered() override { - BobbyErrorHandler{}.errorOccured(TEXT_GIT_MESSAGE); + BobbyErrorHandler{}.errorOccurred(TEXT_GIT_MESSAGE); } }; diff --git a/main/displays/menus/manageprofilesmenu.cpp b/main/displays/menus/manageprofilesmenu.cpp index 5bf2e8b..196b072 100644 --- a/main/displays/menus/manageprofilesmenu.cpp +++ b/main/displays/menus/manageprofilesmenu.cpp @@ -40,7 +40,7 @@ public: if (!settingsPersister.openProfile(m_profileIndex)) // just switch nvs namespace { - BobbyErrorHandler{}.errorOccured(fmt::format("openProfile({}) failed", m_profileIndex)); + BobbyErrorHandler{}.errorOccurred(fmt::format("openProfile({}) failed", m_profileIndex)); return; } saveProfileSettings(); @@ -60,7 +60,9 @@ public: } else if (m_menu.m_firstIndex != -1 && m_menu.m_firstIndex != m_profileIndex) { - BobbyErrorHandler{}.errorOccured(fmt::format("Press CONFIRM to COPY from Profile {} to Profile {}", m_menu.m_firstIndex, m_profileIndex)); + BobbyErrorHandler{}.errorOccurred( + fmt::format("Press CONFIRM to COPY from Profile {} to Profile {}", m_menu.m_firstIndex, + m_profileIndex)); m_mode = CONFIRM_COPY; } } @@ -100,7 +102,9 @@ public: } else if (m_menu.m_firstIndex != -1 && m_menu.m_firstIndex != m_profileIndex) { - BobbyErrorHandler{}.errorOccured(fmt::format("Press CONFIRM to SWAP Profile {} with Profile {}", m_menu.m_firstIndex, m_profileIndex)); + BobbyErrorHandler{}.errorOccurred( + fmt::format("Press CONFIRM to SWAP Profile {} with Profile {}", m_menu.m_firstIndex, + m_profileIndex)); m_mode = CONFIRM_SWAP; } } @@ -125,7 +129,7 @@ public: { m_menu.lock(); m_mode = CONFIRM_CLEAR; - BobbyErrorHandler{}.errorOccured("Press CONFIRM to reset Profile or BACK to cancel."); + BobbyErrorHandler{}.errorOccurred("Press CONFIRM to reset Profile or BACK to cancel."); } } diff --git a/main/displays/menus/selectbuildserverbranch.cpp b/main/displays/menus/selectbuildserverbranch.cpp index 3296555..88d0ae0 100644 --- a/main/displays/menus/selectbuildserverbranch.cpp +++ b/main/displays/menus/selectbuildserverbranch.cpp @@ -128,7 +128,7 @@ void SelectBuildserverBranchMenu::update() check_descriptor_request(); if (!request_failed.empty()) { - BobbyErrorHandler{}.errorOccured(fmt::format("Error: {}", request_failed)); + BobbyErrorHandler{}.errorOccurred(fmt::format("Error: {}", request_failed)); request_failed = {}; } } diff --git a/main/displays/menus/selectotabuildmenu.cpp b/main/displays/menus/selectotabuildmenu.cpp index 8827a70..c8e558d 100644 --- a/main/displays/menus/selectotabuildmenu.cpp +++ b/main/displays/menus/selectotabuildmenu.cpp @@ -111,7 +111,7 @@ void SelectBuildMenu::update() check_descriptor_request(); if (!request_failed.empty()) { - BobbyErrorHandler{}.errorOccured(fmt::format("Error: {}", request_failed)); + BobbyErrorHandler{}.errorOccurred(fmt::format("Error: {}", request_failed)); request_failed = {}; } } diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index 9b70b83..035c170 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -51,7 +51,7 @@ public: void triggered() override { if (auto result = m_config->write(configs.nvs_handle_user, m_value); !result) - BobbyErrorHandler{}.errorOccured(std::move(result).error()); + BobbyErrorHandler{}.errorOccurred(std::move(result).error()); } private: const TEnum m_value; diff --git a/main/displays/qrimportdisplay.h b/main/displays/qrimportdisplay.h index 11784bb..dd82e5a 100644 --- a/main/displays/qrimportdisplay.h +++ b/main/displays/qrimportdisplay.h @@ -81,7 +81,7 @@ public: else if (!m_result && !m_result.error().empty()) { tft.setTextColor(TFT_RED, TFT_BLACK); - BobbyErrorHandler{}.errorOccured(fmt::format("Error: {}", m_result.error())); + BobbyErrorHandler{}.errorOccurred(fmt::format("Error: {}", m_result.error())); m_result.error().clear(); } else From 56d0cb2ab09a7f770230a527e327aea603a144f7 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 16 Jun 2022 15:11:23 +0200 Subject: [PATCH 5/9] Fixed metersdisplay, implemented speed display --- main/displays/batteryinfodisplay.cpp | 4 ++-- main/displays/metersdisplay.cpp | 9 ++++++--- main/displays/speedinfodisplay.cpp | 20 ++++++++++++++++++++ main/displays/speedinfodisplay.h | 11 +++++++++++ main/displays/statusdisplay.cpp | 2 +- 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/main/displays/batteryinfodisplay.cpp b/main/displays/batteryinfodisplay.cpp index c1b7b76..ad1c420 100644 --- a/main/displays/batteryinfodisplay.cpp +++ b/main/displays/batteryinfodisplay.cpp @@ -7,8 +7,8 @@ // local includes #include "battery.h" #include "displays/menus/mainmenu.h" +#include "displays/metersdisplay.h" #include "displays/speedinfodisplay.h" -#include "displays/statusdisplay.h" // display with big battery and ten bars (0-100%) @@ -68,7 +68,7 @@ void BatteryInfoDisplay::buttonPressed(espgui::Button button) espgui::pushScreen(); break; case Button::Up: - espgui::switchScreen(); + espgui::switchScreen(); break; case Button::Down: espgui::switchScreen(); diff --git a/main/displays/metersdisplay.cpp b/main/displays/metersdisplay.cpp index 499e39e..e71941f 100644 --- a/main/displays/metersdisplay.cpp +++ b/main/displays/metersdisplay.cpp @@ -5,10 +5,11 @@ #include // local includes -#include "globals.h" -#include "utils.h" +#include "displays/batteryinfodisplay.h" #include "displays/menus/mainmenu.h" #include "displays/statusdisplay.h" +#include "globals.h" +#include "utils.h" using namespace espgui; @@ -61,9 +62,11 @@ void MetersDisplay::buttonPressed(espgui::Button button) pushScreen(); break; case Button::Up: - case Button::Down: switchScreen(); break; + case Button::Down: + switchScreen(); + break; default:; } } diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp index a60eee7..7e0c1b4 100644 --- a/main/displays/speedinfodisplay.cpp +++ b/main/displays/speedinfodisplay.cpp @@ -1,6 +1,7 @@ #include "speedinfodisplay.h" // 3rdparty lib includes +#include #include // local includes @@ -11,11 +12,30 @@ void SpeedInfoDisplay::initScreen() { Base::initScreen(); + + m_labelSpeed.start(); + + m_dischargingBar.start(); + m_chargingBar.start(); } void SpeedInfoDisplay::redraw() { + using namespace espgui; + Base::redraw(); + + tft.setTextColor(TFT_WHITE, TFT_BLACK); + tft.setTextFont(4); + + tft.setTextSize(3); + + m_labelSpeed.redraw(fmt::format(avgSpeedKmh < 10 ? "{:.3f}" : "{:.1f}", avgSpeedKmh)); + + tft.setTextSize(1); + + m_dischargingBar.redraw(sumCurrent<0.f?(-sumCurrent):0.f); + m_chargingBar.redraw(sumCurrent>0.f?sumCurrent:0.f); } void SpeedInfoDisplay::buttonPressed(espgui::Button button) diff --git a/main/displays/speedinfodisplay.h b/main/displays/speedinfodisplay.h index 0524a77..928136a 100644 --- a/main/displays/speedinfodisplay.h +++ b/main/displays/speedinfodisplay.h @@ -1,5 +1,11 @@ #pragma once +// 3rdparty lib includes +#include +#include +#include +#include + // local includes #include "bobbydisplay.h" @@ -12,4 +18,9 @@ public: void redraw() override; void buttonPressed(espgui::Button button) override; +private: + espgui::Label m_labelSpeed{28, 70}; + + espgui::ReverseProgressBar m_dischargingBar{10, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; + espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; }; diff --git a/main/displays/statusdisplay.cpp b/main/displays/statusdisplay.cpp index 4eb7cd6..4177938 100644 --- a/main/displays/statusdisplay.cpp +++ b/main/displays/statusdisplay.cpp @@ -245,7 +245,7 @@ void StatusDisplay::buttonPressed(espgui::Button button) case Button::Down: if (simplified) return; - switchScreen(); + switchScreen(); break; default:; } From 756c8bde949e07ae3e9f90b6af2dac4cdb7c52fb Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 16 Jun 2022 15:27:32 +0200 Subject: [PATCH 6/9] Hopefully fixed compile-errors --- main/displays/batteryinfodisplay.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main/displays/batteryinfodisplay.cpp b/main/displays/batteryinfodisplay.cpp index ad1c420..a0ff6ce 100644 --- a/main/displays/batteryinfodisplay.cpp +++ b/main/displays/batteryinfodisplay.cpp @@ -9,6 +9,8 @@ #include "displays/menus/mainmenu.h" #include "displays/metersdisplay.h" #include "displays/speedinfodisplay.h" +#include "globals.h" +#include "newsettings.h" // display with big battery and ten bars (0-100%) From 647365c5fc124ff0a86224f091f969826c7e3bb0 Mon Sep 17 00:00:00 2001 From: Peter Poetzi Date: Thu, 16 Jun 2022 21:11:42 +0200 Subject: [PATCH 7/9] improve steedinfodisplay --- main/displays/speedinfodisplay.cpp | 33 ++++++++++++++++++++++++++---- main/displays/speedinfodisplay.h | 11 +++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp index 7e0c1b4..4cd37bf 100644 --- a/main/displays/speedinfodisplay.cpp +++ b/main/displays/speedinfodisplay.cpp @@ -8,6 +8,7 @@ #include "displays/batteryinfodisplay.h" #include "displays/menus/mainmenu.h" #include "displays/statusdisplay.h" +#include "drivingstatistics.h" void SpeedInfoDisplay::initScreen() { @@ -28,14 +29,38 @@ void SpeedInfoDisplay::redraw() tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextFont(4); - tft.setTextSize(3); + tft.setTextSize(4); - m_labelSpeed.redraw(fmt::format(avgSpeedKmh < 10 ? "{:.3f}" : "{:.1f}", avgSpeedKmh)); + m_labelSpeed.redraw(fmt::format( + std::abs(avgSpeedKmh) < 10 ? "{:.2f}" : + (std::abs(avgSpeedKmh) < 100 ? "{:.1f}" : "{:.0f}"), + avgSpeedKmh)); + + tft.setTextSize(1); + m_batteryPercentLabel.redraw(getBatteryPercentageString()); + + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { + auto watt = sumCurrent * *avgVoltage; + auto wh_per_km = std::abs(avgSpeedKmh) > 0.1 ? watt / std::abs(avgSpeedKmh) : 0; + + m_voltageLabel.redraw(fmt::format("{:.1f} V", avgVoltage.value())); + m_currentConsumptionLabel.redraw(fmt::format("{:.1f} Wh/km", wh_per_km)); + } else { + m_voltageLabel.redraw("No voltage"); + m_currentConsumptionLabel.redraw("No comsumption"); + } + + m_distanceLabel.redraw(fmt::format( + drivingStatistics.meters_driven > 1000 ? "{:.3f} km" : + (drivingStatistics.meters_driven > 100 ? "{:.1f} m" : "{:.2f} m"), + drivingStatistics.meters_driven > 1000 ? + drivingStatistics.meters_driven / 1000 : + drivingStatistics.meters_driven)); tft.setTextSize(1); - m_dischargingBar.redraw(sumCurrent<0.f?(-sumCurrent):0.f); - m_chargingBar.redraw(sumCurrent>0.f?sumCurrent:0.f); + m_dischargingBar.redraw(sumCurrent < 0.f ? (-sumCurrent) : 0.f); + m_chargingBar.redraw(sumCurrent > 0.f ? sumCurrent : 0.f); } void SpeedInfoDisplay::buttonPressed(espgui::Button button) diff --git a/main/displays/speedinfodisplay.h b/main/displays/speedinfodisplay.h index 928136a..1ddb05c 100644 --- a/main/displays/speedinfodisplay.h +++ b/main/displays/speedinfodisplay.h @@ -19,8 +19,13 @@ public: void buttonPressed(espgui::Button button) override; private: - espgui::Label m_labelSpeed{28, 70}; + espgui::Label m_labelSpeed{5, 5}; - espgui::ReverseProgressBar m_dischargingBar{10, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; - espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; + espgui::ReverseProgressBar m_dischargingBar{10, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; + espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; + + espgui::Label m_batteryPercentLabel{5, 150}; + espgui::Label m_voltageLabel{5, 190}; + espgui::Label m_distanceLabel{5, 230}; + espgui::Label m_currentConsumptionLabel{5, 270}; }; From 0393ac750bc87b39e0f9a15f1c0afdc46e74f4a3 Mon Sep 17 00:00:00 2001 From: Peter Poetzi Date: Thu, 16 Jun 2022 22:57:46 +0200 Subject: [PATCH 8/9] fix speed info display --- main/displays/speedinfodisplay.cpp | 5 +++++ main/displays/speedinfodisplay.h | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp index 4cd37bf..700510d 100644 --- a/main/displays/speedinfodisplay.cpp +++ b/main/displays/speedinfodisplay.cpp @@ -18,6 +18,11 @@ void SpeedInfoDisplay::initScreen() m_dischargingBar.start(); m_chargingBar.start(); + + m_batteryPercentLabel.start(); + m_voltageLabel.start(); + m_distanceLabel.start(); + m_currentConsumptionLabel.start(); } void SpeedInfoDisplay::redraw() diff --git a/main/displays/speedinfodisplay.h b/main/displays/speedinfodisplay.h index 1ddb05c..4defa79 100644 --- a/main/displays/speedinfodisplay.h +++ b/main/displays/speedinfodisplay.h @@ -24,8 +24,9 @@ private: espgui::ReverseProgressBar m_dischargingBar{10, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; - espgui::Label m_batteryPercentLabel{5, 150}; - espgui::Label m_voltageLabel{5, 190}; - espgui::Label m_distanceLabel{5, 230}; - espgui::Label m_currentConsumptionLabel{5, 270}; +#define START_Y 150 + espgui::Label m_batteryPercentLabel{5, START_Y}; + espgui::Label m_voltageLabel{5, START_Y + 29 * 1}; + espgui::Label m_distanceLabel{5, START_Y + 29 * 2}; + espgui::Label m_currentConsumptionLabel{5, START_Y + 29 * 3}; }; From 55386b5fb39721e28415d7027f2a248b9edd7131 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 23 Jun 2022 20:04:51 +0200 Subject: [PATCH 9/9] Fixed formatting --- main/displays/speedinfodisplay.cpp | 34 +++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp index 700510d..45d33d9 100644 --- a/main/displays/speedinfodisplay.cpp +++ b/main/displays/speedinfodisplay.cpp @@ -44,13 +44,16 @@ void SpeedInfoDisplay::redraw() tft.setTextSize(1); m_batteryPercentLabel.redraw(getBatteryPercentageString()); - if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) + { auto watt = sumCurrent * *avgVoltage; auto wh_per_km = std::abs(avgSpeedKmh) > 0.1 ? watt / std::abs(avgSpeedKmh) : 0; m_voltageLabel.redraw(fmt::format("{:.1f} V", avgVoltage.value())); m_currentConsumptionLabel.redraw(fmt::format("{:.1f} Wh/km", wh_per_km)); - } else { + } + else + { m_voltageLabel.redraw("No voltage"); m_currentConsumptionLabel.redraw("No comsumption"); } @@ -72,21 +75,22 @@ void SpeedInfoDisplay::buttonPressed(espgui::Button button) { Base::buttonPressed(button); - switch (button) { - using espgui::Button; - case Button::Right: - espgui::pushScreen(); - break; - case Button::Up: - espgui::switchScreen(); - break; - case Button::Down: + switch (button) + { + using espgui::Button; + case Button::Right: + espgui::pushScreen(); + break; + case Button::Up: + espgui::switchScreen(); + break; + case Button::Down: #ifdef FEATURE_BMS - espgui::switchScreen(); + espgui::switchScreen(); #else - espgui::switchScreen(); + espgui::switchScreen(); #endif - break; - default:; + break; + default:; } }