From bb62a7ce989d80fc17f3c1842c67e0bb7f900103 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Tue, 26 Jan 2016 22:03:19 -0500 Subject: [PATCH] auto-sync --- .../controllers/trigger/trigger_central.cpp | 6 +++--- .../controllers/trigger/trigger_central.h | 1 + unit_tests/test_trigger_decoder.cpp | 19 ++++++++++++++++--- unit_tests/test_trigger_decoder.h | 1 + 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index ba42233ff3..7a442d7f04 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -35,9 +35,6 @@ EXTERN_ENGINE; static histogram_s triggerCallback; -// we need this initial to have not_running at first invocation -static volatile efitime_t previousShaftEventTimeNt = (efitimems_t) -10 * US2NT(US_PER_SECOND_LL); - static Logging *logger; efitime_t getCrankEventCounter(DECLARE_ENGINE_PARAMETER_F) { @@ -94,6 +91,9 @@ void hwHandleShaftSignal(trigger_event_e signal) { TriggerCentral::TriggerCentral() { nowNt = 0; + // we need this initial to have not_running at first invocation + previousShaftEventTimeNt = (efitimems_t) -10 * US2NT(US_PER_SECOND_LL); + memset(hwEventCounters, 0, sizeof(hwEventCounters)); clearCallbacks(&triggerListeneres); triggerState.reset(); diff --git a/firmware/controllers/trigger/trigger_central.h b/firmware/controllers/trigger/trigger_central.h index 63b3b1a47c..b303564802 100644 --- a/firmware/controllers/trigger/trigger_central.h +++ b/firmware/controllers/trigger/trigger_central.h @@ -30,6 +30,7 @@ public: void resetCounters(); TriggerState triggerState; efitick_t nowNt; + volatile efitime_t previousShaftEventTimeNt; private: IntListenerArray triggerListeneres; int hwEventCounters[HW_EVENT_TYPES]; diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index f86fc2d096..8831f0a683 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -107,7 +107,7 @@ static void assertTriggerPosition(event_trigger_position_s *position, int eventI assertEqualsM("angleOffset", angleOffset, position->angleOffset); } -static void test1995FordInline6TriggerDecoder(void) { +void test1995FordInline6TriggerDecoder(void) { printf("*************************************************** test1995FordInline6TriggerDecoder\r\n"); assertEqualsM("triggerIndex ", 0, getTheAngle(FORD_INLINE_6_1995)); @@ -121,6 +121,10 @@ static void test1995FordInline6TriggerDecoder(void) { assertEqualsM("triggerShapeSynchPointIndex", 0, shape->getTriggerShapeSynchPointIndex()); + // this is needed to have valid CLT and IAT. todo: extract method + initThermistors(NULL PASS_ENGINE_PARAMETER); + engine->updateSlowSensors(PASS_ENGINE_PARAMETER_F); + event_trigger_position_s position; assertEqualsM("globalTriggerAngleOffset", 0, engineConfiguration->globalTriggerAngleOffset); findTriggerPosition(&position, 0 PASS_ENGINE_PARAMETER); @@ -132,14 +136,22 @@ static void test1995FordInline6TriggerDecoder(void) { findTriggerPosition(&position, 360 PASS_ENGINE_PARAMETER); assertTriggerPosition(&position, 6, 0); + eth.initTriggerShapeAndRpmCalculator(); + eth.engine.triggerCentral.addEventListener(mainTriggerCallback, "main loop", ð.engine); + + eth.engine.periodicFastCallback(PASS_ENGINE_PARAMETER_F); +// eth.fireTriggerEvents(48); +// assertEquals(2000, eth.engine.rpmCalculator.rpmValue); +// eth.engine.periodicFastCallback(PASS_ENGINE_PARAMETER_F); +// eth.fireTriggerEvents(48); IgnitionEventList *ecl = ð.ec2.ignitionEvents[0]; assertEqualsM("ignition events size", 6, ecl->size); assertEqualsM("event index", 0, ecl->elements[0].dwellPosition.eventIndex); - assertEquals(0, ecl->elements[0].dwellPosition.angleOffset); + assertEqualsM("angle offset#1", 0, ecl->elements[0].dwellPosition.angleOffset); assertEqualsM("event index", 10, ecl->elements[5].dwellPosition.eventIndex); - assertEquals(0, ecl->elements[5].dwellPosition.angleOffset); + assertEqualsM("angle offset#2", 0, ecl->elements[5].dwellPosition.angleOffset); TriggerState state; @@ -278,6 +290,7 @@ extern engine_pins_s enginePins; void testRpmCalculator(void) { printf("*************************************************** testRpmCalculator\r\n"); + timeNow = 0; EngineTestHelper eth(FORD_INLINE_6_1995); EXPAND_EngineTestHelper; diff --git a/unit_tests/test_trigger_decoder.h b/unit_tests/test_trigger_decoder.h index 569e78f594..f9f3f0d426 100644 --- a/unit_tests/test_trigger_decoder.h +++ b/unit_tests/test_trigger_decoder.h @@ -10,5 +10,6 @@ void testTriggerDecoder(void); void testRpmCalculator(void); +void test1995FordInline6TriggerDecoder(void); #endif /* TEST_TRIGGER_DECODER_H_ */