| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | /* | |||
| 2 | * @file test_tcu.cpp | |||
| 3 | * | |||
| 4 | * @date Oct 24, 2025 | |||
| 5 | * @author David Holdeman, (c) 2025 | |||
| 6 | */ | |||
| 7 | ||||
| 8 | #include "gear_controller.h" | |||
| 9 | #include "pch.h" | |||
| 10 | ||||
| 11 | 7 | void blipGearControllerPin(EngineTestHelper* eth, brain_pin_e pin, int time) { | ||
| 12 | 7 | engine->gearController->update(); | ||
| 13 | // Close switch/button | |||
| 14 | 7 | setMockState(pin, false); | ||
| 15 | 7 | engine->gearController->update(); | ||
| 16 | ||||
| 17 | // update gearController every ms | |||
| 18 |
2/2✓ Branch 0 taken 4802 times.
✓ Branch 1 taken 7 times.
|
2/2✓ Decision 'true' taken 4802 times.
✓ Decision 'false' taken 7 times.
|
4809 | for (int i = 0; i < time; i = i+1000) { |
| 19 | 4802 | eth->moveTimeForwardAndInvokeEventsUs(minI(time - i, 1000)); | ||
| 20 | 4802 | engine->gearController->update(); | ||
| 21 | } | |||
| 22 | // And release | |||
| 23 | 7 | setMockState(pin, true); | ||
| 24 | 7 | engine->gearController->update(); | ||
| 25 | 7 | } | ||
| 26 | ||||
| 27 | 4 | TEST(tcu, testButtonshift) { | ||
| 28 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TCU_4R70W); | |
| 29 | 1 | engineConfiguration->gearControllerMode = GearControllerMode::ButtonShift; | ||
| 30 |
1/1✓ Branch 1 taken 1 time.
|
1 | initGearController(); | |
| 31 | ||||
| 32 | // pinMode is PI_PULLUP, so true = off | |||
| 33 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcuUpshiftButtonPin, true); | |
| 34 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcuDownshiftButtonPin, true); | |
| 35 | ||||
| 36 |
3/8✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
|
1 | ASSERT_NE(nullptr, engine->gearController); | |
| 37 |
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(NEUTRAL, engine->gearController->getDesiredGear()); | |
| 38 | ||||
| 39 | // Press upshift button for 200ms | |||
| 40 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuUpshiftButtonPin, 200000); | |
| 41 | ||||
| 42 | // and now a bounce | |||
| 43 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(20); | |
| 44 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuUpshiftButtonPin, 20); | |
| 45 | ||||
| 46 |
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(GEAR_1, engine->gearController->getDesiredGear()); | |
| 47 | ||||
| 48 | // Wait 500ms | |||
| 49 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(500000); | |
| 50 | // Press upshift button for 200ms | |||
| 51 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuUpshiftButtonPin, 200000); | |
| 52 | ||||
| 53 |
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(GEAR_2, engine->gearController->getDesiredGear()); | |
| 54 | ||||
| 55 | // Wait 500ms | |||
| 56 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(500000); | |
| 57 | // Press upshift button for 1ms | |||
| 58 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuUpshiftButtonPin, 1000); | |
| 59 | ||||
| 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(GEAR_3, engine->gearController->getDesiredGear()); | |
| 61 | ||||
| 62 | // Wait 500ms | |||
| 63 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(500000); | |
| 64 | // Press upshift button for 3s | |||
| 65 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuUpshiftButtonPin, 3000000); | |
| 66 | ||||
| 67 |
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(GEAR_4, engine->gearController->getDesiredGear()); | |
| 68 | ||||
| 69 | // Wait 10ms | |||
| 70 | // Because this is a different pin, the 500ms debounce timeout is not in play. | |||
| 71 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(10000); | |
| 72 | // Press downshift button for 200ms | |||
| 73 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuDownshiftButtonPin, 200000); | |
| 74 | ||||
| 75 |
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(GEAR_3, engine->gearController->getDesiredGear()); | |
| 76 | ||||
| 77 | // Wait 10ms | |||
| 78 | // This shouldn't be long enough for the debounce to have reset, | |||
| 79 | // so the downshift won't trigger until ~490ms after pressing the button. | |||
| 80 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardAndInvokeEventsUs(10000); | |
| 81 | // Press downshift button for 1.2s | |||
| 82 |
1/1✓ Branch 1 taken 1 time.
|
1 | blipGearControllerPin(ð, engineConfiguration->tcuDownshiftButtonPin, 1200000); | |
| 83 | ||||
| 84 |
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(GEAR_1, engine->gearController->getDesiredGear()); | |
| 85 | 1 | } | ||
| 86 | ||||
| 87 | 4 | TEST(tcu, testGenericGC) { | ||
| 88 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TCU_4R70W); | |
| 89 | 1 | engineConfiguration->gearControllerMode = GearControllerMode::Generic; | ||
| 90 |
1/1✓ Branch 1 taken 1 time.
|
1 | initGearController(); | |
| 91 | ||||
| 92 | // Need to set some engine settings for airmass calc | |||
| 93 | 1 | engineConfiguration->cylindersCount = 8.0; | ||
| 94 | ||||
| 95 | // pinMode is PI_PULLUP, so true = off | |||
| 96 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcuUpshiftButtonPin, true); | |
| 97 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcuDownshiftButtonPin, true); | |
| 98 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcu_rangeInput[1], true); | |
| 99 |
1/1✓ Branch 1 taken 1 time.
|
1 | setMockState(engineConfiguration->tcu_rangeInput[2], true); | |
| 100 | ||||
| 101 |
3/8✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
|
1 | ASSERT_NE(nullptr, engine->gearController); | |
| 102 |
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(NEUTRAL, engine->gearController->getDesiredGear()); | |
| 103 | ||||
| 104 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::VehicleSpeed, 55); | |
| 105 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Rpm, 2500); | |
| 106 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::DriverThrottleIntent, 15); | |
| 107 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Maf, 0.1f); | |
| 108 | ||||
| 109 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->gearController->update(); | |
| 110 | // Make sure we stay in neutral with undefined range selector pins | |||
| 111 |
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(NEUTRAL, engine->gearController->getDesiredGear()); | |
| 112 | ||||
| 113 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::RangeInput1, 2000); | |
| 114 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->gearController->update(); | |
| 115 |
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(GEAR_2, engine->gearController->getDesiredGear()); | |
| 116 | 1 | } | ||
| 117 |