FEATURE_CAN vs FEATURE_SERIAL

This commit is contained in:
2021-06-28 10:57:39 +02:00
parent f93076c97b
commit 67ad568de1
9 changed files with 31 additions and 22 deletions

View File

@ -63,6 +63,7 @@ build_flags =
-DTFT_RST=2 -DTFT_RST=2
-DSPI_FREQUENCY=27000000 -DSPI_FREQUENCY=27000000
-DDEFAULT_SWAPSCREENBYTES=false -DDEFAULT_SWAPSCREENBYTES=false
-DFEATURE_SERIAL
-DPINS_RX1=4 -DPINS_RX1=4
-DPINS_TX1=5 -DPINS_TX1=5
-DPINS_RX2=25 -DPINS_RX2=25
@ -115,6 +116,8 @@ build_flags =
-DTFT_RST=2 -DTFT_RST=2
-DSPI_FREQUENCY=27000000 -DSPI_FREQUENCY=27000000
-DDEFAULT_SWAPSCREENBYTES=false -DDEFAULT_SWAPSCREENBYTES=false
-DFEATURE_CAN
; -DFEATURE_SERIAL
; -DPINS_RX1=4 ; -DPINS_RX1=4
; -DPINS_TX1=5 ; -DPINS_TX1=5
; -DPINS_RX2=22 ; -DPINS_RX2=22
@ -163,7 +166,6 @@ build_flags =
; -DDEFAULT_GAMETRAKDISTMIN=0 ; -DDEFAULT_GAMETRAKDISTMIN=0
; -DDEFAULT_GAMETRAKDISTMAX=4095 ; -DDEFAULT_GAMETRAKDISTMAX=4095
; -DFEATURE_CLOUD ; -DFEATURE_CLOUD
-DFEATURE_CAN
[env:feedc0de_usb] [env:feedc0de_usb]
platform = ${feedc0de.platform} platform = ${feedc0de.platform}
@ -332,6 +334,7 @@ build_flags =
${default_wheels_inverted.build_flags} ${default_wheels_inverted.build_flags}
-DDEFAULT_WHEELDIAMETER=165 -DDEFAULT_WHEELDIAMETER=165
; TODO: actually assign pins ; TODO: actually assign pins
-DFEATURE_SERIAL
-DPINS_RX1=22 -DPINS_RX1=22
-DPINS_TX1=25 -DPINS_TX1=25
-DPINS_RX2=23 -DPINS_RX2=23
@ -421,6 +424,7 @@ build_flags =
-DTFT_RST=2 -DTFT_RST=2
-DSPI_FREQUENCY=27000000 -DSPI_FREQUENCY=27000000
-DDEFAULT_SWAPSCREENBYTES=false -DDEFAULT_SWAPSCREENBYTES=false
-DFEATURE_SERIAL
-DPINS_RX1=4 -DPINS_RX1=4
-DPINS_TX1=5 -DPINS_TX1=5
-DPINS_RX2=25 -DPINS_RX2=25

View File

@ -7,22 +7,22 @@
#include "types.h" #include "types.h"
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
#include "feedbackparser.h" #include "feedbackparser.h"
#endif #endif
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
class HardwareSerial; class HardwareSerial;
#endif #endif
namespace { namespace {
struct Controller { struct Controller {
Controller( Controller(
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
HardwareSerial &serial, HardwareSerial &serial,
#endif #endif
bool &enableLeft, bool &enableRight, bool &invertLeft, bool &invertRight) : bool &enableLeft, bool &enableRight, bool &invertLeft, bool &invertRight) :
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
serial{serial}, serial{serial},
#endif #endif
enableLeft{enableLeft}, enableRight{enableRight}, invertLeft{invertLeft}, invertRight{invertRight} enableLeft{enableLeft}, enableRight{enableRight}, invertLeft{invertLeft}, invertRight{invertRight}
@ -31,7 +31,7 @@ struct Controller {
// Controller(const Controller &) = delete; // Controller(const Controller &) = delete;
// Controller &operator=(const Controller &) = delete; // Controller &operator=(const Controller &) = delete;
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
std::reference_wrapper<HardwareSerial> serial; std::reference_wrapper<HardwareSerial> serial;
#endif #endif
bool &enableLeft, &enableRight, &invertLeft, &invertRight; bool &enableLeft, &enableRight, &invertLeft, &invertRight;
@ -44,7 +44,7 @@ struct Controller {
bool feedbackValid{}; bool feedbackValid{};
bobbycar::protocol::serial::Feedback feedback{}; bobbycar::protocol::serial::Feedback feedback{};
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
FeedbackParser parser{serial, feedbackValid, feedback}; FeedbackParser parser{serial, feedbackValid, feedback};
#endif #endif
}; };

View File

@ -60,7 +60,7 @@ public:
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERMM>, SwitchScreenAction<WheelDiameterMmChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERMM>, SwitchScreenAction<WheelDiameterMmChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELDIAMETERINCH>, SwitchScreenAction<WheelDiameterInchChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NUMMAGNETPOLES>, SwitchScreenAction<NumMagnetPolesChangeScreen>>>();
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SWAPFRONTBACK>, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SWAPFRONTBACK>, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>();
#endif #endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&icons::back>>>();

View File

@ -42,13 +42,13 @@ public:
explicit Controllers() : explicit Controllers() :
std::array<Controller, 2>{{ std::array<Controller, 2>{{
Controller { Controller {
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
Serial1, Serial1,
#endif #endif
settings.controllerHardware.enableFrontLeft, settings.controllerHardware.enableFrontRight, settings.controllerHardware.invertFrontLeft, settings.controllerHardware.invertFrontRight settings.controllerHardware.enableFrontLeft, settings.controllerHardware.enableFrontRight, settings.controllerHardware.invertFrontLeft, settings.controllerHardware.invertFrontRight
}, },
Controller { Controller {
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
Serial2, Serial2,
#endif #endif
settings.controllerHardware.enableBackLeft, settings.controllerHardware.enableBackRight, settings.controllerHardware.invertBackLeft, settings.controllerHardware.invertBackRight settings.controllerHardware.enableBackLeft, settings.controllerHardware.enableBackRight, settings.controllerHardware.invertBackLeft, settings.controllerHardware.invertBackRight

View File

@ -243,7 +243,7 @@ void setup()
} }
printMemoryStats("loadSettings()"); printMemoryStats("loadSettings()");
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
bootLabel.redraw("swap front back"); bootLabel.redraw("swap front back");
updateSwapFrontBack(); updateSwapFrontBack();
printMemoryStats("swapFronBack()"); printMemoryStats("swapFronBack()");
@ -309,7 +309,9 @@ void setup()
#ifdef FEATURE_CAN #ifdef FEATURE_CAN
initCan(); initCan();
#else #endif
#ifdef FEATURE_SERIAL
bootLabel.redraw("front Serial begin"); bootLabel.redraw("front Serial begin");
controllers.front.serial.get().begin(38400, SERIAL_8N1, PINS_RX1, PINS_TX1); controllers.front.serial.get().begin(38400, SERIAL_8N1, PINS_RX1, PINS_TX1);
@ -440,7 +442,9 @@ void loop()
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
if (!parseCanInput()) if (!parseCanInput())
break; break;
#else #endif
#ifdef FEATURE_SERIAL
for (Controller &controller : controllers) for (Controller &controller : controllers)
controller.parser.update(); controller.parser.update();
#endif #endif

View File

@ -32,7 +32,7 @@ constexpr Settings::ControllerHardware defaultControllerHardware {
.wheelDiameter = DEFAULT_WHEELDIAMETER, .wheelDiameter = DEFAULT_WHEELDIAMETER,
.numMagnetPoles = 15, .numMagnetPoles = 15,
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
.swapFrontBack = false .swapFrontBack = false
#endif #endif
}; };
@ -50,7 +50,7 @@ constexpr Settings::ControllerHardware mosfetsOffControllerHardware {
.wheelDiameter = 165, .wheelDiameter = 165,
.numMagnetPoles = 15, .numMagnetPoles = 15,
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
.swapFrontBack = false .swapFrontBack = false
#endif #endif
}; };
@ -79,7 +79,7 @@ constexpr Settings::ControllerHardware spinnerControllerHardware {
.wheelDiameter = 165, .wheelDiameter = 165,
.numMagnetPoles = 15, .numMagnetPoles = 15,
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
.swapFrontBack = false .swapFrontBack = false
#endif #endif
}; };

View File

@ -51,7 +51,7 @@ struct Settings
int16_t wheelDiameter; // in mm int16_t wheelDiameter; // in mm
int16_t numMagnetPoles; // virtual RPM per one real RPM int16_t numMagnetPoles; // virtual RPM per one real RPM
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
bool swapFrontBack; bool swapFrontBack;
#endif #endif
} controllerHardware; } controllerHardware;
@ -144,7 +144,7 @@ void Settings::executeForEverySetting(T &&callable)
callable("wheelDiameter", controllerHardware.wheelDiameter); callable("wheelDiameter", controllerHardware.wheelDiameter);
callable("numMagnetPoles", controllerHardware.numMagnetPoles); callable("numMagnetPoles", controllerHardware.numMagnetPoles);
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
callable("swapFrontBack", controllerHardware.swapFrontBack); callable("swapFrontBack", controllerHardware.swapFrontBack);
#endif #endif

View File

@ -56,7 +56,7 @@ struct WheelDiameterInchAccessor : public virtual AccessorInterface<float>
void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); } void setValue(float value) override { settings.controllerHardware.wheelDiameter = convertFromInch(value); saveSettings(); }
}; };
struct NumMagnetPolesAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.controllerHardware.numMagnetPoles; } }; struct NumMagnetPolesAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.controllerHardware.numMagnetPoles; } };
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
struct SwapFrontBackAccessor : public RefAccessorSaveSettings<bool> { struct SwapFrontBackAccessor : public RefAccessorSaveSettings<bool> {
bool &getRef() const override { return settings.controllerHardware.swapFrontBack; } bool &getRef() const override { return settings.controllerHardware.swapFrontBack; }
void setValue(bool value) override { RefAccessorSaveSettings<bool>::setValue(value); updateSwapFrontBack(); }; void setValue(bool value) override { RefAccessorSaveSettings<bool>::setValue(value); updateSwapFrontBack(); };

View File

@ -256,14 +256,15 @@ void fixCommonParams()
void sendCommands() void sendCommands()
{ {
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
for (Controller &controller : controllers) for (Controller &controller : controllers)
{ {
controller.command.start = Command::VALID_HEADER; controller.command.start = Command::VALID_HEADER;
controller.command.checksum = calculateChecksum(controller.command); controller.command.checksum = calculateChecksum(controller.command);
controller.serial.get().write((uint8_t *) &controller.command, sizeof(controller.command)); controller.serial.get().write((uint8_t *) &controller.command, sizeof(controller.command));
} }
#else #endif
#ifdef FEATURE_CAN
sendCanCommands(); sendCanCommands();
#endif #endif
} }
@ -271,7 +272,7 @@ void sendCommands()
template<typename T, typename... Args> template<typename T, typename... Args>
void switchScreen(Args&&... args); void switchScreen(Args&&... args);
#ifndef FEATURE_CAN #ifdef FEATURE_SERIAL
void updateSwapFrontBack() void updateSwapFrontBack()
{ {
controllers.front.serial = settings.controllerHardware.swapFrontBack ? Serial2 : Serial1; controllers.front.serial = settings.controllerHardware.swapFrontBack ? Serial2 : Serial1;