From b01b05359571873f94fc80fff77155fa8c2083ce Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 1 Mar 2017 22:18:25 -0500 Subject: [PATCH] progress #363 --- firmware/controllers/algo/engine.h | 1 - .../controllers/algo/engine_configuration.cpp | 10 ++++---- firmware/controllers/math/engine_math.h | 2 +- firmware/controllers/settings.cpp | 2 +- .../controllers/trigger/trigger_central.cpp | 23 +++++++++---------- .../controllers/trigger/trigger_central.h | 2 ++ .../trigger/trigger_emulator_algo.cpp | 4 ++-- firmware/global.h | 2 +- firmware/hw_layer/trigger_input.cpp | 4 ++-- unit_tests/engine_test_helper.cpp | 4 ++-- unit_tests/global.h | 2 +- unit_tests/test_fuel_map.cpp | 2 +- unit_tests/test_trigger_decoder.cpp | 22 +++++++++--------- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 199dbc853b..31403205ac 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -340,7 +340,6 @@ public: */ bool isTestMode; - TriggerShape triggerShape; /** * pre-calculated offset for given sequence index within engine cycle diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 73d3fb3fc5..8d1bcee460 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -1039,10 +1039,10 @@ void resetConfigurationExt(Logging * logger, engine_type_e engineType DECLARE_EN } applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER); // todo: eliminate triggerShape.operationMode? - if (engineConfiguration->operationMode != engine->triggerShape.getOperationMode()) + if (engineConfiguration->operationMode != TRIGGER_SHAPE(getOperationMode())) firmwareError(CUSTOM_ERR_OP_MODE, "operationMode %d/trigger mismatch %d", engineConfiguration->operationMode, - engine->triggerShape.getOperationMode()); + TRIGGER_SHAPE(getOperationMode())); #if EFI_TUNER_STUDIO syncTunerStudioCopy(); @@ -1056,13 +1056,13 @@ void applyNonPersistentConfiguration(Logging * logger DECLARE_ENGINE_PARAMETER_S #endif #if EFI_ENGINE_CONTROL || defined(__DOXYGEN__) - engine->triggerShape.initializeTriggerShape(logger PASS_ENGINE_PARAMETER); + engine->triggerCentral.triggerShape.initializeTriggerShape(logger PASS_ENGINE_PARAMETER); #endif - if (engine->triggerShape.getSize() == 0) { + if (engine->triggerCentral.triggerShape.getSize() == 0) { firmwareError(CUSTOM_ERR_TRIGGER_ZERO, "triggerShape size is zero"); return; } - engine->engineCycleEventCount = engine->triggerShape.getLength(); + engine->engineCycleEventCount = engine->triggerCentral.triggerShape.getLength(); #if EFI_FSIO || defined(__DOXYGEN__) applyFsioConfiguration(PASS_ENGINE_PARAMETER_F); #endif diff --git a/firmware/controllers/math/engine_math.h b/firmware/controllers/math/engine_math.h index 79529d5d1d..df91a9457e 100644 --- a/firmware/controllers/math/engine_math.h +++ b/firmware/controllers/math/engine_math.h @@ -78,6 +78,6 @@ void setTimingLoadBin(float from, float to DECLARE_ENGINE_PARAMETER_S); void setSingleCoilDwell(engine_configuration_s *engineConfiguration); #define tdcPosition() \ - (ENGINE(triggerShape.tdcPosition) + CONFIG(globalTriggerAngleOffset)) + (ENGINE(triggerCentral.triggerShape.tdcPosition) + CONFIG(globalTriggerAngleOffset)) #endif /* ENGINE_MATH_H_ */ diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index f267df9355..a8efe46ca9 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -527,7 +527,7 @@ static void setToothedWheel(int total, int skipped DECLARE_ENGINE_PARAMETER_S) { engineConfiguration->trigger.customSkippedToothCount = skipped; scheduleMsg(&logger, "toothed: total=%d/skipped=%d", total, skipped); - setToothedWheelConfiguration(&engine->triggerShape, total, skipped, engineConfiguration->operationMode); + setToothedWheelConfiguration(&engine->triggerCentral.triggerShape, total, skipped, engineConfiguration->operationMode); // initializeTriggerShape(&logger, engineConfiguration, engineConfiguration2); incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_F); doPrintConfiguration(engine); diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index f04642e598..2b6eda94a5 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -96,7 +96,6 @@ void hwHandleVvtCamSignal(trigger_value_e front) { efitick_t nowNt = getTimeNowNt(); - if (engineConfiguration->vvtMode == MIATA_NB2) { uint32_t currentDuration = nowNt - previousVvtCamTime; float ratio = ((float) currentDuration) / previousVvtCamDuration; @@ -315,7 +314,7 @@ EXTERN_ENGINE static void triggerShapeInfo(void) { #if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__) - TriggerShape *s = &engine->triggerShape; + TriggerShape *s = &engine->triggerCentral.triggerShape; scheduleMsg(logger, "useRise=%s", boolToString(s->useRiseEdge)); scheduleMsg(logger, "gap from %f to %f", s->syncRatioFrom, s->syncRatioTo); @@ -360,7 +359,7 @@ void printAllTriggers() { engineConfiguration->trigger.type = tt; engineConfiguration->operationMode = FOUR_STROKE_CAM_SENSOR; - TriggerShape *s = &engine->triggerShape; + TriggerShape *s = &engine->triggerCentral.triggerShape; s->initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); fprintf(fp, "TRIGGERTYPE %d %d %s %f\r\n", triggerId, s->getLength(), getTrigger_type_e(tt), s->tdcPosition); @@ -401,14 +400,14 @@ extern int vvtEventFallCounter; void triggerInfo(void) { #if (EFI_PROD_CODE || EFI_SIMULATOR) || defined(__DOXYGEN__) - TriggerShape *ts = &engine->triggerShape; + TriggerShape *ts = &engine->triggerCentral.triggerShape; scheduleMsg(logger, "Template %s (%d) trigger %s (%d) useRiseEdge=%s onlyFront=%s gapBothDirections=%s useOnlyFirstChannel=%s tdcOffset=%d", getConfigurationName(engineConfiguration->engineType), engineConfiguration->engineType, getTrigger_type_e(engineConfiguration->trigger.type), engineConfiguration->trigger.type, boolToString(TRIGGER_SHAPE(useRiseEdge)), boolToString(engineConfiguration->useOnlyRisingEdgeForTrigger), boolToString(TRIGGER_SHAPE(gapBothDirections)), - boolToString(engineConfiguration->trigger.useOnlyFirstChannel), ENGINE(triggerShape.tdcPosition)); + boolToString(engineConfiguration->trigger.useOnlyFirstChannel), TRIGGER_SHAPE(tdcPosition)); if (engineConfiguration->trigger.type == TT_TOOTHED_WHEEL) { scheduleMsg(logger, "total %d/skipped %d", engineConfiguration->trigger.customTotalToothCount, @@ -418,16 +417,16 @@ void triggerInfo(void) { scheduleMsg(logger, "trigger#1 event counters up=%d/down=%d", engine->triggerCentral.getHwEventCounter(0), engine->triggerCentral.getHwEventCounter(1)); - if (engine->triggerShape.needSecondTriggerInput) { + if (ts->needSecondTriggerInput) { scheduleMsg(logger, "trigger#2 event counters up=%d/down=%d", engine->triggerCentral.getHwEventCounter(2), engine->triggerCentral.getHwEventCounter(3)); } - scheduleMsg(logger, "expected cycle events %d/%d/%d", ts->expectedEventCount[0], - engine->triggerShape.expectedEventCount[1], ts->expectedEventCount[2]); + scheduleMsg(logger, "expected cycle events %d/%d/%d", TRIGGER_SHAPE(expectedEventCount[0]), + TRIGGER_SHAPE(expectedEventCount[1]), TRIGGER_SHAPE(expectedEventCount[2])); scheduleMsg(logger, "trigger type=%d/need2ndChannel=%s", engineConfiguration->trigger.type, - boolToString(engine->triggerShape.needSecondTriggerInput)); - scheduleMsg(logger, "expected duty #0=%f/#1=%f", ts->dutyCycle[0], ts->dutyCycle[1]); + boolToString(TRIGGER_SHAPE(needSecondTriggerInput))); + scheduleMsg(logger, "expected duty #0=%f/#1=%f", TRIGGER_SHAPE(dutyCycle[0]), TRIGGER_SHAPE(dutyCycle[1])); scheduleMsg(logger, "synchronizationNeeded=%s/isError=%s/total errors=%d ord_err=%d/total revolutions=%d/self=%s", boolToString(ts->isSynchronizationNeeded), @@ -435,7 +434,7 @@ void triggerInfo(void) { engine->triggerCentral.triggerState.orderingErrorCounter, engine->triggerCentral.triggerState.getTotalRevolutionCounter(), boolToString(engineConfiguration->directSelfStimulation)); - if (ts->isSynchronizationNeeded) { + if (TRIGGER_SHAPE(isSynchronizationNeeded)) { scheduleMsg(logger, "gap from %f to %f", ts->syncRatioFrom, ts->syncRatioTo); } @@ -455,7 +454,7 @@ void triggerInfo(void) { getPin_output_mode_e(boardConfiguration->triggerSimulatorPinModes[0]), boardConfiguration->triggerSimulatorFrequency); - if (engine->triggerShape.needSecondTriggerInput) { + if (ts->needSecondTriggerInput) { scheduleMsg(logger, "secondary trigger input: %s", hwPortname(boardConfiguration->triggerInputPins[1])); #if EFI_EMULATE_POSITION_SENSORS || defined(__DOXYGEN__) scheduleMsg(logger, "secondary trigger simulator: %s %s phase=%d", diff --git a/firmware/controllers/trigger/trigger_central.h b/firmware/controllers/trigger/trigger_central.h index dcf3b1fcee..726f4f1011 100644 --- a/firmware/controllers/trigger/trigger_central.h +++ b/firmware/controllers/trigger/trigger_central.h @@ -36,6 +36,8 @@ public: */ efitick_t timeAtVirtualZeroNt; + TriggerShape triggerShape; + volatile efitime_t previousShaftEventTimeNt; private: IntListenerArray<15> triggerListeneres; diff --git a/firmware/controllers/trigger/trigger_emulator_algo.cpp b/firmware/controllers/trigger/trigger_emulator_algo.cpp index b1cba56a22..8e09a85117 100644 --- a/firmware/controllers/trigger/trigger_emulator_algo.cpp +++ b/firmware/controllers/trigger/trigger_emulator_algo.cpp @@ -129,7 +129,7 @@ static void updateTriggerShapeIfNeeded(PwmConfig *state) { applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER); - TriggerShape *s = &engine->triggerShape; + TriggerShape *s = &engine->triggerCentral.triggerShape; pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.waves[0].pinStates, s->wave.waves[1].pinStates, s->wave.waves[2].pinStates }; copyPwmParameters(state, s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM, pinStates); @@ -169,7 +169,7 @@ static void resumeStimulator(Engine *engine) { void initTriggerEmulatorLogic(Logging *sharedLogger, Engine *engine) { logger = sharedLogger; - TriggerShape *s = &engine->triggerShape; + TriggerShape *s = &engine->triggerCentral.triggerShape; setTriggerEmulatorRPM(engineConfiguration->bc.triggerSimulatorFrequency, engine); pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.waves[0].pinStates, s->wave.waves[1].pinStates, s->wave.waves[2].pinStates }; diff --git a/firmware/global.h b/firmware/global.h index 172d1bafe7..459302cd0f 100644 --- a/firmware/global.h +++ b/firmware/global.h @@ -106,7 +106,7 @@ typedef VirtualTimer virtual_timer_t; */ #define CONFIG(x) persistentState.persistentConfiguration.engineConfiguration.x #define ENGINE(x) _engine.x -#define TRIGGER_SHAPE(x) _engine.triggerShape.x +#define TRIGGER_SHAPE(x) _engine.triggerCentral.triggerShape.x #else #define EXTERN_ENGINE diff --git a/firmware/hw_layer/trigger_input.cpp b/firmware/hw_layer/trigger_input.cpp index bda3d2128a..305fd9175c 100644 --- a/firmware/hw_layer/trigger_input.cpp +++ b/firmware/hw_layer/trigger_input.cpp @@ -50,7 +50,7 @@ static void shaft_icu_width_callback(ICUDriver *icup) { if (hasFirmwareErrorFlag) return; int isPrimary = icup == primaryCrankDriver; - if (!isPrimary && !engine->triggerShape.needSecondTriggerInput) { + if (!isPrimary && !engine->triggerCentral.triggerShape.needSecondTriggerInput) { return; } // icucnt_t last_width = icuGetWidth(icup); so far we are fine with system time @@ -64,7 +64,7 @@ static void shaft_icu_period_callback(ICUDriver *icup) { if (hasFirmwareErrorFlag) return; int isPrimary = icup == primaryCrankDriver; - if (!isPrimary && !engine->triggerShape.needSecondTriggerInput) { + if (!isPrimary && !engine->triggerCentral.triggerShape.needSecondTriggerInput) { return; } diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index cd398f33a7..8388d37f15 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -62,7 +62,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType) : engine (&persiste engine_configuration_s *engineConfiguration = engine->engineConfiguration; - engine->triggerShape.initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); + engine->triggerCentral.triggerShape.initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); engine->triggerCentral.addEventListener(rpmShaftPositionCallback, "rpm reporter", engine); engine->triggerCentral.addEventListener(mainTriggerCallback, "main loop", engine); } @@ -96,7 +96,7 @@ void EngineTestHelper::applyTriggerShape() { persistent_config_s *config = engine->config; board_configuration_s *boardConfiguration = &engineConfiguration->bc; - engine->triggerShape.initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); + engine->triggerCentral.triggerShape.initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_F); } diff --git a/unit_tests/global.h b/unit_tests/global.h index 3357ae3471..e4bc8dfa81 100644 --- a/unit_tests/global.h +++ b/unit_tests/global.h @@ -56,6 +56,6 @@ class Engine; #define CONFIG(x) engineConfiguration->x #define ENGINE(x) engine->x -#define TRIGGER_SHAPE(x) engine->triggerShape.x +#define TRIGGER_SHAPE(x) engine->triggerCentral.triggerShape.x #endif /* GLOBAL_H_ */ diff --git a/unit_tests/test_fuel_map.cpp b/unit_tests/test_fuel_map.cpp index 6d88d7eb0d..96c5551d97 100644 --- a/unit_tests/test_fuel_map.cpp +++ b/unit_tests/test_fuel_map.cpp @@ -167,7 +167,7 @@ void testAngleResolver(void) { engineConfiguration->globalTriggerAngleOffset = 175; - TriggerShape * ts = &engine->triggerShape; + TriggerShape * ts = &engine->triggerCentral.triggerShape; ts->initializeTriggerShape(NULL PASS_ENGINE_PARAMETER); assertEqualsM("index 2", 52.76, ts->eventAngles[3]); // this angle is relation to synch point diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index e8d517a6f6..c4bf29cfd6 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -53,7 +53,7 @@ int getTheAngle(engine_type_e engineType) { initDataStructures(PASS_ENGINE_PARAMETER_F); - TriggerShape * shape = ð.engine.triggerShape; + TriggerShape * shape = ð.engine.triggerCentral.triggerShape; return findTriggerZeroEventIndex(ð.engine.triggerCentral.triggerState, shape, &engineConfiguration->trigger PASS_ENGINE_PARAMETER); } @@ -66,7 +66,7 @@ static void testDodgeNeonDecoder(void) { EngineTestHelper eth(DODGE_NEON_1995); EXPAND_EngineTestHelper; - TriggerShape * shape = ð.engine.triggerShape; + TriggerShape * shape = ð.engine.triggerCentral.triggerShape; assertEquals(8, shape->getTriggerShapeSynchPointIndex()); TriggerState state; @@ -123,7 +123,7 @@ void test1995FordInline6TriggerDecoder(void) { EngineTestHelper eth(FORD_INLINE_6_1995); EXPAND_EngineTestHelper; - TriggerShape * shape = ð.engine.triggerShape; + TriggerShape * shape = ð.engine.triggerCentral.triggerShape; assertEqualsM("triggerShapeSynchPointIndex", 0, shape->getTriggerShapeSynchPointIndex()); @@ -196,7 +196,7 @@ void testFordAspire(void) { EngineTestHelper eth(FORD_ASPIRE_1996); EXPAND_EngineTestHelper; - assertEquals(4, eth.engine.triggerShape.getTriggerShapeSynchPointIndex()); + assertEquals(4, TRIGGER_SHAPE(getTriggerShapeSynchPointIndex())); assertEquals(800, config->fuelRpmBins[0]); assertEquals(7000, config->fuelRpmBins[15]); @@ -218,7 +218,7 @@ static void testTriggerDecoder2(const char *msg, engine_type_e type, int synchPo initSpeedDensity(PASS_ENGINE_PARAMETER_F); - TriggerShape *t = ð.engine.triggerShape; + TriggerShape *t = ð.engine.triggerCentral.triggerShape; assertEqualsM("synchPointIndex", synchPointIndex, t->getTriggerShapeSynchPointIndex()); @@ -318,8 +318,8 @@ void testRpmCalculator(void) { timeNow = 0; assertEquals(0, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_F)); - assertEquals(4, engine->triggerShape.triggerIndexByAngle[240]); - assertEquals(4, engine->triggerShape.triggerIndexByAngle[241]); + assertEquals(4, TRIGGER_SHAPE(triggerIndexByAngle[240])); + assertEquals(4, TRIGGER_SHAPE(triggerIndexByAngle[241])); eth.fireTriggerEvents(48); @@ -390,8 +390,8 @@ void testRpmCalculator(void) { assertEqualsM("3/3", st + 14777, schedulingQueue.getForUnitText(2)->momentX); schedulingQueue.clear(); - assertEquals(5, engine->triggerShape.triggerIndexByAngle[240]); - assertEquals(5, engine->triggerShape.triggerIndexByAngle[241]); + assertEquals(5, TRIGGER_SHAPE(triggerIndexByAngle[240])); + assertEquals(5, TRIGGER_SHAPE(triggerIndexByAngle[241])); timeNow += 5000; eth.engine.triggerCentral.handleShaftSignal(SHAFT_PRIMARY_FALLING PASS_ENGINE_PARAMETER); @@ -459,7 +459,7 @@ void testTriggerDecoder(void) { persistent_config_s c; Engine e(&c); - TriggerShape * s = &e.triggerShape; + TriggerShape * s = &e.triggerCentral.triggerShape; persistent_config_s *config = &c; @@ -516,7 +516,7 @@ void testTriggerDecoder(void) { initSpeedDensity(PASS_ENGINE_PARAMETER_F); - TriggerShape *t = ð.engine.triggerShape; +// TriggerShape *t = ð.engine.triggerShape; // assertEquals(1, t->eventAngles[1]); // assertEqualsM("index at 0", 0, t->triggerIndexByAngle[56]); // assertEqualsM("index at 1", 1, t->triggerIndexByAngle[57]);