From 3550caab27a5d099ae907d1ab20d5c7814cb8d59 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 1 Dec 2016 20:01:57 -0500 Subject: [PATCH] auto-sync --- firmware/controllers/algo/event_registry.cpp | 1 - firmware/controllers/math/engine_math.cpp | 1 - .../trigger/main_trigger_callback.cpp | 41 ------------------- firmware/rusefi.cpp | 2 +- unit_tests/test_trigger_decoder.cpp | 17 ++++---- 5 files changed, 9 insertions(+), 53 deletions(-) diff --git a/firmware/controllers/algo/event_registry.cpp b/firmware/controllers/algo/event_registry.cpp index e7ddf0f52c..3e7ffd8c98 100644 --- a/firmware/controllers/algo/event_registry.cpp +++ b/firmware/controllers/algo/event_registry.cpp @@ -26,7 +26,6 @@ InjectionEvent::InjectionEvent() { isSimultanious = false; - isOverlapping = false; memset(outputs, 0, sizeof(outputs)); } diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index ed0d218117..2bf1221a84 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -166,7 +166,6 @@ void FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_S) { ev->engine = engine; #endif fixAngle(angle); - ev->isOverlapping = angle < 720 && (angle + injectionDuration) > 720; ev->outputs[0] = output; ev->outputs[1] = secondOutput; diff --git a/firmware/controllers/trigger/main_trigger_callback.cpp b/firmware/controllers/trigger/main_trigger_callback.cpp index 511ad90669..c7f8036c88 100644 --- a/firmware/controllers/trigger/main_trigger_callback.cpp +++ b/firmware/controllers/trigger/main_trigger_callback.cpp @@ -306,8 +306,6 @@ static ALWAYS_INLINE void handleFuelInjectionEvent(int injEventIndex, InjectionE OutputSignalPair *pair = &ENGINE(engineConfiguration2)->fuelActuators[injEventIndex]; - engine->engineConfiguration2->wasOverlapping[injEventIndex] = event->isOverlapping; - if (event->isSimultanious) { /** * this is pretty much copy-paste of 'scheduleOutput' @@ -370,41 +368,6 @@ static void scheduleOutput2(OutputSignalPair *pair, efitimeus_t nowUs, float del #endif /* EFI_GPIO */ } -static void handleFuelScheduleOverlap(FuelSchedule *fs DECLARE_ENGINE_PARAMETER_S) { - /** - * here we need to avoid a fuel miss due to changes between previous and current fuel schedule - * see https://sourceforge.net/p/rusefi/tickets/299/ - * see testFuelSchedulerBug299smallAndLarge unit test - */ - // - for (int injEventIndex = 0; injEventIndex < CONFIG(specs.cylindersCount); injEventIndex++) { - InjectionEvent *event = &fs->elements[injEventIndex]; - if (!engine->engineConfiguration2->wasOverlapping[injEventIndex] && event->isOverlapping) { - // we are here if new fuel schedule is crossing engine cycle boundary with this event - - InjectorOutputPin *output = event->outputs[0]; - - // todo: recalc fuel? account for wetting? - floatms_t injectionDuration = ENGINE(fuelMs); - - OutputSignalPair* pair = &ENGINE(engineConfiguration2)->overlappingFuelActuator[injEventIndex]; - if (pair->isScheduled) { -#if EFI_UNIT_TEST || EFI_SIMULATOR || defined(__DOXYGEN__) - printf("still used2 %s %d\r\n", output->name, (int)getTimeNowUs()); -#endif /* EFI_UNIT_TEST || EFI_SIMULATOR */ - continue; // this OutputSignalPair is still needed for an extremely long injection scheduled previously - } - - efitimeus_t nowUs = getTimeNowUs(); - - output->overlappingScheduleOffTime = nowUs + MS2US(injectionDuration); - - pair->event = event; - scheduleOutput2(pair, nowUs, 0, MS2US(injectionDuration), output); - } - } -} - static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIndex, int rpm DECLARE_ENGINE_PARAMETER_S) { efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#3"); efiAssertVoid(trgEventIndex < engine->engineCycleEventCount, "handleFuel/event index"); @@ -426,10 +389,6 @@ static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIn fs->addFuelEvents(PASS_ENGINE_PARAMETER_F); } - if (trgEventIndex == 0) { - handleFuelScheduleOverlap(fs PASS_ENGINE_PARAMETER); - } - #if FUEL_MATH_EXTREME_LOGGING || defined(__DOXYGEN__) scheduleMsg(logger, "handleFuel ind=%d %d", trgEventIndex, getRevolutionCounter()); #endif /* FUEL_MATH_EXTREME_LOGGING */ diff --git a/firmware/rusefi.cpp b/firmware/rusefi.cpp index 1ff85293ab..60ebb734ea 100644 --- a/firmware/rusefi.cpp +++ b/firmware/rusefi.cpp @@ -290,5 +290,5 @@ int getRusEfiVersion(void) { return 123; // this is here to make the compiler happy about the unused array if (UNUSED_CCM_SIZE[0] * 0 != 0) return 3211; // this is here to make the compiler happy about the unused array - return 20161130; + return 20161201; } diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index 71e137ba9a..985bfff78d 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -599,7 +599,6 @@ static void assertInjectionEvent(const char *msg, InjectionEvent *ev, int inject assertEqualsM4(msg, "inj index", injectorIndex, ev->outputs[0]->injectorIndex); assertEqualsM4(msg, " event index", eventIndex, ev->injectionStart.eventIndex); assertEqualsM4(msg, " event offset", angleOffset, ev->injectionStart.angleOffset); - assertTrueM("is overlapping", isOverlapping == ev->isOverlapping); } static void setTestBug299small(EngineTestHelper *eth) { @@ -666,7 +665,7 @@ static void setTestBug299(EngineTestHelper *eth) { FuelSchedule * t = ENGINE(engineConfiguration2)->injectionEvents; assertInjectionEvent("#0", &t->elements[0], 0, 1, 153, false); - assertInjectionEvent("#1@", &t->elements[1], 1, 1, 333, false); + assertInjectionEvent("#1_i_@", &t->elements[1], 1, 1, 333, false); assertInjectionEvent("#2@", &t->elements[2], 0, 0, 153, false); assertInjectionEvent("inj#3@", &t->elements[3], 1, 0, 153 + 180, false); @@ -762,7 +761,7 @@ void testFuelSchedulerBug299smallAndMedium(void) { FuelSchedule * t; - assertInjectors("#0", 0, 0); + assertInjectors("#0_inj", 0, 0); int engineLoadIndex = findIndex(config->fuelLoadBins, FUEL_LOAD_COUNT, testMafValue); @@ -837,7 +836,7 @@ void testFuelSchedulerBug299smallAndMedium(void) { t = ENGINE(engineConfiguration2)->injectionEvents; assertInjectionEvent("#0", &t->elements[0], 0, 0, 315, false); - assertInjectionEvent("#1", &t->elements[1], 1, 1, 135, false); + assertInjectionEvent("#1__", &t->elements[1], 1, 1, 135, false); assertInjectionEvent("inj#2", &t->elements[2], 0, 0, 153, false); assertInjectionEvent("inj#3", &t->elements[3], 1, 0, 333, false); @@ -855,7 +854,7 @@ void testFuelSchedulerBug299smallAndMedium(void) { // assertInjectorDownEvent("26@0", 0, MS2US(10.0), 0); eth.firePrimaryTriggerRise(); - assertEqualsM("qs#2#2", 6, schedulingQueue.size()); + assertEqualsM("qs#2#2", 4, schedulingQueue.size()); assertEqualsM("rev cnt6", 6, engine->rpmCalculator.getRevolutionCounter()); // time...|-20.....|-10.....|0.......|10......|20......|30......|40......| // inj #0 |########|.....###|########|....####|........|........|........| @@ -864,16 +863,16 @@ void testFuelSchedulerBug299smallAndMedium(void) { // assertInjectorUpEvent("06@6", 6, MS2US(37.5), 0); // assertInjectorDownEvent("06@7", 7, MS2US(40.0), 1); - assertEqualsM("exec#7", 1, schedulingQueue.executeAll(timeNow)); + assertEqualsM("exec#7", 0, schedulingQueue.executeAll(timeNow)); - assertInjectors("#1", 1, 0); + assertInjectors("#1_ij_", 0, 0); timeNow += MS2US(20); // time...|-20.....|-10.....|0.......|10......|20......|30......|40......| // inj #0 |########|.......#|........|........|........|........|........| // inj #1 |....####|########|........|........|........|........|........| - assertEqualsM("qs#022", 5, schedulingQueue.size()); + assertEqualsM("qs#022", 4, schedulingQueue.size()); // assertInjectorUpEvent("7@0", 0, MS2US(-12.5), 1); // assertInjectorDownEvent("7@1", 1, MS2US(-10.0), 0); // assertInjectorUpEvent("7@2", 2, MS2US(-2.5), 0); @@ -884,7 +883,7 @@ void testFuelSchedulerBug299smallAndMedium(void) { //// assertInjectorDownEvent("7@7", 7, MS2US(20), 1); // // todo index 8 - assertEqualsM("executed #06", 4, schedulingQueue.executeAll(timeNow)); + assertEqualsM("executed #06", 3, schedulingQueue.executeAll(timeNow)); assertInjectors("#4", 1, 0); assertEqualsM("qs#06", 1, schedulingQueue.size()); assertInjectorDownEvent("17@0", 0, MS2US(10), 0);