mirror of https://github.com/FOME-Tech/fome-fw.git
obd sensors very broken
This commit is contained in:
parent
24deea7783
commit
c2d058126d
|
@ -659,8 +659,6 @@ void mreBCM() {
|
|||
engineConfiguration->injectionPins[i] = Gpio::Unassigned;
|
||||
}
|
||||
engineConfiguration->fanPin = Gpio::Unassigned;
|
||||
engineConfiguration->consumeObdSensors = true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
|
@ -63,10 +63,6 @@ static void deInitAuxDigital() {
|
|||
}
|
||||
|
||||
void initNewSensors() {
|
||||
#if EFI_PROD_CODE && EFI_CAN_SUPPORT
|
||||
initCanSensors();
|
||||
#endif
|
||||
|
||||
initVbatt();
|
||||
initMap();
|
||||
initTps();
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue