2022-11-29 08:42:09 -08:00
|
|
|
#include "pch.h"
|
|
|
|
#include "init.h"
|
|
|
|
#include "electronic_throttle_impl.h"
|
2022-11-29 11:02:44 -08:00
|
|
|
#include "live_data.h"
|
2022-11-29 08:42:09 -08:00
|
|
|
|
2022-11-29 17:11:34 -08:00
|
|
|
static EtbController * initEtbIntegratedTest() {
|
2022-11-29 11:59:08 -08:00
|
|
|
etbPidReset(); // ETB controlles are global shared instances :(
|
2022-11-29 08:42:09 -08:00
|
|
|
|
|
|
|
engineConfiguration->tps1_1AdcChannel = EFI_ADC_3;
|
|
|
|
engineConfiguration->tps1_2AdcChannel = EFI_ADC_3;
|
|
|
|
|
|
|
|
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_3;
|
|
|
|
engineConfiguration->throttlePedalPositionSecondAdcChannel = EFI_ADC_3;
|
|
|
|
|
|
|
|
|
|
|
|
Sensor::setMockValue(SensorType::Tps1, 25.0f, true);
|
|
|
|
|
|
|
|
initTps();
|
|
|
|
doInitElectronicThrottle();
|
2022-11-29 17:11:34 -08:00
|
|
|
return (EtbController*)engine->etbControllers[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(etb, integrated) {
|
|
|
|
EngineTestHelper eth(TEST_ENGINE); // we have a distractor so cannot move EngineTestHelper into utility method
|
|
|
|
EtbController *etb = initEtbIntegratedTest();
|
2022-11-29 08:42:09 -08:00
|
|
|
|
2022-11-29 17:36:03 -08:00
|
|
|
Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 40);
|
|
|
|
Sensor::setMockValue(SensorType::AcceleratorPedalSecondary, 40);
|
|
|
|
|
2022-11-29 08:42:09 -08:00
|
|
|
etb->update();
|
|
|
|
|
|
|
|
ASSERT_EQ(engine->outputChannels.etbTarget, 40);
|
2022-11-30 12:25:50 -08:00
|
|
|
ASSERT_NEAR(etb->prevOutput, 120.363, EPS3D);
|
|
|
|
ASSERT_NEAR(etb->etbDutyAverage, 60.1813, EPS3D);
|
2022-11-29 08:42:09 -08:00
|
|
|
|
2022-11-29 11:02:44 -08:00
|
|
|
Sensor::setMockValue(SensorType::AcceleratorPedal, 10, true);
|
|
|
|
etb->update();
|
2022-11-30 12:25:50 -08:00
|
|
|
ASSERT_NEAR(etb->etbDutyAverage, -9.89286, EPS3D);
|
|
|
|
ASSERT_NEAR(etb->etbDutyRateOfChange, -70.074, EPS3D);
|
2022-11-29 11:02:44 -08:00
|
|
|
|
|
|
|
float destination;
|
|
|
|
int offset = ELECTRONIC_THROTTLE_BASE_ADDRESS + offsetof(electronic_throttle_s, etbDutyRateOfChange);
|
|
|
|
copyRange((uint8_t*)&destination, getLiveDataFragments(), offset, sizeof(destination));
|
2022-11-30 12:25:50 -08:00
|
|
|
ASSERT_NEAR(destination, -70.074, EPS3D);
|
2022-11-29 08:42:09 -08:00
|
|
|
}
|
2022-11-29 17:11:34 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST(etb, integratedTpsJitter) {
|
|
|
|
EngineTestHelper eth(TEST_ENGINE); // we have a distractor so cannot move EngineTestHelper into utility method
|
|
|
|
EtbController *etb = initEtbIntegratedTest();
|
|
|
|
|
|
|
|
ASSERT_FALSE(isTps1Error());
|
|
|
|
ASSERT_FALSE(isTps2Error());
|
2022-11-29 17:36:03 -08:00
|
|
|
ASSERT_TRUE(isPedalError());
|
|
|
|
|
|
|
|
etb->update();
|
|
|
|
|
|
|
|
Sensor::setInvalidMockValue(SensorType::AcceleratorPedal);
|
|
|
|
ASSERT_TRUE(isPedalError());
|
|
|
|
etb->update();
|
|
|
|
|
|
|
|
ASSERT_EQ(1, etb->etbInputErrorCounter);
|
2022-11-29 17:11:34 -08:00
|
|
|
|
2022-11-29 17:36:03 -08:00
|
|
|
Sensor::setInvalidMockValue(SensorType::Tps1);
|
2022-11-29 17:11:34 -08:00
|
|
|
etb->update();
|
|
|
|
|
2022-11-29 17:51:28 -08:00
|
|
|
ASSERT_EQ(2, etb->etbInputErrorCounter);
|
2022-11-29 17:11:34 -08:00
|
|
|
}
|