From b141f83a885a9131ff5ea7693eabd6825f4845f0 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 14 Aug 2021 04:58:10 -0400 Subject: [PATCH] No pins should be restarted for no reason during config change #3151 --- .../digital_input/trigger/trigger_input.cpp | 8 ++------ firmware/hw_layer/drivers/can/can_hw.cpp | 17 ++++------------- firmware/hw_layer/io_pins.h | 9 +++++++++ 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/firmware/hw_layer/digital_input/trigger/trigger_input.cpp b/firmware/hw_layer/digital_input/trigger/trigger_input.cpp index 57a0e0b943..0036847ace 100644 --- a/firmware/hw_layer/digital_input/trigger/trigger_input.cpp +++ b/firmware/hw_layer/digital_input/trigger/trigger_input.cpp @@ -174,14 +174,10 @@ void turnOnTriggerInputPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void stopTriggerDebugPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { for (int i = 0; i < TRIGGER_INPUT_PIN_COUNT; i++) { - if (isConfigurationChanged(triggerInputDebugPins[i])) { - efiSetPadUnused(activeConfiguration.triggerInputDebugPins[i] PASS_ENGINE_PARAMETER_SUFFIX); - } + efiSetPadUnusedIfConfigurationChanged(triggerInputDebugPins[i]); } for (int i = 0; i < CAM_INPUTS_COUNT; i++) { - if (isConfigurationChanged(camInputsDebug[i])) { - efiSetPadUnused(activeConfiguration.camInputsDebug[i] PASS_ENGINE_PARAMETER_SUFFIX); - } + efiSetPadUnusedIfConfigurationChanged(camInputsDebug[i]); } } diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index e1cc09a0e9..f11f64a777 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -197,13 +197,8 @@ void enableFrankensoCan(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } void stopCanPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - if (isConfigurationChanged(canTxPin)) { - efiSetPadUnused(activeConfiguration.canTxPin); - } - - if (isConfigurationChanged(canRxPin)) { - efiSetPadUnused(activeConfiguration.canRxPin); - } + efiSetPadUnusedIfConfigurationChanged(canTxPin); + efiSetPadUnusedIfConfigurationChanged(canRxPin); } // at the moment we support only very limited runtime configuration change, still not supporting online CAN toggle @@ -224,12 +219,8 @@ void startCanPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return; } - if (isConfigurationChanged(canTxPin)) { - efiSetPadMode("CAN TX", CONFIG(canTxPin), PAL_MODE_ALTERNATE(EFI_CAN_TX_AF)); - } - if (isConfigurationChanged(canRxPin)) { - efiSetPadMode("CAN RX", CONFIG(canRxPin), PAL_MODE_ALTERNATE(EFI_CAN_RX_AF)); - } + efiSetPadModeIfConfigurationChanged("CAN TX", canTxPin, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF)); + efiSetPadModeIfConfigurationChanged("CAN RX", canRxPin, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF)); } void initCan(void) { diff --git a/firmware/hw_layer/io_pins.h b/firmware/hw_layer/io_pins.h index e7cc1877ed..fbe531632b 100644 --- a/firmware/hw_layer/io_pins.h +++ b/firmware/hw_layer/io_pins.h @@ -19,6 +19,15 @@ efiAssertVoid(CUSTOM_INVALID_MODE_SETTING, mode <= OM_OPENDRAIN_INVERTED, "invalid pin_output_mode_e"); \ } +#define efiSetPadModeIfConfigurationChanged(msg, pin, mode) \ + if (isConfigurationChanged(pin)) { \ + efiSetPadMode(msg, CONFIG(pin), mode PASS_ENGINE_PARAMETER_SUFFIX); \ + } + +#define efiSetPadUnusedIfConfigurationChanged(pin) \ + if (isConfigurationChanged(pin)) { \ + efiSetPadUnused(activeConfiguration.pin PASS_ENGINE_PARAMETER_SUFFIX); \ + } EXTERNC void efiSetPadMode(const char *msg, brain_pin_e pin, iomode_t mode DECLARE_ENGINE_PARAMETER_SUFFIX); EXTERNC void efiSetPadModeWithoutOwnershipAcquisition(const char *msg, brain_pin_e brainPin, iomode_t mode);