mirror of https://github.com/rusefi/rusefi-1.git
test AEM X-Series wideband protocol (#4002)
* break out acceptFrame, test CanListener * test AEM xseries protocol * tweaks * tweaks * maybe everyone compiles happily now
This commit is contained in:
parent
cd2d93bc39
commit
4e57daf6d7
|
@ -7,11 +7,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if ! EFI_PROD_CODE
|
#if !EFI_PROD_CODE || !EFI_CAN_SUPPORT
|
||||||
#include "can_mocks.h"
|
#include "can_mocks.h"
|
||||||
#endif // EFI_PROD_CODE
|
#endif // EFI_PROD_CODE
|
||||||
|
|
||||||
|
|
||||||
#if !EFI_UNIT_TEST
|
#if !EFI_UNIT_TEST
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
#endif // EFI_UNIT_TEST
|
#endif // EFI_UNIT_TEST
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#if EFI_CAN_SUPPORT
|
#if EFI_CAN_SUPPORT
|
||||||
|
|
||||||
#include "rusefi_lua.h"
|
#include "rusefi_lua.h"
|
||||||
#include "can.h"
|
|
||||||
|
|
||||||
static constexpr size_t maxFilterCount = 48;
|
static constexpr size_t maxFilterCount = 48;
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,9 @@ void testLuaExecString(const char* script);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EFI_CAN_SUPPORT
|
#if EFI_CAN_SUPPORT
|
||||||
|
|
||||||
|
#include "can.h"
|
||||||
|
|
||||||
// Lua CAN rx feature
|
// Lua CAN rx feature
|
||||||
void initLuaCanRx();
|
void initLuaCanRx();
|
||||||
// Called when the user script is unloaded, resets any CAN rx filters
|
// Called when the user script is unloaded, resets any CAN rx filters
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
|
||||||
#if EFI_CAN_SUPPORT
|
#if EFI_CAN_SUPPORT || EFI_UNIT_TEST
|
||||||
#include "AemXSeriesLambda.h"
|
#include "AemXSeriesLambda.h"
|
||||||
|
|
||||||
AemXSeriesWideband::AemXSeriesWideband(uint8_t sensorIndex, SensorType type)
|
AemXSeriesWideband::AemXSeriesWideband(uint8_t sensorIndex, SensorType type)
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
#include "stored_value_sensor.h"
|
#include "stored_value_sensor.h"
|
||||||
#include "scaled_channel.h"
|
#include "scaled_channel.h"
|
||||||
#include "hal.h"
|
|
||||||
#include "can_msg_tx.h"
|
#include "can_msg_tx.h"
|
||||||
#include "obd2.h"
|
#include "obd2.h"
|
||||||
#include "can.h"
|
#include "can.h"
|
||||||
|
@ -54,6 +53,8 @@ private:
|
||||||
const uint8_t m_offset;
|
const uint8_t m_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if EFI_PROD_CODE
|
||||||
|
|
||||||
template <int Size, int Offset>
|
template <int Size, int Offset>
|
||||||
class ObdCanSensor: public CanSensorBase {
|
class ObdCanSensor: public CanSensorBase {
|
||||||
public:
|
public:
|
||||||
|
@ -95,3 +96,5 @@ public:
|
||||||
int PID;
|
int PID;
|
||||||
float Scale;
|
float Scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif // EFI_PROD_CODE
|
||||||
|
|
|
@ -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"
|
#include "can_sensor.h"
|
||||||
|
|
||||||
void CanSensorBase::showInfo(const char* sensorName) const {
|
void CanSensorBase::showInfo(const char* sensorName) const {
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
|
@ -86,6 +86,7 @@ TESTS_SRC_CPP = \
|
||||||
tests/trigger/test_all_triggers.cpp \
|
tests/trigger/test_all_triggers.cpp \
|
||||||
tests/test_can_rx.cpp \
|
tests/test_can_rx.cpp \
|
||||||
tests/test_can_serial.cpp \
|
tests/test_can_serial.cpp \
|
||||||
|
tests/test_can_wideband.cpp \
|
||||||
tests/test_hellen_board_id.cpp \
|
tests/test_hellen_board_id.cpp \
|
||||||
tests/sensor/test_frequency_sensor.cpp \
|
tests/sensor/test_frequency_sensor.cpp \
|
||||||
tests/sensor/test_turbocharger_speed_converter.cpp \
|
tests/sensor/test_turbocharger_speed_converter.cpp \
|
||||||
|
|
Loading…
Reference in New Issue