revering functional part of

Etb function cfg, try again #1860
try again from #1831
This commit is contained in:
rusefillc 2020-10-08 17:09:00 -04:00
parent c5d4150377
commit 07a905b1fe
2 changed files with 18 additions and 89 deletions

View File

@ -172,8 +172,6 @@ bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidPara
m_pid.initPidClass(pidParameters);
m_pedalMap = pedalMap;
reset();
return true;
}
@ -758,10 +756,6 @@ void setDefaultEtbParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
}
}
// Default is to run each throttle off its respective hbridge
engineConfiguration->etbFunctions[0] = ETB_Throttle1;
engineConfiguration->etbFunctions[1] = ETB_Throttle2;
engineConfiguration->etbFreq = DEFAULT_ETB_PWM_FREQUENCY;
// voltage, not ADC like with TPS
@ -828,42 +822,29 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
addConsoleActionI("etb_freq", setEtbFrequency);
#endif /* EFI_PROD_CODE */
// If you don't have a pedal we have no business here.
if (!Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) {
return;
}
pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins);
// TODO: remove etbActualCount
engine->etbActualCount = ETB_COUNT;
engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1;
bool mustHaveEtbConfigured = Sensor::hasSensor(SensorType::AcceleratorPedalPrimary);
bool anyEtbConfigured = false;
for (int i = 0 ; i < ETB_COUNT; i++) {
for (int i = 0 ; i < engine->etbActualCount; i++) {
auto motor = initDcMotor(i, CONFIG(etb_use_two_wires) PASS_ENGINE_PARAMETER_SUFFIX);
// If this motor is actually set up, init the etb
if (motor)
{
auto controller = engine->etbControllers[i];
if (!controller) {
continue;
}
// TODO: configure per-motor in config so wastegate/VW idle works
auto func = i == 0 ? ETB_Throttle1 : ETB_Throttle2;
auto func = CONFIG(etbFunctions[i]);
anyEtbConfigured |= controller->init(func, motor, &engineConfiguration->etb, &pedal2tpsMap);
engine->etbControllers[i]->init(func, motor, &engineConfiguration->etb, &pedal2tpsMap);
INJECT_ENGINE_REFERENCE(engine->etbControllers[i]);
}
}
if (!anyEtbConfigured) {
// It's not valid to have a PPS without any ETBs - check that at least one ETB was enabled along with the pedal
if (mustHaveEtbConfigured) {
firmwareError(OBD_PCM_Processor_Fault, "A pedal position sensor was configured, but no electronic throttles are configured.");
}
// Don't start the thread if no throttles are in use.
return;
}
#if 0 && ! EFI_UNIT_TEST
percent_t startupThrottlePosition = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE);
if (absF(startupThrottlePosition - engineConfiguration->etbNeutralPosition) > STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD) {
@ -877,6 +858,8 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
}
#endif /* EFI_UNIT_TEST */
etbPidReset(PASS_ENGINE_PARAMETER_SIGNATURE);
#if !EFI_UNIT_TEST
etbThread.Start();
#endif

View File

@ -27,34 +27,9 @@ TEST(etb, initializationNoPedal) {
engine->etbControllers[i] = &mocks[i];
}
EXPECT_CALL(mocks[0], init(ETB_Throttle1, _, _, _)).WillOnce(Return(false));
EXPECT_CALL(mocks[1], init(ETB_Throttle2, _, _, _)).WillOnce(Return(false));
// We expect no throttle init stuff to be called - lack of pedal should disable ETB
// This shouldn't throw, since no throttles are configured, but no pedal is configured either
EXPECT_NO_FATAL_ERROR(doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE));
}
TEST(etb, initializationMissingThrottle) {
StrictMock<MockEtb> mocks[ETB_COUNT];
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
for (int i = 0; i < ETB_COUNT; i++) {
engine->etbControllers[i] = &mocks[i];
}
engineConfiguration->etbFunctions[0] = ETB_None;
engineConfiguration->etbFunctions[1] = ETB_None;
EXPECT_CALL(mocks[0], init(ETB_None, _, _, _)).WillOnce(Return(false));
EXPECT_CALL(mocks[1], init(ETB_None, _, _, _)).WillOnce(Return(false));
// Must have a sensor configured before init
Sensor::setMockValue(SensorType::AcceleratorPedal, 0);
Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 0);
// This should throw: a pedal is configured but no throttles
EXPECT_FATAL_ERROR(doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE));
doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);
}
TEST(etb, initializationSingleThrottle) {
@ -70,39 +45,11 @@ TEST(etb, initializationSingleThrottle) {
Sensor::setMockValue(SensorType::AcceleratorPedal, 0);
Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 0);
engineConfiguration->etbFunctions[0] = ETB_Throttle1;
engineConfiguration->etbFunctions[1] = ETB_None;
// Expect mock0 to be init as throttle 1, and PID params
EXPECT_CALL(mocks[0], init(ETB_Throttle1, _, &engineConfiguration->etb, Ne(nullptr))).WillOnce(Return(true));
EXPECT_CALL(mocks[0], reset);
// Expect mock1 to be init as none
EXPECT_CALL(mocks[1], init(ETB_None, _, _, _)).WillOnce(Return(true));
doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);
}
TEST(etb, initializationSingleThrottleInSecondSlot) {
StrictMock<MockEtb> mocks[ETB_COUNT];
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
for (int i = 0; i < ETB_COUNT; i++) {
engine->etbControllers[i] = &mocks[i];
}
// Must have a sensor configured before init
Sensor::setMockValue(SensorType::AcceleratorPedal, 0);
Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 0);
engineConfiguration->etbFunctions[0] = ETB_None;
engineConfiguration->etbFunctions[1] = ETB_Throttle1;
// Expect mock0 to be init as none
EXPECT_CALL(mocks[0], init(ETB_None, _, _, _)).WillOnce(Return(true));
// Expect mock1 to be init as throttle 1, and PID params
EXPECT_CALL(mocks[1], init(ETB_Throttle1, _, &engineConfiguration->etb, Ne(nullptr))).WillOnce(Return(true));
// We do not expect throttle #2 to be initialized
doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);
}
@ -123,14 +70,13 @@ TEST(etb, initializationDualThrottle) {
// The presence of a second TPS indicates dual throttle
Sensor::setMockValue(SensorType::Tps2, 25.0f);
engineConfiguration->etbFunctions[0] = ETB_Throttle1;
engineConfiguration->etbFunctions[1] = ETB_Throttle2;
// Expect mock0 to be init as throttle 1, and PID params
EXPECT_CALL(mocks[0], init(ETB_Throttle1, _, &engineConfiguration->etb, Ne(nullptr))).WillOnce(Return(true));
EXPECT_CALL(mocks[0], reset);
// Expect mock1 to be init as throttle 2, and PID params
EXPECT_CALL(mocks[1], init(ETB_Throttle2, _, &engineConfiguration->etb, Ne(nullptr))).WillOnce(Return(true));
EXPECT_CALL(mocks[1], reset);
doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);
}