From fa49bbd58033e8a8134b5801dd6dfb795ed22959 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Tue, 3 Nov 2020 11:01:43 -0500 Subject: [PATCH] Output pin init/deinit needs a linked list #1803 --- firmware/controllers/system/efi_gpio.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index c59db22161..985b640358 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -196,6 +196,12 @@ void EnginePins::unregisterPins() { #endif /* EFI_PROD_CODE */ } +#define initIfPinOrModeChanged(output, name, pin, pinMode) \ + if (isPinOrModeChanged(pin, pinMode)) { \ + output.initPin(name, CONFIG(pin), &CONFIG(pinMode)); \ + } + + void EnginePins::startPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_ENGINE_CONTROL startInjectionPins(); @@ -206,10 +212,10 @@ void EnginePins::startPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { starterControl.initPin("Starter control", CONFIG(starterControlPin)); #endif /* EFI_ENGINE_CONTROL */ - mainRelay.initPin("Main relay", CONFIG(mainRelayPin), &CONFIG(mainRelayPinMode)); + initIfPinOrModeChanged(mainRelay, "Main relay", mainRelayPin, mainRelayPinMode); - fanRelay.initPin("Fan", CONFIG(fanPin), &CONFIG(fanPinMode)); - acRelay.initPin("A/C relay", CONFIG(acRelayPin), &CONFIG(acRelayPinMode)); + initIfPinOrModeChanged(fanRelay, "Fan", fanPin, fanPinMode); + initIfPinOrModeChanged(acRelay, "A/C relay", acRelayPin, acRelayPinMode); // todo: should we move this code closer to the fuel pump logic? fuelPumpRelay.initPin("Fuel pump", CONFIG(fuelPumpPin), &CONFIG(fuelPumpPinMode)); boostPin.initPin("Boost", CONFIG(boostControlPin));