| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | /** | |||
| 2 | * @file test_quad_cam.cpp | |||
| 3 | * | |||
| 4 | */ | |||
| 5 | ||||
| 6 | #include "pch.h" | |||
| 7 | ||||
| 8 | 4 | TEST(trigger, testQuadCamInput) { | ||
| 9 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 10 | 1 | engineConfiguration->globalTriggerAngleOffset = -37; | ||
| 11 | 1 | engineConfiguration->crankingTimingAngle = 3; | ||
| 12 | 1 | engineConfiguration->triggerInputPins[1] = Gpio::Unassigned; | ||
| 13 | 1 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
| 14 | 1 | engineConfiguration->alwaysInstantRpm = true; | ||
| 15 | ||||
| 16 |
1/1✓ Branch 1 taken 1 time.
|
1 | setCrankOperationMode(); | |
| 17 | ||||
| 18 | // changing to 'ONE TOOTH' trigger on CRANK with CAM/VVT | |||
| 19 | 1 | engineConfiguration->vvtMode[0] = VVT_SINGLE_TOOTH; | ||
| 20 | 1 | engineConfiguration->vvtMode[1] = VVT_SINGLE_TOOTH; | ||
| 21 | ||||
| 22 | 1 | engineConfiguration->camInputs[0] = Gpio::A10; // we just need to indicate that we have CAM | ||
| 23 | ||||
| 24 | // this crank trigger would be easier to test, crank shape is less important for this test | |||
| 25 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_HALF_MOON); | |
| 26 | ||||
| 27 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, Sensor::getOrZero(SensorType::Rpm)); | |
| 28 | ||||
| 29 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(12.5); | |
| 30 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(12.5); | |
| 31 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ( 0, Sensor::getOrZero(SensorType::Rpm)); | |
| 32 | ||||
| 33 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(12.5); | |
| 34 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(12.5); | |
| 35 | // first time we have RPM | |||
| 36 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(2400, Sensor::getOrZero(SensorType::Rpm)); | |
| 37 | ||||
| 38 | // need to be out of VVT sync to see VVT sync in action | |||
| 39 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(12.5); | |
| 40 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(12.5); | |
| 41 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(12.5); | |
| 42 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(12.5); | |
| 43 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(12.5); | |
| 44 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(12.5); | |
| 45 | ||||
| 46 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(3)); // shifting VVT phase a few angles | |
| 47 | ||||
| 48 | 1 | float d = 4; | ||
| 49 | ||||
| 50 | 1 | int firstCam = 0; | ||
| 51 | 1 | int secondCam = 1; | ||
| 52 | ||||
| 53 | 1 | int firstBank = 0; | ||
| 54 | 1 | int secondBank = 1; | ||
| 55 | ||||
| 56 | 1 | int firstCamSecondBank = secondBank * CAMS_PER_BANK + firstCam; | ||
| 57 | 1 | int secondCamSecondBank = secondBank * CAMS_PER_BANK + secondCam; | ||
| 58 | ||||
| 59 | // Cams should have no position yet | |||
| 60 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(firstBank, firstCam)); | |
| 61 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(firstBank, secondCam)); | |
| 62 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(secondBank, firstCam)); | |
| 63 |
4/9✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, engine->triggerCentral.getVVTPosition(secondBank, secondCam)); | |
| 64 | ||||
| 65 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCam); | |
| 66 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCam); | |
| 67 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCamSecondBank); | |
| 68 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCamSecondBank); | |
| 69 | ||||
| 70 | 1 | float basePos = -80.2f; | ||
| 71 | ||||
| 72 | // All four cams should now have the same position | |||
| 73 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(firstBank, firstCam)); | |
| 74 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(firstBank, secondCam)); | |
| 75 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(secondBank, firstCam)); | |
| 76 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR_M3(basePos, engine->triggerCentral.getVVTPosition(secondBank, secondCam)); | |
| 77 | ||||
| 78 | // Now fire cam events again, but with time gaps between each | |||
| 79 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardMs(1); | |
| 80 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCam); | |
| 81 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardMs(1); | |
| 82 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCam); | |
| 83 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardMs(1); | |
| 84 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), firstCamSecondBank); | |
| 85 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardMs(1); | |
| 86 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | hwHandleVvtCamSignal(TriggerValue::RISE, getTimeNowNt(), secondCamSecondBank); | |
| 87 | ||||
| 88 | // All four cams should have different positions, each retarded by 1ms from the last | |||
| 89 | 1 | float oneMsDegrees = 1000 / engine->rpmCalculator.oneDegreeUs; | ||
| 90 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR(basePos - oneMsDegrees * 1, engine->triggerCentral.getVVTPosition(firstBank, firstCam), EPS3D); | |
| 91 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR(basePos - oneMsDegrees * 2, engine->triggerCentral.getVVTPosition(firstBank, secondCam), EPS3D); | |
| 92 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR(basePos - oneMsDegrees * 3, engine->triggerCentral.getVVTPosition(secondBank, firstCam), EPS3D); | |
| 93 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR(basePos - oneMsDegrees * 4, engine->triggerCentral.getVVTPosition(secondBank, secondCam), EPS3D); | |
| 94 | 1 | } | ||
| 95 |