diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index a6a6f90..3da088e 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -105,6 +105,7 @@ set(headers displays/menus/feedbackdebugmenu.h displays/menus/gametrakmodesettingsmenu.h displays/menus/garagemenu.h + displays/menus/gitmenu.h displays/menus/graphsmenu.h displays/menus/greenpassmenu.h displays/menus/handbremssettingsmenu.h @@ -179,6 +180,7 @@ set(headers icons/buzzer.h icons/close.h icons/demos.h + icons/git.h icons/graph.h icons/greenpass.h icons/hardware.h @@ -344,6 +346,7 @@ set(sources displays/menus/feedbackdebugmenu.cpp displays/menus/gametrakmodesettingsmenu.cpp displays/menus/garagemenu.cpp + displays/menus/gitmenu.cpp displays/menus/graphsmenu.cpp displays/menus/greenpassmenu.cpp displays/menus/handbremssettingsmenu.cpp @@ -418,6 +421,7 @@ set(sources icons/buzzer.cpp icons/close.cpp icons/demos.cpp + icons/git.cpp icons/graph.cpp icons/greenpass.cpp icons/hardware.cpp @@ -504,6 +508,24 @@ idf_component_register( ${dependencies} ) +execute_process(COMMAND git rev-parse HEAD + OUTPUT_VARIABLE GIT_REV ERROR_QUIET +) +execute_process( + COMMAND git log -1 --pretty=%B + OUTPUT_VARIABLE GIT_MESSAGE ERROR_QUIET +) +execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE GIT_BRANCH +) + +string(STRIP "${GIT_REV}" GIT_REV) +string(SUBSTRING "${GIT_REV}" 1 7 GIT_SHORT_REV) +string(STRIP "${GIT_MESSAGE}" GIT_MESSAGE) +string(SUBSTRING "${GIT_MESSAGE}" 0 100 GIT_MESSAGE) +string(STRIP "${GIT_BRANCH}" GIT_BRANCH) + target_compile_options(${COMPONENT_TARGET} PRIVATE -fstack-reuse=all @@ -513,5 +535,9 @@ target_compile_options(${COMPONENT_TARGET} -Wno-deprecated-declarations -Wno-missing-field-initializers -Wno-parentheses + -DGIT_REV="${GIT_REV}" + -DGIT_SHORT_REV="${GIT_SHORT_REV}" + -DGIT_MESSAGE="${GIT_MESSAGE}" + -DGIT_BRANCH="${GIT_BRANCH}" ${BOBBYCAR_BUILDFLAGS} ) diff --git a/main/displays/menus/aboutmenu.cpp b/main/displays/menus/aboutmenu.cpp index cb2bc57..04cf742 100644 --- a/main/displays/menus/aboutmenu.cpp +++ b/main/displays/menus/aboutmenu.cpp @@ -6,9 +6,7 @@ #include "actions/popscreenaction.h" #include "icons/back.h" #include "esptexthelpers.h" -#include "displays/menus/settingsmenu.h" -#include #include #include "fmt/core.h" diff --git a/main/displays/menus/gitmenu.cpp b/main/displays/menus/gitmenu.cpp new file mode 100644 index 0000000..d4681a2 --- /dev/null +++ b/main/displays/menus/gitmenu.cpp @@ -0,0 +1,70 @@ +#include "gitmenu.h" + +// 3rdparty lib includes +#include +#include +#include +#include + +// local includes +#include "bobbyerrorhandler.h" +#include "displays/qrdisplay.h" +#include "icons/info.h" +#include "icons/modes.h" + +namespace { + constexpr char TEXT_GIT[] = "Git"; + constexpr char TEXT_GIT_BRANCH_TITLE[] = "Branch"; + constexpr char TEXT_GIT_BRANCH[] = GIT_BRANCH; + constexpr char TEXT_GIT_COMMIT_TITLE[] = "Commit"; + constexpr char TEXT_GIT_COMMIT[] = GIT_REV; + constexpr char TEXT_GIT_COMMIT_SHORT[] = GIT_SHORT_REV; + constexpr char TEXT_GIT_MESSAGE_TITLE[] = "Commit Message"; + constexpr char TEXT_GIT_MESSAGE[] = GIT_MESSAGE; + constexpr char TEXT_GITHUB_URL[] = "Github URL"; + constexpr char TEXT_BACK[] = "Back"; + + class OpenPopupAction : public virtual espgui::ActionInterface + { + public: + void triggered() override + { + BobbyErrorHandler{}.errorOccured(TEXT_GIT_MESSAGE); + } + }; + + class GitQrAction : public virtual espgui::ActionInterface + { + public: + void triggered() override + { + // ToDo: Fix qr library and remove spaces, also, why is "`" at the end of string in qr code but not when logging? + const std::string qr_text = fmt::format("https://github.com/bobbycar-graz/bobbycar-boardcomputer-firmware/commit/{} ", GIT_REV); + espgui::pushScreen(qr_text); + } + }; +} // namespace + +GitMenu::GitMenu() +{ + using namespace espgui; + + constructMenuItem, StaticColor, StaticFont<2>, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, StaticColor, StaticFont<2>, DummyAction>>(); + constructMenuItem, DummyAction, StaticFont<2>>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, OpenPopupAction, StaticMenuItemIcon<&bobbyicons::info>>>(); + constructMenuItem, GitQrAction, StaticMenuItemIcon<&bobbyicons::modes>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +std::string GitMenu::text() const +{ + return TEXT_GIT; +} + +void GitMenu::back() +{ + espgui::popScreen(); +} diff --git a/main/displays/menus/gitmenu.h b/main/displays/menus/gitmenu.h new file mode 100644 index 0000000..f733520 --- /dev/null +++ b/main/displays/menus/gitmenu.h @@ -0,0 +1,14 @@ +#pragma once + +// local includes +#include "displays/menudisplaywithtime.h" + +class GitMenu : public bobbygui::MenuDisplayWithTime +{ +public: + GitMenu(); + + std::string text() const override; + + void back() override; +}; diff --git a/main/displays/menus/settingsmenu.cpp b/main/displays/menus/settingsmenu.cpp index d559fc4..a1c2e37 100644 --- a/main/displays/menus/settingsmenu.cpp +++ b/main/displays/menus/settingsmenu.cpp @@ -22,6 +22,7 @@ #include "displays/menus/crashmenu.h" #include "displays/menus/espnowmenu.h" #include "displays/menus/featureflagsmenu.h" +#include "displays/menus/gitmenu.h" #include "displays/menus/limitssettingsmenu.h" #include "displays/menus/mainmenu.h" #include "displays/menus/modessettingsmenu.h" @@ -33,6 +34,7 @@ #include "icons/bluetooth.h" #include "icons/buzzer.h" #include "icons/demos.h" +#include "icons/git.h" #include "icons/hardware.h" #include "icons/info.h" #include "icons/time.h" @@ -64,6 +66,7 @@ constexpr char TEXT_FRONTLED[] = "Front LED"; constexpr char TEXT_BACKLED[] = "Back LED"; constexpr char TEXT_CRASHMENU[] = "Crash Menu"; constexpr char TEXT_ABOUT[] = "About"; +constexpr char TEXT_GIT[] = "Git"; constexpr char TEXT_BACK[] = "Back"; #ifdef FEATURE_LEDBACKLIGHT @@ -126,6 +129,7 @@ SettingsMenu::SettingsMenu() constructMenuItem, BobbyCheckbox, BackLedAccessor>>(); constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::demos>>>(); constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::info>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::git>>>(); constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); }