yet more tps consumers (#1258)

* advance_map

* tests

* unneeded

* idle

* use driver intent instead

* and obd and lcd

* engine load

* ve lookup

* unused

* oops we needed that

* oops needed that too

* mocking

* test mocks

* oops

* helps to use the right sensor

* and cylinder cleanup

* fuel math

* typo

* old tests

* kill dead stuff

* cleanup

* more

* fix

* test

* s

* fix signature

* fix test

* comment

* priming pulse

* remove mock tps

* remove more dead

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
Matthew Kennedy 2020-04-05 06:11:25 -07:00 committed by GitHub
parent 3186741ddc
commit 7d5df29fbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 27 additions and 159 deletions

View File

@ -311,7 +311,7 @@ static void showEthInfo(void) {
scheduleMsg(&logger, "etbAutoTune=%d",
engine->etbAutoTune);
scheduleMsg(&logger, "TPS=%.2f", getTPS(PASS_ENGINE_PARAMETER_SIGNATURE));
scheduleMsg(&logger, "TPS=%.2f", Sensor::get(SensorType::Tps1).value_or(0));
scheduleMsg(&logger, "etbControlPin1=%s duty=%.2f freq=%d",
@ -549,7 +549,7 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return;
}
engine->etbActualCount = hasSecondThrottleBody(PASS_ENGINE_PARAMETER_SIGNATURE) ? 2 : 1;
engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1;
for (int i = 0 ; i < engine->etbActualCount; i++) {
auto motor = initDcMotor(i PASS_ENGINE_PARAMETER_SUFFIX);

View File

@ -285,8 +285,7 @@ void AccelEnrichment::onNewValue(float currentValue DECLARE_ENGINE_PARAMETER_SUF
}
void TpsAccelEnrichment::onEngineCycleTps(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
// we update values in handleFuel() directly
//onNewValue(getTPS(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX);
// we update values in handleFuel() directly by calling onNewValue()
onUpdateInvocationCounter++;

View File

@ -106,9 +106,6 @@ public:
#if !EFI_PROD_CODE
float mockMapValue = 0;
// for historical reasons we have options to mock TPS on different layers :(
int mockTpsAdcValue = 0;
float mockTpsValue = NAN;
#endif
int getGlobalConfigurationVersion(void) const;

View File

@ -350,7 +350,11 @@ float getFuelCutOffCorrection(efitick_t nowNt, int rpm DECLARE_ENGINE_PARAMETER_
// coasting fuel cut-off correction
if (CONFIG(coastingFuelCutEnabled)) {
percent_t tpsPos = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE);
auto [valid, tpsPos] = Sensor::get(SensorType::Tps1);
if (!valid) {
return 1.0f;
}
float map = getMap(PASS_ENGINE_PARAMETER_SIGNATURE);
// gather events

View File

@ -26,8 +26,6 @@ void setMockVoltage(int hwChannel, float voltage DECLARE_ENGINE_PARAMETER_SUFFIX
void setMockVBattVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockMapVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
// throttle body sensor
void setMockThrottlePositionSensorVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockAfrVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockMafVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockIatVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);

View File

@ -51,10 +51,6 @@ void setMockAfrVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX) {
setMockVoltage(engineConfiguration->afr.hwChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX);
}
void setMockThrottlePositionSensorVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX) {
setMockVoltage(engineConfiguration->tps1_1AdcChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX);
}
void setMockMapVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX) {
setMockVoltage(engineConfiguration->map.sensor.hwChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX);
}

View File

@ -48,6 +48,7 @@
#include "event_queue.h"
#include "engine.h"
#include "perf_trace.h"
#include "sensor.h"
#include "backup_ram.h"
@ -276,7 +277,7 @@ static void fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#if ! EFI_UNIT_TEST
if (GET_RPM_VALUE < CONFIG(fuelClosedLoopRpmThreshold) ||
getCoolantTemperature() < CONFIG(fuelClosedLoopCltThreshold) ||
getTPS(PASS_ENGINE_PARAMETER_SIGNATURE) > CONFIG(fuelClosedLoopTpsThreshold) ||
Sensor::get(SensorType::Tps1).value_or(100) > CONFIG(fuelClosedLoopTpsThreshold) ||
ENGINE(sensors.currentAfr) < CONFIG(fuelClosedLoopAfrLowThreshold) ||
ENGINE(sensors.currentAfr) > engineConfiguration->fuelClosedLoopAfrHighThreshold) {
engine->engineState.running.pidCorrection = 0;
@ -323,7 +324,7 @@ static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIn
scheduleMsg(logger, "handleFuel ind=%d %d", trgEventIndex, getRevolutionCounter());
#endif /* FUEL_MATH_EXTREME_LOGGING */
ENGINE(tpsAccelEnrichment.onNewValue(getTPS(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX));
ENGINE(tpsAccelEnrichment.onNewValue(Sensor::get(SensorType::Tps1).value_or(0) PASS_ENGINE_PARAMETER_SUFFIX));
if (trgEventIndex == 0) {
ENGINE(tpsAccelEnrichment.onEngineCycleTps(PASS_ENGINE_PARAMETER_SIGNATURE));
ENGINE(engineLoadAccelEnrichment.onEngineCycle(PASS_ENGINE_PARAMETER_SIGNATURE));
@ -453,7 +454,7 @@ static void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t trgEvent
static bool isPrimeInjectionPulseSkipped(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (!engine->rpmCalculator.isStopped(PASS_ENGINE_PARAMETER_SIGNATURE))
return true;
return CONFIG(isCylinderCleanupEnabled) && (getTPS(PASS_ENGINE_PARAMETER_SIGNATURE) > CLEANUP_MODE_TPS);
return CONFIG(isCylinderCleanupEnabled) && (Sensor::get(SensorType::Tps1).value_or(0) > CLEANUP_MODE_TPS);
}
/**

View File

@ -11,63 +11,11 @@
EXTERN_ENGINE;
#if !EFI_PROD_CODE
/**
* this allows unit tests to simulate TPS position
*/
void setMockTpsAdc(percent_t tpsPosition DECLARE_ENGINE_PARAMETER_SUFFIX) {
engine->mockTpsAdcValue = tpsPosition;
}
void setMockTpsValue(percent_t tpsPosition DECLARE_ENGINE_PARAMETER_SUFFIX) {
engine->mockTpsValue = tpsPosition;
}
#endif /* EFI_PROD_CODE */
/**
* We are using one instance for read and another for modification, this is how we get lock-free thread-safety
*
*/
static tps_roc_s states[2];
// todo if TPS_FAST_ADC
//int tpsFastAdc = 0;
static volatile int tpsRocIndex = 0;
/**
* this method is lock-free thread-safe if invoked only from one thread
*/
void saveTpsState(efitimeus_t now, float curValue) {
int tpsNextIndex = (tpsRocIndex + 1) % 2;
tps_roc_s *cur = &states[tpsRocIndex];
tps_roc_s *next = &states[tpsNextIndex];
next->prevTime = cur->curTime;
next->prevValue = cur->curValue;
next->curTime = now;
next->curValue = curValue;
//int diffSysticks = overflowDiff(now, cur->curTime);
float diffSeconds = 0;// TODO: do we need this? diffSysticks * 1.0 / CH_FREQUENCY;
next->rateOfChange = (curValue - cur->curValue) / diffSeconds;
// here we update volatile index
tpsRocIndex = tpsNextIndex;
}
/**
* this read-only method is lock-free thread-safe
*/
float getTpsRateOfChange(void) {
return states[tpsRocIndex].rateOfChange;
}
/*
* Return current TPS position based on configured ADC levels, and adc
*
* */
percent_t getTpsValue(int index, float adc DECLARE_ENGINE_PARAMETER_SUFFIX) {
static percent_t getTpsValue(int index, float adc DECLARE_ENGINE_PARAMETER_SUFFIX) {
DISPLAY_STATE(Engine)
DISPLAY_TAG(TPS_SECTION);
@ -132,11 +80,6 @@ percent_t getTpsValue(int index, float adc DECLARE_ENGINE_PARAMETER_SUFFIX) {
* @param index [0, ETB_COUNT)
*/
static float getTPS10bitAdc(int index DECLARE_ENGINE_PARAMETER_SUFFIX) {
#if !EFI_PROD_CODE
if (engine->mockTpsAdcValue != MOCK_UNDEFINED) {
return engine->mockTpsAdcValue;
}
#endif
if (engineConfiguration->tps1_1AdcChannel == EFI_ADC_NONE)
return -1;
#if EFI_PROD_CODE
@ -195,34 +138,16 @@ static percent_t getPrimaryRawTPS(int index DECLARE_ENGINE_PARAMETER_SUFFIX) {
#define NO_TPS_MAGIC_VALUE 66.611
bool hasSecondThrottleBody(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return engineConfiguration->tps2_1AdcChannel != EFI_ADC_NONE;
}
static bool hasTpsSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return engineConfiguration->tps1_1AdcChannel != EFI_ADC_NONE;
}
percent_t getTPSWithIndex(int index DECLARE_ENGINE_PARAMETER_SUFFIX) {
#if !EFI_PROD_CODE
if (!cisnan(engine->mockTpsValue)) {
return engine->mockTpsValue;
}
#endif /* EFI_PROD_CODE */
percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (!hasTpsSensor(PASS_ENGINE_PARAMETER_SIGNATURE))
return NO_TPS_MAGIC_VALUE;
// todo: if (config->isDualTps)
// todo: blah blah
// todo: if two TPS do not match - show OBD code via malfunction_central.c
return getPrimaryRawTPS(index PASS_ENGINE_PARAMETER_SUFFIX);
}
percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return getTPSWithIndex(0 PASS_ENGINE_PARAMETER_SUFFIX);
}
int convertVoltageTo10bitADC(float voltage) {
// divided by 2 because of voltage divider, then converted into 10bit ADC value (TunerStudio format)
return (int) (voltage * TPS_TS_CONVERSION);
return getPrimaryRawTPS(0 PASS_ENGINE_PARAMETER_SUFFIX);
}

View File

@ -21,29 +21,12 @@
* @return Current TPS position, percent of WOT. 0 means idle and 100 means Wide Open Throttle
*/
percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE);
percent_t getTPSWithIndex(int index DECLARE_ENGINE_PARAMETER_SUFFIX);
int convertVoltageTo10bitADC(float voltage);
bool hasSecondThrottleBody(DECLARE_ENGINE_PARAMETER_SIGNATURE);
percent_t getTpsValue(int index, float adc DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockTpsAdc(percent_t tpsPosition DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockTpsValue(percent_t tpsPosition DECLARE_ENGINE_PARAMETER_SUFFIX);
constexpr inline int convertVoltageTo10bitADC(float voltage) {
return (int) (voltage * TPS_TS_CONVERSION);
}
void grabTPSIsClosed();
void grabTPSIsWideOpen();
void grabPedalIsUp();
void grabPedalIsWideOpen();
typedef struct {
efitimeus_t prevTime;
// value 0-100%
float prevValue;
efitimeus_t curTime;
// value 0-100%
float curValue;
// % per second
float rateOfChange;
} tps_roc_s;
//void saveTpsState(efitimeus_t now, float curValue);
float getTpsRateOfChange(void);

View File

@ -408,7 +408,7 @@ static void printTpsSenser(const char *msg, SensorType sensor, int16_t min, int1
raw, getPinNameByAdcChannel(msg, channel, pinNameBuffer));
scheduleMsg(&logger, "current 10bit=%d value=%.2f rate=%.2f", convertVoltageTo10bitADC(raw), tps.Value, getTpsRateOfChange());
scheduleMsg(&logger, "current 10bit=%d value=%.2f", convertVoltageTo10bitADC(raw), tps.Value);
}
void printTPSInfo(void) {
@ -1174,7 +1174,6 @@ const command_f_s commandsF[] = {
#if EFI_ENGINE_CONTROL
#if EFI_ENABLE_MOCK_ADC
{MOCK_IAT_COMMAND, setMockIatVoltage},
{MOCK_TPS_COMMAND, setMockThrottlePositionSensorVoltage},
{MOCK_MAF_COMMAND, setMockMafVoltage},
{MOCK_AFR_COMMAND, setMockAfrVoltage},
{MOCK_MAP_COMMAND, setMockMapVoltage},

View File

@ -10,7 +10,7 @@
#include "engine_test_helper.h"
#include "accel_enrichment.h"
#include "tps.h"
#include "sensor.h"
TEST(fuel, testTpsAccelEnrichmentMath) {
printf("====================================================================================== testAccelEnrichment\r\n");
@ -47,14 +47,14 @@ TEST(fuel, testTpsAccelEnrichmentScheduling) {
eth.setTriggerType(TT_ONE PASS_ENGINE_PARAMETER_SUFFIX);
setMockTpsValue(7 PASS_ENGINE_PARAMETER_SUFFIX);
Sensor::setMockValue(SensorType::Tps1, 7);
eth.fireTriggerEvents2(/* count */ 5, 25 /* ms */);
ASSERT_EQ( 1200, GET_RPM()) << "RPM";
int expectedInvocationCounter = 1;
ASSERT_EQ(expectedInvocationCounter, ENGINE(tpsAccelEnrichment).onUpdateInvocationCounter);
setMockTpsValue(70 PASS_ENGINE_PARAMETER_SUFFIX);
Sensor::setMockValue(SensorType::Tps1, 70);
eth.fireTriggerEvents2(/* count */ 1, 25 /* ms */);
float expectedAEValue = 29.2;

View File

@ -8,7 +8,7 @@
#include "engine_math.h"
#include "engine_test_helper.h"
#include "event_queue.h"
#include "tps.h"
#include "sensor.h"
#include "fsio_impl.h"
TEST(fuelCut, coasting) {
@ -25,9 +25,6 @@ TEST(fuelCut, coasting) {
engineConfiguration->coastingFuelCutMap = 100;
// set cranking threshold
engineConfiguration->cranking.rpm = 999;
// configure TPS
engineConfiguration->tpsMin = 0;
engineConfiguration->tpsMax = 10;
// basic engine setup
setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth);
@ -35,7 +32,7 @@ TEST(fuelCut, coasting) {
// mock CLT - just above threshold ('hot engine')
float hotClt = engine->sensors.clt = engineConfiguration->coastingFuelCutClt + 1;
// mock TPS - throttle is opened
setMockTpsAdc(6 PASS_ENGINE_PARAMETER_SUFFIX);
Sensor::setMockValue(SensorType::Tps1, 60);
// set 'running' RPM - just above RpmHigh threshold
engine->rpmCalculator.mockRpm = engineConfiguration->coastingFuelCutRpmHigh + 1;
// 'advance' time (amount doesn't matter)
@ -53,7 +50,7 @@ TEST(fuelCut, coasting) {
assertEqualsM("inj dur#1 norm", normalInjDuration, ENGINE(injectionDuration));
// 'releasing' the throttle
setMockTpsAdc(0 PASS_ENGINE_PARAMETER_SUFFIX);
Sensor::setMockValue(SensorType::Tps1, 0);
eth.engine.periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
// Fuel cut-off is enabled now

View File

@ -10,8 +10,6 @@
#include "allsensors.h"
#include "engine_test_helper.h"
TEST(sensors, mapDecoding) {
WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995);
@ -26,35 +24,6 @@ TEST(sensors, mapDecoding) {
ASSERT_FLOAT_EQ(58.4, decodePressure(1, &s PASS_ENGINE_PARAMETER_SUFFIX));
}
TEST(sensors, tps) {
print("************************************************** testTps\r\n");
WITH_ENGINE_TEST_HELPER(DODGE_RAM);
engineConfiguration->tpsMax = 193;
engineConfiguration->tpsMin = 43;
ASSERT_NEAR(49.3333, getTpsValue(0, 117 PASS_ENGINE_PARAMETER_SUFFIX), EPS4D);
engineConfiguration->tpsMax = 43;
engineConfiguration->tpsMin = 193;
assertEqualsM("test#2", 50.6667, getTpsValue(0, 117 PASS_ENGINE_PARAMETER_SUFFIX));
}
TEST(sensors, testTpsRateOfChange) {
print("************************************************** testTpsRateOfChange\r\n");
// saveTpsState(0, 0);
// saveTpsState(CH_FREQUENCY, 50);
// assertEquals(50, getTpsRateOfChange());
//
// saveTpsState(2 * CH_FREQUENCY, 50);
// assertEquals(0, getTpsRateOfChange());
//
// saveTpsState(3 * CH_FREQUENCY, 75);
// assertEquals(25, getTpsRateOfChange());
}
TEST(sensors, Thermistor1) {
ThermistorMath tm;