In the process of adding new boardcomputer

This commit is contained in:
CommanderRedYT
2022-05-12 02:37:01 +02:00
parent efb593c8aa
commit 1a1882d825
25 changed files with 2211 additions and 4 deletions

View File

@ -77,4 +77,5 @@ set(BOBBYCAR_BUILDFLAGS
-DPINS_DPAD_6WIRESW_IN4=19
-DPINS_DPAD_6WIRESW_IN5=26
-DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)

View File

@ -77,6 +77,7 @@ set(BOBBYCAR_BUILDFLAGS
-DPINS_DPAD_6WIRESW_IN4=19
-DPINS_DPAD_6WIRESW_IN5=26
-DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

92
config_comred_new.cmake Normal file
View File

@ -0,0 +1,92 @@
set(BOBBY_APP_NAME bobbyquad_comred_new)
add_definitions(
-DUSER_SETUP_LOADED=1
-DLOAD_GLCD=1
-DLOAD_FONT2=1
-DLOAD_FONT4=1
-DLOAD_FONT7=1
-DILI9341_DRIVER=1
-DTFT_MOSI=13
-DTFT_SCLK=15
-DTFT_CS=14
-DTFT_DC=12
-DTFT_RST=2
-DSPI_FREQUENCY=40000000
)
set(BOBBYCAR_BUILDFLAGS
# Pins
-DPINS_GAS=34
-DPINS_BREMS=35
# -DFEATURE_JOYSTICK
# -DPINS_RX1=4
# -DPINS_TX1=5
# -DPINS_RX2=22
# -DPINS_TX2=23
# -DPINS_MOSFET0=18
# -DPINS_MOSFET1=19
# -DPINS_MOSFET2=21
# -DPINS_GAMETRAKX=34
# -DPINS_GAMETRAKY=39
# -DPINS_GAMETRAKDIST=36
-DPINS_LEDBACKLIGHT=23
-DPINS_LEDSTRIP=33
# Config flags
-DFEATURE_ADC_IN
-DFEATURE_CAN
# -DFEATURE_SERIAL
# -DFEATURE_MOSFETS
# -DFEATURE_BLUETOOTH
# -DFEATURE_BMS
# -DFEATURE_GAMETRAK
# -DFEATURE_POWERSUPPLY
-DFEATURE_LEDBACKLIGHT
-DLEDBACKLIGHT_INVERTED
# -DLEDSTRIP_WRONG_DIRECTION
-DHEAP_LRGST_CRASH_TEXT_FIX
# Default values
-DDEFAULT_SWAPSCREENBYTES=false
-DDEFAULT_INVERTFRONTLEFT=false
-DDEFAULT_INVERTFRONTRIGHT=true
-DDEFAULT_INVERTBACKLEFT=false
-DDEFAULT_INVERTBACKRIGHT=true
-DDEFAULT_WHEELDIAMETER=200
-DDEFAULT_IMOTMAX=28
-DDEFAULT_IDCMAX=30
-DDEFAULT_NMOTMAX=2000
-DDEFAULT_FIELDWEAKMAX=17
-DDEFAULT_FIELDADVMAX=40
# DPAD
# -DFEATURE_DPAD_5WIRESW
# -DPINS_DPAD_5WIRESW_OUT=4
# -DPINS_DPAD_5WIRESW_IN1=5
# -DPINS_DPAD_5WIRESW_IN2=27
# -DPINS_DPAD_5WIRESW_IN3=18
# -DPINS_DPAD_5WIRESW_IN4=19
# -DPINS_DPAD_EXTRASW_IN5=25
# -DFEATURE_DPAD_6WIRESW
# -DPINS_DPAD_6WIRESW_OUT=4
# -DPINS_DPAD_6WIRESW_IN1=5
# -DPINS_DPAD_6WIRESW_IN2=27
# -DPINS_DPAD_6WIRESW_IN3=18
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
-DDPAD_BOARDCOMPUTER_V2
-DPINS_DPAD_BOARDCOMPUTER_V2_OUT1=19
-DPINS_DPAD_BOARDCOMPUTER_V2_OUT2=5
-DPINS_DPAD_BOARDCOMPUTER_V2_IN1=4
-DPINS_DPAD_BOARDCOMPUTER_V2_IN2=18
-DPINS_DPAD_BOARDCOMPUTER_V2_IN3=27
-DPINS_DPAD_BOARDCOMPUTER_V2_IN4=16
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")
include("${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")
message(WARNING "Including plugins")
endif()

View File

@ -76,4 +76,5 @@ set(BOBBYCAR_BUILDFLAGS
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)

View File

@ -76,6 +76,7 @@ set(BOBBYCAR_BUILDFLAGS
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

View File

@ -68,6 +68,7 @@ set(BOBBYCAR_BUILDFLAGS
-DPINS_DPAD_5WIRESW_IN1=27
-DPINS_DPAD_5WIRESW_IN2=19
-DPINS_DPAD_5WIRESW_IN3=18
# -DDPAD_BOARDCOMPUTER_V2
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

View File

@ -76,6 +76,7 @@ set(BOBBYCAR_BUILDFLAGS
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

View File

@ -76,4 +76,5 @@ set(BOBBYCAR_BUILDFLAGS
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)

View File

@ -76,6 +76,7 @@ set(BOBBYCAR_BUILDFLAGS
# -DPINS_DPAD_6WIRESW_IN4=19
# -DPINS_DPAD_6WIRESW_IN5=26
# -DFEATURE_GSCHISSENE_DIODE
# -DDPAD_BOARDCOMPUTER_V2
)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

View File

@ -68,6 +68,7 @@ set(BOBBYCAR_BUILDFLAGS
-DPINS_DPAD_5WIRESW_IN1=18
-DPINS_DPAD_5WIRESW_IN2=19
-DPINS_DPAD_5WIRESW_IN3=27
# -DDPAD_BOARDCOMPUTER_V2
)
#if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")

View File

@ -163,6 +163,7 @@ set(headers
dpad5wire.h
dpad5wire_2out.h
dpad6wire.h
dpad_boardcomputer_v2.h
drivingstatistics.h
espnowfunctions.h
esptexthelpers.h
@ -400,6 +401,7 @@ set(sources
dpad5wire.cpp
dpad5wire_2out.cpp
dpad6wire.cpp
dpad_boardcomputer_v2.cpp
drivingstatistics.cpp
espnowfunctions.cpp
esptexthelpers.cpp

View File

@ -105,7 +105,7 @@ struct GasMinAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int1
struct GasMaxAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.gasMax; } };
struct BremsMinAccessor : public NewSettingsAccessor<int16_t> { ConfigWrapper<int16_t> &getConfig() const override { return configs.bremsMin; } };
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) || defined (DPAD_BOARDCOMPUTER_V2)
struct DPadDebounceAccessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadDebounce; } };
struct ButtonDelayAccessor : public NewSettingsAccessor<uint16_t> { ConfigWrapper<uint16_t> &getConfig() const override { return configs.buttonReadDelay; } };
#endif
@ -236,6 +236,11 @@ struct ButtonProfile1Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrap
struct ButtonProfile2Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingProfile2; } };
struct ButtonProfile3Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingProfile3; } };
struct ButtonExtra1Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingExtra1; } };
struct ButtonExtra2Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingExtra2; } };
struct ButtonExtra3Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingExtra3; } };
struct ButtonExtra4Accessor : public NewSettingsAccessor<uint8_t> { ConfigWrapper<uint8_t> &getConfig() const override { return configs.dpadMappingExtra4; } };
// Can
struct CanResetOnErrorAccessor : public NewSettingsAccessor<bool> { ConfigWrapper<bool> &getConfig() const override { return configs.canResetOnError; } };
struct CanReinstallDriverAccessor : public NewSettingsAccessor<bool> { ConfigWrapper<bool> &getConfig() const override { return configs.canUninstallOnReset; } };
@ -245,3 +250,7 @@ struct QuickActionLeft2Accessor : public NewSettingsAccessor<BobbyQuickActions>
struct QuickActionRight2Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionRight2; } };
struct QuickActionUp2Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionUp2; } };
struct QuickActionDown2Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionDown2; } };
struct QuickActionExtra1Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionExtra1; } };
struct QuickActionExtra2Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionExtra2; } };
struct QuickActionExtra3Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionExtra3; } };
struct QuickActionExtra4Accessor : public NewSettingsAccessor<BobbyQuickActions> { ConfigWrapper<BobbyQuickActions> &getConfig() const override { return configs.quickActionExtra4; } };

View File

@ -47,6 +47,14 @@ constexpr const char TAG[] = "BUTTONS";
return Button(BobbyButton::Up2);
if (configs.dpadMappingDown2.value == button)
return Button(BobbyButton::Down2);
if (configs.dpadMappingExtra1.value == button)
return Button(BobbyButton::Extra1);
if (configs.dpadMappingExtra2.value == button)
return Button(BobbyButton::Extra2);
if (configs.dpadMappingExtra3.value == button)
return Button(BobbyButton::Extra3);
if (configs.dpadMappingExtra4.value == button)
return Button(BobbyButton::Extra4);
ESP_LOGW(TAG, "unknown raw button %hhu", button);
@ -74,6 +82,10 @@ void buttonPressedCommon(espgui::Button button)
case BobbyButton::Right2:
case BobbyButton::Up2:
case BobbyButton::Down2:
case BobbyButton::Extra1:
case BobbyButton::Extra2:
case BobbyButton::Extra3:
case BobbyButton::Extra4:
quickactions::handle_bobby_quickaction(button);
break;
default:;
@ -88,6 +100,10 @@ void buttonReleasedCommon(espgui::Button button)
case BobbyButton::Right2:
case BobbyButton::Up2:
case BobbyButton::Down2:
case BobbyButton::Extra1:
case BobbyButton::Extra2:
case BobbyButton::Extra3:
case BobbyButton::Extra4:
quickactions::handle_bobby_quickaction(button, false);
break;
default:;

View File

@ -16,6 +16,10 @@ enum BobbyButton
Right2,
Up2,
Down2,
Extra1,
Extra2,
Extra3,
Extra4,
Confirm = espgui::Button::Right,
Back = espgui::Button::Left
};

View File

@ -27,6 +27,18 @@ void handle_bobby_quickaction(espgui::Button button, bool pressed)
case Down2:
config = &configs.quickActionDown2;
break;
case Extra1:
config = &configs.quickActionExtra1;
break;
case Extra2:
config = &configs.quickActionExtra2;
break;
case Extra3:
config = &configs.quickActionExtra3;
break;
case Extra4:
config = &configs.quickActionExtra4;
break;
default:
return;
}

View File

@ -110,7 +110,7 @@ using BremsMaxChangeScreen = espgui::makeComponent<
>;
#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) || defined (DPAD_BOARDCOMPUTER_V2)
using DPadDebounceChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<uint8_t>,
espgui::StaticText<TEXT_DPADDEBOUNCE>,
@ -205,7 +205,7 @@ BoardcomputerHardwareSettingsMenu::BoardcomputerHardwareSettingsMenu()
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_GASMAX, GasMaxAccessor>, PushScreenAction<GasMaxChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BREMSMIN, BremsMinAccessor>, PushScreenAction<BremsMinChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BREMSMAX, BremsMaxAccessor>, PushScreenAction<BremsMaxChangeScreen>>>();
#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) || defined (DPAD_BOARDCOMPUTER_V2)
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_DPADDEBOUNCE, DPadDebounceAccessor>, PushScreenAction<DPadDebounceChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BUTTONDELAY, ButtonDelayAccessor>, PushScreenAction<ButtonDelayChangeScreen>>>();
#endif

View File

@ -32,6 +32,11 @@ constexpr char TEXT_BUTTON_PROFILE1[] = "Profile1";
constexpr char TEXT_BUTTON_PROFILE2[] = "Profile2";
constexpr char TEXT_BUTTON_PROFILE3[] = "Profile3";
constexpr char TEXT_BUTTON_EXTRA1[] = "Extra1";
constexpr char TEXT_BUTTON_EXTRA2[] = "Extra2";
constexpr char TEXT_BUTTON_EXTRA3[] = "Extra3";
constexpr char TEXT_BUTTON_EXTRA4[] = "Extra4";
constexpr char TEXT_BACK[] = "Back";
template<const char *Tprefix, typename Taccessor, Status status>
@ -82,6 +87,11 @@ ExtraButtonCalibrateMenu::ExtraButtonCalibrateMenu()
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_PROFILE2, ButtonProfile2Accessor, Status::WaitingProfile2>>();
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_PROFILE3, ButtonProfile3Accessor, Status::WaitingProfile3>>();
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_EXTRA1, ButtonExtra1Accessor, Status::WaitingExtra1>>();
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_EXTRA2, ButtonExtra2Accessor, Status::WaitingExtra2>>();
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_EXTRA3, ButtonExtra3Accessor, Status::WaitingExtra3>>();
constructMenuItem<ButtonCalibrateMenuItem<TEXT_BUTTON_EXTRA4, ButtonExtra4Accessor, Status::WaitingExtra4>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
@ -172,6 +182,34 @@ void ExtraButtonCalibrateMenu::rawButtonPressed(uint8_t button)
break;
}
break;
case WaitingExtra1:
if (auto result = configs.write_config(configs.dpadMappingExtra1, button); !result)
{
BobbyErrorHandler{}.errorOccured(std::move(result).error());
break;
}
break;
case WaitingExtra2:
if (auto result = configs.write_config(configs.dpadMappingExtra2, button); !result)
{
BobbyErrorHandler{}.errorOccured(std::move(result).error());
break;
}
break;
case WaitingExtra3:
if (auto result = configs.write_config(configs.dpadMappingExtra3, button); !result)
{
BobbyErrorHandler{}.errorOccured(std::move(result).error());
break;
}
break;
case WaitingExtra4:
if (auto result = configs.write_config(configs.dpadMappingExtra4, button); !result)
{
BobbyErrorHandler{}.errorOccured(std::move(result).error());
break;
}
break;
default:
break;
}

View File

@ -16,7 +16,11 @@ enum Status : uint8_t
WaitingProfile0,
WaitingProfile1,
WaitingProfile2,
WaitingProfile3
WaitingProfile3,
WaitingExtra1,
WaitingExtra2,
WaitingExtra3,
WaitingExtra4,
};
} // namespace

View File

@ -20,6 +20,10 @@ constexpr char TEXT_SETUPLEFT2[] = "&sSetup Left2";
constexpr char TEXT_SETUPRIGHT2[] = "&sSetup Right2";
constexpr char TEXT_SETUPUP2[] = "&sSetup Up2";
constexpr char TEXT_SETUPDOWN2[] = "&sSetup Down2";
constexpr char TEXT_SETUPEXTRA1[] = "&sSetup Extra1";
constexpr char TEXT_SETUPEXTRA2[] = "&sSetup Extra2";
constexpr char TEXT_SETUPEXTRA3[] = "&sSetup Extra3";
constexpr char TEXT_SETUPEXTRA4[] = "&sSetup Extra4";
constexpr char TEXT_BACK[] = "Back";
template<typename Tvalue, const char* TEXT, typename Accessor, typename Screen>
@ -38,6 +42,10 @@ SetupQuickActionsMenu::SetupQuickActionsMenu()
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPRIGHT2, QuickActionRight2Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPRIGHT2, QuickActionRight2Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPUP2, QuickActionUp2Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPUP2, QuickActionUp2Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPDOWN2, QuickActionDown2Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPDOWN2, QuickActionDown2Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPEXTRA1, QuickActionExtra1Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPEXTRA1, QuickActionExtra1Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPEXTRA2, QuickActionExtra2Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPEXTRA2, QuickActionExtra2Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPEXTRA3, QuickActionExtra3Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPEXTRA3, QuickActionExtra3Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SETUPEXTRA4, QuickActionExtra4Accessor>, SwitchScreenAction<QuickActionChangeValueDisplay<BobbyQuickActions, TEXT_SETUPEXTRA4, QuickActionExtra4Accessor, SetupQuickActionsMenu>>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<BoardcomputerHardwareSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}

View File

@ -0,0 +1,178 @@
#include "dpad_boardcomputer_v2.h"
// system includes
#include <array>
// Arduino includes
#include <Arduino.h>
// 3rdparty lib includes
#include <espchrono.h>
#include <tickchrono.h>
#include <screenmanager.h>
// local includes
#include "types.h"
#include "globals.h"
#include "newsettings.h"
#include "bobbybuttons.h"
namespace {
template<pin_t OUT1, pin_t OUT2, pin_t IN1, pin_t IN2, pin_t IN3, pin_t IN4>
class Helper
{
public:
static constexpr auto Out1Pin = OUT1;
static constexpr auto Out2Pin = OUT2;
static constexpr auto In1Pin = IN1;
static constexpr auto In2Pin = IN2;
static constexpr auto In3Pin = IN3;
static constexpr auto In4Pin = IN4;
void begin();
std::array<bool, 16> read();
};
template<pin_t OUT1, pin_t OUT2, pin_t IN1, pin_t IN2, pin_t IN3, pin_t IN4>
void Helper<OUT1, OUT2, IN1, IN2, IN3, IN4>::begin()
{
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
}
template<pin_t OUT1, pin_t OUT2, pin_t IN1, pin_t IN2, pin_t IN3, pin_t IN4>
std::array<bool, 16> Helper<OUT1, OUT2, IN1, IN2, IN3, IN4>::read()
{
std::array<bool, 16> result;
pinMode(OUT1, OUTPUT);
pinMode(OUT2, INPUT);
digitalWrite(OUT1, LOW);
pinMode(IN1, INPUT_PULLUP);
pinMode(IN2, INPUT_PULLUP);
pinMode(IN3, INPUT_PULLUP);
pinMode(IN4, INPUT_PULLUP);
if (configs.buttonReadDelay.value != 0) {
delayMicroseconds(configs.buttonReadDelay.value);
} else {
vPortYield();
}
result[0] = digitalRead(IN1)==LOW;
result[1] = digitalRead(IN2)==LOW;
result[2] = digitalRead(IN3)==LOW;
result[3] = digitalRead(IN4)==LOW;
digitalWrite(OUT1, HIGH);
pinMode(IN1, INPUT_PULLDOWN);
pinMode(IN2, INPUT_PULLDOWN);
pinMode(IN3, INPUT_PULLDOWN);
pinMode(IN4, INPUT_PULLDOWN);
if (configs.buttonReadDelay.value != 0) {
delayMicroseconds(configs.buttonReadDelay.value);
} else {
vPortYield();
}
result[4] = digitalRead(IN1);
result[5] = digitalRead(IN2);
result[6] = digitalRead(IN3);
result[7] = digitalRead(IN4);
digitalWrite(OUT1, LOW);
pinMode(OUT1, INPUT);
pinMode(OUT2, OUTPUT);
digitalWrite(OUT2, LOW);
pinMode(IN1, INPUT_PULLUP);
pinMode(IN2, INPUT_PULLUP);
pinMode(IN3, INPUT_PULLUP);
pinMode(IN4, INPUT_PULLUP);
if (configs.buttonReadDelay.value != 0) {
delayMicroseconds(configs.buttonReadDelay.value);
} else {
vPortYield();
}
result[8] = digitalRead(IN1)==LOW;
result[9] = digitalRead(IN2)==LOW;
result[10] = digitalRead(IN3)==LOW;
result[11] = digitalRead(IN4)==LOW;
digitalWrite(OUT2, HIGH);
pinMode(IN1, INPUT_PULLDOWN);
pinMode(IN2, INPUT_PULLDOWN);
pinMode(IN3, INPUT_PULLDOWN);
pinMode(IN4, INPUT_PULLDOWN);
if (configs.buttonReadDelay.value != 0) {
delayMicroseconds(configs.buttonReadDelay.value);
} else {
vPortYield();
}
result[12] = digitalRead(IN1);
result[13] = digitalRead(IN2);
result[14] = digitalRead(IN3);
result[15] = digitalRead(IN4);
return result;
}
#ifdef DPAD_BOARDCOMPUTER_V2
Helper<PINS_DPAD_BOARDCOMPUTER_V2_OUT1, PINS_DPAD_BOARDCOMPUTER_V2_OUT2, PINS_DPAD_BOARDCOMPUTER_V2_IN1, PINS_DPAD_BOARDCOMPUTER_V2_IN2, PINS_DPAD_BOARDCOMPUTER_V2_IN3, PINS_DPAD_BOARDCOMPUTER_V2_IN4> helper;
std::array<bool, 16> lastState;
std::array<espchrono::millis_clock::time_point, 16> debounce;
#endif
} // namespace
#ifdef DPAD_BOARDCOMPUTER_V2
namespace dpad_boardcomputer_v2 {
void init()
{
helper.begin();
std::fill(std::begin(lastState), std::end(lastState), false);
std::fill(std::begin(debounce), std::end(debounce), espchrono::millis_clock::now());
}
void update()
{
const auto newState = helper.read();
#ifdef DPAD_BOARDCOMPUTER_V2_DEBUG
lastState = newState;
return;
#endif
const auto now = espchrono::millis_clock::now();
const std::chrono::milliseconds dpadDebounce{configs.dpadDebounce.value};
for (auto i = 0; i < 10; i++)
if (lastState[i] != newState[i] && now - debounce[i] > dpadDebounce)
{
lastState[i] = newState[i];
if (espgui::currentDisplay)
{
if (newState[i])
espgui::currentDisplay->rawButtonPressed(i);
else
espgui::currentDisplay->rawButtonReleased(i);
}
debounce[i] = now;
}
}
} // namespace dpad_boardcomputer_v2
#endif

View File

@ -0,0 +1,8 @@
#pragma once
#ifdef DPAD_BOARDCOMPUTER_V2
namespace dpad_boardcomputer_v2 {
void init();
void update();
} // namespace dpad_boardcomputer_v2
#endif

View File

@ -185,11 +185,19 @@ public:
ConfigWrapper<uint8_t> dpadMappingRight2 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapRight2" };
ConfigWrapper<uint8_t> dpadMappingUp2 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapUp2" };
ConfigWrapper<uint8_t> dpadMappingDown2 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapDown2" };
ConfigWrapper<uint8_t> dpadMappingExtra1 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra1" };
ConfigWrapper<uint8_t> dpadMappingExtra2 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra2" };
ConfigWrapper<uint8_t> dpadMappingExtra3 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra3" };
ConfigWrapper<uint8_t> dpadMappingExtra4 {INPUT_MAPPING_NONE, DoReset, {}, "dpadMapExtra4" };
ConfigWrapper<BobbyQuickActions> quickActionLeft2{ BobbyQuickActions::BLINK_LEFT, DoReset, {}, "quickActleft2" };
ConfigWrapper<BobbyQuickActions> quickActionRight2{ BobbyQuickActions::BLINK_RIGHT, DoReset, {}, "quickActright2" };
ConfigWrapper<BobbyQuickActions> quickActionUp2{ BobbyQuickActions::NONE, DoReset, {}, "quickActup2" };
ConfigWrapper<BobbyQuickActions> quickActionDown2{ BobbyQuickActions::HANDBREMSE, DoReset, {}, "quickActdown2" };
ConfigWrapper<BobbyQuickActions> quickActionExtra1{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra1" };
ConfigWrapper<BobbyQuickActions> quickActionExtra2{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra2" };
ConfigWrapper<BobbyQuickActions> quickActionExtra3{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra3" };
ConfigWrapper<BobbyQuickActions> quickActionExtra4{ BobbyQuickActions::NONE, DoReset, {}, "quickActextra4" };
std::array<WirelessDoorsConfig, 5> wireless_door_configs {
WirelessDoorsConfig { "door_id0", "door_token0" },

View File

@ -23,6 +23,9 @@
#ifdef FEATURE_DPAD_6WIRESW
#include "dpad6wire.h"
#endif
#ifdef DPAD_BOARDCOMPUTER_V2
#include "dpad_boardcomputer_v2.h"
#endif
#ifdef FEATURE_ROTARY
#include "rotary.h"
#endif
@ -80,6 +83,9 @@ BobbySchedulerTask schedulerTasksArr[] {
#ifdef FEATURE_DPAD_6WIRESW
BobbySchedulerTask { "dpad6wire", dpad6wire::init, dpad6wire::update, 20ms },
#endif
#ifdef DPAD_BOARDCOMPUTER_V2
BobbySchedulerTask { "dpad_boardcomputer_v2", dpad_boardcomputer_v2::init, dpad_boardcomputer_v2::update, 20ms },
#endif
#ifdef FEATURE_ROTARY
BobbySchedulerTask { "rotary", initRotary, updateRotary, 20ms },
#endif

1812
sdkconfig_comred_new Normal file

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@ VALID_CONFIGS=(
"allfeatures"
"seatbot"
"gernot"
"comred_new"
)
print_usage() {