From 5f4627ffb9e48ab81b8fd85c1a86027636fa23eb Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Fri, 27 May 2022 16:36:51 +0200 Subject: [PATCH 1/2] Moved into cpp --- main/actions/modesettingsaction.cpp | 56 +++++++++++++++++++++++++++++ main/actions/modesettingsaction.h | 45 ----------------------- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/main/actions/modesettingsaction.cpp b/main/actions/modesettingsaction.cpp index e69de29..e694a24 100644 --- a/main/actions/modesettingsaction.cpp +++ b/main/actions/modesettingsaction.cpp @@ -0,0 +1,56 @@ +#include "modesettingsaction.h" + +// 3rdparty lib includes +#include + +// local includes +#include "globals.h" +#include "modes/defaultmode.h" +#include "modes/mickmode.h" +#include "modes/tempomatmode.h" +#include "modes/larsmmode.h" +#ifdef FEATURE_GAMETRAK +#include "modes/gametrakmode.h" +#endif +#include "modes/motortestmode.h" +#ifdef FEATURE_JOYSTICK +#include "modes/wheelchairmode.h" +#endif +#include "modes/remotecontrolmode.h" +#include "displays/menus/defaultmodesettingsmenu.h" +#include "displays/menus/tempomatmodesettingsmenu.h" +#include "displays/menus/larsmmodesettingsmenu.h" +#ifdef FEATURE_GAMETRAK +#include "displays/menus/gametrakmodesettingsmenu.h" +#endif +#include "displays/menus/mickmodesettingsmenu.h" +#include "displays/menus/motortestmodesettingsmenu.h" +#include "displays/menus/remotecontrolmodesettingsmenu.h" + +void ModeSettingsAction::triggered() +{ + if (currentMode == &modes::defaultMode +#ifdef FEATURE_JOYSTICK + || currentMode == &modes::wheelchairMode +#endif + ) + pushScreen(); + else if (currentMode == &modes::tempomatMode) + pushScreen(); + else if (currentMode == &modes::larsmMode) + pushScreen(); + else if (currentMode == &modes::mickMode) + pushScreen(); + else if (currentMode == &modes::motortestMode) + pushScreen(); + else if (currentMode == &modes::remoteControlMode) + pushScreen(); +#ifdef FEATURE_GAMETRAK + else if (currentMode == &modes::gametrakMode) + pushScreen(); +#endif + else + { + //Serial.println("Unknown mode, cannot open settings for it"); + } +} diff --git a/main/actions/modesettingsaction.h b/main/actions/modesettingsaction.h index 3d27834..b930b50 100644 --- a/main/actions/modesettingsaction.h +++ b/main/actions/modesettingsaction.h @@ -1,56 +1,11 @@ #pragma once #include "actioninterface.h" -#include "globals.h" -#include "modes/defaultmode.h" -#include "modes/mickmode.h" -#include "modes/tempomatmode.h" -#include "modes/larsmmode.h" -#include "modes/gametrakmode.h" -#include "modes/motortestmode.h" -#ifdef FEATURE_JOYSTICK -#include "modes/wheelchairmode.h" -#endif -#include "displays/menus/defaultmodesettingsmenu.h" -#include "displays/menus/tempomatmodesettingsmenu.h" -#include "displays/menus/larsmmodesettingsmenu.h" -#include "displays/menus/gametrakmodesettingsmenu.h" -#include "displays/menus/mickmodesettingsmenu.h" -#include "displays/menus/motortestmodesettingsmenu.h" -#include "screenmanager.h" using namespace espgui; -namespace { class ModeSettingsAction : public virtual ActionInterface { public: void triggered() override; }; - -void ModeSettingsAction::triggered() -{ - if (currentMode == &modes::defaultMode -#ifdef FEATURE_JOYSTICK - || currentMode == &modes::wheelchairMode -#endif - ) - pushScreen(); - else if (currentMode == &modes::tempomatMode) - pushScreen(); - else if (currentMode == &modes::larsmMode) - pushScreen(); - else if (currentMode == &modes::mickMode) - pushScreen(); - else if (currentMode == &modes::motortestMode) - pushScreen(); -#ifdef FEATURE_GAMETRAK - else if (currentMode == &modes::gametrakMode) - pushScreen(); -#endif - else - { - //Serial.println("Unknown mode, cannot open settings for it"); - } -} -} From f4ac629823142d12d192f1fa4c94fac14e2ca735 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Fri, 27 May 2022 16:37:06 +0200 Subject: [PATCH 2/2] Added remote control settings for changing model mode --- main/CMakeLists.txt | 2 + main/accessors/settingsaccessors.h | 4 ++ .../menus/defaultmodesettingsmenu.cpp | 2 - main/displays/menus/modessettingsmenu.cpp | 3 ++ .../menus/remotecontrolmodesettingsmenu.cpp | 45 +++++++++++++++++++ .../menus/remotecontrolmodesettingsmenu.h | 14 ++++++ main/modes/remotecontrolmode.cpp | 5 ++- main/presets.h | 5 +++ main/profilesettings.h | 6 +++ 9 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 main/displays/menus/remotecontrolmodesettingsmenu.cpp create mode 100644 main/displays/menus/remotecontrolmodesettingsmenu.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 3da088e..0a7fe3b 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -127,6 +127,7 @@ set(headers displays/menus/networksettingsmenu.h displays/menus/otamenu.h displays/menus/profilesmenu.h + displays/menus/remotecontrolmodesettingsmenu.h displays/menus/selectbuildserverbranch.h displays/menus/selectbuildservermenu.h displays/menus/selectmodemenu.h @@ -368,6 +369,7 @@ set(sources displays/menus/networksettingsmenu.cpp displays/menus/otamenu.cpp displays/menus/profilesmenu.cpp + displays/menus/remotecontrolmodesettingsmenu.cpp displays/menus/selectbuildserverbranch.cpp displays/menus/selectbuildservermenu.cpp displays/menus/selectmodemenu.cpp diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 5c09b4b..2eae0c0 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -160,9 +160,13 @@ struct LarsmModeIterationsAccessor : public RefAccessorSaveSettings { u struct MotortestModeMultiplikatorAccessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return profileSettings.motortestMode.multiplikator; } }; struct MotortestMaxPwmAccessor : public RefAccessorSaveSettings { uint16_t &getRef() const override { return profileSettings.motortestMode.maxPwm; } }; +// MickMode struct MickModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return profileSettings.mickMode.modelMode; } }; struct MickModeSmoothingAccessor : public RefAccessorSaveSettings { uint16_t &getRef() const override { return profileSettings.mickMode.smoothing; } }; +// Remote Control Mode +struct RemoteControlModeModelModeAccessor : public RefAccessorSaveSettings { UnifiedModelMode &getRef() const override { return profileSettings.remoteControlMode.modelMode; } }; + // Ledstrip struct EnableLedAnimationAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.ledstrip.enableLedAnimation; } }; struct EnableBrakeLightsAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.ledstrip.enableBrakeLights; } }; diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index 0281f4d..fb5d540 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -19,9 +19,7 @@ namespace { constexpr char TEXT_DEFAULTMODESETTIGNS[] = "Default mode settings"; -constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; constexpr char TEXT_MODELMODE[] = "Model mode"; -constexpr char TEXT_HYBRIDMODE[] = "Hybrid mode"; constexpr char TEXT_SQUAREGAS[] = "Square gas"; constexpr char TEXT_SQUAREBREMS[] = "Square brems"; constexpr char TEXT_ENABLESMOOTHINGUP[] = "Enable up smoothing"; diff --git a/main/displays/menus/modessettingsmenu.cpp b/main/displays/menus/modessettingsmenu.cpp index 1194643..5ec2f39 100644 --- a/main/displays/menus/modessettingsmenu.cpp +++ b/main/displays/menus/modessettingsmenu.cpp @@ -9,6 +9,7 @@ #include "displays/menus/defaultmodesettingsmenu.h" #include "displays/menus/gametrakmodesettingsmenu.h" #include "displays/menus/larsmmodesettingsmenu.h" +#include "displays/menus/remotecontrolmodesettingsmenu.h" #include "displays/menus/tempomatmodesettingsmenu.h" namespace { @@ -16,6 +17,7 @@ constexpr char TEXT_MODESSETTINGS[] = "Modes settings"; constexpr char TEXT_DEFAULTMODESETTIGNS[] = "Default mode settings"; constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; +constexpr char TEXT_REMOTECONTROLMODESETTINGS[] = "Remote mode settings"; constexpr char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; constexpr char TEXT_BACK[] = "Back"; } // namespace @@ -26,6 +28,7 @@ ModesSettingsMenu::ModesSettingsMenu() constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction>>(); constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); #ifdef FEATURE_GAMETRAK constructMenuItem, SwitchScreenAction>>(); #endif diff --git a/main/displays/menus/remotecontrolmodesettingsmenu.cpp b/main/displays/menus/remotecontrolmodesettingsmenu.cpp new file mode 100644 index 0000000..54b5c46 --- /dev/null +++ b/main/displays/menus/remotecontrolmodesettingsmenu.cpp @@ -0,0 +1,45 @@ +#include "remotecontrolmodesettingsmenu.h" + +// 3rdparty lib includes +#include +#include +#include +#include +#include + +// local includes +#include "accessors/settingsaccessors.h" +#include "changevaluedisplay_unifiedmodelmode.h" +#include "displays/bobbychangevaluedisplay.h" + +namespace { + constexpr char TEXT_REMOTEMODESETTINGS[] = "Remote mode settings"; + constexpr char TEXT_MODELMODE[] = "Model mode"; + constexpr char TEXT_BACK[] = "Back"; + + using RemoteControlModeModelModeChangeDisplay = espgui::makeComponent< + BobbyChangeValueDisplay, + espgui::StaticText, + RemoteControlModeModelModeAccessor, + espgui::ConfirmActionInterface, + espgui::BackActionInterface + >; +} // namespace + +RemoteControlModeSettingsMenu::RemoteControlModeSettingsMenu() +{ + using namespace espgui; + + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +std::string RemoteControlModeSettingsMenu::text() const +{ + return TEXT_REMOTEMODESETTINGS; +} + +void RemoteControlModeSettingsMenu::back() +{ + espgui::popScreen(); +} diff --git a/main/displays/menus/remotecontrolmodesettingsmenu.h b/main/displays/menus/remotecontrolmodesettingsmenu.h new file mode 100644 index 0000000..f5769d4 --- /dev/null +++ b/main/displays/menus/remotecontrolmodesettingsmenu.h @@ -0,0 +1,14 @@ +#pragma once + +// local includes +#include "displays/bobbymenudisplay.h" + +class RemoteControlModeSettingsMenu : public BobbyMenuDisplay +{ +public: + RemoteControlModeSettingsMenu(); + + std::string text() const override; + + void back() override; +}; diff --git a/main/modes/remotecontrolmode.cpp b/main/modes/remotecontrolmode.cpp index a8819fc..6b2c9a2 100644 --- a/main/modes/remotecontrolmode.cpp +++ b/main/modes/remotecontrolmode.cpp @@ -13,6 +13,7 @@ RemoteControlMode remoteControlMode; void RemoteControlMode::update() { + auto pair = split(profileSettings.defaultMode.modelMode); if (!m_remoteCommand || espchrono::ago(m_timestamp) > 500ms) { start(); @@ -30,8 +31,8 @@ void RemoteControlMode::update() { for (bobbycar::protocol::serial::MotorState &motor : motors()) { - motor.ctrlTyp = bobbycar::protocol::ControlType::FieldOrientedControl; - motor.ctrlMod = bobbycar::protocol::ControlMode::Torque; + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; motor.cruiseCtrlEna = false; motor.nCruiseMotTgt = 0; } diff --git a/main/presets.h b/main/presets.h index 352df88..16534e2 100644 --- a/main/presets.h +++ b/main/presets.h @@ -121,6 +121,10 @@ constexpr ProfileSettings::WheelchairMode defaultWheelChairMode { }; #endif +constexpr ProfileSettings::RemoteControlMode defaultRemoteControlMode { + .modelMode = UnifiedModelMode::FocTorque, +}; + constexpr ProfileSettings defaultProfileSettings { .limits = defaultLimits, .controllerHardware = defaultControllerHardware, @@ -129,6 +133,7 @@ constexpr ProfileSettings defaultProfileSettings { .larsmMode = defaultLarsmMode, .mickMode = defaultMickMode, .motortestMode = defaultMotortestMode, + .remoteControlMode = defaultRemoteControlMode, #ifdef FEATURE_JOYSTICK .wheelchairMode = defaultWheelChairMode #endif diff --git a/main/profilesettings.h b/main/profilesettings.h index 296e317..d21409e 100644 --- a/main/profilesettings.h +++ b/main/profilesettings.h @@ -61,6 +61,10 @@ struct ProfileSettings uint16_t maxPwm; } motortestMode; + struct RemoteControlMode { + UnifiedModelMode modelMode; + } remoteControlMode; + #ifdef FEATURE_JOYSTICK struct WheelchairMode { uint16_t sensitivity0Kmh; @@ -117,6 +121,8 @@ void ProfileSettings::executeForEveryProfileSetting(T &&callable) callable("mick.modelMode", mickMode.modelMode); callable("mick.smoothing", mickMode.smoothing); + callable("rc.modelMode", remoteControlMode.modelMode); + #ifdef FEATURE_JOYSTICK callable("wc.ses0", wheelchairMode.sensitivity0Kmh); callable("wc.ses50", wheelchairMode.sensitivity50Kmh);