From 82e7f3435d6a3b7d1b6ec39673f5fea3dadc8038 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Thu, 10 Dec 2020 00:48:05 +0000 Subject: [PATCH 1/5] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 6b5f6ffb40..d99f231275 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20201209 +#define VCS_DATE 20201210 From ba1ba1452d9f86315f72e34c780f54a05ab624ac Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 9 Dec 2020 19:26:23 -0600 Subject: [PATCH 2/5] second lambda (x-series CAN only, for now) (#2048) * add sensor * second sensor * switch sensor name * gobblin up your memory Co-authored-by: Matthew Kennedy --- firmware/console/status_loop.cpp | 7 +++++-- firmware/controllers/can/can_verbose.cpp | 2 +- firmware/controllers/can/obd2.cpp | 2 +- firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/gauges/lcd_controller.cpp | 4 ++-- firmware/controllers/math/closed_loop_fuel.cpp | 2 +- firmware/controllers/math/closed_loop_fuel_cell.cpp | 2 +- firmware/controllers/sensors/sensor.cpp | 3 ++- firmware/controllers/sensors/sensor_type.h | 3 ++- firmware/init/sensor/init_lambda.cpp | 8 +++++--- unit_tests/tests/sensor/test_sensor_init.cpp | 2 +- unit_tests/tests/test_stft.cpp | 6 +++--- 12 files changed, 25 insertions(+), 18 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index ac3050a250..0f84b429e3 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -512,11 +512,14 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ // offset 16 tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMafVoltage(PASS_ENGINE_PARAMETER_SIGNATURE) : 0; - // offset 20 - float lambdaValue = Sensor::get(SensorType::Lambda).value_or(0); + float lambdaValue = Sensor::get(SensorType::Lambda1).value_or(0); tsOutputChannels->lambda = lambdaValue; tsOutputChannels->airFuelRatio = lambdaValue * ENGINE(engineState.stoichiometricRatio); + float lambda2Value = Sensor::get(SensorType::Lambda2).value_or(0); + tsOutputChannels->lambda2 = lambda2Value; + tsOutputChannels->airFuelRatio2 = lambda2Value * ENGINE(engineState.stoichiometricRatio); + // offset 24 tsOutputChannels->engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/can/can_verbose.cpp b/firmware/controllers/can/can_verbose.cpp index ac21d80b4b..5b9edafe8a 100644 --- a/firmware/controllers/can/can_verbose.cpp +++ b/firmware/controllers/can/can_verbose.cpp @@ -118,7 +118,7 @@ struct Sensors2 { }; static void populateFrame(Sensors2& msg) { - msg.afr = Sensor::get(SensorType::Lambda).value_or(0) * 14.7f; + msg.afr = Sensor::get(SensorType::Lambda1).value_or(0) * 14.7f; msg.oilPressure = Sensor::get(SensorType::OilPressure).value_or(-1); msg.vvtPos = engine->triggerCentral.getVVTPosition(); msg.vbatt = getVBatt(); diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index 7a7d442a2a..9ee3789378 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -157,7 +157,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Tps1).value_or(0) * ODB_TPS_BYTE_PERCENT); // (A*100/255) break; case PID_FUEL_AIR_RATIO_1: { - float lambda = Sensor::get(SensorType::Lambda).value_or(0); + float lambda = Sensor::get(SensorType::Lambda1).value_or(0); // phi = 1 / lambda float phi = clampF(0, 1 / lambda, 1.99f); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 92499a0557..630002edf4 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -710,7 +710,7 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) * UNUSED_SIZE constants. */ #ifndef RAM_UNUSED_SIZE -#define RAM_UNUSED_SIZE 3400 +#define RAM_UNUSED_SIZE 3300 #endif #ifndef CCM_UNUSED_SIZE #define CCM_UNUSED_SIZE 2800 diff --git a/firmware/controllers/gauges/lcd_controller.cpp b/firmware/controllers/gauges/lcd_controller.cpp index 907dd51c5e..73bc72a9d3 100644 --- a/firmware/controllers/gauges/lcd_controller.cpp +++ b/firmware/controllers/gauges/lcd_controller.cpp @@ -220,8 +220,8 @@ static void showLine(lcd_line_e line, int /*screenY*/) { return; #endif case LL_AFR: - if (Sensor::hasSensor(SensorType::Lambda)) { - lcdPrintf("AFR: %.2f", Sensor::get(SensorType::Lambda).value_or(0)); + if (Sensor::hasSensor(SensorType::Lambda1)) { + lcdPrintf("AFR: %.2f", Sensor::get(SensorType::Lambda1).value_or(0)); } else { lcdPrintf("AFR: none"); } diff --git a/firmware/controllers/math/closed_loop_fuel.cpp b/firmware/controllers/math/closed_loop_fuel.cpp index 8349036ba4..a4edd81398 100644 --- a/firmware/controllers/math/closed_loop_fuel.cpp +++ b/firmware/controllers/math/closed_loop_fuel.cpp @@ -71,7 +71,7 @@ bool shouldUpdateCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // Pause (but don't reset) correction if the AFR is off scale. // It's probably a transient and poorly tuned transient correction - auto afr = Sensor::get(SensorType::Lambda).value_or(0) * 14.7f; + auto afr = Sensor::get(SensorType::Lambda1).value_or(0) * 14.7f; if (!afr || afr < (cfg.minAfr * 0.1f) || afr > (cfg.maxAfr * 0.1f)) { return false; } diff --git a/firmware/controllers/math/closed_loop_fuel_cell.cpp b/firmware/controllers/math/closed_loop_fuel_cell.cpp index 3892c3145d..1c91bacd35 100644 --- a/firmware/controllers/math/closed_loop_fuel_cell.cpp +++ b/firmware/controllers/math/closed_loop_fuel_cell.cpp @@ -49,7 +49,7 @@ float ClosedLoopFuelCellBase::getAdjustment() const { } float ClosedLoopFuelCellImpl::getLambdaError(DECLARE_ENGINE_PARAMETER_SIGNATURE) const { - auto lambda = Sensor::get(SensorType::Lambda); + auto lambda = Sensor::get(SensorType::Lambda1); // Failed sensor -> no error if (!lambda) { diff --git a/firmware/controllers/sensors/sensor.cpp b/firmware/controllers/sensors/sensor.cpp index 7b873d2b0c..09093f1fde 100644 --- a/firmware/controllers/sensors/sensor.cpp +++ b/firmware/controllers/sensors/sensor.cpp @@ -34,7 +34,8 @@ static const char* s_sensorNames[] = { "Aux Temp 1", "Aux Temp 2", - "Lambda", + "Lambda 1", + "Lambda 2", "Wastegate Position", "Idle Valve Position", diff --git a/firmware/controllers/sensors/sensor_type.h b/firmware/controllers/sensors/sensor_type.h index 7676548f52..477d2d712a 100644 --- a/firmware/controllers/sensors/sensor_type.h +++ b/firmware/controllers/sensors/sensor_type.h @@ -52,7 +52,8 @@ enum class SensorType : unsigned char { AuxTemp1, AuxTemp2, - Lambda, + Lambda1, + Lambda2, WastegatePosition, IdlePosition, diff --git a/firmware/init/sensor/init_lambda.cpp b/firmware/init/sensor/init_lambda.cpp index e9b029fbc5..f1f22aa5fe 100644 --- a/firmware/init/sensor/init_lambda.cpp +++ b/firmware/init/sensor/init_lambda.cpp @@ -18,14 +18,15 @@ struct GetAfrWrapper { static GetAfrWrapper afrWrapper; -static FunctionPointerSensor lambdaSensor(SensorType::Lambda, +static FunctionPointerSensor lambdaSensor(SensorType::Lambda1, []() { return afrWrapper.getLambda(); }); #if EFI_CAN_SUPPORT #include "AemXSeriesLambda.h" -static AemXSeriesWideband aem(0, SensorType::Lambda); +static AemXSeriesWideband aem1(0, SensorType::Lambda1); +static AemXSeriesWideband aem2(1, SensorType::Lambda2); #endif void initLambda(DECLARE_ENGINE_PARAMETER_SIGNATURE) { @@ -33,7 +34,8 @@ void initLambda(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_CAN_SUPPORT if (CONFIG(enableAemXSeries)) { - registerCanSensor(aem); + registerCanSensor(aem1); + registerCanSensor(aem2); return; } diff --git a/unit_tests/tests/sensor/test_sensor_init.cpp b/unit_tests/tests/sensor/test_sensor_init.cpp index a66d88de64..fe37d36e28 100644 --- a/unit_tests/tests/sensor/test_sensor_init.cpp +++ b/unit_tests/tests/sensor/test_sensor_init.cpp @@ -215,6 +215,6 @@ TEST(SensorInit, Lambda) { initLambda(PASS_ENGINE_PARAMETER_SIGNATURE); - auto s = Sensor::getSensorOfType(SensorType::Lambda); + auto s = Sensor::getSensorOfType(SensorType::Lambda1); ASSERT_NE(nullptr, s); } diff --git a/unit_tests/tests/test_stft.cpp b/unit_tests/tests/test_stft.cpp index f9237fa0d1..55648f4682 100644 --- a/unit_tests/tests/test_stft.cpp +++ b/unit_tests/tests/test_stft.cpp @@ -87,12 +87,12 @@ TEST(ClosedLoopFuel, afrLimits) { engineConfiguration->stft.minAfr = 100; // 10.0 AFR engineConfiguration->stft.maxAfr = 180; // 18.0 AFR - Sensor::setMockValue(SensorType::Lambda, 0.1f); + Sensor::setMockValue(SensorType::Lambda1, 0.1f); EXPECT_FALSE(shouldUpdateCorrection(PASS_ENGINE_PARAMETER_SIGNATURE)); - Sensor::setMockValue(SensorType::Lambda, 1.0f); + Sensor::setMockValue(SensorType::Lambda1, 1.0f); EXPECT_TRUE(shouldUpdateCorrection(PASS_ENGINE_PARAMETER_SIGNATURE)); - Sensor::setMockValue(SensorType::Lambda, 2.0f); + Sensor::setMockValue(SensorType::Lambda1, 2.0f); EXPECT_FALSE(shouldUpdateCorrection(PASS_ENGINE_PARAMETER_SIGNATURE)); } From ce2e7d3cbe58b78bfa0b94266557520022108cf8 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 9 Dec 2020 23:10:58 -0600 Subject: [PATCH 3/5] fix mock pins array (#2050) * fix * fix probably --- firmware/controllers/engine_controller_misc.cpp | 4 ---- firmware/hw_layer/io_pins.cpp | 5 ++++- firmware/hw_layer/io_pins.h | 5 +++++ unit_tests/engine_test_helper.cpp | 4 ---- unit_tests/engine_test_helper.h | 2 -- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/firmware/controllers/engine_controller_misc.cpp b/firmware/controllers/engine_controller_misc.cpp index 6a5d78d646..394e94b354 100644 --- a/firmware/controllers/engine_controller_misc.cpp +++ b/firmware/controllers/engine_controller_misc.cpp @@ -15,10 +15,6 @@ EXTERN_ENGINE; extern LoggingWithStorage sharedLogger; extern ButtonDebounce startStopButtonDebounce; -#if ! EFI_PROD_CODE -extern bool mockPinStates[(1 << sizeof(brain_pin_e))]; -#endif - #if ENABLE_PERF_TRACE static uint8_t nextThreadId = 0; void threadInitHook(void* vtp) { diff --git a/firmware/hw_layer/io_pins.cpp b/firmware/hw_layer/io_pins.cpp index ac503acd03..a5f95a2d5a 100644 --- a/firmware/hw_layer/io_pins.cpp +++ b/firmware/hw_layer/io_pins.cpp @@ -125,7 +125,10 @@ void efiIcuStart(const char *msg, ICUDriver *icup, const ICUConfig *config) { #endif /* HAL_USE_ICU */ #else -extern bool mockPinStates[(1 << sizeof(brain_pin_e))]; + +// This has been made global so we don't need to worry about efiReadPin having access the object +// we store it in, every time we need to use efiReadPin. +bool mockPinStates[BRAIN_PIN_COUNT]; bool efiReadPin(brain_pin_e pin) { return mockPinStates[static_cast(pin)]; diff --git a/firmware/hw_layer/io_pins.h b/firmware/hw_layer/io_pins.h index 533d5be6af..db2aeae11b 100644 --- a/firmware/hw_layer/io_pins.h +++ b/firmware/hw_layer/io_pins.h @@ -29,5 +29,10 @@ EXTERNC iomode_t getInputMode(pin_input_mode_e mode); #if HAL_USE_ICU EXTERNC void efiIcuStart(const char *msg, ICUDriver *icup, const ICUConfig *config); #endif /* HAL_USE_ICU */ + #endif /* EFI_GPIO_HARDWARE */ +#if ! EFI_PROD_CODE +#define BRAIN_PIN_COUNT (1 << 8 * sizeof(brain_pin_e)) +extern bool mockPinStates[BRAIN_PIN_COUNT]; +#endif diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index dee0d037a3..70760c718d 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -24,10 +24,6 @@ extern engine_configuration_s & activeConfiguration; extern bool printTriggerDebug; extern bool printFuelDebug; -// This has been made global so we don't need to worry about efiReadPin having access the object -// we store it in, every time we need to use efiReadPin. -bool mockPinStates[BRAIN_PIN_COUNT]; - EngineTestHelperBase::EngineTestHelperBase() { // todo: make this not a global variable, we need currentTimeProvider interface on engine timeNowUs = 0; diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 00f9d61824..0bf755b03b 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -7,8 +7,6 @@ #pragma once -#define BRAIN_PIN_COUNT (1 << sizeof(brain_pin_e)) - #include "engine.h" #include "trigger_central.h" #include "rpm_calculator.h" From 719e341eebd073b1633c53de6a8d4b3528fd851a Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 10 Dec 2020 00:23:24 -0600 Subject: [PATCH 4/5] start fuel pump as soon as trigger events happen (#2038) * switch pump fsio logic * value collision * fuel pump in tests * mock time since trigger * test fp * init pin in test * fix gpio outputs in tests * comment Co-authored-by: Matthew Kennedy --- firmware/controllers/algo/engine_parts.h | 1 + firmware/controllers/core/fsio_core.h | 2 +- firmware/controllers/system/efi_gpio.cpp | 4 +++ firmware/controllers/system_fsio.h | 4 +-- firmware/controllers/system_fsio.txt | 2 +- unit_tests/efifeatures.h | 2 ++ unit_tests/tests/test_logic_expression.cpp | 42 ++++++++++++++++++++++ 7 files changed, 53 insertions(+), 4 deletions(-) diff --git a/firmware/controllers/algo/engine_parts.h b/firmware/controllers/algo/engine_parts.h index 03904e18b7..5c6d20a154 100644 --- a/firmware/controllers/algo/engine_parts.h +++ b/firmware/controllers/algo/engine_parts.h @@ -93,6 +93,7 @@ public: float mockRpm = 0; float mockCrankingRpm = 0; float mockTimeSinceBoot = 0; + float mockTimeSinceTrigger = 0; int mockAcToggle = 0; #endif diff --git a/firmware/controllers/core/fsio_core.h b/firmware/controllers/core/fsio_core.h index 495c44e422..e5186cdd09 100644 --- a/firmware/controllers/core/fsio_core.h +++ b/firmware/controllers/core/fsio_core.h @@ -56,7 +56,7 @@ typedef enum { LE_METHOD_FSIO_DIGITAL_INPUT = 123, LE_METHOD_FSIO_SETTING = 124, LE_METHOD_PPS = 125, - LE_METHOD_TIME_SINCE_TRIGGER_EVENT = 126, + LE_METHOD_TIME_SINCE_TRIGGER_EVENT = 127, #include "fsio_enums_generated.def" diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index cecf490754..0e240fcf86 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -537,11 +537,15 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_ this->currentLogicValue = 0; +#endif // briefly leave the include guard because we need to set default state in tests + // The order of the next two calls may look strange, which is a good observation. // We call them in this order so that the pin is set to a known state BEFORE // it's enabled. Enabling the pin then setting it could result in a (brief) // mystery state being driven on the pin (potentially dangerous). setDefaultPinState(outputMode); + +#if EFI_GPIO_HARDWARE && EFI_PROD_CODE efiSetPadMode(msg, brainPin, mode); if (brain_pin_is_onchip(brainPin)) { int actualValue = palReadPad(port, pin); diff --git a/firmware/controllers/system_fsio.h b/firmware/controllers/system_fsio.h index 2deef3456b..c17f44bc96 100644 --- a/firmware/controllers/system_fsio.h +++ b/firmware/controllers/system_fsio.h @@ -18,8 +18,8 @@ // Human-readable: (fan and (coolant > cfg_fanOffTemperature)) | (coolant > cfg_fanOnTemperature) | is_clt_broken #define FAN_CONTROL_LOGIC "fan coolant cfg_fanofftemperature > and coolant cfg_fanontemperature > | is_clt_broken |" -// Human-readable: ((time_since_boot >= 0) & (time_since_boot < startup_fuel_pump_duration)) | (rpm > 0) -#define FUEL_PUMP_LOGIC "time_since_boot 0 >= time_since_boot startup_fuel_pump_duration < & rpm 0 > |" +// Human-readable: ((time_since_boot >= 0) & (time_since_boot < startup_fuel_pump_duration)) | (time_since_trigger > 0) +#define FUEL_PUMP_LOGIC "time_since_boot 0 >= time_since_boot startup_fuel_pump_duration < & time_since_trigger 1 < |" // Human-readable: vbatt < 14.5 #define ALTERNATOR_LOGIC "vbatt 14.5 <" diff --git a/firmware/controllers/system_fsio.txt b/firmware/controllers/system_fsio.txt index c412cade89..f12e75fe23 100644 --- a/firmware/controllers/system_fsio.txt +++ b/firmware/controllers/system_fsio.txt @@ -18,7 +18,7 @@ FAN_CONTROL_LOGIC=(fan and (coolant > cfg_fanOffTemperature)) | (coolant > cfg_f # todo: 'time_since_boot' means 'getTimeIgnitionSeconds' in case of EFI_MAIN_RELAY_CONTROL like Proteus # and it's negative if ignition is off? does Proteus not get fuel pump start-up priming pulse?! # -FUEL_PUMP_LOGIC=((time_since_boot >= 0) & (time_since_boot < startup_fuel_pump_duration)) | (rpm > 0) +FUEL_PUMP_LOGIC=((time_since_boot >= 0) & (time_since_boot < startup_fuel_pump_duration)) | (time_since_trigger < 1) ALTERNATOR_LOGIC=vbatt < 14.5 diff --git a/unit_tests/efifeatures.h b/unit_tests/efifeatures.h index a37e6eb3ca..d59d187ce0 100644 --- a/unit_tests/efifeatures.h +++ b/unit_tests/efifeatures.h @@ -71,3 +71,5 @@ #define EFI_JOYSTICK FALSE #define EFI_MAP_AVERAGING TRUE + +#define EFI_FUEL_PUMP TRUE diff --git a/unit_tests/tests/test_logic_expression.cpp b/unit_tests/tests/test_logic_expression.cpp index fc7050ce47..2ad4bb3fdc 100644 --- a/unit_tests/tests/test_logic_expression.cpp +++ b/unit_tests/tests/test_logic_expression.cpp @@ -27,6 +27,10 @@ FsioValue getEngineValue(le_action_e action DECLARE_ENGINE_PARAMETER_SUFFIX) { return engine->fsioState.mockCrankingRpm; case LE_METHOD_TIME_SINCE_BOOT: return engine->fsioState.mockTimeSinceBoot; + case LE_METHOD_STARTUP_FUEL_PUMP_DURATION: + return 2.0f; + case LE_METHOD_TIME_SINCE_TRIGGER_EVENT: + return engine->fsioState.mockTimeSinceTrigger; case LE_METHOD_VBATT: return 12; case LE_METHOD_AC_TOGGLE: @@ -299,3 +303,41 @@ TEST(fsio, testLogicExpressions) { testExpression2(0, "rpm cranking_rpm > ", 1, engine); } } + +TEST(fsio, fuelPump) { + // this will init fuel pump fsio logic + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // Mock a fuel pump pin + CONFIG(fuelPumpPin) = GPIOA_0; + // Re-init so it picks up the new config + enginePins.fuelPumpRelay.init(PASS_ENGINE_PARAMETER_SIGNATURE); + + // ECU just started, haven't seen trigger yet + engine->fsioState.mockTimeSinceBoot = 0.5f; + engine->fsioState.mockTimeSinceTrigger = 100; + runFsio(PASS_ENGINE_PARAMETER_SIGNATURE); + // Pump should be on! + EXPECT_TRUE(efiReadPin(GPIOA_0)); + + // Long time since ecu start, haven't seen trigger yet + engine->fsioState.mockTimeSinceBoot = 60; + engine->fsioState.mockTimeSinceTrigger = 100; + runFsio(PASS_ENGINE_PARAMETER_SIGNATURE); + // Pump should be off! + EXPECT_FALSE(efiReadPin(GPIOA_0)); + + // Long time since ecu start, just saw a trigger! + engine->fsioState.mockTimeSinceBoot = 60; + engine->fsioState.mockTimeSinceTrigger = 0.1f; + runFsio(PASS_ENGINE_PARAMETER_SIGNATURE); + // Pump should be on! + EXPECT_TRUE(efiReadPin(GPIOA_0)); + + // ECU just started, and we just saw a trigger! + engine->fsioState.mockTimeSinceBoot = 0.5f; + engine->fsioState.mockTimeSinceTrigger = 0.1f; + runFsio(PASS_ENGINE_PARAMETER_SIGNATURE); + // Pump should be on! + EXPECT_TRUE(efiReadPin(GPIOA_0)); +} From e0c7d550f46ba84cfb3d3b90cfbbc7b6570419e5 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 10 Dec 2020 13:05:52 -0600 Subject: [PATCH 5/5] sd log afr 2 (#2052) --- firmware/console/binary_log/binary_logging.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/console/binary_log/binary_logging.cpp b/firmware/console/binary_log/binary_logging.cpp index f8b4cce980..0c33de01f0 100644 --- a/firmware/console/binary_log/binary_logging.cpp +++ b/firmware/console/binary_log/binary_logging.cpp @@ -31,7 +31,9 @@ static const LogField fields[] = { {tsOutputChannels.pedalPosition, GAUGE_NAME_THROTTLE_PEDAL, "%", 2}, {tsOutputChannels.manifoldAirPressure, GAUGE_NAME_MAP, "kPa", 1}, {tsOutputChannels.airFuelRatio, GAUGE_NAME_AFR, "afr", 2}, + {tsOutputChannels.airFuelRatio2, GAUGE_NAME_AFR2, "afr", 2}, {tsOutputChannels.lambda, GAUGE_NAME_LAMBDA, "", 3}, + {tsOutputChannels.lambda2, GAUGE_NAME_LAMBDA2, "", 3}, {tsOutputChannels.vBatt, GAUGE_NAME_VBAT, "v", 2}, {tsOutputChannels.oilPressure, GAUGE_NAME_OIL_PRESSURE, GAUGE_NAME_FUEL_PRESSURE_HIGH_UNITS, 0}, {tsOutputChannels.lowFuelPressure, GAUGE_NAME_FUEL_PRESSURE_LOW, GAUGE_NAME_FUEL_PRESSURE_LOW_UNITS, 0},