From 6fd9362f6ddb9d58c1f94a97799371b147a549ae Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 24 Nov 2014 11:03:09 -0600 Subject: [PATCH] auto-sync --- firmware/console/status_loop.cpp | 1 + firmware/controllers/algo/error_handling.h | 4 +- firmware/controllers/algo/signal_executor.cpp | 4 +- firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/lcd_controller.cpp | 2 + firmware/controllers/math/engine_math.cpp | 69 ++++++++++--------- firmware/controllers/math/engine_math.h | 3 +- .../trigger/main_trigger_callback.cpp | 1 + firmware/emulation/engine_emulator.cpp | 2 + firmware/emulation/wave_analyzer.cpp | 1 + firmware/hw_layer/hardware.cpp | 1 + firmware/rusefi.cpp | 7 +- unit_tests/main.cpp | 4 +- .../simulator/rusEfiFunctionalTest.cpp | 4 +- 14 files changed, 53 insertions(+), 52 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 2fb8d4f2b0..67f71fd284 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -73,6 +73,7 @@ int warningEnabled = TRUE; //int warningEnabled = FALSE; extern board_configuration_s *boardConfiguration; +extern bool hasFirmwareErrorFlag; #define FULL_LOGGING_KEY "fl" #if EFI_PROD_CODE || EFI_SIMULATOR diff --git a/firmware/controllers/algo/error_handling.h b/firmware/controllers/algo/error_handling.h index 06932a52d6..e8ce60a1f5 100644 --- a/firmware/controllers/algo/error_handling.h +++ b/firmware/controllers/algo/error_handling.h @@ -29,7 +29,9 @@ int warning(obd_code_e code, const char *fmt, ...); * todo: better method name? */ void firmwareError(const char *fmt, ...); -bool hasFirmwareError(void); + +#define hasFirmwareError() hasFirmwareErrorFlag + char *getFirmwareError(void); /** diff --git a/firmware/controllers/algo/signal_executor.cpp b/firmware/controllers/algo/signal_executor.cpp index a431be3b05..f43ad01d32 100644 --- a/firmware/controllers/algo/signal_executor.cpp +++ b/firmware/controllers/algo/signal_executor.cpp @@ -71,7 +71,7 @@ void turnPinHigh(io_pin_e pin) { #if EFI_WAVE_CHART // explicit check here is a performance optimization to speed up no-chart mode - if (!engineConfiguration->isDigitalChartEnabled) { + if (engineConfiguration->isDigitalChartEnabled) { // this is a performance optimization - array index is cheaper then invoking a method with 'switch' const char *pinName = namedPinsArray[pin]; // dbgDurr = hal_lld_get_counter_value() - dbgStart; @@ -93,7 +93,7 @@ void turnPinLow(io_pin_e pin) { #endif /* EFI_DEFAILED_LOGGING */ #if EFI_WAVE_CHART - if (!engineConfiguration->isDigitalChartEnabled) { + if (engineConfiguration->isDigitalChartEnabled) { // this is a performance optimization - array index is cheaper then invoking a method with 'switch' const char *pinName = namedPinsArray[pin]; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index cc677d0f24..85857fa4bf 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -66,7 +66,7 @@ static LEElement * radiatorFanLogic; extern OutputPin outputs[IO_PIN_COUNT]; extern pin_output_mode_e *pinDefaultState[IO_PIN_COUNT]; - +extern bool hasFirmwareErrorFlag; persistent_config_container_s persistentState CCM_OPTIONAL; diff --git a/firmware/controllers/lcd_controller.cpp b/firmware/controllers/lcd_controller.cpp index fa1083e77d..f86ad955f9 100644 --- a/firmware/controllers/lcd_controller.cpp +++ b/firmware/controllers/lcd_controller.cpp @@ -19,6 +19,8 @@ EXTERN_ENGINE; +extern bool hasFirmwareErrorFlag; + #define LCD_WIDTH 20 // this value should be even #define NUMBER_OF_DIFFERENT_LINES 4 diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index 8bf0feff4a..aaf1c96a07 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -30,7 +30,8 @@ #include "event_registry.h" #include "efiGpio.h" -EXTERN_ENGINE; +EXTERN_ENGINE +; /* * default Volumetric Efficiency @@ -40,7 +41,6 @@ EXTERN_ENGINE; // return interpolate(5000, 1.1, 8000, 1, rpm); // return interpolate(500, 0.5, 5000, 1.1, rpm); //} - /** * @return number of milliseconds in one crankshaft revolution */ @@ -53,7 +53,7 @@ float getCrankshaftRevolutionTimeMs(int rpm) { * TODO: should be 'crankAngleRange' range? */ float fixAngle(float angle DECLARE_ENGINE_PARAMETER_S) { - efiAssert(engineConfiguration->engineCycle!=0, "engine cycle", NAN); + efiAssert(engineConfiguration->engineCycle != 0, "engine cycle", NAN); // I guess this implementation would be faster than 'angle % 720' while (angle < 0) angle += engineConfiguration->engineCycle; @@ -101,14 +101,10 @@ void setSingleCoilDwell(engine_configuration_s *engineConfiguration) { engineConfiguration->sparkDwell[7] = 0; } -int isCrankingRT(engine_configuration_s *engineConfiguration, int rpm) { - return rpm > 0 && rpm < engineConfiguration->crankingSettings.crankingRpm; -} - OutputSignalList injectonSignals CCM_OPTIONAL; -static void registerSparkEvent(trigger_shape_s * s, - IgnitionEventList *list, io_pin_e pin, float localAdvance, float dwell DECLARE_ENGINE_PARAMETER_S) { +static void registerSparkEvent(trigger_shape_s * s, IgnitionEventList *list, io_pin_e pin, float localAdvance, + float dwell DECLARE_ENGINE_PARAMETER_S) { IgnitionEvent *event = list->getNextActuatorEvent(); if (event == NULL) @@ -125,8 +121,8 @@ static void registerSparkEvent(trigger_shape_s * s, findTriggerPosition(s, &event->dwellPosition, localAdvance - dwell PASS_ENGINE_PARAMETER); } -void initializeIgnitionActions(float advance, float dwellAngle, - engine_configuration2_s *engineConfiguration2, IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S) { +void initializeIgnitionActions(float advance, float dwellAngle, engine_configuration2_s *engineConfiguration2, + IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S) { efiAssertVoid(engineConfiguration->cylindersCount > 0, "cylindersCount"); @@ -136,15 +132,17 @@ void initializeIgnitionActions(float advance, float dwellAngle, case IM_ONE_COIL: for (int i = 0; i < engineConfiguration->cylindersCount; i++) { // todo: extract method - float localAdvance = advance + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; + float localAdvance = advance + + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; - registerSparkEvent(&engineConfiguration2->triggerShape, list, SPARKOUT_1_OUTPUT, - localAdvance, dwellAngle PASS_ENGINE_PARAMETER); + registerSparkEvent(&engineConfiguration2->triggerShape, list, SPARKOUT_1_OUTPUT, localAdvance, + dwellAngle PASS_ENGINE_PARAMETER); } break; case IM_WASTED_SPARK: for (int i = 0; i < engineConfiguration->cylindersCount; i++) { - float localAdvance = advance + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; + float localAdvance = advance + + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; int wastedIndex = i % (engineConfiguration->cylindersCount / 2); @@ -159,7 +157,8 @@ void initializeIgnitionActions(float advance, float dwellAngle, break; case IM_INDIVIDUAL_COILS: for (int i = 0; i < engineConfiguration->cylindersCount; i++) { - float localAdvance = advance + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; + float localAdvance = advance + + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; io_pin_e pin = (io_pin_e) ((int) SPARKOUT_1_OUTPUT + getCylinderId(engineConfiguration->firingOrder, i) - 1); registerSparkEvent(&engineConfiguration2->triggerShape, list, pin, localAdvance, @@ -172,8 +171,8 @@ void initializeIgnitionActions(float advance, float dwellAngle, } } -void FuelSchedule::registerInjectionEvent(trigger_shape_s *s, - io_pin_e pin, float angle, bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S) { +void FuelSchedule::registerInjectionEvent(trigger_shape_s *s, io_pin_e pin, float angle, + bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S) { ActuatorEventList *list = &events; if (!isSimultanious && !isPinAssigned(pin)) { @@ -206,10 +205,9 @@ void FuelSchedule::clear() { memset(hasEvents, 0, sizeof(hasEvents)); } -void FuelSchedule::addFuelEvents(trigger_shape_s *s, - injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) { +void FuelSchedule::addFuelEvents(trigger_shape_s *s, injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) { ActuatorEventList *list = &events; - ; + ; list->resetEventList(); float baseAngle = engineConfiguration->globalTriggerAngleOffset + engineConfiguration->injectionOffset; @@ -218,13 +216,15 @@ void FuelSchedule::addFuelEvents(trigger_shape_s *s, case IM_SEQUENTIAL: for (int i = 0; i < engineConfiguration->cylindersCount; i++) { io_pin_e pin = INJECTOR_PIN_BY_INDEX(getCylinderId(engineConfiguration->firingOrder, i) - 1); - float angle = baseAngle + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; + float angle = baseAngle + + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; registerInjectionEvent(s, pin, angle, false PASS_ENGINE_PARAMETER); } break; case IM_SIMULTANEOUS: for (int i = 0; i < engineConfiguration->cylindersCount; i++) { - float angle = baseAngle + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; + float angle = baseAngle + + (float) engineConfiguration->engineCycle * i / engineConfiguration->cylindersCount; /** * We do not need injector pin here because we will control all injectors @@ -237,7 +237,8 @@ void FuelSchedule::addFuelEvents(trigger_shape_s *s, for (int i = 0; i < engineConfiguration->cylindersCount; i++) { int index = i % (engineConfiguration->cylindersCount / 2); io_pin_e pin = INJECTOR_PIN_BY_INDEX(index); - float angle = baseAngle + i * (float) engineConfiguration->engineCycle / engineConfiguration->cylindersCount; + float angle = baseAngle + + i * (float) engineConfiguration->engineCycle / engineConfiguration->cylindersCount; registerInjectionEvent(s, pin, angle, false PASS_ENGINE_PARAMETER); /** @@ -257,12 +258,12 @@ void FuelSchedule::addFuelEvents(trigger_shape_s *s, */ float getSparkDwellMsT(int rpm DECLARE_ENGINE_PARAMETER_S) { if (isCrankingR(rpm)) { - if(engineConfiguration->useConstantDwellDuringCranking) { + if (engineConfiguration->useConstantDwellDuringCranking) { return engineConfiguration->ignitionDwellForCrankingMs; } else { - // technically this could be implemented via interpolate2d - float angle = engineConfiguration->crankingChargeAngle; - return getOneDegreeTimeMs(rpm) * angle; + // technically this could be implemented via interpolate2d + float angle = engineConfiguration->crankingChargeAngle; + return getOneDegreeTimeMs(rpm) * angle; } } efiAssert(!cisnan(rpm), "invalid rpm", NAN); @@ -282,8 +283,8 @@ int getEngineCycleEventCount(engine_configuration_s const *engineConfiguration, return getEngineCycleEventCount2(getOperationMode(engineConfiguration), s); } -void findTriggerPosition(trigger_shape_s * s, - event_trigger_position_s *position, float angleOffset DECLARE_ENGINE_PARAMETER_S) { +void findTriggerPosition(trigger_shape_s * s, event_trigger_position_s *position, + float angleOffset DECLARE_ENGINE_PARAMETER_S) { angleOffset = fixAngle(angleOffset + engineConfiguration->globalTriggerAngleOffset PASS_ENGINE_PARAMETER); @@ -359,18 +360,18 @@ int getCylinderId(firing_order_e firingOrder, int index) { void prepareOutputSignals(Engine *engine) { engine_configuration_s *engineConfiguration = engine->engineConfiguration; -engine_configuration2_s *engineConfiguration2 = engine->engineConfiguration2; + engine_configuration2_s *engineConfiguration2 = engine->engineConfiguration2; // todo: move this reset into decoder - engineConfiguration2->triggerShape.calculateTriggerSynchPoint(engineConfiguration, &engineConfiguration->triggerConfig, engine); + engineConfiguration2->triggerShape.calculateTriggerSynchPoint(engineConfiguration, + &engineConfiguration->triggerConfig, engine); trigger_shape_s * ts = &engineConfiguration2->triggerShape; injectonSignals.clear(); engineConfiguration2->crankingInjectionEvents.addFuelEvents(ts, engineConfiguration->crankingInjectionMode PASS_ENGINE_PARAMETER); - engineConfiguration2->injectionEvents.addFuelEvents(ts, - engineConfiguration->injectionMode PASS_ENGINE_PARAMETER); + engineConfiguration2->injectionEvents.addFuelEvents(ts, engineConfiguration->injectionMode PASS_ENGINE_PARAMETER); } void setFuelRpmBin(engine_configuration_s *engineConfiguration, float l, float r) { diff --git a/firmware/controllers/math/engine_math.h b/firmware/controllers/math/engine_math.h index fdd08243fd..05ad483072 100644 --- a/firmware/controllers/math/engine_math.h +++ b/firmware/controllers/math/engine_math.h @@ -53,8 +53,7 @@ inline float getOneDegreeTimeMs(int rpm) { float getCrankshaftRevolutionTimeMs(int rpm); -int isCrankingRT(engine_configuration_s *engineConfiguration, int rpm); -#define isCrankingR(rpm) isCrankingRT(engineConfiguration, rpm) +#define isCrankingR(rpm) ((rpm) > 0 && (rpm) < engineConfiguration->crankingSettings.crankingRpm) float getEngineLoadT(Engine *engine); #define getEngineLoad() getEngineLoadT(engine) diff --git a/firmware/controllers/trigger/main_trigger_callback.cpp b/firmware/controllers/trigger/main_trigger_callback.cpp index bc5c8f9d95..958eba188a 100644 --- a/firmware/controllers/trigger/main_trigger_callback.cpp +++ b/firmware/controllers/trigger/main_trigger_callback.cpp @@ -56,6 +56,7 @@ EXTERN_ENGINE ; +extern bool hasFirmwareErrorFlag; static LocalVersionHolder localVersion; diff --git a/firmware/emulation/engine_emulator.cpp b/firmware/emulation/engine_emulator.cpp index 7e3093c6cd..2bd9684884 100644 --- a/firmware/emulation/engine_emulator.cpp +++ b/firmware/emulation/engine_emulator.cpp @@ -22,6 +22,8 @@ extern "C" { } #include "trigger_emulator.h" +extern bool hasFirmwareErrorFlag; + static THD_WORKING_AREA(eeThreadStack, UTILITY_THREAD_STACK_SIZE); #define DIAG_PORT GPIOD diff --git a/firmware/emulation/wave_analyzer.cpp b/firmware/emulation/wave_analyzer.cpp index 31cab7d170..3c27e401d9 100644 --- a/firmware/emulation/wave_analyzer.cpp +++ b/firmware/emulation/wave_analyzer.cpp @@ -31,6 +31,7 @@ EXTERN_ENGINE; #define MAX_ICU_COUNT 5 extern WaveChart waveChart; +extern bool hasFirmwareErrorFlag; /** * Difference between current 1st trigger event and previous 1st trigger event. diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 4deba99b15..940e914cbf 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -41,6 +41,7 @@ #include "ec2.h" extern engine_configuration2_s * engineConfiguration2; +extern bool hasFirmwareErrorFlag; static bool isSpiInitialized[5] = { false, false, false, false, false }; diff --git a/firmware/rusefi.cpp b/firmware/rusefi.cpp index a1652e9655..0d12c6074f 100644 --- a/firmware/rusefi.cpp +++ b/firmware/rusefi.cpp @@ -127,7 +127,7 @@ int main_loop_started = FALSE; static MemoryStream firmwareErrorMessageStream; uint8_t errorMessageBuffer[200]; -static bool hasFirmwareErrorFlag = FALSE; +bool hasFirmwareErrorFlag = false; extern engine_configuration_s *engineConfiguration; extern board_configuration_s *boardConfiguration; extern engine_configuration2_s *engineConfiguration2; @@ -231,11 +231,6 @@ void chDbgStackOverflowPanic(Thread *otp) { chDbgPanic3(panicMessage, __FILE__, __LINE__); } -// todo: make this a macro, noone can trust these compilers -bool hasFirmwareError(void) { - return hasFirmwareErrorFlag; -} - // todo: why is this method here and not in error_handling.c ? void firmwareError(const char *fmt, ...) { if (hasFirmwareErrorFlag) diff --git a/unit_tests/main.cpp b/unit_tests/main.cpp index a56dc41c30..f52b7ff957 100644 --- a/unit_tests/main.cpp +++ b/unit_tests/main.cpp @@ -144,9 +144,7 @@ int warning(obd_code_e code, const char *fmt, ...) { printf("Warning: %s\r\n", fmt); } -bool hasFirmwareError(void) { - return false; -} +bool hasFirmwareErrorFlag = false; void firmwareError(const char *fmt, ...) { printf(fmt); diff --git a/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp b/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp index 5ad6003b66..1aeceb6264 100644 --- a/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp +++ b/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp @@ -103,9 +103,7 @@ bool isConsoleReady(void) { return isSerialOverTcpReady; } -bool_t hasFirmwareError(void) { - return FALSE; -} +bool hasFirmwareErrorFlag = false; void onFatalError(const char *msg, const char * file, int line) { printf("onFatalError %s %s%d", msg, file, line);