Files
bobbycar-boardcomputer-firm…/main/displays/menus/controllerhardwaresettingsmenu.cpp
2021-12-30 03:17:30 +01:00

104 lines
4.8 KiB
C++

#include "controllerhardwaresettingsmenu.h"
// system includes
#include <ratio>
// 3rdparty lib includes
#include "changevaluedisplay.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
// local includes
#include "displays/bobbychangevaluedisplay.h"
#include "utils.h"
#include "globals.h"
#include "accessors/settingsaccessors.h"
#include "displays/menus/enablemenu.h"
#include "displays/menus/invertmenu.h"
#include "displays/menus/settingsmenu.h"
#include "bobbycheckbox.h"
namespace {
constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings";
constexpr char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)";
constexpr char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)";
constexpr char TEXT_NUMMAGNETPOLES[] = "Num magnet poles";
constexpr char TEXT_SETENABLED[] = "Set enabled";
constexpr char TEXT_SETINVERTED[] = "Set inverted";
constexpr char TEXT_SWAPFRONTBACK[] = "Swap front/back";
#ifdef FEATURE_CAN
constexpr char TEXT_FRONTSENDCAN[] = "Front send CAN";
constexpr char TEXT_BACKSENDCAN[] = "Back send CAN";
constexpr char TEXT_CANTRANSMITTIMEOUT[] = "CanTransmitTimeout";
constexpr char TEXT_CANRECEIVETIMEOUT[] = "CanReceiveTimeout";
#endif
constexpr char TEXT_BACK[] = "Back";
using WheelDiameterMmChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_WHEELDIAMETERMM>,
WheelDiameterMmAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>
>;
using WheelDiameterInchChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<float>,
espgui::StaticText<TEXT_WHEELDIAMETERINCH>,
WheelDiameterInchAccessor,
espgui::RatioNumberStep<float, std::ratio<1,10>>,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>
>;
using NumMagnetPolesChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_NUMMAGNETPOLES>,
NumMagnetPolesAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>
>;
#ifdef FEATURE_CAN
using CanTransmitTimeoutChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CANTRANSMITTIMEOUT>,
CanTransmitTimeoutAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>
>;
using CanReceiveTimeoutChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CANRECEIVETIMEOUT>,
CanReceiveTimeoutAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>
>;
#endif
} // namespace
ControllerHardwareSettingsMenu::ControllerHardwareSettingsMenu()
{
using namespace espgui;
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETENABLED>, SwitchScreenAction<EnableMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETINVERTED>, SwitchScreenAction<InvertMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERMM>, SwitchScreenAction<WheelDiameterMmChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SWAPFRONTBACK>, BobbyCheckbox, SwapFrontBackAccessor>>();
#ifdef FEATURE_CAN
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTSENDCAN>, BobbyCheckbox, SendFrontCanCmdAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKSENDCAN>, BobbyCheckbox, SendBackCanCmdAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CANTRANSMITTIMEOUT>, SwitchScreenAction<CanTransmitTimeoutChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CANRECEIVETIMEOUT>, SwitchScreenAction<CanReceiveTimeoutChangeScreen>>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
std::string ControllerHardwareSettingsMenu::text() const
{
return TEXT_CONTROLLERHARDWARESETTINGS;
}
void ControllerHardwareSettingsMenu::back()
{
espgui::switchScreen<SettingsMenu>();
}