From 1da7be3f671c759d6990c21b81a098fde17faedc Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 20 Jul 2020 12:40:23 -0700 Subject: [PATCH 1/5] impruv --- .../injection_mode_transition.cpp | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index 88dfb13c24..6d5b428bc0 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -10,19 +10,19 @@ static void doRevolution(EngineTestHelper& eth, int periodMs) { float halfToothTime = (periodMs / 6.0f) / 2; - eth.fireRise(halfToothTime); + eth.smartFireRise(halfToothTime); eth.fireFall(halfToothTime); - eth.fireRise(halfToothTime); + eth.smartFireRise(halfToothTime); eth.fireFall(halfToothTime); - eth.fireRise(halfToothTime); + eth.smartFireRise(halfToothTime); eth.fireFall(halfToothTime); // now missing tooth - eth.fireRise(halfToothTime); + eth.smartFireRise(halfToothTime); eth.fireFall(3 * halfToothTime); // This tooth is the sync point! - eth.fireRise(halfToothTime); + eth.smartFireRise(halfToothTime); eth.fireFall(halfToothTime); } @@ -44,6 +44,8 @@ TEST(fuelControl, transitionIssue1592) { fuelMap.setAll(13); extern fuel_Map3D_t fuelPhaseMap; fuelPhaseMap.setAll(0); + setArrayValues(config->crankingFuelCoef, 1.0f); + setArrayValues(config->crankingCycleCoef, 1.0f); engineConfiguration->globalTriggerAngleOffset = 20; @@ -76,37 +78,22 @@ TEST(fuelControl, transitionIssue1592) { ASSERT_EQ(sched_close->action.getCallback(), &turnInjectionPinLow); } - // Execute the first of those two events - the injector opens, but doesn't yet close. - engine->executor.executeAll(getTimeNowUs() + MS2US(35)); - - // Check that queue got shorter, and overlap counters were incremented on injectors 2/3 (batch mode, remember?) - { - // Check that it was exec'd - ASSERT_EQ(engine->executor.size(), 1); - - // Injectors 2/3 should currently be open - EXPECT_EQ(enginePins.injectors[0].getOverlappingCounter(), 0); - EXPECT_EQ(enginePins.injectors[1].getOverlappingCounter(), 1); - EXPECT_EQ(enginePins.injectors[2].getOverlappingCounter(), 1); - EXPECT_EQ(enginePins.injectors[3].getOverlappingCounter(), 0); + // Run the engine for some revs + for (size_t i = 0; i < 10; i++) { + doRevolution(eth, 150); } - // Second sync point will transition to running - // This needs to reset overlapping state as it may reschedule injector openings - doRevolution(eth, 150); - - // Injectors should all be closed immediately after mode change - EXPECT_EQ(enginePins.injectors[0].getOverlappingCounter(), 0); + // Check that no injectors are stuck open + // Only injector 1 should currently be open + EXPECT_EQ(enginePins.injectors[0].getOverlappingCounter(), 1); + EXPECT_EQ(enginePins.injectors[1].getOverlappingCounter(), 0); // !!!!!!!!! BUG !!!!!!!!!!!!!!! - // These next two should be equal to 0, not 1 - EXPECT_EQ(enginePins.injectors[1].getOverlappingCounter(), 1); - EXPECT_EQ(enginePins.injectors[2].getOverlappingCounter(), 1); + // Injector #3 gets stuck open! + EXPECT_EQ(enginePins.injectors[2].getOverlappingCounter(), 0); // !!!!!!!!! BUG !!!!!!!!!!!!!!! EXPECT_EQ(enginePins.injectors[3].getOverlappingCounter(), 0); - - eth.writeEvents("fuel_schedule_transition_issue_1592.logicdata"); } From ea49647c1d4e6bb86dc054db4e390269dc778dab Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 20 Jul 2020 13:21:15 -0700 Subject: [PATCH 2/5] compensate for bug --- .../tests/ignition_injection/injection_mode_transition.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index 6d5b428bc0..befd2578a9 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -90,7 +90,7 @@ TEST(fuelControl, transitionIssue1592) { // !!!!!!!!! BUG !!!!!!!!!!!!!!! // Injector #3 gets stuck open! - EXPECT_EQ(enginePins.injectors[2].getOverlappingCounter(), 0); + EXPECT_EQ(enginePins.injectors[2].getOverlappingCounter(), 2); // !!!!!!!!! BUG !!!!!!!!!!!!!!! EXPECT_EQ(enginePins.injectors[3].getOverlappingCounter(), 0); From c34a0d95d7a9ade0916fa8db7778b02f4d4afa65 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 20 Jul 2020 17:13:33 -0400 Subject: [PATCH 3/5] unit test framework improvements for smoother event execution --- .../engine_cycle/main_trigger_callback.cpp | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index bcbcfd044a..4918b79343 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -71,12 +71,27 @@ static Logging *logger; //#endif void startSimultaniousInjection(Engine *engine) { +#if EFI_TOOTH_LOGGER + efitick_t nowNt = getTimeNowNt(); +#if EFI_UNIT_TEST + EXPAND_Engine; +#endif // EFI_UNIT_TEST + LogTriggerInjectorState(nowNt, true PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_TOOTH_LOGGER for (int i = 0; i < engine->engineConfigurationPtr->specs.cylindersCount; i++) { enginePins.injectors[i].open(); } } static void endSimultaniousInjectionOnlyTogglePins(Engine *engine) { +#if EFI_UNIT_TEST + EXPAND_Engine; +#endif + +#if EFI_TOOTH_LOGGER + efitick_t nowNt = getTimeNowNt(); + LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_TOOTH_LOGGER for (int i = 0; i < engine->engineConfigurationPtr->specs.cylindersCount; i++) { enginePins.injectors[i].close(); } @@ -88,6 +103,10 @@ void endSimultaniousInjection(InjectionEvent *event) { EXPAND_Engine; #endif event->isScheduled = false; +#if EFI_TOOTH_LOGGER + efitick_t nowNt = getTimeNowNt(); + LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_TOOTH_LOGGER endSimultaniousInjectionOnlyTogglePins(engine); engine->injectionEvents.addFuelEventsForCylinder(event->ownIndex PASS_ENGINE_PARAMETER_SUFFIX); @@ -98,7 +117,7 @@ void InjectorOutputPin::open() { #if FUEL_MATH_EXTREME_LOGGING if (printFuelDebug) { - printf("turnInjectionPinHigh %s %d %d\r\n", name, overlappingCounter, (int)getTimeNowUs()); + printf("InjectorOutputPin::open %s %d now=%0.1fms\r\n", name, overlappingCounter, (int)getTimeNowUs() / 1000.0); } #endif /* FUEL_MATH_EXTREME_LOGGING */ @@ -118,9 +137,9 @@ void InjectorOutputPin::open() { } void turnInjectionPinHigh(InjectionEvent *event) { - efitick_t nowNt = getTimeNowNt(); #if EFI_TOOTH_LOGGER + efitick_t nowNt = getTimeNowNt(); #if EFI_UNIT_TEST Engine *engine = event->engine; EXPAND_Engine; @@ -164,7 +183,7 @@ void turnInjectionPinLow(InjectionEvent *event) { EXPAND_Engine; #endif - #if EFI_TOOTH_LOGGER +#if EFI_TOOTH_LOGGER LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); #endif // EFI_TOOTH_LOGGER From da3d616a7e9b4c53aefeaf2dcb3bdec953e89c61 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Tue, 21 Jul 2020 00:31:28 +0000 Subject: [PATCH 4/5] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 77b68fcb19..2164403897 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200720 +#define VCS_DATE 20200721 From 48cc155144c122cf8973172fe8a5d2940b816e7a Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 20 Jul 2020 21:20:58 -0400 Subject: [PATCH 5/5] changing crazy in composite logger --- .../engine_cycle/main_trigger_callback.cpp | 43 ++++++------------- firmware/controllers/system/efi_gpio.h | 4 +- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index 4918b79343..6624edd32a 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -71,15 +71,12 @@ static Logging *logger; //#endif void startSimultaniousInjection(Engine *engine) { -#if EFI_TOOTH_LOGGER - efitick_t nowNt = getTimeNowNt(); #if EFI_UNIT_TEST EXPAND_Engine; #endif // EFI_UNIT_TEST - LogTriggerInjectorState(nowNt, true PASS_ENGINE_PARAMETER_SUFFIX); -#endif // EFI_TOOTH_LOGGER + efitick_t nowNt = getTimeNowNt(); for (int i = 0; i < engine->engineConfigurationPtr->specs.cylindersCount; i++) { - enginePins.injectors[i].open(); + enginePins.injectors[i].open(nowNt PASS_ENGINE_PARAMETER_SUFFIX); } } @@ -87,13 +84,9 @@ static void endSimultaniousInjectionOnlyTogglePins(Engine *engine) { #if EFI_UNIT_TEST EXPAND_Engine; #endif - -#if EFI_TOOTH_LOGGER efitick_t nowNt = getTimeNowNt(); - LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); -#endif // EFI_TOOTH_LOGGER for (int i = 0; i < engine->engineConfigurationPtr->specs.cylindersCount; i++) { - enginePins.injectors[i].close(); + enginePins.injectors[i].close(nowNt PASS_ENGINE_PARAMETER_SUFFIX); } } @@ -103,16 +96,11 @@ void endSimultaniousInjection(InjectionEvent *event) { EXPAND_Engine; #endif event->isScheduled = false; -#if EFI_TOOTH_LOGGER - efitick_t nowNt = getTimeNowNt(); - LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); -#endif // EFI_TOOTH_LOGGER - endSimultaniousInjectionOnlyTogglePins(engine); engine->injectionEvents.addFuelEventsForCylinder(event->ownIndex PASS_ENGINE_PARAMETER_SUFFIX); } -void InjectorOutputPin::open() { +void InjectorOutputPin::open(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { overlappingCounter++; #if FUEL_MATH_EXTREME_LOGGING @@ -132,31 +120,29 @@ void InjectorOutputPin::open() { } #endif /* FUEL_MATH_EXTREME_LOGGING */ } else { +#if EFI_TOOTH_LOGGER + LogTriggerInjectorState(nowNt, true PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_TOOTH_LOGGER setHigh(); } } void turnInjectionPinHigh(InjectionEvent *event) { - -#if EFI_TOOTH_LOGGER - efitick_t nowNt = getTimeNowNt(); #if EFI_UNIT_TEST Engine *engine = event->engine; EXPAND_Engine; #endif // EFI_UNIT_TEST - LogTriggerInjectorState(nowNt, true PASS_ENGINE_PARAMETER_SUFFIX); -#endif // EFI_TOOTH_LOGGER - + efitick_t nowNt = getTimeNowNt(); for (int i = 0;i < MAX_WIRES_COUNT;i++) { InjectorOutputPin *output = event->outputs[i]; if (output) { - output->open(); + output->open(nowNt PASS_ENGINE_PARAMETER_SUFFIX); } } } -void InjectorOutputPin::close() { +void InjectorOutputPin::close(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { #if FUEL_MATH_EXTREME_LOGGING if (printFuelDebug) { printf("InjectorOutputPin::close %s %d %d\r\n", name, overlappingCounter, (int)getTimeNowUs()); @@ -171,6 +157,9 @@ void InjectorOutputPin::close() { } #endif /* FUEL_MATH_EXTREME_LOGGING */ } else { +#if EFI_TOOTH_LOGGER + LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_TOOTH_LOGGER setLow(); } } @@ -183,15 +172,11 @@ void turnInjectionPinLow(InjectionEvent *event) { EXPAND_Engine; #endif -#if EFI_TOOTH_LOGGER - LogTriggerInjectorState(nowNt, false PASS_ENGINE_PARAMETER_SUFFIX); -#endif // EFI_TOOTH_LOGGER - event->isScheduled = false; for (int i = 0;ioutputs[i]; if (output) { - output->close(); + output->close(nowNt PASS_ENGINE_PARAMETER_SUFFIX); } } ENGINE(injectionEvents.addFuelEventsForCylinder(event->ownIndex PASS_ENGINE_PARAMETER_SUFFIX)); diff --git a/firmware/controllers/system/efi_gpio.h b/firmware/controllers/system/efi_gpio.h index 6bbe0d1034..80855001d2 100644 --- a/firmware/controllers/system/efi_gpio.h +++ b/firmware/controllers/system/efi_gpio.h @@ -108,8 +108,8 @@ public: InjectorOutputPin(); void reset(); - void open(); - void close(); + void open(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX); + void close(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX); int8_t getOverlappingCounter() const { return overlappingCounter; }