obd sensors very broken

This commit is contained in:
Matthew Kennedy 2023-06-01 14:08:13 -07:00
parent 24deea7783
commit c2d058126d
9 changed files with 36 additions and 149 deletions

View File

@ -659,8 +659,6 @@ void mreBCM() {
engineConfiguration->injectionPins[i] = Gpio::Unassigned;
}
engineConfiguration->fanPin = Gpio::Unassigned;
engineConfiguration->consumeObdSensors = true;
}
/**

View File

@ -52,49 +52,3 @@ public:
private:
const uint8_t m_offset;
};
#if EFI_PROD_CODE
template <int Size, int Offset>
class ObdCanSensor: public CanSensorBase {
public:
ObdCanSensor(int PID, float Scale, SensorType type) :
CanSensorBase(OBD_TEST_RESPONSE, type, /* timeout, never expire */ 0) {
this->PID = PID;
this->Scale = Scale;
}
void decodeFrame(const CANRxFrame& frame, efitick_t nowNt) override {
if (frame.data8[2] != PID) {
return;
}
int iValue;
if (Size == 2) {
iValue = frame.data8[3] * 256 + frame.data8[4];
} else {
iValue = frame.data8[3];
}
float fValue = (1.0 * iValue / Scale) - Offset;
setValidValue(fValue, nowNt);
}
CanListener* request() override {
{
CanTxMessage msg(OBD_TEST_REQUEST);
msg[0] = _OBD_2;
msg[1] = OBD_CURRENT_DATA;
msg[2] = PID;
}
// let's sleep on write update after each OBD request, this would give read thread a chance to read response
// todo: smarter logic of all this with with semaphore not just sleep
chThdSleepMilliseconds(300);
return CanListener::request();
}
int PID;
float Scale;
};
#endif // EFI_PROD_CODE

View File

@ -2,7 +2,6 @@
INIT_SRC_CPP = $(PROJECT_DIR)/init/sensor/init_sensors.cpp \
$(PROJECT_DIR)/init/sensor/init_fluid_pressure.cpp \
$(PROJECT_DIR)/init/sensor/init_tps.cpp \
$(PROJECT_DIR)/init/sensor/init_can_sensors.cpp \
$(PROJECT_DIR)/init/sensor/init_thermistors.cpp \
$(PROJECT_DIR)/init/sensor/init_lambda.cpp \
$(PROJECT_DIR)/init/sensor/init_maf.cpp \

View File

@ -1,55 +0,0 @@
/**
* @file init_can_sensors.cpp
* body control unit use-case: inject many sensors from external ECU via ODB-II request/response
* this is totally different from Lua "set" sensor method
*
* @date March 31, 2020
* @author Matthew Kennedy, (c) 2020
*/
#include "pch.h"
#if EFI_PROD_CODE && EFI_CAN_SUPPORT
#include "can_sensor.h"
#include "can.h"
CanSensor<int16_t, PACK_MULT_PERCENT> canPedalSensor(
CAN_DEFAULT_BASE + CAN_PEDAL_TPS_OFFSET, /*offset =*/ 0,
SensorType::AcceleratorPedal, CAN_TIMEOUT
);
ObdCanSensor<2, 0> obdRpmSensor(
PID_RPM, ODB_RPM_MULT,
SensorType::Rpm
);
ObdCanSensor<1, ODB_TEMP_EXTRA> obdCltSensor(
PID_COOLANT_TEMP, 1,
SensorType::Clt
);
ObdCanSensor<1, ODB_TEMP_EXTRA> obdIatSensor(
PID_INTAKE_TEMP, 1,
SensorType::Iat
);
ObdCanSensor<1, 0> obdTpsSensor(
PID_INTAKE_TEMP, ODB_TPS_BYTE_PERCENT,
SensorType::Tps1
);
//ObdCanSensor<1, ODB_TPS_BYTE_PERCENT> obdTpsSensor(
// PID_ENGINE_LOAD,
// SensorType::Tps, TIMEOUT
//);
void initCanSensors() {
if (engineConfiguration->consumeObdSensors) {
// registerCanSensor(canPedalSensor);
registerCanSensor(obdRpmSensor);
registerCanSensor(obdCltSensor);
registerCanSensor(obdIatSensor);
registerCanSensor(obdTpsSensor);
}
}
#endif // EFI_PROD_CODE && EFI_CAN_SUPPORT

View File

@ -63,10 +63,6 @@ static void deInitAuxDigital() {
}
void initNewSensors() {
#if EFI_PROD_CODE && EFI_CAN_SUPPORT
initCanSensors();
#endif
initVbatt();
initMap();
initTps();

View File

@ -84,19 +84,17 @@ static void configureTempSensor(const char *msg,
}
void initThermistors() {
if (!engineConfiguration->consumeObdSensors) {
configureTempSensor("clt",
configureTempSensor("clt",
clt,
fclt,
engineConfiguration->clt,
engineConfiguration->useLinearCltSensor);
configureTempSensor("iat",
configureTempSensor("iat",
iat,
fiat,
engineConfiguration->iat,
engineConfiguration->useLinearIatSensor);
}
configureTempSensor("aux1",
aux1,

View File

@ -186,42 +186,40 @@ void initTps() {
percent_t min = engineConfiguration->tpsErrorDetectionTooLow;
percent_t max = engineConfiguration->tpsErrorDetectionTooHigh;
if (!engineConfiguration->consumeObdSensors) {
bool isFordTps = engineConfiguration->useFordRedundantTps;
bool isFordPps = engineConfiguration->useFordRedundantPps;
bool isFordTps = engineConfiguration->useFordRedundantTps;
bool isFordPps = engineConfiguration->useFordRedundantPps;
float tpsSecondaryMaximum = engineConfiguration->tpsSecondaryMaximum;
if (tpsSecondaryMaximum < 20) {
// don't allow <20% split point
tpsSecondaryMaximum = 20;
}
tps1.init(isFordTps, &fordTps1, tpsSecondaryMaximum,
{ engineConfiguration->tps1_1AdcChannel, (float)engineConfiguration->tpsMin, (float)engineConfiguration->tpsMax, min, max },
{ engineConfiguration->tps1_2AdcChannel, (float)engineConfiguration->tps1SecondaryMin, (float)engineConfiguration->tps1SecondaryMax, min, max }
);
tps2.init(isFordTps, &fordTps2, tpsSecondaryMaximum,
{ engineConfiguration->tps2_1AdcChannel, (float)engineConfiguration->tps2Min, (float)engineConfiguration->tps2Max, min, max },
{ engineConfiguration->tps2_2AdcChannel, (float)engineConfiguration->tps2SecondaryMin, (float)engineConfiguration->tps2SecondaryMax, min, max }
);
float ppsSecondaryMaximum = engineConfiguration->ppsSecondaryMaximum;
if (ppsSecondaryMaximum < 20) {
// don't allow <20% split point
ppsSecondaryMaximum = 20;
}
// Pedal sensors
pedal.init(isFordPps, &fordPps, ppsSecondaryMaximum,
{ engineConfiguration->throttlePedalPositionAdcChannel, engineConfiguration->throttlePedalUpVoltage, engineConfiguration->throttlePedalWOTVoltage, min, max },
{ engineConfiguration->throttlePedalPositionSecondAdcChannel, engineConfiguration->throttlePedalSecondaryUpVoltage, engineConfiguration->throttlePedalSecondaryWOTVoltage, min, max }
);
// TPS-like stuff that isn't actually a TPS
wastegate.init({ engineConfiguration->wastegatePositionSensor, (float)engineConfiguration->wastegatePositionMin, (float)engineConfiguration->wastegatePositionMax, min, max });
float tpsSecondaryMaximum = engineConfiguration->tpsSecondaryMaximum;
if (tpsSecondaryMaximum < 20) {
// don't allow <20% split point
tpsSecondaryMaximum = 20;
}
tps1.init(isFordTps, &fordTps1, tpsSecondaryMaximum,
{ engineConfiguration->tps1_1AdcChannel, (float)engineConfiguration->tpsMin, (float)engineConfiguration->tpsMax, min, max },
{ engineConfiguration->tps1_2AdcChannel, (float)engineConfiguration->tps1SecondaryMin, (float)engineConfiguration->tps1SecondaryMax, min, max }
);
tps2.init(isFordTps, &fordTps2, tpsSecondaryMaximum,
{ engineConfiguration->tps2_1AdcChannel, (float)engineConfiguration->tps2Min, (float)engineConfiguration->tps2Max, min, max },
{ engineConfiguration->tps2_2AdcChannel, (float)engineConfiguration->tps2SecondaryMin, (float)engineConfiguration->tps2SecondaryMax, min, max }
);
float ppsSecondaryMaximum = engineConfiguration->ppsSecondaryMaximum;
if (ppsSecondaryMaximum < 20) {
// don't allow <20% split point
ppsSecondaryMaximum = 20;
}
// Pedal sensors
pedal.init(isFordPps, &fordPps, ppsSecondaryMaximum,
{ engineConfiguration->throttlePedalPositionAdcChannel, engineConfiguration->throttlePedalUpVoltage, engineConfiguration->throttlePedalWOTVoltage, min, max },
{ engineConfiguration->throttlePedalPositionSecondAdcChannel, engineConfiguration->throttlePedalSecondaryUpVoltage, engineConfiguration->throttlePedalSecondaryWOTVoltage, min, max }
);
// TPS-like stuff that isn't actually a TPS
wastegate.init({ engineConfiguration->wastegatePositionSensor, (float)engineConfiguration->wastegatePositionMin, (float)engineConfiguration->wastegatePositionMax, min, max });
// Route the pedal or TPS to driverIntent as appropriate
if (isAdcChannelValid(engineConfiguration->throttlePedalPositionAdcChannel)) {
driverIntent.setProxiedSensor(SensorType::AcceleratorPedal);

View File

@ -834,7 +834,7 @@ sensor_chart_e sensorChartMode;rusEFI console Sensor Sniffer mode;
bit enableSoftwareKnock
bit verboseVVTDecoding;Verbose info in console below engineSnifferRpmThreshold\nenable vvt_details
bit invertCamVVTSignal;get invertCamVVTSignal
bit consumeObdSensors;This property is useful if using rusEFI as TCM or BCM only\nenable consumeObdSensors
bit unused804b12
bit knockBankCyl1,"Channel 2","Channel 1"
bit knockBankCyl2,"Channel 2","Channel 1"
bit knockBankCyl3,"Channel 2","Channel 1"

View File

@ -2280,8 +2280,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
panel = triggerConfiguration_gap
dialog = triggerConfiguration, "", xAxis
panel = trigger_primary, {1}, { consumeObdSensors == 0 }
panel = trigger_cams, {1}, { consumeObdSensors == 0 }
panel = trigger_primary
panel = trigger_cams
; Engine->Injection Settings
dialog = injChars, "Injector Settings", yAxis
@ -4273,7 +4273,6 @@ dialog = tcuControls, "Transmission Settings"
field = "Secondary PPS maximum", ppsSecondaryMaximum, {useFordRedundantPps}
field = "ADC vRef voltage", adcVcc
field = "Analog divider ratio", analogInputDividerCoefficient@@if_ts_show_analog_divider
field = "consumeObdSensors", consumeObdSensors, { canReadEnabled == 1 && canWriteEnabled == 1}
field = "Artificial Misfire", artificialTestMisfire
field = "Instant Rpm Range", instantRpmRange
field = "Always use instant RPM", alwaysInstantRpm