diff --git a/firmware/console/binary/tooth_logger.cpp b/firmware/console/binary/tooth_logger.cpp index 9226e23df1..c13942d80f 100644 --- a/firmware/console/binary/tooth_logger.cpp +++ b/firmware/console/binary/tooth_logger.cpp @@ -55,6 +55,25 @@ int getCompositeRecordCount() { return NextIdx; } + +#if EFI_UNIT_TEST +#include "logicdata.h" +int copyCompositeEvents(CompositeEvent *events) { + for (int i = 0;i < NextIdx;i++) { + CompositeEvent *event = &events[i]; + event->timestamp = buffer[i].timestamp; + event->primaryTrigger = buffer[i].priLevel; + event->secondaryTrigger = buffer[i].secLevel; + event->trg = buffer[i].trigger; + event->sync = buffer[i].sync; + event->coil = buffer[i].coil; + event->injector = buffer[i].injector; + } + return NextIdx; +} + +#endif // EFI_UNIT_TEST + static void SetNextCompositeEntry(efitick_t timestamp, bool trigger1, bool trigger2, bool isTDC DECLARE_ENGINE_PARAMETER_SUFFIX) { uint32_t nowUs = NT2US(timestamp); diff --git a/firmware/console/binary/tooth_logger.h b/firmware/console/binary/tooth_logger.h index be0c07f1a6..5c91d0c53d 100644 --- a/firmware/console/binary/tooth_logger.h +++ b/firmware/console/binary/tooth_logger.h @@ -13,6 +13,11 @@ #include "rusefi_enums.h" #include "engine.h" +#if EFI_UNIT_TEST +#include "logicdata.h" +int copyCompositeEvents(CompositeEvent *events); +#endif // EFI_UNIT_TEST + int getCompositeRecordCount(); void EnableToothLoggerIfNotEnabled(); diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index bfcf90a5ee..9d03274804 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -15,6 +15,8 @@ #include "engine_controller.h" #include "advance_map.h" #include "sensor.h" +#include "tooth_logger.h" +#include "logicdata.h" extern int timeNowUs; extern WarningCodeState unitTestWarningCodeState; @@ -25,6 +27,7 @@ extern bool printFuelDebug; EngineTestHelperBase::EngineTestHelperBase() { // todo: make this not a global variable, we need currentTimeProvider interface on engine timeNowUs = 0; + EnableToothLogger(); } EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callback_t boardCallback) @@ -86,6 +89,18 @@ EngineTestHelper::~EngineTestHelper() { Sensor::resetRegistry(); } +static CompositeEvent compositeEvents[COMPOSITE_PACKET_COUNT]; + +void EngineTestHelper::writeEvents(const char *fileName) { + int count = copyCompositeEvents(compositeEvents); + if (count < 2) { + printf("Not enough data for %s\n", fileName); + return; + } + printf("Writing %d records to %s\n", count, fileName); + writeFile(fileName, compositeEvents, count); +} + /** * mock a change of time and fire single RISE front event */ @@ -98,7 +113,11 @@ void EngineTestHelper::fireRise(float delayMs) { * fire single RISE front event */ void EngineTestHelper::firePrimaryTriggerRise() { - engine.triggerCentral.handleShaftSignal(SHAFT_PRIMARY_RISING, getTimeNowNt(), &engine, engine.engineConfigurationPtr, &persistentConfig); + efitick_t nowNt = getTimeNowNt(); + Engine *engine = &this->engine; + EXPAND_Engine; + LogTriggerTooth(SHAFT_PRIMARY_RISING, nowNt PASS_ENGINE_PARAMETER_SUFFIX); + engine->triggerCentral.handleShaftSignal(SHAFT_PRIMARY_RISING, nowNt, engine, engine->engineConfigurationPtr, &persistentConfig); } void EngineTestHelper::fireFall(float delayMs) { @@ -107,7 +126,11 @@ void EngineTestHelper::fireFall(float delayMs) { } void EngineTestHelper::firePrimaryTriggerFall() { - engine.triggerCentral.handleShaftSignal(SHAFT_PRIMARY_FALLING, getTimeNowNt(), &engine, engine.engineConfigurationPtr, &persistentConfig); + efitick_t nowNt = getTimeNowNt(); + Engine *engine = &this->engine; + EXPAND_Engine; + LogTriggerTooth(SHAFT_PRIMARY_FALLING, nowNt PASS_ENGINE_PARAMETER_SUFFIX); + engine->triggerCentral.handleShaftSignal(SHAFT_PRIMARY_FALLING, nowNt, engine, engine->engineConfigurationPtr, &persistentConfig); } void EngineTestHelper::fireTriggerEventsWithDuration(float durationMs) { diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index d2a27291a1..494c533907 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -68,6 +68,8 @@ public: void moveTimeForwardUs(int deltaTimeUs); efitimeus_t getTimeNowUs(void); + void writeEvents(const char *fileName); + Engine engine; persistent_config_s persistentConfig; }; diff --git a/unit_tests/logicdata_sandbox.cpp b/unit_tests/logicdata_sandbox.cpp index 02e303b564..57a871d577 100644 --- a/unit_tests/logicdata_sandbox.cpp +++ b/unit_tests/logicdata_sandbox.cpp @@ -1,3 +1,7 @@ +/** + * @file logicdata_sandbox.cpp + * + */ #include #include "logicdata.h" diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index 221c8f7f67..31894e7583 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -35,6 +35,9 @@ TEST(fuelControl, transitionIssue1592) { ASSERT_EQ(IM_SIMULTANEOUS, ENGINE(getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE))); + + eth.writeEvents("transitionIssue1592.logicdata"); + }