ADC calib in newsettings

This commit is contained in:
2021-12-29 18:09:57 +01:00
parent bce81b363b
commit f50f6eaf1e
22 changed files with 138 additions and 395 deletions

View File

@@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS
# -DDPAD_6WIRESW_DEBUG # -DDPAD_6WIRESW_DEBUG
-DFEATURE_GSCHISSENE_DIODE -DFEATURE_GSCHISSENE_DIODE
-DDEFAULT_GASMIN=842
-DDEFAULT_GASMAX=2480
-DDEFAULT_BREMSMIN=826
-DDEFAULT_BREMSMAX=2502
-DFEATURE_BLE -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS
# -DDPAD_6WIRESW_DEBUG # -DDPAD_6WIRESW_DEBUG
-DFEATURE_GSCHISSENE_DIODE -DFEATURE_GSCHISSENE_DIODE
-DDEFAULT_GASMIN=842
-DDEFAULT_GASMAX=2480
-DDEFAULT_BREMSMIN=826
-DDEFAULT_BREMSMAX=2502
-DFEATURE_BLE -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -61,10 +61,6 @@ set(BOBBYCAR_BUILDFLAGS
-DDPAD_5WIRESW_QUICKACTION_DOWN=3 -DDPAD_5WIRESW_QUICKACTION_DOWN=3
-DDPAD_5WIRESW_QUICKACTION_UP=6 -DDPAD_5WIRESW_QUICKACTION_UP=6
# -DDPAD_5WIRESW_DEBUG # -DDPAD_5WIRESW_DEBUG
-DDEFAULT_GASMIN=200
-DDEFAULT_GASMAX=1070
-DDEFAULT_BREMSMIN=270
-DDEFAULT_BREMSMAX=1800
-DFEATURE_BLE -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -57,10 +57,6 @@ set(BOBBYCAR_BUILDFLAGS
-DDPAD_5WIRESW_PROFILE2=7 -DDPAD_5WIRESW_PROFILE2=7
-DDPAD_5WIRESW_PROFILE3=3 -DDPAD_5WIRESW_PROFILE3=3
# -DDPAD_5WIRESW_DEBUG # -DDPAD_5WIRESW_DEBUG
-DDEFAULT_GASMIN=842
-DDEFAULT_GASMAX=2480
-DDEFAULT_BREMSMIN=826
-DDEFAULT_BREMSMAX=2502
# -DFEATURE_BLE # -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -57,10 +57,6 @@ set(BOBBYCAR_BUILDFLAGS
# -DDPAD_5WIRESW_PROFILE2=7 # -DDPAD_5WIRESW_PROFILE2=7
# -DDPAD_5WIRESW_PROFILE3=3 # -DDPAD_5WIRESW_PROFILE3=3
# -DDPAD_5WIRESW_DEBUG # -DDPAD_5WIRESW_DEBUG
-DDEFAULT_GASMIN=184
-DDEFAULT_GASMAX=1329
-DDEFAULT_BREMSMIN=28
-DDEFAULT_BREMSMAX=500
-DFEATURE_BLE -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -80,10 +80,6 @@ set(BOBBYCAR_BUILDFLAGS
# -DDPAD_6WIRESW_DEBUG # -DDPAD_6WIRESW_DEBUG
# -DFEATURE_GSCHISSENE_DIODE # -DFEATURE_GSCHISSENE_DIODE
-DDEFAULT_GASMIN=842
-DDEFAULT_GASMAX=2480
-DDEFAULT_BREMSMIN=826
-DDEFAULT_BREMSMAX=2502
# -DFEATURE_BLE # -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -61,10 +61,6 @@ set(BOBBYCAR_BUILDFLAGS
-DDPAD_5WIRESW_QUICKACTION_DOWN=3 -DDPAD_5WIRESW_QUICKACTION_DOWN=3
-DDPAD_5WIRESW_QUICKACTION_UP=6 -DDPAD_5WIRESW_QUICKACTION_UP=6
# -DDPAD_5WIRESW_DEBUG # -DDPAD_5WIRESW_DEBUG
-DDEFAULT_GASMIN=842
-DDEFAULT_GASMAX=2480
-DDEFAULT_BREMSMIN=826
-DDEFAULT_BREMSMAX=2502
-DFEATURE_BLE -DFEATURE_BLE
# -DFEATURE_BLUETOOTH # -DFEATURE_BLUETOOTH
# -DFEATURE_BMS # -DFEATURE_BMS

View File

@@ -14,6 +14,14 @@ struct RefAccessorSaveSettings : public virtual espgui::RefAccessor<T>
{ {
void setValue(T value) override { espgui::RefAccessor<T>::setValue(value); saveSettings(); }; void setValue(T value) override { espgui::RefAccessor<T>::setValue(value); saveSettings(); };
}; };
template<typename T>
struct NewSettingsAccessor : public virtual espgui::AccessorInterface<T>
{
virtual ConfigWrapper<T>& getConfig() const = 0;
T getValue() const override { return getConfig().value; }
void setValue(T value) override { configs.write_config(getConfig(), value); }
};
// Bms // Bms
#ifdef FEATURE_BMS #ifdef FEATURE_BMS
@@ -150,13 +158,13 @@ struct CanReceiveTimeoutAccessor : public RefAccessorSaveSettings<int16_t> { int
#endif #endif
// Input devices // Input devices
struct SampleCountAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.sampleCount; } }; struct SampleCountAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.sampleCount; } };
struct GasMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMin; } }; struct GasMinAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.gasMin; } };
struct GasMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gasMax; } }; struct GasMaxAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.gasMax; } };
struct BremsMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMin; } }; struct BremsMinAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.bremsMin; } };
struct BremsMaxAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.bremsMax; } }; struct BremsMaxAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.bremsMax; } };
#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW) #if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW)
struct DPadDebounceAccessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.boardcomputerHardware.dpadDebounce; } }; struct DPadDebounceAccessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadDebounce; } };
#endif #endif
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
struct GametrakXMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakXMin; } }; struct GametrakXMinAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.boardcomputerHardware.gametrakXMin; } };

View File

@@ -1,50 +1,29 @@
#include "bobbybuttons.h" #include "bobbybuttons.h"
void BobbyButtons::rawButtonPressed(uint8_t button) std::optional<espgui::Button> translateRawButton(uint8_t button)
{ {
//Base::rawButtonPressed(button);
switch (button) switch (button)
{ {
using espgui::Button; using espgui::Button;
case 0: buttonPressed(Button::Left); break; case 0: return Button::Left;
case 1: buttonPressed(Button::Right); break; case 1: return Button::Right;
case 2: buttonPressed(Button::Up); break; case 2: return Button::Up;
case 3: buttonPressed(Button::Down); break; case 3: return Button::Down;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break; case 4: return Button(BobbyButton::Profile0);
case 5: buttonPressed(Button(BobbyButton::Profile1)); break; case 5: return Button(BobbyButton::Profile1);
case 6: buttonPressed(Button(BobbyButton::Profile2)); break; case 6: return Button(BobbyButton::Profile2);
case 7: buttonPressed(Button(BobbyButton::Profile3)); break; case 7: return Button(BobbyButton::Profile3);
case 8: buttonPressed(Button(BobbyButton::Left2)); break; case 8: return Button(BobbyButton::Left2);
case 9: buttonPressed(Button(BobbyButton::Right2)); break; case 9: return Button(BobbyButton::Right2);
case 10: buttonPressed(Button(BobbyButton::Up2)); break; case 10: return Button(BobbyButton::Up2);
case 11: buttonPressed(Button(BobbyButton::Down2)); break; case 11: return Button(BobbyButton::Down2);
} }
return std::nullopt;
} }
void BobbyButtons::rawButtonReleased(uint8_t button) void buttonPressedCommon(espgui::Button button)
{ {
//Base::rawButtonReleased(button);
switch (button)
{
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
}
void BobbyButtons::buttonPressed(espgui::Button button)
{
//Base::buttonPressed(button);
switch (BobbyButton(button)) switch (BobbyButton(button))
{ {
case BobbyButton::Profile0: /* TODO */ break; case BobbyButton::Profile0: /* TODO */ break;
@@ -59,6 +38,26 @@ void BobbyButtons::buttonPressed(espgui::Button button)
} }
} }
void BobbyButtons::rawButtonPressed(uint8_t button)
{
//Base::rawButtonPressed(button);
if (const auto translated = translateRawButton(button))
buttonPressed(*translated);
}
void BobbyButtons::rawButtonReleased(uint8_t button)
{
//Base::rawButtonReleased(button);
if (const auto translated = translateRawButton(button))
buttonReleased(*translated);
}
void BobbyButtons::buttonPressed(espgui::Button button)
{
//Base::buttonPressed(button);
buttonPressedCommon(button);
}
void BobbyButtons::buttonReleased(espgui::Button button) void BobbyButtons::buttonReleased(espgui::Button button)
{ {
//Base::buttonReleased(button); //Base::buttonReleased(button);

View File

@@ -1,5 +1,8 @@
#pragma once #pragma once
// system includes
#include <optional>
// 3rdparty lib includes // 3rdparty lib includes
#include "buttonsinterface.h" #include "buttonsinterface.h"
@@ -17,6 +20,9 @@ enum BobbyButton
Back = espgui::Button::Left Back = espgui::Button::Left
}; };
std::optional<espgui::Button> translateRawButton(uint8_t button);
void buttonPressedCommon(espgui::Button button);
class BobbyButtons : public virtual espgui::ButtonsInterface class BobbyButtons : public virtual espgui::ButtonsInterface
{ {
public: public:

View File

@@ -23,63 +23,23 @@ template<typename Tvalue>
void BobbyChangeValueDisplay<Tvalue>::rawButtonPressed(uint8_t button) void BobbyChangeValueDisplay<Tvalue>::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
template<typename Tvalue> template<typename Tvalue>
void BobbyChangeValueDisplay<Tvalue>::rawButtonReleased(uint8_t button) void BobbyChangeValueDisplay<Tvalue>::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
template<typename Tvalue> template<typename Tvalue>
void BobbyChangeValueDisplay<Tvalue>::buttonPressed(espgui::Button button) void BobbyChangeValueDisplay<Tvalue>::buttonPressed(espgui::Button button)
{ {
Base::buttonPressed(button); Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
template<typename Tvalue> template<typename Tvalue>

View File

@@ -3,61 +3,21 @@
void BobbyDisplay::rawButtonPressed(uint8_t button) void BobbyDisplay::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
void BobbyDisplay::rawButtonReleased(uint8_t button) void BobbyDisplay::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
void BobbyDisplay::buttonPressed(espgui::Button button) void BobbyDisplay::buttonPressed(espgui::Button button)
{ {
//Base::buttonPressed(button); //Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
void BobbyDisplay::buttonReleased(espgui::Button button) void BobbyDisplay::buttonReleased(espgui::Button button)

View File

@@ -3,61 +3,21 @@
void BobbyDisplayWithTitle::rawButtonPressed(uint8_t button) void BobbyDisplayWithTitle::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
void BobbyDisplayWithTitle::rawButtonReleased(uint8_t button) void BobbyDisplayWithTitle::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
void BobbyDisplayWithTitle::buttonPressed(espgui::Button button) void BobbyDisplayWithTitle::buttonPressed(espgui::Button button)
{ {
//Base::buttonPressed(button); //Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
void BobbyDisplayWithTitle::buttonReleased(espgui::Button button) void BobbyDisplayWithTitle::buttonReleased(espgui::Button button)

View File

@@ -23,63 +23,23 @@ template<size_t COUNT>
void BobbyGraphDisplay<COUNT>::rawButtonPressed(uint8_t button) void BobbyGraphDisplay<COUNT>::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
template<size_t COUNT> template<size_t COUNT>
void BobbyGraphDisplay<COUNT>::rawButtonReleased(uint8_t button) void BobbyGraphDisplay<COUNT>::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
template<size_t COUNT> template<size_t COUNT>
void BobbyGraphDisplay<COUNT>::buttonPressed(espgui::Button button) void BobbyGraphDisplay<COUNT>::buttonPressed(espgui::Button button)
{ {
Base::buttonPressed(button); Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
template<size_t COUNT> template<size_t COUNT>

View File

@@ -3,61 +3,21 @@
void BobbyMenuDisplay::rawButtonPressed(uint8_t button) void BobbyMenuDisplay::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
void BobbyMenuDisplay::rawButtonReleased(uint8_t button) void BobbyMenuDisplay::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
void BobbyMenuDisplay::buttonPressed(espgui::Button button) void BobbyMenuDisplay::buttonPressed(espgui::Button button)
{ {
Base::buttonPressed(button); Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
void BobbyMenuDisplay::buttonReleased(espgui::Button button) void BobbyMenuDisplay::buttonReleased(espgui::Button button)

View File

@@ -23,63 +23,23 @@ template<std::size_t COUNT0, std::size_t COUNT1>
void BobbySplitGraphDisplay<COUNT0, COUNT1>::rawButtonPressed(uint8_t button) void BobbySplitGraphDisplay<COUNT0, COUNT1>::rawButtonPressed(uint8_t button)
{ {
//Base::rawButtonPressed(button); //Base::rawButtonPressed(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonPressed(*translated);
using espgui::Button;
case 0: buttonPressed(Button::Left); break;
case 1: buttonPressed(Button::Right); break;
case 2: buttonPressed(Button::Up); break;
case 3: buttonPressed(Button::Down); break;
case 4: buttonPressed(Button(BobbyButton::Profile0)); break;
case 5: buttonPressed(Button(BobbyButton::Profile1)); break;
case 6: buttonPressed(Button(BobbyButton::Profile2)); break;
case 7: buttonPressed(Button(BobbyButton::Profile3)); break;
case 8: buttonPressed(Button(BobbyButton::Left2)); break;
case 9: buttonPressed(Button(BobbyButton::Right2)); break;
case 10: buttonPressed(Button(BobbyButton::Up2)); break;
case 11: buttonPressed(Button(BobbyButton::Down2)); break;
}
} }
template<std::size_t COUNT0, std::size_t COUNT1> template<std::size_t COUNT0, std::size_t COUNT1>
void BobbySplitGraphDisplay<COUNT0, COUNT1>::rawButtonReleased(uint8_t button) void BobbySplitGraphDisplay<COUNT0, COUNT1>::rawButtonReleased(uint8_t button)
{ {
//Base::rawButtonReleased(button); //Base::rawButtonReleased(button);
switch (button) if (const auto translated = translateRawButton(button))
{ buttonReleased(*translated);
using espgui::Button;
case 0: buttonReleased(Button::Left); break;
case 1: buttonReleased(Button::Right); break;
case 2: buttonReleased(Button::Up); break;
case 3: buttonReleased(Button::Down); break;
case 4: buttonReleased(Button(BobbyButton::Profile0)); break;
case 5: buttonReleased(Button(BobbyButton::Profile1)); break;
case 6: buttonReleased(Button(BobbyButton::Profile2)); break;
case 7: buttonReleased(Button(BobbyButton::Profile3)); break;
case 8: buttonReleased(Button(BobbyButton::Left2)); break;
case 9: buttonReleased(Button(BobbyButton::Right2)); break;
case 10: buttonReleased(Button(BobbyButton::Up2)); break;
case 11: buttonReleased(Button(BobbyButton::Down2)); break;
}
} }
template<std::size_t COUNT0, std::size_t COUNT1> template<std::size_t COUNT0, std::size_t COUNT1>
void BobbySplitGraphDisplay<COUNT0, COUNT1>::buttonPressed(espgui::Button button) void BobbySplitGraphDisplay<COUNT0, COUNT1>::buttonPressed(espgui::Button button)
{ {
Base::buttonPressed(button); Base::buttonPressed(button);
buttonPressedCommon(button);
switch (BobbyButton(button))
{
case BobbyButton::Profile0: /* TODO */ break;
case BobbyButton::Profile1: /* TODO */ break;
case BobbyButton::Profile2: /* TODO */ break;
case BobbyButton::Profile3: /* TODO */ break;
case BobbyButton::Left2: /* TODO */ break;
case BobbyButton::Right2: /* TODO */ break;
case BobbyButton::Up2: /* TODO */ break;
case BobbyButton::Down2: /* TODO */ break;
default:;
}
} }
template<std::size_t COUNT0, std::size_t COUNT1> template<std::size_t COUNT0, std::size_t COUNT1>

View File

@@ -8,6 +8,7 @@
#include "displays/menus/mainmenu.h" #include "displays/menus/mainmenu.h"
#include "displays/statusdisplay.h" #include "displays/statusdisplay.h"
#include "displays/menus/boardcomputerhardwaresettingsmenu.h" #include "displays/menus/boardcomputerhardwaresettingsmenu.h"
#include "newsettings.h"
CalibrateDisplay::CalibrateDisplay(bool bootup) : CalibrateDisplay::CalibrateDisplay(bool bootup) :
m_bootup{bootup} m_bootup{bootup}
@@ -274,16 +275,16 @@ void CalibrateDisplay::buttonPressed(espgui::Button button)
void CalibrateDisplay::copyFromSettings() void CalibrateDisplay::copyFromSettings()
{ {
m_gasMin = settings.boardcomputerHardware.gasMin; m_gasMin = configs.gasMin.value;
m_gasMax = settings.boardcomputerHardware.gasMax; m_gasMax = configs.gasMax.value;
m_bremsMin = settings.boardcomputerHardware.bremsMin; m_bremsMin = configs.bremsMin.value;
m_bremsMax = settings.boardcomputerHardware.bremsMax; m_bremsMax = configs.bremsMax.value;
} }
void CalibrateDisplay::copyToSettings() void CalibrateDisplay::copyToSettings()
{ {
settings.boardcomputerHardware.gasMin = m_gasMin; configs.write_config(configs.gasMin, m_gasMin);
settings.boardcomputerHardware.gasMax = m_gasMax; configs.write_config(configs.gasMax, m_gasMax);
settings.boardcomputerHardware.bremsMin = m_bremsMin; configs.write_config(configs.bremsMin, m_bremsMin);
settings.boardcomputerHardware.bremsMax = m_bremsMax; configs.write_config(configs.bremsMax, m_bremsMax);
} }

View File

@@ -14,6 +14,7 @@
#include "buttons.h" #include "buttons.h"
#include "types.h" #include "types.h"
#include "globals.h" #include "globals.h"
#include "newsettings.h"
namespace { namespace {
namespace dpad5wire_2out { namespace dpad5wire_2out {
@@ -167,7 +168,7 @@ void update()
const auto now = espchrono::millis_clock::now(); const auto now = espchrono::millis_clock::now();
const std::chrono::milliseconds dpadDebounce{settings.boardcomputerHardware.dpadDebounce}; const std::chrono::milliseconds dpadDebounce{configs.dpadDebounce.value};
if (lastState.up != newState.up && now - debounceUp > dpadDebounce) if (lastState.up != newState.up && now - debounceUp > dpadDebounce)
{ {

View File

@@ -83,10 +83,10 @@ class ConfigContainer
using mac_t = wifi_stack::mac_t; using mac_t = wifi_stack::mac_t;
public: public:
// default allowReset constraints nvsName // default allowReset constraints nvsName
ConfigWrapper<std::optional<mac_t>> baseMacAddressOverride{std::nullopt, NoReset, {}, "baseMacAddrOver" }; ConfigWrapper<std::optional<mac_t>> baseMacAddressOverride{std::nullopt, NoReset, {}, "baseMacAddrOver" };
ConfigWrapper<std::string> hostname {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "hostname" }; ConfigWrapper<std::string> hostname {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "hostname" };
ConfigWrapper<bool> wifiStaEnabled {true, DoReset, {}, "wifiStaEnabled" }; ConfigWrapper<bool> wifiStaEnabled {true, DoReset, {}, "wifiStaEnabled" };
std::array<WiFiConfig, 10> wifi_configs { std::array<WiFiConfig, 10> wifi_configs {
WiFiConfig {"wifi_ssid0", "wifi_key0", "wifi_usestatic0", "wifi_static_ip0", "wifi_stati_sub0", "wifi_stat_gate0", "wifi_usestadns0", "wifi_stat_dnsA0", "wifi_stat_dnsB0", "wifi_stat_dnsC0"}, WiFiConfig {"wifi_ssid0", "wifi_key0", "wifi_usestatic0", "wifi_static_ip0", "wifi_stati_sub0", "wifi_stat_gate0", "wifi_usestadns0", "wifi_stat_dnsA0", "wifi_stat_dnsB0", "wifi_stat_dnsC0"},
WiFiConfig {"wifi_ssid1", "wifi_key1", "wifi_usestatic1", "wifi_static_ip1", "wifi_stati_sub1", "wifi_stat_gate1", "wifi_usestadns1", "wifi_stat_dnsA1", "wifi_stat_dnsB1", "wifi_stat_dnsC1"}, WiFiConfig {"wifi_ssid1", "wifi_key1", "wifi_usestatic1", "wifi_static_ip1", "wifi_stati_sub1", "wifi_stat_gate1", "wifi_usestadns1", "wifi_stat_dnsA1", "wifi_stat_dnsB1", "wifi_stat_dnsC1"},
@@ -99,22 +99,30 @@ public:
WiFiConfig {"wifi_ssid8", "wifi_key8", "wifi_usestatic8", "wifi_static_ip8", "wifi_stati_sub8", "wifi_stat_gate8", "wifi_usestadns8", "wifi_stat_dnsA8", "wifi_stat_dnsB8", "wifi_stat_dnsC8"}, WiFiConfig {"wifi_ssid8", "wifi_key8", "wifi_usestatic8", "wifi_static_ip8", "wifi_stati_sub8", "wifi_stat_gate8", "wifi_usestadns8", "wifi_stat_dnsA8", "wifi_stat_dnsB8", "wifi_stat_dnsC8"},
WiFiConfig {"wifi_ssid9", "wifi_key9", "wifi_usestatic9", "wifi_static_ip9", "wifi_stati_sub9", "wifi_stat_gate9", "wifi_usestadns9", "wifi_stat_dnsA9", "wifi_stat_dnsB9", "wifi_stat_dnsC9"} WiFiConfig {"wifi_ssid9", "wifi_key9", "wifi_usestatic9", "wifi_static_ip9", "wifi_stati_sub9", "wifi_stat_gate9", "wifi_usestadns9", "wifi_stat_dnsA9", "wifi_stat_dnsB9", "wifi_stat_dnsC9"}
}; };
ConfigWrapper<int8_t> wifiStaMinRssi {-90, DoReset, {}, "wifiStaMinRssi" }; ConfigWrapper<int8_t> wifiStaMinRssi {-90, DoReset, {}, "wifiStaMinRssi" };
ConfigWrapper<bool> wifiApEnabled {true, DoReset, {}, "wifiApEnabled" }; ConfigWrapper<bool> wifiApEnabled {true, DoReset, {}, "wifiApEnabled" };
ConfigWrapper<std::string> wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" }; ConfigWrapper<std::string> wifiApName {defaultHostname, DoReset, StringMinMaxSize<4, 32>, "wifiApName" };
ConfigWrapper<std::string> wifiApKey {"Passwort_123", DoReset, StringOr<StringEmpty, StringMinMaxSize<8, 64>>, "wifiApKey" }; ConfigWrapper<std::string> wifiApKey {"Passwort_123", DoReset, StringOr<StringEmpty, StringMinMaxSize<8, 64>>, "wifiApKey" };
ConfigWrapper<uint8_t> wifiApChannel {1, DoReset, {}, "wifiApChannel" }; ConfigWrapper<uint8_t> wifiApChannel {1, DoReset, {}, "wifiApChannel" };
ConfigWrapper<wifi_auth_mode_t> wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" }; ConfigWrapper<wifi_auth_mode_t> wifiApAuthmode{WIFI_AUTH_WPA2_PSK, DoReset, {}, "wifiApAuthmode" };
ConfigWrapper<bool> timeServerEnabled {false, DoReset, {}, "timeServerEnabl" }; ConfigWrapper<bool> timeServerEnabled {false, DoReset, {}, "timeServerEnabl" };
ConfigWrapper<std::string> timeServer {"europe.pool.ntp.org", NoReset, StringMaxSize<64>, "timeServer" }; ConfigWrapper<std::string> timeServer {"europe.pool.ntp.org", NoReset, StringMaxSize<64>, "timeServer" };
ConfigWrapper<sntp_sync_mode_t> timeSyncMode {SNTP_SYNC_MODE_IMMED, NoReset, {}, "timeSyncMode" }; ConfigWrapper<sntp_sync_mode_t> timeSyncMode {SNTP_SYNC_MODE_IMMED, NoReset, {}, "timeSyncMode" };
ConfigWrapper<espchrono::milliseconds32> timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, NoReset, MinTimeSyncInterval, "timeSyncInterva" }; ConfigWrapper<espchrono::milliseconds32> timeSyncInterval{espchrono::milliseconds32{CONFIG_LWIP_SNTP_UPDATE_DELAY}, NoReset, MinTimeSyncInterval, "timeSyncInterva" };
ConfigWrapper<espchrono::minutes32> timezoneOffset{espchrono::minutes32{60}, DoReset, {}, "timezoneOffset" }; // MinMaxValue<minutes32, -1440m, 1440m> ConfigWrapper<espchrono::minutes32> timezoneOffset{espchrono::minutes32{60}, DoReset, {}, "timezoneOffset" }; // MinMaxValue<minutes32, -1440m, 1440m>
ConfigWrapper<espchrono::DayLightSavingMode>timeDst{espchrono::DayLightSavingMode::EuropeanSummerTime, DoReset, {}, "time_dst" }; ConfigWrapper<espchrono::DayLightSavingMode>timeDst{espchrono::DayLightSavingMode::EuropeanSummerTime, DoReset, {}, "time_dst" };
ConfigWrapper<bool> canBusResetOnError {false, DoReset, {}, "canBusRstErr" }; ConfigWrapper<bool> canBusResetOnError {false, DoReset, {}, "canBusRstErr" };
ConfigWrapper<int16_t> sampleCount {50, DoReset, {}, "sampleCount" };
ConfigWrapper<int16_t> gasMin {0, DoReset, MinMaxValue<int16_t, 0, 4095>, "gasMin" };
ConfigWrapper<int16_t> gasMax {4095, DoReset, MinMaxValue<int16_t, 0, 4095>, "gasMax" };
ConfigWrapper<int16_t> bremsMin {0, DoReset, MinMaxValue<int16_t, 0, 4095>, "bremsMin" };
ConfigWrapper<int16_t> bremsMax {4096, DoReset, MinMaxValue<int16_t, 0, 4095>, "bremsMax" };
ConfigWrapper<uint8_t> dpadDebounce {25, DoReset, {}, "dpadDebounce" };
std::array<WirelessDoorsConfig, 5> wireless_door_configs { std::array<WirelessDoorsConfig, 5> wireless_door_configs {
WirelessDoorsConfig { "door_id0", "door_token0" }, WirelessDoorsConfig { "door_id0", "door_token0" },
@@ -274,6 +282,14 @@ public:
\ \
x(canBusResetOnError) \ x(canBusResetOnError) \
\ \
x(sampleCount) \
x(gasMin) \
x(gasMax) \
x(bremsMin) \
x(bremsMax) \
\
x(dpadDebounce) \
\
x(wireless_door_configs[0].doorId) \ x(wireless_door_configs[0].doorId) \
x(wireless_door_configs[0].doorToken) \ x(wireless_door_configs[0].doorToken) \
x(wireless_door_configs[1].doorId) \ x(wireless_door_configs[1].doorId) \

View File

@@ -9,6 +9,7 @@
#ifdef FEATURE_CAN #ifdef FEATURE_CAN
#include "can.h" #include "can.h"
#endif #endif
#include "newsettings.h"
using namespace std::chrono_literals; using namespace std::chrono_literals;
@@ -26,13 +27,13 @@ void readPotis()
{ {
[[maybe_unused]] [[maybe_unused]]
constexpr auto sampleMultipleTimes = [](uint8_t pin){ constexpr auto sampleMultipleTimes = [](uint8_t pin){
analogRead(pin); analogRead(pin);
double sum{}; double sum{};
const auto sampleCount = settings.boardcomputerHardware.sampleCount; const auto sampleCount = configs.sampleCount.value;
for (int i = 0; i < sampleCount; i++) for (int i = 0; i < sampleCount; i++)
sum += analogRead(pin); sum += analogRead(pin);
return sum / sampleCount; return sum / sampleCount;
}; };
raw_gas = std::nullopt; raw_gas = std::nullopt;
raw_brems = std::nullopt; raw_brems = std::nullopt;
@@ -65,11 +66,11 @@ void readPotis()
#endif #endif
if (raw_gas) if (raw_gas)
gas = cpputils::mapValueClamped<float>(*raw_gas, settings.boardcomputerHardware.gasMin, settings.boardcomputerHardware.gasMax, 0., 1000.); gas = cpputils::mapValueClamped<float>(*raw_gas, configs.gasMin.value, configs.gasMax.value, 0., 1000.);
else else
gas = std::nullopt; gas = std::nullopt;
if (raw_brems) if (raw_brems)
brems = cpputils::mapValueClamped<float>(*raw_brems, settings.boardcomputerHardware.bremsMin, settings.boardcomputerHardware.bremsMax, 0., 1000.); brems = cpputils::mapValueClamped<float>(*raw_brems, configs.bremsMin.value, configs.bremsMax.value, 0., 1000.);
else else
brems = std::nullopt; brems = std::nullopt;

View File

@@ -123,14 +123,6 @@ constexpr Settings::BoardcomputerHardware::TimersSettings defaultTimersSettings
}; };
constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware { constexpr Settings::BoardcomputerHardware defaultBoardcomputerHardware {
.sampleCount = 50,
.gasMin = DEFAULT_GASMIN,
.gasMax = DEFAULT_GASMAX,
.bremsMin = DEFAULT_BREMSMIN,
.bremsMax = DEFAULT_BREMSMAX,
#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW)
.dpadDebounce = 25,
#endif
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
.gametrakXMin = DEFAULT_GAMETRAKXMIN, .gametrakXMin = DEFAULT_GAMETRAKXMIN,
.gametrakXMax = DEFAULT_GAMETRAKXMAX, .gametrakXMax = DEFAULT_GAMETRAKXMAX,

View File

@@ -70,11 +70,6 @@ struct Settings
} controllerHardware; } controllerHardware;
struct BoardcomputerHardware { struct BoardcomputerHardware {
int16_t sampleCount;
int16_t gasMin, gasMax, bremsMin, bremsMax;
#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined (FEATURE_DPAD_6WIRESW)
uint8_t dpadDebounce;
#endif
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
int16_t gametrakXMin, gametrakXMax, gametrakYMin, gametrakYMax, gametrakDistMin, gametrakDistMax; int16_t gametrakXMin, gametrakXMax, gametrakYMin, gametrakYMax, gametrakDistMin, gametrakDistMax;
#endif #endif
@@ -243,14 +238,6 @@ void Settings::executeForEveryCommonSetting(T &&callable)
callable("canReceiveTimeo", controllerHardware.canReceiveTimeout); callable("canReceiveTimeo", controllerHardware.canReceiveTimeout);
#endif #endif
callable("sampleCount", boardcomputerHardware.sampleCount);
callable("gasMin", boardcomputerHardware.gasMin);
callable("gasMax", boardcomputerHardware.gasMax);
callable("bremsMin", boardcomputerHardware.bremsMin);
callable("bremsMax", boardcomputerHardware.bremsMax);
#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT)
callable("dpadDebounce", boardcomputerHardware.dpadDebounce);
#endif
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
callable("gametrakXMin", boardcomputerHardware.gametrakXMin); callable("gametrakXMin", boardcomputerHardware.gametrakXMin);
callable("gametrakXMax", boardcomputerHardware.gametrakXMax); callable("gametrakXMax", boardcomputerHardware.gametrakXMax);