From 376bbc4abee91c6a4934443246c2d4850207c5c7 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 3 Nov 2023 21:57:23 -0700 Subject: [PATCH] simplify what goes across JNI --- .../com/rusefi/maintenance/OpenbltJni.java | 5 +- .../rusefi/maintenance/ProgramSelector.java | 6 +-- misc/openblt_jni/openblt_jni.cpp | 47 +++++++++++++++---- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/OpenbltJni.java b/java_console/ui/src/main/java/com/rusefi/maintenance/OpenbltJni.java index dffebcf4d1..e70065590c 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/OpenbltJni.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/OpenbltJni.java @@ -14,9 +14,6 @@ public final class OpenbltJni { System.loadLibrary("openblt_jni"); } - public static native void loadFirmware(String filename, OpenbltCallbacks callbacks); - public static native void sessionStart(String serialPort, OpenbltCallbacks callbacks); - public static native void erase(OpenbltCallbacks callbacks); - public static native void program(OpenbltCallbacks callbacks); + public static native void flashSerial(String filename, String serialPort, OpenbltCallbacks callbacks); public static native void stop(OpenbltCallbacks callbacks); } diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java b/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java index b436e6b148..a450fe8aaf 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java @@ -231,11 +231,9 @@ public class ProgramSelector { }; try { - OpenbltJni.loadFirmware("../fome_update.srec", cb); - OpenbltJni.sessionStart(port, cb); - OpenbltJni.erase(cb); - OpenbltJni.program(cb); + OpenbltJni.flashSerial("../fome_update.srec", port, cb); + callbacks.log("Update completed successfully!"); callbacks.done(); } catch (Throwable e) { callbacks.log("Error: " + e.toString()); diff --git a/misc/openblt_jni/openblt_jni.cpp b/misc/openblt_jni/openblt_jni.cpp index ad2ef3a443..941a829627 100644 --- a/misc/openblt_jni/openblt_jni.cpp +++ b/misc/openblt_jni/openblt_jni.cpp @@ -55,7 +55,7 @@ private: } }; -extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_loadFirmware(JNIEnv* env, jobject, jstring jFilename, jobject jCallbacks) { +static bool loadFirmware(JNIEnv* env, jstring jFilename, jobject jCallbacks) { Callbacks cb(env, jCallbacks, "Load firmware file", false); const char* filename = env->GetStringUTFChars(jFilename, 0); @@ -64,7 +64,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_loadFir if (BltFirmwareLoadFromFile(filename, 0) != BLT_RESULT_OK) { cb.error("BltFirmwareLoadFromFile() not OK, failed to load firmware file."); - return; + return false; } env->ReleaseStringUTFChars(jFilename, filename); @@ -72,15 +72,17 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_loadFir // Check that the file isn't empty if (BltFirmwareGetSegmentCount() == 0) { cb.error("BltFirmwareGetSegmentCount() returned 0"); - return; + return false; } + + return true; } static tBltSessionSettingsXcpV10 xcpSettings; static tBltTransportSettingsXcpV10Rs232 transportSettings; static char s_portName[256]; -extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_sessionStart(JNIEnv* env, jobject, jstring jSerialPort, jobject jCallbacks) { +static bool setupSerial(JNIEnv* env, jstring jSerialPort, jobject jCallbacks) { Callbacks cb(env, jCallbacks, "Start session", false); xcpSettings.timeoutT1 = 1000; @@ -103,10 +105,13 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_session if (BltSessionStart() != BLT_RESULT_OK) { cb.error("BltSessionStart() failed"); + return false; } + + return true; } -extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_erase(JNIEnv* env, jobject, jobject jCallbacks) { +static bool erase(JNIEnv* env, jobject jCallbacks) { Callbacks cb(env, jCallbacks, "Erase", true); int result = 0; @@ -126,7 +131,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_erase(J if ((segmentData == nullptr) || (segmentLen == 0)) { cb.error("BltFirmwareGetSegment not OK"); - return; + return false; } /* Perform erase operation. */ @@ -158,7 +163,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_erase(J if (currentEraseResult != BLT_RESULT_OK) { cb.error("BltSessionClearMemory not OK"); - return; + return false; } /* Update loop variables. */ currentEraseBase += currentEraseCnt; @@ -168,9 +173,11 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_erase(J cb.updateProgress(progressPct); } } + + return true; } -extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_program(JNIEnv* env, jobject, jobject jCallbacks) { +static bool program(JNIEnv* env, jobject jCallbacks) { Callbacks cb(env, jCallbacks, "Program", true); uint32_t segmentIdx; @@ -189,7 +196,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_program // Only continue if sanity check passed. if ((segmentData == nullptr) || (segmentLen == 0)) { cb.error("BltFirmwareGetSegment not OK"); - return; + return false; } /* Perform write operation in chunks, so that a progress update can be shown. */ @@ -220,7 +227,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_program if (currentWriteResult != BLT_RESULT_OK) { cb.error("BltSessionWriteData not OK"); - return; + return false; } /* Update loop variables. */ @@ -235,6 +242,26 @@ extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_program lastPercent = progressPct; } } + + return true; +} + +extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_flashSerial(JNIEnv* env, jobject, jstring jFirmwareFile, jstring jSerialPort, jobject jCallbacks) { + if (!loadFirmware(env, jFirmwareFile, jCallbacks)) { + return; + } + + if (!setupSerial(env, jSerialPort, jCallbacks)) { + return; + } + + if (!erase(env, jCallbacks)) { + return; + } + + if (!program(env, jCallbacks)) { + return; + } } extern "C" JNIEXPORT void JNICALL Java_com_rusefi_maintenance_OpenbltJni_stop(JNIEnv* env, jobject, jobject jCallbacks) {