From 9d4dcbce511c580e39c2c1de62a4dcb261718ccc Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 29 Jul 2020 02:54:47 -0700 Subject: [PATCH 1/4] obd2 lambda --- firmware/controllers/can/obd2.cpp | 12 +++++++++++- firmware/controllers/can/obd2.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index ec623102ff..3670921835 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -38,6 +38,7 @@ #include "engine_math.h" #include "fuel_math.h" #include "thermistors.h" +#include "ego.h" EXTERN_ENGINE; @@ -152,7 +153,16 @@ static void handleGetDataRequest(const CANRxFrame& rx) { case PID_THROTTLE: obdSendValue(1, pid, 1, Sensor::get(SensorType::Tps1).value_or(0) * 2.55f); // (A*100/255) break; - case PID_FUEL_RATE: + case PID_FUEL_AIR_RATIO_1: { + float afr = getAfr(PASS_ENGINE_PARAMETER_SIGNATURE); + // phi = 1 / lambda + float phi = clampF(0, 14.7f / afr, 1.99f); + + uint16_t scaled = phi * 32768; + + obdSendPacket(1, pid, 4, scaled << 16); + break; + } case PID_FUEL_RATE: obdSendValue(1, pid, 2, engine->engineState.fuelConsumption.perSecondConsumption * 20.0f); // L/h. (A*256+B)/20 break; default: diff --git a/firmware/controllers/can/obd2.h b/firmware/controllers/can/obd2.h index c6131db412..56e70fca58 100644 --- a/firmware/controllers/can/obd2.h +++ b/firmware/controllers/can/obd2.h @@ -32,6 +32,7 @@ #define PID_THROTTLE 0x11 #define PID_SUPPORTED_PIDS_REQUEST_21_40 0x20 +#define PID_FUEL_AIR_RATIO_1 0x24 #define PID_SUPPORTED_PIDS_REQUEST_41_60 0x40 #define PID_FUEL_RATE 0x5E From 711453d57de6b96c751e0809971d2f966d8010be Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 29 Jul 2020 12:15:01 -0700 Subject: [PATCH 2/4] stft too --- firmware/controllers/can/obd2.cpp | 4 ++++ firmware/controllers/can/obd2.h | 1 + 2 files changed, 5 insertions(+) diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index ec623102ff..33a6d0fcc5 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -46,6 +46,7 @@ static const int16_t supportedPids0120[] = { PID_FUEL_SYSTEM_STATUS, PID_ENGINE_LOAD, PID_COOLANT_TEMP, + PID_STFT_BANK1, PID_INTAKE_MAP, PID_RPM, PID_SPEED, @@ -128,6 +129,9 @@ static void handleGetDataRequest(const CANRxFrame& rx) { case PID_COOLANT_TEMP: obdSendValue(1, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f); break; + case PID_STFT_BANK1: + obdSendValue(1, pid, 1, 128 * (ENGINE(engineState.running.pidCorrection)); + break; case PID_INTAKE_MAP: obdSendValue(1, pid, 1, getMap(PASS_ENGINE_PARAMETER_SIGNATURE)); break; diff --git a/firmware/controllers/can/obd2.h b/firmware/controllers/can/obd2.h index c6131db412..66cfcb4ef3 100644 --- a/firmware/controllers/can/obd2.h +++ b/firmware/controllers/can/obd2.h @@ -22,6 +22,7 @@ #define PID_FUEL_SYSTEM_STATUS 0x03 #define PID_ENGINE_LOAD 0x04 #define PID_COOLANT_TEMP 0x05 +#define PID_STFT_BANK1 0x06 #define PID_FUEL_PRESSURE 0x0A #define PID_INTAKE_MAP 0x0B #define PID_RPM 0x0C From 2560d90326bcfaad41324d37560fe6f94946a2bc Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 29 Jul 2020 12:17:11 -0700 Subject: [PATCH 3/4] report that we support it --- firmware/controllers/can/obd2.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index b8794f098d..8c48d91cc9 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -58,6 +58,7 @@ static const int16_t supportedPids0120[] = { }; static const int16_t supportedPids2140[] = { + PID_FUEL_AIR_RATIO_1, -1 }; From b2c6104a6b1b976587f6d4823a888a19eb1b54dd Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 29 Jul 2020 14:27:57 -0700 Subject: [PATCH 4/4] fix --- firmware/controllers/can/obd2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index 8c48d91cc9..7a0a736a4e 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -132,7 +132,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { obdSendValue(1, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f); break; case PID_STFT_BANK1: - obdSendValue(1, pid, 1, 128 * (ENGINE(engineState.running.pidCorrection)); + obdSendValue(1, pid, 1, 128 * ENGINE(engineState.running.pidCorrection)); break; case PID_INTAKE_MAP: obdSendValue(1, pid, 1, getMap(PASS_ENGINE_PARAMETER_SIGNATURE));