From 2c322006d84a62fd4cef64ce42b3fb4fbe973210 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 3 Nov 2020 00:09:42 -0500 Subject: [PATCH] Output pin init/deinit needs a linked list #1803 --- .../actuators/alternator_controller.cpp | 7 ++----- firmware/controllers/actuators/boost_control.cpp | 3 +-- firmware/controllers/actuators/idle_thread.cpp | 12 ++++++------ firmware/controllers/system/efi_gpio.cpp | 15 +++++++++++---- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index 54acc7dfc2..eba8f0a333 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -161,13 +161,10 @@ void initAlternatorCtrl(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (CONFIG(alternatorControlPin) == GPIO_UNASSIGNED) return; - if (CONFIG(onOffAlternatorLogic)) { - enginePins.alternatorPin.initPin("Alternator control", CONFIG(alternatorControlPin)); - } else { - startSimplePwmExt(&alternatorControl, + if (!CONFIG(onOffAlternatorLogic)) { + startSimplePwm(&alternatorControl, "Alternator control", &engine->executor, - CONFIG(alternatorControlPin), &enginePins.alternatorPin, engineConfiguration->alternatorPwmFrequency, 0.1, (pwm_gen_callback*)applyAlternatorPinState); } diff --git a/firmware/controllers/actuators/boost_control.cpp b/firmware/controllers/actuators/boost_control.cpp index f8dee33d56..9d859e3770 100644 --- a/firmware/controllers/actuators/boost_control.cpp +++ b/firmware/controllers/actuators/boost_control.cpp @@ -187,11 +187,10 @@ void startBoostPin() { return; } - startSimplePwmExt( + startSimplePwm( &boostPwmControl, "Boost", &engine->executor, - CONFIG(boostControlPin), &enginePins.boostPin, engineConfiguration->boostPwmFrequency, 0.5f diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index e25d37910e..d0de11aee6 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -735,21 +735,21 @@ void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // todo: even for double-solenoid mode we can probably use same single SimplePWM // todo: open question why do we pass 'OutputPin' into 'startSimplePwmExt' if we have custom applyIdleSolenoidPinState listener anyway? if (!CONFIG(isDoubleSolenoidIdle)) { - startSimplePwmExt(&idleSolenoidOpen, "Idle Valve", + startSimplePwm(&idleSolenoidOpen, "Idle Valve", &engine->executor, - CONFIG(idle).solenoidPin, &enginePins.idleSolenoidPin, + &enginePins.idleSolenoidPin, CONFIG(idle).solenoidFrequency, PERCENT_TO_DUTY(CONFIG(manIdlePosition)), (pwm_gen_callback*)applyIdleSolenoidPinState); } else { - startSimplePwmExt(&idleSolenoidOpen, "Idle Valve Open", + startSimplePwm(&idleSolenoidOpen, "Idle Valve Open", &engine->executor, - CONFIG(idle).solenoidPin, &enginePins.idleSolenoidPin, + &enginePins.idleSolenoidPin, CONFIG(idle).solenoidFrequency, PERCENT_TO_DUTY(CONFIG(manIdlePosition)), (pwm_gen_callback*)applyIdleSolenoidPinState); - startSimplePwmExt(&idleSolenoidClose, "Idle Valve Close", + startSimplePwm(&idleSolenoidClose, "Idle Valve Close", &engine->executor, - CONFIG(secondSolenoidPin), &enginePins.secondIdleSolenoidPin, + &enginePins.secondIdleSolenoidPin, CONFIG(idle).solenoidFrequency, PERCENT_TO_DUTY(CONFIG(manIdlePosition)), (pwm_gen_callback*)applyIdleSolenoidPinState); } diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index f4ea39c9d0..7970060034 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -83,7 +83,7 @@ void RegisteredOutputPin::unregister() { EnginePins::EnginePins() : - mainRelay("mainRelay", CONFIG_OFFSET(mainRelayPin), CONFIG_OFFSET(mainRelayPinMode)), + mainRelay("mainRelay", CONFIG_PIN_OFFSETS(mainRelay)), starterControl("starterControl", CONFIG_PIN_OFFSETS(starterControl)), starterRelayDisable("starterRelayDisable", CONFIG_PIN_OFFSETS(starterRelayDisable)), fanRelay("fanRelay", CONFIG_PIN_OFFSETS(fan)), @@ -423,16 +423,23 @@ void initOutputPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.sdCsPin.initPin("SD CS", CONFIG(sdCardCsPin)); #endif /* HAL_USE_SPI */ - // todo: should we move this code closer to the fuel pump logic? - enginePins.fuelPumpRelay.initPin("Fuel pump", CONFIG(fuelPumpPin), &CONFIG(fuelPumpPinMode)); enginePins.mainRelay.initPin("Main relay", CONFIG(mainRelayPin), &CONFIG(mainRelayPinMode)); enginePins.starterRelayDisable.initPin("Starter disable", CONFIG(starterRelayDisablePin), &CONFIG(starterRelayDisablePinMode)); enginePins.starterControl.initPin("Starter control", CONFIG(starterControlPin)); enginePins.fanRelay.initPin("Fan", CONFIG(fanPin), &CONFIG(fanPinMode)); - enginePins.o2heater.initPin("O2 heater", CONFIG(o2heaterPin)); enginePins.acRelay.initPin("A/C relay", CONFIG(acRelayPin), &CONFIG(acRelayPinMode)); + // todo: should we move this code closer to the fuel pump logic? + enginePins.fuelPumpRelay.initPin("Fuel pump", CONFIG(fuelPumpPin), &CONFIG(fuelPumpPinMode)); + enginePins.boostPin.initPin("Boost", CONFIG(boostControlPin)); + + enginePins.idleSolenoidPin.initPin("Idle Valve", CONFIG(idle).solenoidPin); + enginePins.secondIdleSolenoidPin.initPin("Idle Valve#2", CONFIG(secondSolenoidPin)); + enginePins.alternatorPin.initPin("Alternator control", CONFIG(alternatorControlPin)); + + + enginePins.o2heater.initPin("O2 heater", CONFIG(o2heaterPin)); #endif /* EFI_GPIO_HARDWARE */ }