diff --git a/firmware/controllers/algo/ec2.h b/firmware/controllers/algo/ec2.h index 027d93aaaf..00196145c7 100644 --- a/firmware/controllers/algo/ec2.h +++ b/firmware/controllers/algo/ec2.h @@ -47,8 +47,9 @@ public: void initializeIgnitionActions(float advance, float dwellAngle, engine_configuration_s *engineConfiguration, engine_configuration2_s *engineConfiguration2, IgnitionEventList *list); -void addFuelEvents(engine_configuration_s const *e, engine_configuration2_s *engineConfiguration2, - ActuatorEventList *list, injection_mode_e mode); +void addFuelEvents(engine_configuration_s const *e, + trigger_shape_s * ts, + FuelSchedule *fs, injection_mode_e mode); void setDefaultNonPersistentConfiguration(engine_configuration2_s *engineConfiguration2); void printConfiguration(engine_configuration_s *engineConfiguration, engine_configuration2_s *engineConfiguration2); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index bf04950e57..014c29eb8a 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -341,7 +341,7 @@ void initEngineContoller(Engine *engine) { } initLogging(&logger, "Engine Controller"); - initSensors(); + initSensors(engine); initPwmGenerator(); diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index e80f3c154a..39e6818d74 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -51,6 +51,7 @@ float getCrankshaftRevolutionTimeMs(int rpm) { * TODO: should be 'crankAngleRange' range? */ float fixAngle(engine_configuration_s const *engineConfiguration, float angle) { +// todo efiAssert(engineConfiguration->engineCycle!=0, "engine cycle", NAN); // I guess this implementation would be faster than 'angle % 720' while (angle < 0) angle += 720; @@ -181,12 +182,13 @@ static void registerInjectionEvent(engine_configuration_s const *e, trigger_shap registerActuatorEventExt(e, s, list->getNextActuatorEvent(), injectonSignals.add(pin), angle); } -void addFuelEvents(engine_configuration_s const *e, engine_configuration2_s *engineConfiguration2, - ActuatorEventList *list, injection_mode_e mode) { +void addFuelEvents(engine_configuration_s const *e, trigger_shape_s *s, + FuelSchedule *fs, + injection_mode_e mode) { + ActuatorEventList *list = &fs->events; + ; list->resetEventList(); - trigger_shape_s *s = &engineConfiguration2->triggerShape; - float baseAngle = e->globalTriggerAngleOffset + e->injectionOffset; switch (mode) { @@ -351,10 +353,12 @@ engine_configuration2_s *engineConfiguration2 = engine->engineConfiguration2; // todo: move this reset into decoder engineConfiguration2->triggerShape.calculateTriggerSynchPoint(engineConfiguration, &engineConfiguration->triggerConfig); + trigger_shape_s * ts = &engineConfiguration2->triggerShape; + injectonSignals.clear(); - addFuelEvents(engineConfiguration, engineConfiguration2, &engineConfiguration2->crankingInjectionEvents.events, + addFuelEvents(engineConfiguration, ts, &engineConfiguration2->crankingInjectionEvents, engineConfiguration->crankingInjectionMode); - addFuelEvents(engineConfiguration, engineConfiguration2, &engineConfiguration2->injectionEvents.events, + addFuelEvents(engineConfiguration, ts, &engineConfiguration2->injectionEvents, engineConfiguration->injectionMode); } diff --git a/firmware/controllers/sensors/allsensors.cpp b/firmware/controllers/sensors/allsensors.cpp index 9d8644a04f..8a1481c72c 100644 --- a/firmware/controllers/sensors/allsensors.cpp +++ b/firmware/controllers/sensors/allsensors.cpp @@ -9,8 +9,6 @@ #include "allsensors.h" -extern Engine engine; - -void initSensors(void) { - initThermistors(&engine); +void initSensors(Engine *engine) { + initThermistors(engine); } diff --git a/firmware/controllers/sensors/allsensors.h b/firmware/controllers/sensors/allsensors.h index c0c4c9f0e1..49ba691b5e 100644 --- a/firmware/controllers/sensors/allsensors.h +++ b/firmware/controllers/sensors/allsensors.h @@ -25,6 +25,6 @@ #include "adc_math.h" #endif -void initSensors(void); +void initSensors(Engine *engine); #endif /*SENSORS_H_*/ diff --git a/firmware/controllers/trigger/main_trigger_callback.cpp b/firmware/controllers/trigger/main_trigger_callback.cpp index 5e8648cd5e..23631829a9 100644 --- a/firmware/controllers/trigger/main_trigger_callback.cpp +++ b/firmware/controllers/trigger/main_trigger_callback.cpp @@ -332,8 +332,8 @@ void MainTriggerCallback::init(Engine *engine, engine_configuration2_s *engineCo this->engineConfiguration2 = engineConfiguration2; } -static void showMainInfo(void) { - int rpm = getRpm(); +static void showMainInfo(Engine *engine) { + int rpm = engine->rpmCalculator->rpm(); float el = getEngineLoadT(mainTriggerCallbackInstance.engine); #if EFI_PROD_CODE scheduleMsg(&logger, "rpm %d engine_load %f", rpm, el); @@ -349,7 +349,7 @@ void initMainEventListener(Engine *engine, engine_configuration2_s *engineConfig #if EFI_PROD_CODE || defined(__DOXYGEN__) addConsoleAction("performanceinfo", showTriggerHistogram); - addConsoleAction("maininfo", showMainInfo); + addConsoleActionP("maininfo", (VoidPtr)showMainInfo, engine); initLogging(&logger, "main event handler"); printMsg(&logger, "initMainLoop: %d", currentTimeMillis()); diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index f7a623a141..8524c3733a 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -15,11 +15,10 @@ extern int timeNow; EngineTestHelper::EngineTestHelper(engine_type_e engineType) { ec = &persistentConfig.engineConfiguration; - - engine.engineConfiguration = ec; + engine.engineConfiguration = &persistentConfig.engineConfiguration; + ec2.engineConfiguration = &persistentConfig.engineConfiguration; engine.engineConfiguration2 = &ec2; - ec2.engineConfiguration = ec; prepareFuelMap(engine.engineConfiguration); @@ -27,7 +26,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType) { initSpeedDensity(ec); resetConfigurationExt(NULL, FORD_INLINE_6_1995, &engine); - ec->mafAdcChannel = (adc_channel_e)TEST_MAF_CHANNEL; + engine.engineConfiguration->mafAdcChannel = (adc_channel_e)TEST_MAF_CHANNEL; } void EngineTestHelper::fireTriggerEvents() { diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index 026355dd10..97a882f28d 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -391,6 +391,9 @@ static void testRpmCalculator(void) { EngineTestHelper eth(FORD_INLINE_6_1995); + assertEquals(720, eth.engine.engineConfiguration->engineCycle); + assertEquals(720, eth.ec->engineCycle); + efiAssertVoid(eth.engine.engineConfiguration!=NULL, "null config in engine"); initThermistors(ð.engine);