From cf63cea45f22a3a5e78f7f7fd97df0170ef537d8 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Nov 2022 02:21:36 -0500 Subject: [PATCH] ETB JNI test progress --- .../actuators/electronic_throttle.cpp | 8 ++++++++ firmware/controllers/engine_controller.cpp | 2 +- .../java/com/rusefi/native_/EngineLogic.java | 2 ++ .../java/com/rusefi/native_/JniUnitTest.java | 20 +++++++++++++++++++ .../native/com_rusefi_native__EngineLogic.h | 8 ++++++++ unit_tests/native/native_impl.cpp | 10 ++++++++++ 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index e299a8082e..8d6b542015 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -223,6 +223,7 @@ void EtbController::onConfigurationChange(pid_s* previousConfiguration) { } m_dutyRocAverage.init(engineConfiguration->etbRocExpAverageLength); m_dutyAverage.init(engineConfiguration->etbExpAverageLength); + doInitElectronicThrottle(); } void EtbController::showStatus() { @@ -555,10 +556,12 @@ void EtbController::setOutput(expected outputValue) { } void EtbController::update() { +#if !EFI_UNIT_TEST // If we didn't get initialized, fail fast if (!m_motor) { return; } +#endif // EFI_UNIT_TEST #if EFI_TUNER_STUDIO // Only debug throttle #1 @@ -944,6 +947,11 @@ static pid_s* getEtbPidForFunction(etb_function_e function) { void doInitElectronicThrottle() { bool shouldInitThrottles = Sensor::hasSensor(SensorType::AcceleratorPedalPrimary); + +#if EFI_UNIT_TEST + printf("doInitElectronicThrottle %s\n", boolToString(shouldInitThrottles)); +#endif // EFI_UNIT_TEST + engineConfiguration->etb1configured = engineConfiguration->etb2configured = false; // todo: technical debt: we still have DC motor code initialization in ETB-specific file while DC motors are used not just as ETB diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index b7e78715f2..b5372fd11b 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -400,7 +400,7 @@ static void initConfigActions() { void commonInitEngineController() { initInterpolation(); -#if EFI_SIMULATOR +#if EFI_SIMULATOR || EFI_UNIT_TEST printf("commonInitEngineController\n"); #endif diff --git a/java_console/io/src/main/java/com/rusefi/native_/EngineLogic.java b/java_console/io/src/main/java/com/rusefi/native_/EngineLogic.java index ebfcc318bc..f7b156beb5 100644 --- a/java_console/io/src/main/java/com/rusefi/native_/EngineLogic.java +++ b/java_console/io/src/main/java/com/rusefi/native_/EngineLogic.java @@ -17,6 +17,8 @@ public class EngineLogic { public native void setEngineType(int engineType); + public native void initTps(); + public native void invokePeriodicCallback(); public native void invokeEtbCycle(); diff --git a/java_console/io/src/test/java/com/rusefi/native_/JniUnitTest.java b/java_console/io/src/test/java/com/rusefi/native_/JniUnitTest.java index fb853ea061..619cc0b334 100644 --- a/java_console/io/src/test/java/com/rusefi/native_/JniUnitTest.java +++ b/java_console/io/src/test/java/com/rusefi/native_/JniUnitTest.java @@ -51,6 +51,26 @@ public class JniUnitTest { JniSandbox.loadLibrary(); EngineLogic engineLogic = new EngineLogic(); + + engineLogic.setSensor(SensorType.Tps1Primary.name(), 30); + engineLogic.setSensor(SensorType.Tps1Secondary.name(), 30); + + engineLogic.burnRequest(); // hack: this is here to initialize engine helper prior to mocking sensors + + engineLogic.setSensor(SensorType.AcceleratorPedalPrimary.name(), 40); + engineLogic.setSensor(SensorType.AcceleratorPedalSecondary.name(), 40); + + engineLogic.setConfiguration(new byte[]{3}, Fields.TPS1_1ADCCHANNEL.getTotalOffset(), 1); + engineLogic.setConfiguration(new byte[]{3}, Fields.TPS1_2ADCCHANNEL.getTotalOffset(), 1); + engineLogic.setConfiguration(new byte[]{3}, Fields.THROTTLEPEDALPOSITIONADCCHANNEL.getTotalOffset(), 1); + engineLogic.setConfiguration(new byte[]{3}, Fields.THROTTLEPEDALPOSITIONSECONDADCCHANNEL.getTotalOffset(), 1); + + engineLogic.initTps(); + engineLogic.burnRequest(); + System.out.println("engineLogic.invokeEtbCycle"); + engineLogic.invokeEtbCycle(); + + assertEquals(120.36, getValue(engineLogic.getOutputs(), Sensor.etb1DutyCycle)); } private double getField(EngineLogic engineLogic, Field field) { diff --git a/unit_tests/native/com_rusefi_native__EngineLogic.h b/unit_tests/native/com_rusefi_native__EngineLogic.h index 6cbb45dae9..b7d92fa91c 100644 --- a/unit_tests/native/com_rusefi_native__EngineLogic.h +++ b/unit_tests/native/com_rusefi_native__EngineLogic.h @@ -47,6 +47,14 @@ JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_setConfiguration JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_setEngineType (JNIEnv *, jobject, jint); +/* + * Class: com_rusefi_native__EngineLogic + * Method: initTps + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_initTps + (JNIEnv *, jobject); + /* * Class: com_rusefi_native__EngineLogic * Method: invokePeriodicCallback diff --git a/unit_tests/native/native_impl.cpp b/unit_tests/native/native_impl.cpp index d9b3c32cf9..fbfc89c112 100644 --- a/unit_tests/native/native_impl.cpp +++ b/unit_tests/native/native_impl.cpp @@ -10,6 +10,7 @@ #include "auto_generated_sensor.h" #include "tunerstudio.h" #include "live_data.h" +#include "init.h" #include @@ -17,6 +18,7 @@ static std::unique_ptr ethPtr; static EngineTestHelper* getEth() { if (!ethPtr) { + printf("make_unique(TEST_ENGINE)\n"); ethPtr = std::make_unique(TEST_ENGINE); } return ethPtr.get(); @@ -97,9 +99,17 @@ JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_invokeEtbCycle JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_burnRequest (JNIEnv *, jobject) { printf("[native] onBurnRequest\n"); + getEth();// just to make sure we have initialized onBurnRequest(); } +JNIEXPORT void JNICALL Java_com_rusefi_native_1_EngineLogic_initTps + (JNIEnv *, jobject) { + printf("[native] initTps\n"); + getEth();// just to make sure we have initialized + initTps(); +} + JNIEXPORT jbyteArray JNICALL Java_com_rusefi_native_1_EngineLogic_getOutputs(JNIEnv * env, jobject instance) { jbyteArray retVal = env->NewByteArray(TS_TOTAL_OUTPUT_SIZE); jbyte *buf = env->GetByteArrayElements(retVal, NULL);