From 627f73502b40e177c14bb1edb85a72b2c2479ad3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 18 Oct 2019 19:45:32 -0400 Subject: [PATCH] steps towards #975 --- .../controllers/actuators/idle_thread.cpp | 25 ++++++++++--------- firmware/controllers/actuators/idle_thread.h | 9 ++++--- firmware/controllers/engine_controller.cpp | 2 +- firmware/hw_layer/hardware.cpp | 15 +++++++++++ 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 860496f606..6b73f7b181 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -530,21 +530,26 @@ bool isIdleHardwareRestartNeeded() { return isConfigurationChanged(stepperEnablePin) || isConfigurationChanged(stepperEnablePinMode) || isConfigurationChanged(bc.idle.stepperStepPin) || - isConfigurationChanged(bc.idle.stepperStepPin) || - isConfigurationChanged(bc.idle.solenoidFrequency) || -// isConfigurationChanged() || - // isConfigurationChanged() || - // isConfigurationChanged() || + isConfigurationChanged(bc.idle.solenoidFrequency) || + isConfigurationChanged(bc.useStepperIdle) || +// isConfigurationChanged() || isConfigurationChanged(bc.useETBforIdleControl) || isConfigurationChanged(bc.idle.solenoidPin); } -static void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + brain_pin_markUnused(activeConfiguration.stepperEnablePin); + brain_pin_markUnused(activeConfiguration.bc.idle.stepperStepPin); + brain_pin_markUnused(activeConfiguration.bc.idle.solenoidPin); +// brain_pin_markUnused(activeConfiguration.bc.idle.); +// brain_pin_markUnused(activeConfiguration.bc.idle.); +// brain_pin_markUnused(activeConfiguration.bc.idle.); +// brain_pin_markUnused(activeConfiguration.bc.idle.); } -static void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (CONFIGB(useStepperIdle)) { iacMotor.initialize(CONFIGB(idle).stepperStepPin, CONFIGB(idle).stepperDirectionPin, @@ -555,7 +560,7 @@ static void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { logger); // This greatly improves PID accuracy for steppers with a small number of steps idlePositionSensitivityThreshold = 1.0f / engineConfiguration->idleStepperTotalSteps; - } else { + } else if (!engineConfiguration->bc.useETBforIdleControl) { /** * Start PWM for idleValvePin */ @@ -576,10 +581,6 @@ void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { idlePid.initPidClass(&engineConfiguration->idleRpmPid); -#if ! EFI_UNIT_TEST - // todo: re-initialize idle pins on the fly - initIdleHardware(PASS_ENGINE_PARAMETER_SIGNATURE); -#endif /* EFI_UNIT_TEST */ DISPLAY_STATE(Engine) DISPLAY_TEXT(Idle_State); diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index d0bf7fbd06..638b859e3f 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -3,11 +3,10 @@ * @brief Idle Valve Control thread * * @date May 23, 2013 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef IDLE_THREAD_H_ -#define IDLE_THREAD_H_ +#pragma once #include "engine.h" #include "periodic_task.h" @@ -33,6 +32,8 @@ void setIdleDFactor(float value); void setIdleMode(idle_mode_e value); void setTargetIdleRpm(int value); void setIdleDT(int value); +void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE); +void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE); +bool isIdleHardwareRestartNeeded(); void onConfigurationChangeIdleCallback(engine_configuration_s *previousConfiguration); -#endif /* IDLE_THREAD_H_ */ diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 54b2bc3c13..fee0450aab 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -837,6 +837,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 20191016; + return 20191018; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 0d2ad6df9e..ac7ef66760 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -33,6 +33,7 @@ #include "AdcConfiguration.h" #include "electronic_throttle.h" +#include "idle_thread.h" #include "mcp3208.h" #include "hip9011.h" #include "histogram.h" @@ -274,6 +275,7 @@ void applyNewHardwareSettings(void) { stopTriggerInputPins(); #endif /* EFI_SHAFT_POSITION_INPUT */ + #if (HAL_USE_PAL && EFI_JOYSTICK) stopJoystickPins(); #endif /* HAL_USE_PAL && EFI_JOYSTICK */ @@ -288,6 +290,13 @@ void applyNewHardwareSettings(void) { stopHip9001_pins(); #endif /* EFI_HIP_9011 */ +#if EFI_IDLE_CONTROL + bool isIdleRestartNeeded = isIdleHardwareRestartNeeded(); + if (isIdleRestartNeeded) { + // todostopIdleHardware(); + } +#endif + #if EFI_ELECTRONIC_THROTTLE_BODY bool etbRestartNeeded = isETBRestartNeeded(); if (etbRestartNeeded) { @@ -348,6 +357,12 @@ void applyNewHardwareSettings(void) { #endif /* EFI_HIP_9011 */ +#if EFI_IDLE_CONTROL +// if (isIdleRestartNeeded) { + initIdleHardware(); +// } +#endif + #if EFI_ELECTRONIC_THROTTLE_BODY if (etbRestartNeeded) { startETBPins(PASS_ENGINE_PARAMETER_SIGNATURE);