From c70364e18b4ecaf497a9f348f523c86c411de234 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sun, 4 Sep 2016 00:03:27 -0400 Subject: [PATCH] auto-sync --- firmware/controllers/algo/event_registry.h | 2 +- firmware/controllers/algo/signal_executor.cpp | 5 +---- firmware/controllers/math/engine_math.cpp | 2 +- firmware/controllers/system/efiGpio.cpp | 9 +++++++++ firmware/controllers/system/efiGpio.h | 10 +++++++++- firmware/rusefi.cpp | 2 +- unit_tests/engine_test_helper.cpp | 4 ++++ 7 files changed, 26 insertions(+), 8 deletions(-) diff --git a/firmware/controllers/algo/event_registry.h b/firmware/controllers/algo/event_registry.h index 77bda7ae3b..87113a1f03 100644 --- a/firmware/controllers/algo/event_registry.h +++ b/firmware/controllers/algo/event_registry.h @@ -37,7 +37,7 @@ public: * It's more efficient to handle all injectors together if that's the case */ bool isSimultanious; - NamedOutputPin *output; + InjectorOutputPin *output; int injectorIndex; bool isOverlapping; diff --git a/firmware/controllers/algo/signal_executor.cpp b/firmware/controllers/algo/signal_executor.cpp index 65dc859cf3..0a51d73e02 100644 --- a/firmware/controllers/algo/signal_executor.cpp +++ b/firmware/controllers/algo/signal_executor.cpp @@ -70,12 +70,11 @@ void turnPinHigh(NamedOutputPin *output) { // signal->hi_time = hTimeNow(); #endif /* EFI_DEFAILED_LOGGING */ -#if EFI_GPIO || defined(__DOXYGEN__) // turn the output level ACTIVE // todo: this XOR should go inside the setOutputPinValue method doSetOutputPinValue2(output, true); + // sleep for the needed duration -#endif #if EFI_ENGINE_SNIFFER || defined(__DOXYGEN__) // explicit check here is a performance optimization to speed up no-chart mode if (ENGINE(isEngineChartEnabled)) { @@ -91,10 +90,8 @@ void turnPinHigh(NamedOutputPin *output) { void turnPinLow(NamedOutputPin *output) { efiAssertVoid(output!=NULL, "NULL turnPinLow"); -#if EFI_GPIO || defined(__DOXYGEN__) // turn off the output doSetOutputPinValue2(output, false); -#endif /* EFI_GPIO */ #if EFI_DEFAILED_LOGGING || defined(__DOXYGEN__) systime_t after = hTimeNow(); diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index ccfb597f2d..451bab28d3 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -138,7 +138,7 @@ void initializeIgnitionActions(angle_t advance, angle_t dwellAngle, void FuelSchedule::registerInjectionEvent(int injectorIndex, float angle, angle_t injectionDuration, bool isSimultanious DECLARE_ENGINE_PARAMETER_S) { - NamedOutputPin *output = &enginePins.injectors[injectorIndex]; + InjectorOutputPin *output = &enginePins.injectors[injectorIndex]; if (!isSimultanious && !isPinAssigned(output)) { // todo: extract method for this index math diff --git a/firmware/controllers/system/efiGpio.cpp b/firmware/controllers/system/efiGpio.cpp index 10cf51a8f6..9d3cf80f04 100644 --- a/firmware/controllers/system/efiGpio.cpp +++ b/firmware/controllers/system/efiGpio.cpp @@ -26,6 +26,15 @@ NamedOutputPin::NamedOutputPin(const char *name) : OutputPin() { this->name = name; } +InjectorOutputPin::InjectorOutputPin() : NamedOutputPin() { + reset(); +} + +void InjectorOutputPin::reset() { + overlappingScheduleOffTime = 0; + cancelNextTurningInjectorOff = false; +} + OutputPin::OutputPin() { modePtr = &OUTPUT_MODE_DEFAULT; #if EFI_PROD_CODE || defined(__DOXYGEN__) diff --git a/firmware/controllers/system/efiGpio.h b/firmware/controllers/system/efiGpio.h index 528904ce36..42ff96641d 100644 --- a/firmware/controllers/system/efiGpio.h +++ b/firmware/controllers/system/efiGpio.h @@ -47,6 +47,14 @@ public: const char *name; }; +class InjectorOutputPin : public NamedOutputPin { +public: + InjectorOutputPin(); + void reset(); + efitimeus_t overlappingScheduleOffTime; + bool cancelNextTurningInjectorOff; +}; + typedef struct { OutputPin mainRelay; OutputPin fanRelay; @@ -56,7 +64,7 @@ typedef struct { // OutputPin alternatorField; OutputPin errorLedPin; - NamedOutputPin injectors[INJECTION_PIN_COUNT]; + InjectorOutputPin injectors[INJECTION_PIN_COUNT]; NamedOutputPin coils[IGNITION_PIN_COUNT]; OutputPin dizzyOutput; } engine_pins_s; diff --git a/firmware/rusefi.cpp b/firmware/rusefi.cpp index 529bff50ae..468db23f45 100644 --- a/firmware/rusefi.cpp +++ b/firmware/rusefi.cpp @@ -296,7 +296,7 @@ void firmwareError(const char *errorMsg, ...) { } } -static char UNUSED_RAM_SIZE[900]; +static char UNUSED_RAM_SIZE[700]; static char UNUSED_CCM_SIZE[8500] CCM_OPTIONAL; diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 03e9e160ab..2aa82c3e4c 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -15,11 +15,15 @@ #include "advance_map.h" extern int timeNow; +extern engine_pins_s enginePins; EngineTestHelper::EngineTestHelper(engine_type_e engineType) : engine (&persistentConfig) { ec = &persistentConfig.engineConfiguration; initEnginePinsNames(); + for (int i = 0; i < INJECTION_PIN_COUNT;i++) { + enginePins.injectors[i].reset(); + } engineConfiguration = ec; board_configuration_s * boardConfiguration = &engineConfiguration->bc;