From aa9def4a9932b99d39877f713f8b68a610d8448d Mon Sep 17 00:00:00 2001 From: dron0gus Date: Sat, 16 May 2020 01:03:18 +0300 Subject: [PATCH] Minor fixes (#1437) * cmpilation warning cleanup * exti trigger: mark pins used, handle errors --- firmware/controllers/algo/engine.cpp | 4 ++-- firmware/hw_layer/adc_inputs.cpp | 2 -- firmware/hw_layer/digital_input_exti.cpp | 10 ++++++---- firmware/hw_layer/digital_input_exti.h | 2 +- firmware/hw_layer/digital_input_icu.cpp | 1 - firmware/hw_layer/trigger_input.cpp | 3 +++ firmware/hw_layer/trigger_input_exti.cpp | 7 +++++-- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 2088044c31..add0a33bcf 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -130,8 +130,6 @@ static void cylinderCleanupControl(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif } -static efitick_t tle8888CrankingResetTime = 0; - void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { ScopePerf perf(PE::EnginePeriodicSlowCallback); @@ -152,6 +150,8 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { standardAirCharge = getStandardAirCharge(PASS_ENGINE_PARAMETER_SIGNATURE); #if (BOARD_TLE8888_COUNT > 0) + static efitick_t tle8888CrankingResetTime = 0; + if (CONFIG(useTLE8888_cranking_hack) && ENGINE(rpmCalculator).isCranking(PASS_ENGINE_PARAMETER_SIGNATURE)) { efitick_t nowNt = getTimeNowNt(); if (nowNt - tle8888CrankingResetTime > MS2NT(300)) { diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp index 9ec5ba5580..795746dbc8 100644 --- a/firmware/hw_layer/adc_inputs.cpp +++ b/firmware/hw_layer/adc_inputs.cpp @@ -442,8 +442,6 @@ public: } }; -static char errorMsgBuff[_MAX_FILLER + 2]; - void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode) { if (setting == EFI_ADC_NONE) { return; diff --git a/firmware/hw_layer/digital_input_exti.cpp b/firmware/hw_layer/digital_input_exti.cpp index dfa9d71da7..6656f3b2bb 100644 --- a/firmware/hw_layer/digital_input_exti.cpp +++ b/firmware/hw_layer/digital_input_exti.cpp @@ -23,23 +23,23 @@ static ioportmask_t ext_used = 0; // EXT is not able to give you the front direction but you could read the pin in the callback. -void efiExtiEnablePin(const char *msg, brain_pin_e brainPin, uint32_t mode, palcallback_t cb, void *cb_data) { +int efiExtiEnablePin(const char *msg, brain_pin_e brainPin, uint32_t mode, palcallback_t cb, void *cb_data) { /* paranoid check, in case of GPIO_UNASSIGNED getHwPort will return NULL * and we will fail on next check */ if (brainPin == GPIO_UNASSIGNED) - return; + return -1; ioportid_t port = getHwPort(msg, brainPin); if (port == NULL) - return; + return -1; int index = getHwPin(msg, brainPin); /* is this index already used? */ if (ext_used & PAL_PORT_BIT(index)) { firmwareError(CUSTOM_ERR_PIN_ALREADY_USED_2, "%s: pin %d: exti index already used", msg, brainPin); - return; + return -1; } ioline_t line = PAL_LINE(port, index); @@ -48,6 +48,8 @@ void efiExtiEnablePin(const char *msg, brain_pin_e brainPin, uint32_t mode, palc /* mark used */ ext_used |= PAL_PORT_BIT(index); + + return 0; } void efiExtiDisablePin(brain_pin_e brainPin) diff --git a/firmware/hw_layer/digital_input_exti.h b/firmware/hw_layer/digital_input_exti.h index 6d4ab49f07..cc4112928c 100644 --- a/firmware/hw_layer/digital_input_exti.h +++ b/firmware/hw_layer/digital_input_exti.h @@ -10,6 +10,6 @@ #include "digital_input.h" #if HAL_USE_PAL -void efiExtiEnablePin(const char *msg, brain_pin_e pin, uint32_t mode, palcallback_t cb, void *cb_data); +int efiExtiEnablePin(const char *msg, brain_pin_e pin, uint32_t mode, palcallback_t cb, void *cb_data); void efiExtiDisablePin(brain_pin_e brainPin); #endif /* HAL_USE_PAL */ diff --git a/firmware/hw_layer/digital_input_icu.cpp b/firmware/hw_layer/digital_input_icu.cpp index f21370088f..73fb062534 100644 --- a/firmware/hw_layer/digital_input_icu.cpp +++ b/firmware/hw_layer/digital_input_icu.cpp @@ -221,7 +221,6 @@ void stopDigitalCapture(const char *msg, brain_pin_e brainPin) { if (brainPin == GPIO_UNASSIGNED) { return; } - brain_pin_markUnused(brainPin); ICUDriver *driver = getInputCaptureDriver(msg, brainPin); if (driver == NULL) { diff --git a/firmware/hw_layer/trigger_input.cpp b/firmware/hw_layer/trigger_input.cpp index ac7efb9541..b209dfc7b8 100644 --- a/firmware/hw_layer/trigger_input.cpp +++ b/firmware/hw_layer/trigger_input.cpp @@ -82,6 +82,7 @@ static int turnOnTriggerInputPin(const char *msg, int index, bool isTriggerShaft shaftTriggerType[index] = TRIGGER_ICU; else camTriggerType[index] = TRIGGER_ICU; + brain_pin_markUsed(brainPin, msg); return 0; } #endif @@ -92,6 +93,7 @@ static int turnOnTriggerInputPin(const char *msg, int index, bool isTriggerShaft shaftTriggerType[index] = TRIGGER_EXTI; else camTriggerType[index] = TRIGGER_EXTI; + brain_pin_markUsed(brainPin, msg); return 0; } @@ -123,6 +125,7 @@ static void turnOffTriggerInputPin(int index, bool isTriggerShaft) { camTriggerType[index] = TRIGGER_NONE; } + brain_pin_markUnused(brainPin); } /*==========================================================================*/ diff --git a/firmware/hw_layer/trigger_input_exti.cpp b/firmware/hw_layer/trigger_input_exti.cpp index 981446029f..c36b6bc5c1 100644 --- a/firmware/hw_layer/trigger_input_exti.cpp +++ b/firmware/hw_layer/trigger_input_exti.cpp @@ -76,6 +76,7 @@ static void cam_callback(void *arg) { /*==========================================================================*/ int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { + int ret; brain_pin_e brainPin = isTriggerShaft ? CONFIG(triggerInputPins)[index] : engineConfiguration->camInputs[index]; scheduleMsg(logger, "extiTriggerTurnOnInputPin %s %s", msg, hwPortname(brainPin)); @@ -83,8 +84,10 @@ int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { /* TODO: * * do not set to both edges if we need only one * * simplify callback in case of one edge */ - ioline_t pal_line = PAL_LINE(getHwPort("trg", brainPin), getHwPin("trg", brainPin)); - efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isTriggerShaft ? shaft_callback : cam_callback, (void *)pal_line); + ioline_t pal_line = PAL_LINE(getHwPort(msg, brainPin), getHwPin(msg, brainPin)); + ret = efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isTriggerShaft ? shaft_callback : cam_callback, (void *)pal_line); + if (ret) + return ret; return 0; }