diff --git a/src/changevaluedisplay.h b/src/changevaluedisplay.h index 54bd889..3de6a21 100644 --- a/src/changevaluedisplay.h +++ b/src/changevaluedisplay.h @@ -136,6 +136,7 @@ void ChangeValueDisplay::confirm() } #include "changevaluedisplay_bool.h" +#include "changevaluedisplay_bluetoothmode.h" #include "changevaluedisplay_controlmode.h" #include "changevaluedisplay_controltype.h" #include "changevaluedisplay_larsmmode_mode.h" diff --git a/src/changevaluedisplay_bluetoothmode.h b/src/changevaluedisplay_bluetoothmode.h new file mode 100644 index 0000000..4a8949d --- /dev/null +++ b/src/changevaluedisplay_bluetoothmode.h @@ -0,0 +1,61 @@ +#pragma once + +#include "changevaluedisplay.h" +#include "menudisplay.h" +#include "staticmenudefinition.h" +#include "utils.h" +#include "actions/dummyaction.h" +#include "icons/back.h" +#include "texts.h" +#include "bluetoothmode.h" + +namespace { +template<> +class ChangeValueDisplay : + public MenuDisplay, + public StaticMenuDefinition< + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction>, + makeComponent, DummyAction, StaticMenuItemIcon<&icons::back>> + >, + public virtual AccessorInterface, + public virtual ActionInterface +{ + using Base = MenuDisplay; + +public: + void start() override; + + void itemPressed(int index) override; +}; + +void ChangeValueDisplay::start() +{ + Base::start(); + + if (getValue() == BluetoothMode::Off) + setSelectedIndex(0); + else if (getValue() == BluetoothMode::Master) + setSelectedIndex(1); + else if (getValue() == BluetoothMode::Slave) + setSelectedIndex(2); + else + { + Serial.printf("Unknown BluetoothMode: %i", int(getValue())); + setSelectedIndex(4); + } +} + +void ChangeValueDisplay::itemPressed(int index) +{ + switch (index) + { + case 0: setValue(BluetoothMode::Off); break; + case 1: setValue(BluetoothMode::Master); break; + case 2: setValue(BluetoothMode::Slave); break; + } + + triggered(); +} +} diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index a56808a..35cb7af 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -5,6 +5,7 @@ #include "menudisplay.h" #include "staticmenudefinition.h" #include "utils.h" +#include "changevaluedisplay.h" #include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" #include "checkboxicon.h" @@ -31,6 +32,15 @@ class MainMenu; } namespace { +class SettingsMenu; +using BluetoothModeChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + BluetoothModeAccessor, + BackActionInterface>, + SwitchScreenAction +>; + struct FrontLedAccessor : public RefAccessor { bool &getRef() const override { return front.command.led; } }; struct BackLedAccessor : public RefAccessor { bool &getRef() const override { return back.command.led; } }; @@ -45,6 +55,7 @@ class SettingsMenu : makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, + makeComponent, SwitchScreenAction>, #ifdef FEATURE_BMS makeComponent, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, #endif diff --git a/src/screens.h b/src/screens.h index d2b5109..22d5033 100644 --- a/src/screens.h +++ b/src/screens.h @@ -118,6 +118,8 @@ union X { UpdateDisplay updateDisplay; #endif + BluetoothModeChangeDisplay bluetoothModeChangeDisplay; + FrontFreqChangeScreen changeFrontFreq; FrontPatternChangeScreen changeFrontPattern; BackFreqChangeScreen changeBackFreq; @@ -254,6 +256,8 @@ template<> decltype(displays.statusDisplay) & template<> decltype(displays.updateDisplay) &getRefByType() { return displays.updateDisplay; } #endif +template<> decltype(displays.bluetoothModeChangeDisplay) &getRefByType() { return displays.bluetoothModeChangeDisplay; } + template<> decltype(displays.changeFrontFreq) &getRefByType() { return displays.changeFrontFreq; } template<> decltype(displays.changeFrontPattern) &getRefByType() { return displays.changeFrontPattern; } template<> decltype(displays.changeBackFreq) &getRefByType() { return displays.changeBackFreq; } diff --git a/src/settingsaccessors.h b/src/settingsaccessors.h index 94cbb03..6305b07 100644 --- a/src/settingsaccessors.h +++ b/src/settingsaccessors.h @@ -15,6 +15,7 @@ struct RefAccessorSaveSettings : public virtual RefAccessor #ifdef FEATURE_BMS struct AutoConnectBmsAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.autoConnectBms; } }; #endif +struct BluetoothModeAccessor : public RefAccessorSaveSettings { BluetoothMode &getRef() const override { return settings.bluetoothMode; } }; struct ReverseBeepAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.reverseBeep; } }; struct ReverseBeepFreq0Accessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.reverseBeepFreq0; } }; struct ReverseBeepFreq1Accessor : public RefAccessorSaveSettings { uint8_t &getRef() const override { return settings.reverseBeepFreq1; } }; diff --git a/src/texts.h b/src/texts.h index e67fa00..816ce5c 100644 --- a/src/texts.h +++ b/src/texts.h @@ -68,6 +68,7 @@ constexpr char TEXT_WIFISETTINGS[] = "WiFi settings"; constexpr char TEXT_MODESSETTINGS[] = "Modes settings"; constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; +constexpr char TEXT_BLUETOOTHMODE[] = "Bluetooth mode"; constexpr char TEXT_AUTOCONNECTBMS[] = "Auto connect BMS"; constexpr char TEXT_BUZZER[] = "Buzzer"; constexpr char TEXT_FRONTLED[] = "Front LED"; @@ -260,6 +261,11 @@ constexpr char TEXT_LARSM[] = "Larsm"; constexpr char TEXT_GAMETRAK[] = "Gametrak"; //constexpr char TEXT_BACK[] = "Back"; +//ChangeValueDisplay +constexpr char TEXT_OFF[] = "Off"; +constexpr char TEXT_MASTER[] = "Master"; +constexpr char TEXT_SLAVE[] = "Slave"; + //ChangeValueDisplay constexpr char TEXT_TRUE[] = "true"; constexpr char TEXT_FALSE[] = "false";