Even more refactorings
This commit is contained in:
Submodule components/esp-gui-lib updated: aad3fcedcb...db066968d2
@ -93,7 +93,6 @@ set(headers
|
||||
displays/gameoflifedisplay.h
|
||||
displays/gametrakcalibratedisplay.h
|
||||
displays/garagedisplay.h
|
||||
displays/graphdisplay.h
|
||||
displays/ledstripcolorsdisplay.h
|
||||
displays/lockscreen.h
|
||||
displays/menus/aboutmenu.h
|
||||
@ -148,7 +147,6 @@ set(headers
|
||||
displays/poweroffdisplay.h
|
||||
displays/powersupplydisplay.h
|
||||
displays/spirodisplay.h
|
||||
displays/splitgraphdisplay.h
|
||||
displays/starfielddisplay.h
|
||||
displays/statusdisplay.h
|
||||
displays/updatedisplay.h
|
||||
@ -278,7 +276,6 @@ set(sources
|
||||
displays/gameoflifedisplay.cpp
|
||||
displays/gametrakcalibratedisplay.cpp
|
||||
displays/garagedisplay.cpp
|
||||
displays/graphdisplay.cpp
|
||||
displays/ledstripcolorsdisplay.cpp
|
||||
displays/lockscreen.cpp
|
||||
displays/menus/aboutmenu.cpp
|
||||
@ -331,7 +328,6 @@ set(sources
|
||||
displays/poweroffdisplay.cpp
|
||||
displays/powersupplydisplay.cpp
|
||||
displays/spirodisplay.cpp
|
||||
displays/splitgraphdisplay.cpp
|
||||
displays/starfielddisplay.cpp
|
||||
displays/statusdisplay.cpp
|
||||
displays/updatedisplay.cpp
|
||||
|
@ -12,10 +12,6 @@
|
||||
#include "display.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
|
||||
namespace {
|
||||
class DemosMenu;
|
||||
}
|
||||
|
||||
namespace {
|
||||
class GameOfLifeDisplay : public Display, public ConfirmActionInterface<SwitchScreenAction<DemosMenu>>, public BackActionInterface<SwitchScreenAction<DemosMenu>>
|
||||
{
|
||||
|
@ -1,77 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "display.h"
|
||||
#include "textinterface.h"
|
||||
#include "widgets/label.h"
|
||||
#include "widgets/graph.h"
|
||||
#include "globals.h"
|
||||
#include "statistics.h"
|
||||
|
||||
namespace {
|
||||
template<size_t COUNT>
|
||||
class GraphAccessorInterface
|
||||
{
|
||||
public:
|
||||
virtual std::array<std::reference_wrapper<const statistics::ContainerType>, COUNT> getBuffers() const = 0;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class SingleGraphAccessor : public virtual GraphAccessorInterface<1>
|
||||
{
|
||||
public:
|
||||
Graph<200, 1>::Container getBuffers() const
|
||||
{
|
||||
return {T{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T1, typename T2>
|
||||
class DualGraphAccessor : public virtual GraphAccessorInterface<2>
|
||||
{
|
||||
public:
|
||||
Graph<200, 2>::Container getBuffers() const
|
||||
{
|
||||
return {T1{}.getBuffer(), T2{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
|
||||
template<size_t COUNT>
|
||||
class GraphDisplay :
|
||||
public Display,
|
||||
public virtual TextInterface,
|
||||
public virtual GraphAccessorInterface<COUNT>
|
||||
{
|
||||
public:
|
||||
void initScreen() override;
|
||||
void redraw() override;
|
||||
|
||||
private:
|
||||
static constexpr int screenHeight = 320, topMargin = 40, bottomMargin = 10, labelOffset = -5;
|
||||
static constexpr int graphHeight = screenHeight-topMargin-bottomMargin;
|
||||
|
||||
Label m_titleLabel{5, 5}; // 230, 25
|
||||
|
||||
Graph<200, COUNT> m_graph{0, 40, 270};
|
||||
};
|
||||
|
||||
template<size_t COUNT>
|
||||
void GraphDisplay<COUNT>::initScreen()
|
||||
{
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
|
||||
m_titleLabel.start();
|
||||
tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE);
|
||||
|
||||
m_graph.start(static_cast<const GraphAccessorInterface<COUNT> &>(*this).getBuffers());
|
||||
}
|
||||
|
||||
template<size_t COUNT>
|
||||
void GraphDisplay<COUNT>::redraw()
|
||||
{
|
||||
tft.setTextFont(4);
|
||||
tft.setTextColor(TFT_YELLOW, TFT_BLACK);
|
||||
m_titleLabel.redraw(text());
|
||||
|
||||
m_graph.redraw(static_cast<const GraphAccessorInterface<COUNT> &>(*this).getBuffers());
|
||||
}
|
||||
}
|
@ -0,0 +1,103 @@
|
||||
#include "buzzermenu.h"
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include "changevaluedisplay.h"
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "actions/toggleboolaction.h"
|
||||
#include "checkboxicon.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#include "utils.h"
|
||||
#include "globals.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
#include "displays/menus/settingsmenu.h"
|
||||
|
||||
namespace {
|
||||
struct FrontFreqAccessor : public espgui::RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } };
|
||||
using FrontFreqChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_FRONTFREQ>,
|
||||
FrontFreqAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct FrontPatternAccessor : public espgui::RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.front.command.buzzer.pattern; } };
|
||||
using FrontPatternChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_FRONTPATTERN>,
|
||||
FrontPatternAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct BackFreqAccessor : public espgui::RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.back.command.buzzer.freq; } };
|
||||
using BackFreqChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_BACKFREQ>,
|
||||
BackFreqAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct BackPatternAccessor : public espgui::RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.back.command.buzzer.pattern; } };
|
||||
using BackPatternChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_BACKPATTERN>,
|
||||
BackPatternAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
using ReverseBeepFreq0ChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_REVERSEBEEPFREQ0>,
|
||||
ReverseBeepFreq0Accessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepFreq1ChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_REVERSEBEEPFREQ1>,
|
||||
ReverseBeepFreq1Accessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepDuration0ChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_REVERSEBEEPDURATION0>,
|
||||
ReverseBeepDuration0Accessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepDuration1ChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_REVERSEBEEPDURATION1>,
|
||||
ReverseBeepDuration1Accessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<BuzzerMenu>>,
|
||||
espgui::SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
BuzzerMenu::BuzzerMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTFREQ>, SwitchScreenAction<FrontFreqChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTPATTERN>, SwitchScreenAction<FrontPatternChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKFREQ>, SwitchScreenAction<BackFreqChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKPATTERN>, SwitchScreenAction<BackPatternChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEP>, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPFREQ0>, SwitchScreenAction<ReverseBeepFreq0ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPFREQ1>, SwitchScreenAction<ReverseBeepFreq1ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPDURATION0>, SwitchScreenAction<ReverseBeepDuration0ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPDURATION1>, SwitchScreenAction<ReverseBeepDuration1ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
|
||||
void BuzzerMenu::back()
|
||||
{
|
||||
switchScreen<SettingsMenu>();
|
||||
}
|
||||
|
@ -1,104 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
// local includes
|
||||
// 3rdparty lib includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "changevaluedisplay.h"
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "actions/toggleboolaction.h"
|
||||
#include "checkboxicon.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#include "texts.h"
|
||||
#include "globals.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
struct FrontFreqAccessor : public RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } };
|
||||
using FrontFreqChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_FRONTFREQ>,
|
||||
FrontFreqAccessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct FrontPatternAccessor : public RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.front.command.buzzer.pattern; } };
|
||||
using FrontPatternChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_FRONTPATTERN>,
|
||||
FrontPatternAccessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct BackFreqAccessor : public RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.back.command.buzzer.freq; } };
|
||||
using BackFreqChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_BACKFREQ>,
|
||||
BackFreqAccessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
struct BackPatternAccessor : public RefAccessor<uint8_t> { uint8_t &getRef() const override { return controllers.back.command.buzzer.pattern; } };
|
||||
using BackPatternChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_BACKPATTERN>,
|
||||
BackPatternAccessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
using ReverseBeepFreq0ChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_REVERSEBEEPFREQ0>,
|
||||
ReverseBeepFreq0Accessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepFreq1ChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_REVERSEBEEPFREQ1>,
|
||||
ReverseBeepFreq1Accessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepDuration0ChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_REVERSEBEEPDURATION0>,
|
||||
ReverseBeepDuration0Accessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
using ReverseBeepDuration1ChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_REVERSEBEEPDURATION1>,
|
||||
ReverseBeepDuration1Accessor,
|
||||
BackActionInterface<SwitchScreenAction<BuzzerMenu>>,
|
||||
SwitchScreenAction<BuzzerMenu>
|
||||
>;
|
||||
|
||||
class BuzzerMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_BUZZER>,
|
||||
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_BUZZER>
|
||||
{
|
||||
public:
|
||||
BuzzerMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTFREQ>, SwitchScreenAction<FrontFreqChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTPATTERN>, SwitchScreenAction<FrontPatternChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKFREQ>, SwitchScreenAction<BackFreqChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKPATTERN>, SwitchScreenAction<BackPatternChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEP>, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPFREQ0>, SwitchScreenAction<ReverseBeepFreq0ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPFREQ1>, SwitchScreenAction<ReverseBeepFreq1ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPDURATION0>, SwitchScreenAction<ReverseBeepDuration0ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REVERSEBEEPDURATION1>, SwitchScreenAction<ReverseBeepDuration1ChangeScreen>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
BuzzerMenu();
|
||||
|
||||
void back() override;
|
||||
};
|
||||
} // namespace
|
||||
|
@ -0,0 +1,84 @@
|
||||
#include "controllerhardwaresettingsmenu.h"
|
||||
|
||||
// system includes
|
||||
#include <ratio>
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include "changevaluedisplay.h"
|
||||
#include "actions/toggleboolaction.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "checkboxicon.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#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"
|
||||
|
||||
namespace {
|
||||
using WheelDiameterMmChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_WHEELDIAMETERMM>,
|
||||
WheelDiameterMmAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using WheelDiameterInchChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<float>,
|
||||
espgui::StaticText<TEXT_WHEELDIAMETERINCH>,
|
||||
WheelDiameterInchAccessor,
|
||||
espgui::RatioNumberStep<float, std::ratio<1,10>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using NumMagnetPolesChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_NUMMAGNETPOLES>,
|
||||
NumMagnetPolesAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
#ifdef FEATURE_CAN
|
||||
using CanTransmitTimeoutChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_CANTRANSMITTIMEOUT>,
|
||||
CanTransmitTimeoutAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using CanReceiveTimeoutChangeScreen = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<int16_t>,
|
||||
espgui::StaticText<TEXT_CANRECEIVETIMEOUT>,
|
||||
CanReceiveTimeoutAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
ControllerHardwareSettingsMenu::ControllerHardwareSettingsMenu()
|
||||
{
|
||||
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>, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>();
|
||||
#ifdef FEATURE_CAN
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTSENDCAN>, ToggleBoolAction, CheckboxIcon, SendFrontCanCmdAccessor>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKSENDCAN>, ToggleBoolAction, CheckboxIcon, 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>>>();
|
||||
}
|
||||
|
||||
void ControllerHardwareSettingsMenu::back()
|
||||
{
|
||||
switchScreen<SettingsMenu>();
|
||||
}
|
||||
|
@ -1,82 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <ratio>
|
||||
// 3rdparty lib includes
|
||||
#include "menudisplay.h"
|
||||
|
||||
// local includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "changevaluedisplay.h"
|
||||
#include "actions/toggleboolaction.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "checkboxicon.h"
|
||||
#include "icons/back.h"
|
||||
#include "texts.h"
|
||||
#include "globals.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
using WheelDiameterMmChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_WHEELDIAMETERMM>,
|
||||
WheelDiameterMmAccessor,
|
||||
BackActionInterface<SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using WheelDiameterInchChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<float>,
|
||||
StaticText<TEXT_WHEELDIAMETERINCH>,
|
||||
WheelDiameterInchAccessor,
|
||||
RatioNumberStep<float, std::ratio<1,10>>,
|
||||
BackActionInterface<SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using NumMagnetPolesChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_NUMMAGNETPOLES>,
|
||||
NumMagnetPolesAccessor,
|
||||
BackActionInterface<SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
#ifdef FEATURE_CAN
|
||||
using CanTransmitTimeoutChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_CANTRANSMITTIMEOUT>,
|
||||
CanTransmitTimeoutAccessor,
|
||||
BackActionInterface<SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
using CanReceiveTimeoutChangeScreen = makeComponent<
|
||||
ChangeValueDisplay<int16_t>,
|
||||
StaticText<TEXT_CANRECEIVETIMEOUT>,
|
||||
CanReceiveTimeoutAccessor,
|
||||
BackActionInterface<SwitchScreenAction<ControllerHardwareSettingsMenu>>,
|
||||
SwitchScreenAction<ControllerHardwareSettingsMenu>
|
||||
>;
|
||||
#endif
|
||||
|
||||
class ControllerHardwareSettingsMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_CONTROLLERHARDWARESETTINGS>,
|
||||
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_CONTROLLERHARDWARESETTINGS>
|
||||
{
|
||||
public:
|
||||
ControllerHardwareSettingsMenu()
|
||||
{
|
||||
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>, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>();
|
||||
#ifdef FEATURE_CAN
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTSENDCAN>, ToggleBoolAction, CheckboxIcon, SendFrontCanCmdAccessor>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKSENDCAN>, ToggleBoolAction, CheckboxIcon, 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>>>();
|
||||
}
|
||||
ControllerHardwareSettingsMenu();
|
||||
|
||||
void back() override;
|
||||
};
|
||||
} // namespace
|
||||
|
@ -0,0 +1,30 @@
|
||||
#include "demosmenu.h"
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "displays/starfielddisplay.h"
|
||||
#include "displays/pingpongdisplay.h"
|
||||
#include "displays/spirodisplay.h"
|
||||
#include "displays/gameoflifedisplay.h"
|
||||
#include "displays/menus/mainmenu.h"
|
||||
|
||||
// local includes
|
||||
#include "utils.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
DemosMenu::DemosMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STARFIELD>, SwitchScreenAction<StarfieldDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PINGPONG>, SwitchScreenAction<PingPongDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SPIRO>, SwitchScreenAction<SpiroDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMEOFLIFE>, SwitchScreenAction<GameOfLifeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
|
||||
void DemosMenu::back()
|
||||
{
|
||||
switchScreen<MainMenu>();
|
||||
}
|
||||
|
@ -1,29 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
// local includes
|
||||
// 3rdparty lib includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#include "texts.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
class DemosMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_DEMOS>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_DEMOS>
|
||||
{
|
||||
public:
|
||||
DemosMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STARFIELD>, SwitchScreenAction<StarfieldDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PINGPONG>, SwitchScreenAction<PingPongDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SPIRO>, SwitchScreenAction<SpiroDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMEOFLIFE>, SwitchScreenAction<GameOfLifeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
DemosMenu();
|
||||
|
||||
void back() override;
|
||||
};
|
||||
} // namespace
|
||||
|
@ -11,11 +11,6 @@
|
||||
#include "texts.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
|
||||
// forward declares
|
||||
namespace {
|
||||
class ControllerHardwareSettingsMenu;
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
|
@ -0,0 +1,183 @@
|
||||
#include "graphsmenu.h"
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "graphdisplay.h"
|
||||
#include "splitgraphdisplay.h"
|
||||
|
||||
// local includes
|
||||
#include "utils.h"
|
||||
#include "statistics.h"
|
||||
#include "displays/menus/mainmenu.h"
|
||||
|
||||
namespace {
|
||||
using GasGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_GAS>,
|
||||
espgui::SingleGraphAccessor<GasStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BremsGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_BREMS>,
|
||||
espgui::SingleGraphAccessor<BremsStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using PotisGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<2>,
|
||||
espgui::StaticText<TEXT_POTIS>,
|
||||
espgui::DualGraphAccessor<GasStatistics, BremsStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using PotisSplitGraphDisplay = espgui::makeComponent<
|
||||
espgui::SplitGraphDisplay<1, 1>,
|
||||
espgui::StaticText<TEXT_POTIS>,
|
||||
espgui::SingleTopGraphAccessor<GasStatistics>,
|
||||
espgui::SingleBottomGraphAccessor<BremsStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using AvgSpeedGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_AVGSPEED>,
|
||||
espgui::SingleGraphAccessor<AvgSpeedStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using AvgSpeedKmhGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_AVGSPEEDKMH>,
|
||||
espgui::SingleGraphAccessor<AvgSpeedKmhStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using SumCurrentGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_SUMCURRENT>,
|
||||
espgui::SingleGraphAccessor<SumCurrentStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using FrontVoltageGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_FRONTVOLTAGE>,
|
||||
espgui::SingleGraphAccessor<FrontVoltageStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BackVoltageGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_BACKVOLTAGE>,
|
||||
espgui::SingleGraphAccessor<BackVoltageStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using VoltagesGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<2>,
|
||||
espgui::StaticText<TEXT_VOLTAGES>,
|
||||
espgui::DualGraphAccessor<FrontVoltageStatistics, BackVoltageStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using VoltagesSplitGraphDisplay = espgui::makeComponent<
|
||||
espgui::SplitGraphDisplay<1, 1>,
|
||||
espgui::StaticText<TEXT_VOLTAGES>,
|
||||
espgui::SingleTopGraphAccessor<FrontVoltageStatistics>,
|
||||
espgui::SingleBottomGraphAccessor<BackVoltageStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
#ifdef FEATURE_BMS
|
||||
using BmsVoltageGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_BMSVOLTAGE>,
|
||||
espgui::SingleGraphAccessor<BmsVoltageStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BmsCurrentGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_BMSCURRENT>,
|
||||
espgui::SingleGraphAccessor<BmsCurrentStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BmsPowerGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_BMSPOWER>,
|
||||
espgui::SingleGraphAccessor<BmsPowerStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using SumCurrentsComparisonGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<2>,
|
||||
espgui::StaticText<TEXT_SUMCURRENTSCOMPARISON>,
|
||||
DualGraphAccessor<SumCurrentStatistics, BmsCurrentStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
#endif
|
||||
|
||||
class MotorCurrentsStatistics : public virtual espgui::GraphAccessorInterface<4>
|
||||
{
|
||||
std::array<std::reference_wrapper<const statistics::ContainerType>, 4> getBuffers() const override
|
||||
{
|
||||
return {FrontLeftCurrentStatistics{}.getBuffer(), FrontRightCurrentStatistics{}.getBuffer(), BackLeftCurrentStatistics{}.getBuffer(), BackRightCurrentStatistics{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
using MotorCurrentsGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<4>,
|
||||
espgui::StaticText<TEXT_MOTORCURRENTS>,
|
||||
MotorCurrentsStatistics,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using RssiGraphDisplay = espgui::makeComponent<
|
||||
espgui::GraphDisplay<1>,
|
||||
espgui::StaticText<TEXT_RSSI>,
|
||||
espgui::SingleGraphAccessor<RssiStatistics>,
|
||||
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<GraphsMenu>>,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
|
||||
GraphsMenu::GraphsMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAS>, SwitchScreenAction<GasGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BREMS>, SwitchScreenAction<BremsGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POTIS>, SwitchScreenAction<PotisGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POTIS>, SwitchScreenAction<PotisSplitGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_AVGSPEED>, SwitchScreenAction<AvgSpeedGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_AVGSPEEDKMH>, SwitchScreenAction<AvgSpeedKmhGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SUMCURRENT>, SwitchScreenAction<SumCurrentGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTVOLTAGE>, SwitchScreenAction<FrontVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKVOLTAGE>, SwitchScreenAction<BackVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGES>, SwitchScreenAction<VoltagesGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGES>, SwitchScreenAction<VoltagesSplitGraphDisplay>>>();
|
||||
#ifdef FEATURE_BMS
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSVOLTAGE>, SwitchScreenAction<BmsVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSCURRENT>, SwitchScreenAction<BmsCurrentGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSPOWER>, SwitchScreenAction<BmsPowerGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SwitchScreenAction<SumCurrentsComparisonGraphDisplay>>>();
|
||||
#endif
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORCURRENTS>, SwitchScreenAction<MotorCurrentsGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_RSSI>, SwitchScreenAction<RssiGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
|
||||
void GraphsMenu::back()
|
||||
{
|
||||
switchScreen<MainMenu>();
|
||||
}
|
||||
|
@ -2,182 +2,14 @@
|
||||
|
||||
// local includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "texts.h"
|
||||
#include "displays/graphdisplay.h"
|
||||
#include "displays/splitgraphdisplay.h"
|
||||
#include "statistics.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
using GasGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_GAS>,
|
||||
SingleGraphAccessor<GasStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BremsGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_BREMS>,
|
||||
SingleGraphAccessor<BremsStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using PotisGraphDisplay = makeComponent<
|
||||
GraphDisplay<2>,
|
||||
StaticText<TEXT_POTIS>,
|
||||
DualGraphAccessor<GasStatistics, BremsStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using PotisSplitGraphDisplay = makeComponent<
|
||||
SplitGraphDisplay<1, 1>,
|
||||
StaticText<TEXT_POTIS>,
|
||||
SingleTopGraphAccessor<GasStatistics>,
|
||||
SingleBottomGraphAccessor<BremsStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using AvgSpeedGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_AVGSPEED>,
|
||||
SingleGraphAccessor<AvgSpeedStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using AvgSpeedKmhGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_AVGSPEEDKMH>,
|
||||
SingleGraphAccessor<AvgSpeedKmhStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using SumCurrentGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_SUMCURRENT>,
|
||||
SingleGraphAccessor<SumCurrentStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using FrontVoltageGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_FRONTVOLTAGE>,
|
||||
SingleGraphAccessor<FrontVoltageStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BackVoltageGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_BACKVOLTAGE>,
|
||||
SingleGraphAccessor<BackVoltageStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using VoltagesGraphDisplay = makeComponent<
|
||||
GraphDisplay<2>,
|
||||
StaticText<TEXT_VOLTAGES>,
|
||||
DualGraphAccessor<FrontVoltageStatistics, BackVoltageStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using VoltagesSplitGraphDisplay = makeComponent<
|
||||
SplitGraphDisplay<1, 1>,
|
||||
StaticText<TEXT_VOLTAGES>,
|
||||
SingleTopGraphAccessor<FrontVoltageStatistics>,
|
||||
SingleBottomGraphAccessor<BackVoltageStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
#ifdef FEATURE_BMS
|
||||
using BmsVoltageGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_BMSVOLTAGE>,
|
||||
SingleGraphAccessor<BmsVoltageStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BmsCurrentGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_BMSCURRENT>,
|
||||
SingleGraphAccessor<BmsCurrentStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using BmsPowerGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_BMSPOWER>,
|
||||
SingleGraphAccessor<BmsPowerStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
using SumCurrentsComparisonGraphDisplay = makeComponent<
|
||||
GraphDisplay<2>,
|
||||
StaticText<TEXT_SUMCURRENTSCOMPARISON>,
|
||||
DualGraphAccessor<SumCurrentStatistics, BmsCurrentStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
#endif
|
||||
|
||||
class MotorCurrentsStatistics : public virtual GraphAccessorInterface<4>
|
||||
{
|
||||
std::array<std::reference_wrapper<const statistics::ContainerType>, 4> getBuffers() const override
|
||||
{
|
||||
return {FrontLeftCurrentStatistics{}.getBuffer(), FrontRightCurrentStatistics{}.getBuffer(), BackLeftCurrentStatistics{}.getBuffer(), BackRightCurrentStatistics{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
using MotorCurrentsGraphDisplay = makeComponent<
|
||||
GraphDisplay<4>,
|
||||
StaticText<TEXT_MOTORCURRENTS>,
|
||||
MotorCurrentsStatistics,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
using RssiGraphDisplay = makeComponent<
|
||||
GraphDisplay<1>,
|
||||
StaticText<TEXT_RSSI>,
|
||||
SingleGraphAccessor<RssiStatistics>,
|
||||
ConfirmActionInterface<SwitchScreenAction<GraphsMenu>>,
|
||||
BackActionInterface<SwitchScreenAction<GraphsMenu>>
|
||||
>;
|
||||
|
||||
class GraphsMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_GRAPHS>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_GRAPHS>
|
||||
{
|
||||
public:
|
||||
GraphsMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAS>, SwitchScreenAction<GasGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BREMS>, SwitchScreenAction<BremsGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POTIS>, SwitchScreenAction<PotisGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POTIS>, SwitchScreenAction<PotisSplitGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_AVGSPEED>, SwitchScreenAction<AvgSpeedGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_AVGSPEEDKMH>, SwitchScreenAction<AvgSpeedKmhGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SUMCURRENT>, SwitchScreenAction<SumCurrentGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FRONTVOLTAGE>, SwitchScreenAction<FrontVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACKVOLTAGE>, SwitchScreenAction<BackVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGES>, SwitchScreenAction<VoltagesGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_VOLTAGES>, SwitchScreenAction<VoltagesSplitGraphDisplay>>>();
|
||||
#ifdef FEATURE_BMS
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSVOLTAGE>, SwitchScreenAction<BmsVoltageGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSCURRENT>, SwitchScreenAction<BmsCurrentGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMSPOWER>, SwitchScreenAction<BmsPowerGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SUMCURRENTSCOMPARISON>, SwitchScreenAction<SumCurrentsComparisonGraphDisplay>>>();
|
||||
#endif
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORCURRENTS>, SwitchScreenAction<MotorCurrentsGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_RSSI>, SwitchScreenAction<RssiGraphDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
GraphsMenu();
|
||||
|
||||
void back() override;
|
||||
};
|
||||
} // namespace
|
||||
|
@ -11,11 +11,6 @@
|
||||
#include "texts.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
|
||||
// forward declares
|
||||
namespace {
|
||||
class ControllerHardwareSettingsMenu;
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
|
@ -0,0 +1,53 @@
|
||||
#include "larsmmodesettingsmenu.h"
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include "changevaluedisplay.h"
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#include "utils.h"
|
||||
#include "changevaluedisplay_larsmmode_mode.h"
|
||||
#include "changevaluedisplay_unifiedmodelmode.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
#include "displays/menus/modessettingsmenu.h"
|
||||
|
||||
namespace {
|
||||
using LarsmModeModelModeChangeDisplay = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<UnifiedModelMode>,
|
||||
espgui::StaticText<TEXT_MODELMODE>,
|
||||
LarsmModeModelModeAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
using LarsmModeModeChangeDisplay = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<LarsmModeMode>,
|
||||
espgui::StaticText<TEXT_SETMODE>,
|
||||
LarsmModeModeAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
using LarsmModeIterationsChangeDisplay = espgui::makeComponent<
|
||||
espgui::ChangeValueDisplay<uint8_t>,
|
||||
espgui::StaticText<TEXT_SETITERATIONS>,
|
||||
LarsmModeIterationsAccessor,
|
||||
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
espgui::SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
LarsmModeSettingsMenu::LarsmModeSettingsMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<LarsmModeModelModeChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETMODE>, SwitchScreenAction<LarsmModeModeChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETITERATIONS>, SwitchScreenAction<LarsmModeIterationsChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
|
||||
void LarsmModeSettingsMenu::back()
|
||||
{
|
||||
switchScreen<ModesSettingsMenu>();
|
||||
}
|
||||
|
@ -1,54 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
// 3rdparty lib includes
|
||||
|
||||
// local includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "changevaluedisplay.h"
|
||||
#include "changevaluedisplay_larsmmode_mode.h"
|
||||
#include "changevaluedisplay_unifiedmodelmode.h"
|
||||
#include "menuitem.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "texts.h"
|
||||
#include "accessors/settingsaccessors.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
using LarsmModeModelModeChangeDisplay = makeComponent<
|
||||
ChangeValueDisplay<UnifiedModelMode>,
|
||||
StaticText<TEXT_MODELMODE>,
|
||||
LarsmModeModelModeAccessor,
|
||||
BackActionInterface<SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
using LarsmModeModeChangeDisplay = makeComponent<
|
||||
ChangeValueDisplay<LarsmModeMode>,
|
||||
StaticText<TEXT_SETMODE>,
|
||||
LarsmModeModeAccessor,
|
||||
BackActionInterface<SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
using LarsmModeIterationsChangeDisplay = makeComponent<
|
||||
ChangeValueDisplay<uint8_t>,
|
||||
StaticText<TEXT_SETITERATIONS>,
|
||||
LarsmModeIterationsAccessor,
|
||||
BackActionInterface<SwitchScreenAction<LarsmModeSettingsMenu>>,
|
||||
SwitchScreenAction<LarsmModeSettingsMenu>
|
||||
>;
|
||||
|
||||
class LarsmModeSettingsMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_LARSMMODESETTINGS>,
|
||||
public BackActionInterface<SwitchScreenAction<ModesSettingsMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_LARSMMODESETTINGS>
|
||||
{
|
||||
public:
|
||||
LarsmModeSettingsMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<LarsmModeModelModeChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETMODE>, SwitchScreenAction<LarsmModeModeChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETITERATIONS>, SwitchScreenAction<LarsmModeIterationsChangeDisplay>>>();
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
LarsmModeSettingsMenu();
|
||||
|
||||
void back() override;
|
||||
};
|
||||
} // namespace
|
||||
|
@ -0,0 +1,67 @@
|
||||
#include "selectmodemenu.h"
|
||||
|
||||
// local includes
|
||||
#include "utils.h"
|
||||
#include "actions/multiaction.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "globals.h"
|
||||
#include "modes/defaultmode.h"
|
||||
#include "modes/tempomatmode.h"
|
||||
#include "modes/larsmmode.h"
|
||||
#include "modes/remotecontrolmode.h"
|
||||
#include "modes/gametrakmode.h"
|
||||
#include "accessors/globalaccessors.h"
|
||||
#include "displays/menus/mainmenu.h"
|
||||
|
||||
namespace {
|
||||
template<typename T1, T1 &target, typename T2, T2 value>
|
||||
class SetterAction : public espgui::ActionInterface
|
||||
{
|
||||
public:
|
||||
void triggered() override { target = value; }
|
||||
};
|
||||
using SetDefaultModeAction = SetterAction<ModeInterface*, currentMode, DefaultMode*, &modes::defaultMode>;
|
||||
using SetTempomatModeAction = SetterAction<ModeInterface*, currentMode, TempomatMode*, &modes::tempomatMode>;
|
||||
using SetLarsmModeAction = SetterAction<ModeInterface*, currentMode, LarsmMode*, &modes::larsmMode>;
|
||||
using SetRemoteControlModeAction = SetterAction<ModeInterface*, currentMode, RemoteControlMode*, &modes::remoteControlMode>;
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
using SetGametrakModeAction = SetterAction<ModeInterface*, currentMode, GametrakMode*, &modes::gametrakMode>;
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
SelectModeMenu::SelectModeMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_TEMPOMAT, AvgSpeedAccessor>, MultiAction<SetTempomatModeAction, SwitchScreenAction<MainMenu>>>>(); }
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REMOTECONTROL>, MultiAction<SetRemoteControlModeAction, SwitchScreenAction<MainMenu>>>>(); }
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
#endif
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
|
||||
void SelectModeMenu::start()
|
||||
{
|
||||
Base::start();
|
||||
|
||||
if (currentMode == &modes::defaultMode)
|
||||
setSelectedIndex(0);
|
||||
else if (currentMode == &modes::tempomatMode)
|
||||
setSelectedIndex(1);
|
||||
else if (currentMode == &modes::larsmMode)
|
||||
setSelectedIndex(2);
|
||||
else
|
||||
{
|
||||
//Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():"");
|
||||
setSelectedIndex(3);
|
||||
}
|
||||
}
|
||||
|
||||
void SelectModeMenu::back()
|
||||
{
|
||||
switchScreen<MainMenu>();
|
||||
}
|
||||
|
@ -1,74 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
// local includes
|
||||
// 3rdparty lib includes
|
||||
#include "menudisplay.h"
|
||||
#include "utils.h"
|
||||
#include "actions/multiaction.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
// local includes
|
||||
#include "texts.h"
|
||||
#include "globals.h"
|
||||
|
||||
#include "modes/defaultmode.h"
|
||||
#include "modes/tempomatmode.h"
|
||||
#include "modes/larsmmode.h"
|
||||
#include "modes/remotecontrolmode.h"
|
||||
#include "modes/gametrakmode.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace {
|
||||
template<typename T1, T1 &target, typename T2, T2 value>
|
||||
class SetterAction : public ActionInterface
|
||||
{
|
||||
public:
|
||||
void triggered() override { target = value; }
|
||||
};
|
||||
using SetDefaultModeAction = SetterAction<ModeInterface*, currentMode, DefaultMode*, &modes::defaultMode>;
|
||||
using SetTempomatModeAction = SetterAction<ModeInterface*, currentMode, TempomatMode*, &modes::tempomatMode>;
|
||||
using SetLarsmModeAction = SetterAction<ModeInterface*, currentMode, LarsmMode*, &modes::larsmMode>;
|
||||
using SetRemoteControlModeAction = SetterAction<ModeInterface*, currentMode, RemoteControlMode*, &modes::remoteControlMode>;
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
using SetGametrakModeAction = SetterAction<ModeInterface*, currentMode, GametrakMode*, &modes::gametrakMode>;
|
||||
#endif
|
||||
|
||||
class SelectModeMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_SELECTMODE>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_SELECTMODE>
|
||||
{
|
||||
using Base = MenuDisplay;
|
||||
using Base = espgui::MenuDisplay;
|
||||
|
||||
public:
|
||||
SelectModeMenu()
|
||||
{
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_TEMPOMAT, AvgSpeedAccessor>, MultiAction<SetTempomatModeAction, SwitchScreenAction<MainMenu>>>>(); }
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REMOTECONTROL>, MultiAction<SetRemoteControlModeAction, SwitchScreenAction<MainMenu>>>>(); }
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>();
|
||||
#endif
|
||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||
}
|
||||
SelectModeMenu();
|
||||
|
||||
void start() override;
|
||||
void back() override;
|
||||
};
|
||||
|
||||
void SelectModeMenu::start()
|
||||
{
|
||||
Base::start();
|
||||
|
||||
if (currentMode == &modes::defaultMode)
|
||||
setSelectedIndex(0);
|
||||
else if (currentMode == &modes::tempomatMode)
|
||||
setSelectedIndex(1);
|
||||
else if (currentMode == &modes::larsmMode)
|
||||
setSelectedIndex(2);
|
||||
else
|
||||
{
|
||||
//Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():"");
|
||||
setSelectedIndex(3);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
@ -11,10 +11,6 @@
|
||||
#include "display.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
|
||||
namespace {
|
||||
class DemosMenu;
|
||||
}
|
||||
|
||||
namespace {
|
||||
class PingPongDisplay : public Display, public ConfirmActionInterface<SwitchScreenAction<DemosMenu>>, public BackActionInterface<SwitchScreenAction<DemosMenu>>
|
||||
{
|
||||
|
@ -11,10 +11,6 @@
|
||||
#include "display.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
|
||||
namespace {
|
||||
class DemosMenu;
|
||||
}
|
||||
|
||||
namespace {
|
||||
class SpiroDisplay : public Display, public DummyConfirm, public BackActionInterface<SwitchScreenAction<DemosMenu>>
|
||||
{
|
||||
|
@ -1,85 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "display.h"
|
||||
#include "textinterface.h"
|
||||
#include "widgets/label.h"
|
||||
#include "widgets/graph.h"
|
||||
#include "globals.h"
|
||||
#include "statistics.h"
|
||||
|
||||
namespace {
|
||||
template<std::size_t COUNT>
|
||||
class TopGraphAccessorInterface
|
||||
{
|
||||
public:
|
||||
virtual typename Graph<200, COUNT>::Container getTopBuffers() const = 0;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class SingleTopGraphAccessor : public virtual TopGraphAccessorInterface<1>
|
||||
{
|
||||
public:
|
||||
typename Graph<200, 1>::Container getTopBuffers() const override
|
||||
{
|
||||
return {T{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
|
||||
template<std::size_t COUNT>
|
||||
class BottomGraphAccessorInterface
|
||||
{
|
||||
public:
|
||||
virtual typename Graph<200, COUNT>::Container getBottomBuffers() const = 0;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class SingleBottomGraphAccessor : public virtual BottomGraphAccessorInterface<1>
|
||||
{
|
||||
public:
|
||||
typename Graph<200, 1>::Container getBottomBuffers() const override
|
||||
{
|
||||
return {T{}.getBuffer()};
|
||||
}
|
||||
};
|
||||
|
||||
template<std::size_t COUNT0, std::size_t COUNT1>
|
||||
class SplitGraphDisplay :
|
||||
public Display,
|
||||
public virtual TextInterface,
|
||||
public virtual TopGraphAccessorInterface<COUNT0>,
|
||||
public virtual BottomGraphAccessorInterface<COUNT1>
|
||||
{
|
||||
public:
|
||||
void initScreen() override;
|
||||
void redraw() override;
|
||||
|
||||
private:
|
||||
Label m_titleLabel{5, 5}; // 230, 25
|
||||
|
||||
Graph<200, COUNT0> m_graph0{0, 40, 133};
|
||||
Graph<200, COUNT1> m_graph1{0, 179, 133};
|
||||
};
|
||||
|
||||
template<std::size_t COUNT0, std::size_t COUNT1>
|
||||
void SplitGraphDisplay<COUNT0, COUNT1>::initScreen()
|
||||
{
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
|
||||
m_titleLabel.start();
|
||||
tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE);
|
||||
|
||||
m_graph0.start(static_cast<const TopGraphAccessorInterface<COUNT0>&>(*this).getTopBuffers());
|
||||
m_graph1.start(static_cast<const BottomGraphAccessorInterface<COUNT1>&>(*this).getBottomBuffers());
|
||||
}
|
||||
|
||||
template<std::size_t COUNT0, std::size_t COUNT1>
|
||||
void SplitGraphDisplay<COUNT0, COUNT1>::redraw()
|
||||
{
|
||||
tft.setTextFont(4);
|
||||
tft.setTextColor(TFT_YELLOW, TFT_BLACK);
|
||||
m_titleLabel.redraw(text());
|
||||
|
||||
m_graph0.redraw(static_cast<const TopGraphAccessorInterface<COUNT0>&>(*this).getTopBuffers());
|
||||
m_graph1.redraw(static_cast<const BottomGraphAccessorInterface<COUNT1>&>(*this).getBottomBuffers());
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
#include "starfielddisplay.h"
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <randomutils.h>
|
||||
#include <esprandom.h>
|
||||
#include <tftinstance.h>
|
||||
#include <screenmanager.h>
|
||||
|
||||
// local includes
|
||||
#include "globals.h"
|
||||
#include "displays/menus/demosmenu.h"
|
||||
|
||||
StarfieldDisplay::StarfieldDisplay() :
|
||||
za(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zb(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zc(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zx(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{}))
|
||||
{
|
||||
}
|
||||
|
||||
void StarfieldDisplay::confirm()
|
||||
{
|
||||
espgui::switchScreen<DemosMenu>();
|
||||
}
|
||||
|
||||
void StarfieldDisplay::back()
|
||||
{
|
||||
espgui::switchScreen<DemosMenu>();
|
||||
}
|
||||
|
||||
void StarfieldDisplay::initScreen()
|
||||
{
|
||||
espgui::tft.fillScreen(TFT_BLACK);
|
||||
espgui::tft.setRotation(1);
|
||||
|
||||
// fastSetup() must be used immediately before fastPixel() to prepare screen
|
||||
// It must be called after any other graphics drawing function call if fastPixel()
|
||||
// is to be called again
|
||||
//tft.fastSetup(); // Prepare plot window range for fast pixel plotting
|
||||
}
|
||||
|
||||
void StarfieldDisplay::redraw()
|
||||
{
|
||||
uint8_t spawnDepthVariation = 255;
|
||||
|
||||
for(int i = 0; i < NSTARS; ++i)
|
||||
{
|
||||
if (sz[i] <= 1)
|
||||
{
|
||||
sx[i] = 160 - 120 + cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{});
|
||||
sy[i] = cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{});
|
||||
sz[i] = spawnDepthVariation--;
|
||||
}
|
||||
else
|
||||
{
|
||||
int old_screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160;
|
||||
int old_screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120;
|
||||
|
||||
// This is a faster pixel drawing function for occassions where many single pixels must be drawn
|
||||
espgui::tft.drawPixel(old_screen_x, old_screen_y,TFT_BLACK);
|
||||
|
||||
sz[i] -= 2;
|
||||
if (sz[i] > 1)
|
||||
{
|
||||
int screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160;
|
||||
int screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120;
|
||||
|
||||
if (screen_x >= 0 && screen_y >= 0 && screen_x < 320 && screen_y < 240)
|
||||
{
|
||||
uint8_t r, g, b;
|
||||
r = g = b = 255 - sz[i];
|
||||
espgui::tft.drawPixel(screen_x, screen_y, espgui::tft.color565(r,g,b));
|
||||
}
|
||||
else
|
||||
sz[i] = 0; // Out of screen, die.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StarfieldDisplay::stop()
|
||||
{
|
||||
espgui::tft.setRotation(0);
|
||||
}
|
||||
|
@ -3,33 +3,22 @@
|
||||
// system includes
|
||||
#include <cstdint>
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <randomutils.h>
|
||||
#include <esprandom.h>
|
||||
|
||||
// local includes
|
||||
#include "display.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "globals.h"
|
||||
|
||||
namespace {
|
||||
class DemosMenu;
|
||||
}
|
||||
|
||||
namespace {
|
||||
class StarfieldDisplay : public Display, public ConfirmActionInterface<SwitchScreenAction<DemosMenu>>, public BackActionInterface<SwitchScreenAction<DemosMenu>>
|
||||
class StarfieldDisplay : public espgui::Display
|
||||
{
|
||||
public:
|
||||
StarfieldDisplay();
|
||||
|
||||
void confirm() override;
|
||||
void back() override;
|
||||
|
||||
void initScreen() override;
|
||||
void redraw() override;
|
||||
void stop() override;
|
||||
|
||||
private:
|
||||
// Fast 0-255 random number generator from http://eternityforest.com/Projects/rng.php:
|
||||
uint8_t rng();
|
||||
|
||||
static constexpr auto NSTARS = 1024;
|
||||
|
||||
uint8_t sx[NSTARS] = {};
|
||||
@ -38,76 +27,3 @@ private:
|
||||
|
||||
uint8_t za, zb, zc, zx;
|
||||
};
|
||||
|
||||
StarfieldDisplay::StarfieldDisplay() :
|
||||
za(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zb(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zc(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{})),
|
||||
zx(cpputils::randomNumber<uint8_t>(espcpputils::esp_random_device{}))
|
||||
{
|
||||
}
|
||||
|
||||
void StarfieldDisplay::initScreen()
|
||||
{
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setRotation(1);
|
||||
|
||||
// fastSetup() must be used immediately before fastPixel() to prepare screen
|
||||
// It must be called after any other graphics drawing function call if fastPixel()
|
||||
// is to be called again
|
||||
//tft.fastSetup(); // Prepare plot window range for fast pixel plotting
|
||||
}
|
||||
|
||||
void StarfieldDisplay::redraw()
|
||||
{
|
||||
uint8_t spawnDepthVariation = 255;
|
||||
|
||||
for(int i = 0; i < NSTARS; ++i)
|
||||
{
|
||||
if (sz[i] <= 1)
|
||||
{
|
||||
sx[i] = 160 - 120 + rng();
|
||||
sy[i] = rng();
|
||||
sz[i] = spawnDepthVariation--;
|
||||
}
|
||||
else
|
||||
{
|
||||
int old_screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160;
|
||||
int old_screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120;
|
||||
|
||||
// This is a faster pixel drawing function for occassions where many single pixels must be drawn
|
||||
tft.drawPixel(old_screen_x, old_screen_y,TFT_BLACK);
|
||||
|
||||
sz[i] -= 2;
|
||||
if (sz[i] > 1)
|
||||
{
|
||||
int screen_x = ((int)sx[i] - 160) * 256 / sz[i] + 160;
|
||||
int screen_y = ((int)sy[i] - 120) * 256 / sz[i] + 120;
|
||||
|
||||
if (screen_x >= 0 && screen_y >= 0 && screen_x < 320 && screen_y < 240)
|
||||
{
|
||||
uint8_t r, g, b;
|
||||
r = g = b = 255 - sz[i];
|
||||
tft.drawPixel(screen_x, screen_y, tft.color565(r,g,b));
|
||||
}
|
||||
else
|
||||
sz[i] = 0; // Out of screen, die.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StarfieldDisplay::stop()
|
||||
{
|
||||
tft.setRotation(0);
|
||||
}
|
||||
|
||||
uint8_t StarfieldDisplay::rng()
|
||||
{
|
||||
zx++;
|
||||
za = (za^zc^zx);
|
||||
zb = (zb+za);
|
||||
zc = (zc+(zb>>1))^za;
|
||||
return zc;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <ring-buffer.h>
|
||||
#include "graphdisplay.h"
|
||||
#include <espwifistack.h>
|
||||
|
||||
// local includes
|
||||
|
Reference in New Issue
Block a user