Implemented dpad5wire
This commit is contained in:
@ -129,11 +129,20 @@ build_flags =
|
||||
-DAP_PASSWORD=Passwort_123
|
||||
-DFEATURE_WEBSERVER
|
||||
-DFEATURE_DPAD_5WIRESW
|
||||
-DPINS_DPAD_5WIRESW_OUT=0
|
||||
-DPINS_DPAD_5WIRESW_IN1=16
|
||||
-DPINS_DPAD_5WIRESW_IN2=27
|
||||
-DPINS_DPAD_5WIRESW_IN3=16
|
||||
-DPINS_DPAD_5WIRESW_IN4=27
|
||||
-DPINS_DPAD_5WIRESW_OUT=32
|
||||
-DPINS_DPAD_5WIRESW_IN1=25
|
||||
-DPINS_DPAD_5WIRESW_IN2=26
|
||||
-DPINS_DPAD_5WIRESW_IN3=27
|
||||
-DPINS_DPAD_5WIRESW_IN4=21
|
||||
-DDPAD_5WIRESW_UP=4
|
||||
-DDPAD_5WIRESW_DOWN=3
|
||||
-DDPAD_5WIRESW_CONFIRM=7
|
||||
-DDPAD_5WIRESW_BACK=0
|
||||
-DDPAD_5WIRESW_PROFILE0=1
|
||||
-DDPAD_5WIRESW_PROFILE1=5
|
||||
-DDPAD_5WIRESW_PROFILE2=2
|
||||
-DDPAD_5WIRESW_PROFILE3=6
|
||||
; -DDPAD_5WIRESW_DEBUG
|
||||
-DDEFAULT_GASMIN=850
|
||||
-DDEFAULT_GASMAX=3700
|
||||
-DDEFAULT_BREMSMIN=1300
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "actioninterface.h"
|
||||
#include "globals.h"
|
||||
#include "presets.h"
|
||||
|
||||
namespace {
|
||||
template<uint8_t profile>
|
||||
@ -12,6 +13,8 @@ class SwitchProfileAction : public virtual ActionInterface
|
||||
public:
|
||||
void triggered() override
|
||||
{
|
||||
settings = presets::defaultSettings;
|
||||
|
||||
if (settingsPersister.openProfile(profile))
|
||||
{
|
||||
if (!settingsPersister.load(settings))
|
||||
|
54
src/displays/dpad5wiredebugdisplay.h
Normal file
54
src/displays/dpad5wiredebugdisplay.h
Normal file
@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
|
||||
#include "display.h"
|
||||
#include "globals.h"
|
||||
#include "widgets/label.h"
|
||||
#include "dpad5wire.h"
|
||||
|
||||
namespace {
|
||||
#ifdef FEATURE_DPAD_5WIRESW
|
||||
class DPad5WireDebugDisplay : public Display, public virtual DummyConfirm, public virtual DummyBack
|
||||
{
|
||||
public:
|
||||
void initScreen() override;
|
||||
void redraw() override;
|
||||
|
||||
private:
|
||||
Label m_label0{30, 100};
|
||||
Label m_label1{30, 125};
|
||||
Label m_label2{30, 150};
|
||||
};
|
||||
|
||||
void DPad5WireDebugDisplay::initScreen()
|
||||
{
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setTextFont(4);
|
||||
tft.setTextColor(TFT_YELLOW);
|
||||
|
||||
tft.drawString("DPad 5wire debug", 5, 5);
|
||||
|
||||
tft.fillRect(0, 34, tft.width(), 3, TFT_WHITE);
|
||||
|
||||
tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
|
||||
m_label0.start();
|
||||
m_label1.start();
|
||||
m_label2.start();
|
||||
}
|
||||
|
||||
void DPad5WireDebugDisplay::redraw()
|
||||
{
|
||||
m_label0.redraw(String{} +
|
||||
(std::get<0>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<1>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<2>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<3>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<4>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<5>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<6>(dpad5wire::lastState) ? '1' : '0') + ' ' +
|
||||
(std::get<7>(dpad5wire::lastState) ? '1' : '0'));
|
||||
m_label1.redraw(String{raw_gas});
|
||||
m_label2.redraw(String{raw_brems});
|
||||
}
|
||||
#endif
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
#include "menudisplay.h"
|
||||
#include "staticmenudefinition.h"
|
||||
#include "utils.h"
|
||||
#include "actions/dummyaction.h"
|
||||
#include "actions/multiaction.h"
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "icons/back.h"
|
||||
#include "texts.h"
|
||||
@ -77,17 +77,17 @@ class PresetsMenu :
|
||||
public StaticText<TEXT_PRESETS>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>,
|
||||
public StaticMenuDefinition<
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, ApplySettingsPresetAction<&presets::defaultSettings>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, ApplyLimitsPresetAction<&presets::defaultLimits>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, ApplyLimitsPresetAction<&presets::kidsLimits>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTCONTROLLERHARDWARE>, ApplyControllerHardwarePresetAction<&presets::defaultControllerHardware>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_MOSFETSOFFCONTROLLERHARDWARE>, ApplyControllerHardwarePresetAction<&presets::mosfetsOffControllerHardware>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_SPINNERCONTROLLERHARDWARE>, ApplyControllerHardwarePresetAction<&presets::spinnerControllerHardware>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTBOARDCOMPUTERHARDWARE>, ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTDEFAULTMODE>, ApplyDefaultModePresetAction<&presets::defaultDefaultMode>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_SINUSOIDALDEFAULTMODE>, ApplyDefaultModePresetAction<&presets::sinusoidalDefaultMode>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTTEMPOMATMODE>, ApplyTempomatModePresetAction<&presets::defaultTempomatMode>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLARSMMODE>, ApplyLarsmModePresetAction<&presets::defaultLarsmMode>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTEVERYTHING>, MultiAction<ApplySettingsPresetAction<&presets::defaultSettings>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLIMITS>, MultiAction<ApplyLimitsPresetAction<&presets::defaultLimits>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_KIDSLIMITS>, MultiAction<ApplyLimitsPresetAction<&presets::kidsLimits>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTCONTROLLERHARDWARE>, MultiAction<ApplyControllerHardwarePresetAction<&presets::defaultControllerHardware>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_MOSFETSOFFCONTROLLERHARDWARE>, MultiAction<ApplyControllerHardwarePresetAction<&presets::mosfetsOffControllerHardware>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_SPINNERCONTROLLERHARDWARE>, MultiAction<ApplyControllerHardwarePresetAction<&presets::spinnerControllerHardware>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTBOARDCOMPUTERHARDWARE>, MultiAction<ApplyBoardcomputerHardwarePresetAction<&presets::defaultBoardcomputerHardware>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTDEFAULTMODE>, MultiAction<ApplyDefaultModePresetAction<&presets::defaultDefaultMode>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_SINUSOIDALDEFAULTMODE>, MultiAction<ApplyDefaultModePresetAction<&presets::sinusoidalDefaultMode>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTTEMPOMATMODE>, MultiAction<ApplyTempomatModePresetAction<&presets::defaultTempomatMode>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_DEFAULTLARSMMODE>, MultiAction<ApplyLarsmModePresetAction<&presets::defaultLarsmMode>, SwitchScreenAction<MainMenu>>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
|
||||
>
|
||||
{};
|
||||
|
@ -13,15 +13,15 @@ class MainMenu;
|
||||
|
||||
namespace {
|
||||
class ProfilesMenu :
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_PROFILES>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>,
|
||||
public StaticMenuDefinition<
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE0>, SwitchProfileAction<0>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE1>, SwitchProfileAction<1>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE2>, SwitchProfileAction<2>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE3>, SwitchProfileAction<3>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
|
||||
>
|
||||
public MenuDisplay,
|
||||
public StaticText<TEXT_PROFILES>,
|
||||
public BackActionInterface<SwitchScreenAction<MainMenu>>,
|
||||
public StaticMenuDefinition<
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE0>, SwitchProfileAction<0>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE1>, SwitchProfileAction<1>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE2>, SwitchProfileAction<2>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_PROFILE3>, SwitchProfileAction<3>>,
|
||||
makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&icons::back>>
|
||||
>
|
||||
{};
|
||||
}
|
||||
|
107
src/dpad5wire.h
107
src/dpad5wire.h
@ -3,10 +3,10 @@
|
||||
#include <tuple>
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <HardwareSerial.h>
|
||||
|
||||
#include "globals.h"
|
||||
#include "types.h"
|
||||
#include "actions/switchprofileaction.h"
|
||||
|
||||
namespace {
|
||||
namespace dpad5wire
|
||||
@ -53,10 +53,10 @@ State Helper<OUT, IN1, IN2, IN3, IN4>::read()
|
||||
|
||||
digitalWrite(OUT, HIGH);
|
||||
|
||||
pinMode(IN1, INPUT_PULLUP);
|
||||
pinMode(IN2, INPUT_PULLUP);
|
||||
pinMode(IN3, INPUT_PULLUP);
|
||||
pinMode(IN4, INPUT_PULLUP);
|
||||
pinMode(IN1, INPUT_PULLDOWN);
|
||||
pinMode(IN2, INPUT_PULLDOWN);
|
||||
pinMode(IN3, INPUT_PULLDOWN);
|
||||
pinMode(IN4, INPUT_PULLDOWN);
|
||||
|
||||
delay(1);
|
||||
|
||||
@ -82,103 +82,74 @@ void init()
|
||||
void update()
|
||||
{
|
||||
const auto state = helper.read();
|
||||
|
||||
#ifdef DPAD_5WIRESW_DEBUG
|
||||
lastState = state;
|
||||
return;
|
||||
#endif
|
||||
|
||||
const auto now = millis();
|
||||
|
||||
enum {
|
||||
ButtonUp = 3,
|
||||
ButtonDown = 0,
|
||||
ButtonConfirm = 1,
|
||||
ButtonBack = 2,
|
||||
ButtonProfile0 = 4,
|
||||
ButtonProfile1 = 5,
|
||||
ButtonProfile2 = 6,
|
||||
ButtonProfile3 = 7,
|
||||
};
|
||||
|
||||
if (std::get<ButtonUp>(lastState) != std::get<ButtonUp>(state) && now-debounceUp > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_UP>(lastState) != std::get<DPAD_5WIRESW_UP>(state) && now-debounceUp > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonUp>(state))
|
||||
if (std::get<DPAD_5WIRESW_UP>(state))
|
||||
InputDispatcher::rotate(-1);
|
||||
std::get<ButtonUp>(lastState) = std::get<ButtonUp>(state);
|
||||
std::get<DPAD_5WIRESW_UP>(lastState) = std::get<DPAD_5WIRESW_UP>(state);
|
||||
debounceUp = now;
|
||||
}
|
||||
if (std::get<ButtonDown>(lastState) != std::get<ButtonDown>(state) && now-debounceDown > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_DOWN>(lastState) != std::get<DPAD_5WIRESW_DOWN>(state) && now-debounceDown > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonDown>(state))
|
||||
if (std::get<DPAD_5WIRESW_DOWN>(state))
|
||||
InputDispatcher::rotate(1);
|
||||
std::get<ButtonDown>(lastState) = std::get<ButtonDown>(state);
|
||||
std::get<DPAD_5WIRESW_DOWN>(lastState) = std::get<DPAD_5WIRESW_DOWN>(state);
|
||||
debounceDown = now;
|
||||
}
|
||||
if (std::get<ButtonConfirm>(lastState) != std::get<ButtonConfirm>(state) && now-debounceConfirm > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_CONFIRM>(lastState) != std::get<DPAD_5WIRESW_CONFIRM>(state) && now-debounceConfirm > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
InputDispatcher::confirmButton(std::get<ButtonConfirm>(state));
|
||||
std::get<ButtonConfirm>(lastState) = std::get<ButtonConfirm>(state);
|
||||
InputDispatcher::confirmButton(std::get<DPAD_5WIRESW_CONFIRM>(state));
|
||||
std::get<DPAD_5WIRESW_CONFIRM>(lastState) = std::get<DPAD_5WIRESW_CONFIRM>(state);
|
||||
debounceConfirm = now;
|
||||
}
|
||||
if (std::get<ButtonBack>(lastState) != std::get<ButtonBack>(state) && now-debounceBack > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_BACK>(lastState) != std::get<DPAD_5WIRESW_BACK>(state) && now-debounceBack > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
InputDispatcher::backButton(std::get<ButtonBack>(state));
|
||||
std::get<ButtonBack>(lastState) = std::get<ButtonBack>(state);
|
||||
InputDispatcher::backButton(std::get<DPAD_5WIRESW_BACK>(state));
|
||||
std::get<DPAD_5WIRESW_BACK>(lastState) = std::get<DPAD_5WIRESW_BACK>(state);
|
||||
debounceBack = now;
|
||||
}
|
||||
if (std::get<ButtonProfile0>(lastState) != std::get<ButtonProfile0>(state) && now-debounceProfile0 > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_PROFILE0>(lastState) != std::get<DPAD_5WIRESW_PROFILE0>(state) && now-debounceProfile0 > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonProfile0>(state))
|
||||
if (std::get<DPAD_5WIRESW_PROFILE0>(state))
|
||||
{
|
||||
if (settingsPersister.openProfile(0))
|
||||
{
|
||||
if (!settingsPersister.load(settings))
|
||||
Serial.println("dpad5wire::update() load 0 failed");
|
||||
}
|
||||
else
|
||||
Serial.println("dpad5wire::update() openProfile 0 failed");
|
||||
SwitchProfileAction<0>{}.triggered();
|
||||
}
|
||||
std::get<ButtonProfile0>(lastState) = std::get<ButtonProfile0>(state);
|
||||
std::get<DPAD_5WIRESW_PROFILE0>(lastState) = std::get<DPAD_5WIRESW_PROFILE0>(state);
|
||||
debounceProfile0 = now;
|
||||
}
|
||||
if (std::get<ButtonProfile1>(lastState) != std::get<ButtonProfile1>(state) && now-debounceProfile1 > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_PROFILE1>(lastState) != std::get<DPAD_5WIRESW_PROFILE1>(state) && now-debounceProfile1 > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonProfile1>(state))
|
||||
if (std::get<DPAD_5WIRESW_PROFILE1>(state))
|
||||
{
|
||||
if (settingsPersister.openProfile(1))
|
||||
{
|
||||
if (!settingsPersister.load(settings))
|
||||
Serial.println("dpad5wire::update() load 1 failed");
|
||||
}
|
||||
else
|
||||
Serial.println("dpad5wire::update() openProfile 1 failed");
|
||||
SwitchProfileAction<1>{}.triggered();
|
||||
}
|
||||
std::get<ButtonProfile1>(lastState) = std::get<ButtonProfile1>(state);
|
||||
std::get<DPAD_5WIRESW_PROFILE1>(lastState) = std::get<DPAD_5WIRESW_PROFILE1>(state);
|
||||
debounceProfile1 = now;
|
||||
}
|
||||
if (std::get<ButtonProfile2>(lastState) != std::get<ButtonProfile2>(state) && now-debounceProfile2 > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_PROFILE2>(lastState) != std::get<DPAD_5WIRESW_PROFILE2>(state) && now-debounceProfile2 > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonProfile2>(state))
|
||||
if (std::get<DPAD_5WIRESW_PROFILE2>(state))
|
||||
{
|
||||
if (settingsPersister.openProfile(2))
|
||||
{
|
||||
if (!settingsPersister.load(settings))
|
||||
Serial.println("dpad5wire::update() load 2 failed");
|
||||
}
|
||||
else
|
||||
Serial.println("dpad5wire::update() openProfile 2 failed");
|
||||
SwitchProfileAction<2>{}.triggered();
|
||||
}
|
||||
std::get<ButtonProfile2>(lastState) = std::get<ButtonProfile2>(state);
|
||||
std::get<DPAD_5WIRESW_PROFILE2>(lastState) = std::get<DPAD_5WIRESW_PROFILE2>(state);
|
||||
debounceProfile2 = now;
|
||||
}
|
||||
if (std::get<ButtonProfile3>(lastState) != std::get<ButtonProfile3>(state) && now-debounceProfile3 > settings.boardcomputerHardware.dpadDebounce)
|
||||
if (std::get<DPAD_5WIRESW_PROFILE3>(lastState) != std::get<DPAD_5WIRESW_PROFILE3>(state) && now-debounceProfile3 > settings.boardcomputerHardware.dpadDebounce)
|
||||
{
|
||||
if (std::get<ButtonProfile3>(state))
|
||||
if (std::get<DPAD_5WIRESW_PROFILE3>(state))
|
||||
{
|
||||
if (settingsPersister.openProfile(3))
|
||||
{
|
||||
if (!settingsPersister.load(settings))
|
||||
Serial.println("dpad5wire::update() load 3 failed");
|
||||
}
|
||||
else
|
||||
Serial.println("dpad5wire::update() openProfile 3 failed");
|
||||
SwitchProfileAction<3>{}.triggered();
|
||||
}
|
||||
std::get<ButtonProfile3>(lastState) = std::get<ButtonProfile3>(state);
|
||||
std::get<DPAD_5WIRESW_PROFILE3>(lastState) = std::get<DPAD_5WIRESW_PROFILE3>(state);
|
||||
debounceProfile3 = now;
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "globals.h"
|
||||
#include "modes/defaultmode.h"
|
||||
#include "modes/tempomatmode.h"
|
||||
#include "displays/dpad5wiredebugdisplay.h"
|
||||
#include "screens.h"
|
||||
#include "dpad.h"
|
||||
#include "dpad3wire.h"
|
||||
@ -167,6 +168,11 @@ void setup()
|
||||
bootLabel.redraw("potis");
|
||||
readPotis();
|
||||
|
||||
#if defined(FEATURE_DPAD_5WIRESW) && defined(DPAD_5WIRESW_DEBUG)
|
||||
switchScreen<DPad5WireDebugDisplay>();
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (gas > 200.f || brems > 200.f)
|
||||
switchScreen<CalibrateDisplay>(true);
|
||||
else
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "displays/menus/wifisettingsmenu.h"
|
||||
#include "displays/bmsdisplay.h"
|
||||
#include "displays/calibratedisplay.h"
|
||||
#include "displays/dpad5wiredebugdisplay.h"
|
||||
#include "displays/gameoflifedisplay.h"
|
||||
#include "displays/gametrakcalibratedisplay.h"
|
||||
#include "displays/lockscreen.h"
|
||||
@ -114,6 +115,9 @@ union X {
|
||||
BmsDisplay bmsDisplay;
|
||||
#endif
|
||||
CalibrateDisplay calibrateDisplay;
|
||||
#if defined(FEATURE_DPAD_5WIRESW) && defined(DPAD_5WIRESW_DEBUG)
|
||||
DPad5WireDebugDisplay dPad5WireDebugDisplay;
|
||||
#endif
|
||||
GameOfLifeDisplay gameOfLifeDisplay;
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
GametrakCalibrateDisplay gametrakCalibrateDisplay;
|
||||
@ -270,6 +274,9 @@ template<> decltype(displays.wifiSettingsMenu) &
|
||||
template<> decltype(displays.bmsDisplay) &getRefByType<decltype(displays.bmsDisplay)>() { return displays.bmsDisplay; }
|
||||
#endif
|
||||
template<> decltype(displays.calibrateDisplay) &getRefByType<decltype(displays.calibrateDisplay)>() { return displays.calibrateDisplay; }
|
||||
#if defined(FEATURE_DPAD_5WIRESW) && defined(DPAD_5WIRESW_DEBUG)
|
||||
template<> decltype(displays.dPad5WireDebugDisplay) &getRefByType<decltype(displays.dPad5WireDebugDisplay)>() { return displays.dPad5WireDebugDisplay; }
|
||||
#endif
|
||||
template<> decltype(displays.gameOfLifeDisplay) &getRefByType<decltype(displays.gameOfLifeDisplay)>() { return displays.gameOfLifeDisplay; }
|
||||
#ifdef FEATURE_GAMETRAK
|
||||
template<> decltype(displays.gametrakCalibrateDisplay) &getRefByType<decltype(displays.gametrakCalibrateDisplay)>() { return displays.gametrakCalibrateDisplay; }
|
||||
|
Reference in New Issue
Block a user