diff --git a/firmware/controllers/can/can.h b/firmware/controllers/can/can.h index f16077534f..76219ca792 100644 --- a/firmware/controllers/can/can.h +++ b/firmware/controllers/can/can.h @@ -7,11 +7,10 @@ #pragma once -#if ! EFI_PROD_CODE +#if !EFI_PROD_CODE || !EFI_CAN_SUPPORT #include "can_mocks.h" #endif // EFI_PROD_CODE - #if !EFI_UNIT_TEST #include "hal.h" #endif // EFI_UNIT_TEST diff --git a/firmware/controllers/lua/lua_can_rx.cpp b/firmware/controllers/lua/lua_can_rx.cpp index aa81bef5bc..ab82a9d699 100644 --- a/firmware/controllers/lua/lua_can_rx.cpp +++ b/firmware/controllers/lua/lua_can_rx.cpp @@ -3,7 +3,6 @@ #if EFI_CAN_SUPPORT #include "rusefi_lua.h" -#include "can.h" static constexpr size_t maxFilterCount = 48; diff --git a/firmware/controllers/lua/rusefi_lua.h b/firmware/controllers/lua/rusefi_lua.h index 14b452519b..cb056e4365 100644 --- a/firmware/controllers/lua/rusefi_lua.h +++ b/firmware/controllers/lua/rusefi_lua.h @@ -53,6 +53,9 @@ void testLuaExecString(const char* script); #endif #if EFI_CAN_SUPPORT + +#include "can.h" + // Lua CAN rx feature void initLuaCanRx(); // Called when the user script is unloaded, resets any CAN rx filters diff --git a/firmware/controllers/sensors/AemXSeriesLambda.cpp b/firmware/controllers/sensors/AemXSeriesLambda.cpp index 926466c104..e880679a4b 100644 --- a/firmware/controllers/sensors/AemXSeriesLambda.cpp +++ b/firmware/controllers/sensors/AemXSeriesLambda.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#if EFI_CAN_SUPPORT +#if EFI_CAN_SUPPORT || EFI_UNIT_TEST #include "AemXSeriesLambda.h" AemXSeriesWideband::AemXSeriesWideband(uint8_t sensorIndex, SensorType type) diff --git a/firmware/controllers/sensors/can_sensor.h b/firmware/controllers/sensors/can_sensor.h index f4394e1acb..970705ee0e 100644 --- a/firmware/controllers/sensors/can_sensor.h +++ b/firmware/controllers/sensors/can_sensor.h @@ -9,7 +9,6 @@ #include "stored_value_sensor.h" #include "scaled_channel.h" -#include "hal.h" #include "can_msg_tx.h" #include "obd2.h" #include "can.h" @@ -54,6 +53,8 @@ private: const uint8_t m_offset; }; +#if EFI_PROD_CODE + template class ObdCanSensor: public CanSensorBase { public: @@ -95,3 +96,5 @@ public: int PID; float Scale; }; + +#endif // EFI_PROD_CODE diff --git a/firmware/controllers/sensors/sensor_info_printing.cpp b/firmware/controllers/sensors/sensor_info_printing.cpp index bc1c2b439d..0baac735de 100644 --- a/firmware/controllers/sensors/sensor_info_printing.cpp +++ b/firmware/controllers/sensors/sensor_info_printing.cpp @@ -24,7 +24,7 @@ void FunctionalSensor::showInfo(const char* sensorName) const { } } -#if EFI_CAN_SUPPORT +#if EFI_CAN_SUPPORT || EFI_UNIT_TEST #include "can_sensor.h" void CanSensorBase::showInfo(const char* sensorName) const { diff --git a/unit_tests/tests/test_can_wideband.cpp b/unit_tests/tests/test_can_wideband.cpp new file mode 100644 index 0000000000..f4d40ab89d --- /dev/null +++ b/unit_tests/tests/test_can_wideband.cpp @@ -0,0 +1,57 @@ +#include "pch.h" + +#include "AemXSeriesLambda.h" + +using ::testing::StrictMock; +using ::testing::_; + +TEST(CanWideband, DecodeValid) { + Sensor::resetRegistry(); + + AemXSeriesWideband dut(0, SensorType::Lambda1); + dut.Register(); + + // check not set + EXPECT_FLOAT_EQ(-1, Sensor::get(SensorType::Lambda1).value_or(-1)); + + CANRxFrame frame; + + frame.SID = 0x180; + frame.IDE = false; + + frame.DLC = 8; + + frame.data8[0] = 0x1F; // 8000, lambda 0.8 + frame.data8[1] = 0x40; + frame.data8[2] = 0; + frame.data8[3] = 0; + frame.data8[4] = 0; + frame.data8[5] = 0; + frame.data8[6] = + 1 << 1 | // LSU 4.9 detected + 1 << 7; // Data valid + frame.data8[7] = 0; + + // check that lambda updates + dut.processFrame(frame, getTimeNowNt()); + EXPECT_FLOAT_EQ(0.8f, Sensor::get(SensorType::Lambda1).value_or(-1)); + + + // Now check invalid data + frame.data8[6] = + 1 << 1 | // LSU 4.9 detected + 0 << 7; // Data INVALID + + dut.processFrame(frame, getTimeNowNt()); + EXPECT_FLOAT_EQ(-1, Sensor::get(SensorType::Lambda1).value_or(-1)); + + + // Now check sensor fault + frame.data8[6] = + 1 << 1 | // LSU 4.9 detected + 1 << 7; // Data valid + frame.data8[7] = 1 << 6; // Sensor fault! + + dut.processFrame(frame, getTimeNowNt()); + EXPECT_FLOAT_EQ(-1, Sensor::get(SensorType::Lambda1).value_or(-1)); +} diff --git a/unit_tests/tests/tests.mk b/unit_tests/tests/tests.mk index bca6291a46..1d5915638a 100644 --- a/unit_tests/tests/tests.mk +++ b/unit_tests/tests/tests.mk @@ -86,6 +86,7 @@ TESTS_SRC_CPP = \ tests/trigger/test_all_triggers.cpp \ tests/test_can_rx.cpp \ tests/test_can_serial.cpp \ + tests/test_can_wideband.cpp \ tests/test_hellen_board_id.cpp \ tests/sensor/test_frequency_sensor.cpp \ tests/sensor/test_turbocharger_speed_converter.cpp \