From ec9dcce37737c789c7044651bf85b91ca044eee4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 20 Aug 2021 23:02:05 -0700 Subject: [PATCH] de init frequency sensor (#3183) Co-authored-by: Matthew Kennedy --- firmware/controllers/sensors/frequency_sensor.cpp | 14 ++++++++++++++ firmware/controllers/sensors/frequency_sensor.h | 2 ++ firmware/init/init.h | 1 + firmware/init/sensor/init_flex.cpp | 4 ++++ firmware/init/sensor/init_sensors.cpp | 2 ++ 5 files changed, 23 insertions(+) diff --git a/firmware/controllers/sensors/frequency_sensor.cpp b/firmware/controllers/sensors/frequency_sensor.cpp index ffe6b930e9..c197bd3353 100644 --- a/firmware/controllers/sensors/frequency_sensor.cpp +++ b/firmware/controllers/sensors/frequency_sensor.cpp @@ -15,6 +15,8 @@ static void freqSensorExtiCallback(void* arg) { } void FrequencySensor::init(brain_pin_e pin) { + m_pin = pin; + #if EFI_PROD_CODE // todo: refactor https://github.com/rusefi/rusefi/issues/2123 efiExtiEnablePin("flex", pin, @@ -23,6 +25,18 @@ void FrequencySensor::init(brain_pin_e pin) { #endif // EFI_PROD_CODE } +void FrequencySensor::deInit() { + if (!isBrainPinValid(m_pin)) { + return; + } + +#if EFI_PROD_CODE + efiExtiDisablePin(m_pin); +#endif + + m_pin = GPIO_UNASSIGNED; +} + void FrequencySensor::onEdge(efitick_t nowNt) { float frequency = 1 / m_edgeTimer.getElapsedSecondsAndReset(nowNt); diff --git a/firmware/controllers/sensors/frequency_sensor.h b/firmware/controllers/sensors/frequency_sensor.h index 30021baee4..3179778ddd 100644 --- a/firmware/controllers/sensors/frequency_sensor.h +++ b/firmware/controllers/sensors/frequency_sensor.h @@ -7,9 +7,11 @@ public: : FunctionalSensor(type, timeoutPeriod) { } void init(brain_pin_e pin); + void deInit(); void onEdge(efitick_t nowNt); private: Timer m_edgeTimer; + brain_pin_e m_pin = GPIO_UNASSIGNED; }; diff --git a/firmware/init/init.h b/firmware/init/init.h index 8d0041cf1d..6b8c7e9926 100644 --- a/firmware/init/init.h +++ b/firmware/init/init.h @@ -36,3 +36,4 @@ void reconfigureVbatt(DECLARE_CONFIG_PARAMETER_SIGNATURE); void reconfigureTps(DECLARE_CONFIG_PARAMETER_SIGNATURE); void reconfigureThermistors(DECLARE_CONFIG_PARAMETER_SIGNATURE); void reconfigureOilPressure(DECLARE_CONFIG_PARAMETER_SIGNATURE); +void deInitFlexSensor(); diff --git a/firmware/init/sensor/init_flex.cpp b/firmware/init/sensor/init_flex.cpp index ac7d212abe..4fb7a89179 100644 --- a/firmware/init/sensor/init_flex.cpp +++ b/firmware/init/sensor/init_flex.cpp @@ -21,3 +21,7 @@ void initFlexSensor(DECLARE_CONFIG_PARAMETER_SIGNATURE) { flexSensor.init(pin); flexSensor.Register(); } + +void deInitFlexSensor() { + flexSensor.deInit(); +} diff --git a/firmware/init/sensor/init_sensors.cpp b/firmware/init/sensor/init_sensors.cpp index 21b5d73dd6..7d077f9b13 100644 --- a/firmware/init/sensor/init_sensors.cpp +++ b/firmware/init/sensor/init_sensors.cpp @@ -35,10 +35,12 @@ void initNewSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } void reconfigureSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + deInitFlexSensor(); reconfigureVbatt(PASS_CONFIG_PARAMETER_SIGNATURE); reconfigureTps(PASS_CONFIG_PARAMETER_SIGNATURE); reconfigureOilPressure(PASS_CONFIG_PARAMETER_SIGNATURE); reconfigureThermistors(PASS_CONFIG_PARAMETER_SIGNATURE); + initFlexSensor(PASS_CONFIG_PARAMETER_SIGNATURE); } // Mocking/testing helpers