diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index b42920c5f4..0b9c20cb00 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -127,7 +127,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { obdSendValue(_1_MODE, pid, 1, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f); break; case PID_COOLANT_TEMP: - obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f); + obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + ODB_TEMP_EXTRA); break; case PID_STFT_BANK1: obdSendValue(_1_MODE, pid, 1, 128 * ENGINE(engineState.running.pidCorrection)); @@ -148,7 +148,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { break; } case PID_INTAKE_TEMP: - obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Iat).value_or(0) + 40.0f); + obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Iat).value_or(0) + ODB_TEMP_EXTRA); break; case PID_INTAKE_MAF: obdSendValue(_1_MODE, pid, 2, getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) * 100.0f); // grams/sec (A*256+B)/100 diff --git a/firmware/controllers/can/obd2.h b/firmware/controllers/can/obd2.h index a99c498594..1d592b3338 100644 --- a/firmware/controllers/can/obd2.h +++ b/firmware/controllers/can/obd2.h @@ -44,3 +44,4 @@ void obdOnCanPacketRx(const CANRxFrame& rx); #endif /* HAL_USE_CAN */ #define ODB_RPM_MULT 4 +#define ODB_TEMP_EXTRA 40 diff --git a/firmware/controllers/engine_cycle/rpm_calculator.cpp b/firmware/controllers/engine_cycle/rpm_calculator.cpp index 2eba328fb3..f09061973f 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.cpp +++ b/firmware/controllers/engine_cycle/rpm_calculator.cpp @@ -86,7 +86,9 @@ EXTERN_ENGINE; static Logging * logger; -RpmCalculator::RpmCalculator() { +RpmCalculator::RpmCalculator() : + rpmSensor(SensorType::Rpm, 0) + { #if !EFI_PROD_CODE mockRpm = MOCK_UNDEFINED; #endif /* EFI_PROD_CODE */ @@ -132,6 +134,11 @@ void RpmCalculator::assignRpmValue(float floatRpmValue DECLARE_ENGINE_PARAMETER_ previousRpmValue = rpmValue; // we still persist integer RPM! todo: figure out the next steps rpmValue = floatRpmValue; + + if (!CONFIG(consumeObdSensors)) { + rpmSensor.Register(); + } + if (rpmValue <= 0) { oneDegreeUs = NAN; } else { diff --git a/firmware/controllers/engine_cycle/rpm_calculator.h b/firmware/controllers/engine_cycle/rpm_calculator.h index e74197a11c..3e7430dfe4 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.h +++ b/firmware/controllers/engine_cycle/rpm_calculator.h @@ -10,6 +10,7 @@ #include "globalaccess.h" #include "scheduler.h" +#include "stored_value_sensor.h" // we use this value in case of noise on trigger input lines #define NOISY_RPM -1 @@ -65,6 +66,8 @@ public: bool checkIfSpinning(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) const; + StoredValueSensor rpmSensor; + /** * This accessor is used in unit-tests. */ diff --git a/firmware/init/sensor/init_can_sensors.cpp b/firmware/init/sensor/init_can_sensors.cpp index 5e34d862d6..e66ed78f66 100644 --- a/firmware/init/sensor/init_can_sensors.cpp +++ b/firmware/init/sensor/init_can_sensors.cpp @@ -5,12 +5,16 @@ * @author Matthew Kennedy, (c) 2020 */ -#include "global.h" +#include "engine_configuration.h" #if EFI_CAN_SUPPORT #include "can_sensor.h" #include "can.h" +EXTERN_CONFIG +; + + #define TIMEOUT MS2NT(100) CanSensor canPedalSensor( @@ -18,15 +22,24 @@ CanSensor canPedalSensor( SensorType::AcceleratorPedal, TIMEOUT ); -ObdCanSensor obdCltSensor( +ObdCanSensor obdRpmSensor( PID_RPM, SensorType::Rpm, TIMEOUT ); +ObdCanSensor obdCltSensor( + PID_COOLANT_TEMP, + SensorType::Clt, TIMEOUT +); + + void initCanSensors() { #if EFI_CANBUS_SLAVE registerCanSensor(canPedalSensor); - registerCanSensor(obdCltSensor); + if (CONFIG(consumeObdSensors)) { + registerCanSensor(obdRpmSensor); + registerCanSensor(obdCltSensor); + } #endif // EFI_CANBUS_SLAVE } diff --git a/firmware/init/sensor/init_thermistors.cpp b/firmware/init/sensor/init_thermistors.cpp index 269322bab5..cac8c67e51 100644 --- a/firmware/init/sensor/init_thermistors.cpp +++ b/firmware/init/sensor/init_thermistors.cpp @@ -69,15 +69,17 @@ static void configureTempSensor(FunctionalSensor &sensor, } void initThermistors(DECLARE_CONFIG_PARAMETER_SIGNATURE) { - configureTempSensor(clt, + if (!CONFIG(consumeObdSensors)) { + configureTempSensor(clt, fclt, CONFIG(clt), CONFIG(useLinearCltSensor)); - configureTempSensor(iat, + configureTempSensor(iat, fiat, CONFIG(iat), CONFIG(useLinearIatSensor)); + } configureTempSensor(aux1, faux1, diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 8d39da3b42..b558bbf0fe 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -886,7 +886,7 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:1], @@maf_sensor_type_e_enum@ bit enableSoftwareKnock bit verboseVVTDecoding;enable vvt_details bit invertCamVVTSignal;get invertCamVVTSignal - bit consumeObdSensors;enable consumeObdSensors + bit consumeObdSensors;+This property is useful if using rusEFI as TCM or BCM only\nenable consumeObdSensors bit knockBankCyl1,Channel 2,Channel 1; bit knockBankCyl2,Channel 2,Channel 1; bit knockBankCyl3,Channel 2,Channel 1; diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 317e6c90a9..20ee470f51 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1391,7 +1391,7 @@ menuDialog = main subMenu = lcdScreen, "LCD" @@if_ts_show_lcd subMenu = joystickPanel, "Joystick" @@if_ts_show_joystick subMenu = spiFunction, "SPI"@@if_ts_show_spi - subMenu = monitoringSettings, "rusEfi console" + subMenu = monitoringSettings, "rusEFI console" subMenu = std_separator subMenu = canBusMain, "CAN Bus Communication" @@ -1428,7 +1428,7 @@ menuDialog = main menu = "Help" - subMenu = helpGeneral, "rusEfi Info" + subMenu = helpGeneral, "rusEFI Info" [ControllerCommands] @@ -1654,8 +1654,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South + panel = triggerConfiguration_settings, North, { consumeObdSensors == 0 } + panel = triggerInputs, South, { consumeObdSensors == 0 } ; Engine->Injection Settings dialog = injChars, "Injector Settings", yAxis @@ -2587,10 +2587,11 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = canBus, "CAN Bus" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled + field = "consumeObdSensors", consumeObdSensors, { canReadEnabled == 1 && canWriteEnabled == 1} field = "Can Nbc Type", canNbcType field = "Can Baud Rate", canBaudRate field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress + field = "rusEFI CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin @@if_ts_show_can_pins field = "TX pin", canTxPin @@if_ts_show_can_pins @@ -2601,7 +2602,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Can Nbc Type", can2NbcType field = "Can Baud Rate", can2BaudRate field = "Enable rusEFI CAN broadcast", enableVerboseCan2Tx - field = "rusEfi CAN data base address", verboseCan2BaseAddress + field = "rusEFI CAN data base address", verboseCan2BaseAddress field = "Can Sleep Period", can2SleepPeriodMs field = "RX pin", can2RxPin @@if_ts_show_can_pins field = "TX pin", can2TxPin @@if_ts_show_can_pins @@ -2653,7 +2654,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" panel = gpsReceiver @@if_ts_show_gps - dialog = monitoringSettings, "rusEfi Console Settings" + dialog = monitoringSettings, "rusEFI Console Settings" field = "Sensor Sniffer", sensorChartMode field = " Threshold", sensorSnifferRpmThreshold field = " Each X cycle", sensorChartFrequency @@ -2822,7 +2823,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = fsioFormulas, "FSIO Formulas" field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" + field = "#fsioinfo command in rusEFI console could be useful while troubleshooting those" field = "#1", fsioFormulas1 field = "#2", fsioFormulas2 field = "#3", fsioFormulas3 @@ -3013,8 +3014,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" panel = testMisc, East dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" + field = "!These buttons send a command to rusEFI controller to apply preset values" + field = "!Once you send the command, please reconnect to rusEFI controller in order to read fresh values" commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF@@if_show_Frankenso_presets commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP@@if_show_Frankenso_presets commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2@@if_show_Frankenso_presets