frame some actual JNI out

This commit is contained in:
Matthew Kennedy 2023-11-03 16:17:02 -07:00 committed by rusefillc
parent 72ff326a32
commit 39297f3a7b
2 changed files with 23 additions and 22 deletions

View File

@ -4,16 +4,17 @@ project(OpenBLTJni)
set(CMAKE_BUILD_TYPE "Debug")
find_package(Java COMPONENTS Development)
set(JAVA_AWT_INCLUDE_PATH NotNeeded)
find_package(JNI REQUIRED)
# Set OpenBLT library related directory locations
set(LIBOPENBLT_LIB ${PROJECT_SOURCE_DIR}/../../firmware/ext/openblt/Host/)
set(LIBOPENBLT_INC ${LIBOPENBLT_LIB}/Source/LibOpenBLT)
include_directories("${LIBOPENBLT_INC}")
link_directories("${LIBOPENBLT_LIB}")
add_library(openblt_jni SHARED)
target_include_directories(openblt_jni PRIVATE ${LIBOPENBLT_INC})
target_include_directories(openblt_jni PRIVATE ${JNI_INCLUDE_DIRS})
target_link_libraries(openblt_jni ${LIBOPENBLT_LIBNAME})
target_sources(openblt_jni PRIVATE openblt_jni.cpp)

View File

@ -1,12 +1,15 @@
#include <jni.h>
// OpenBLT host library
#include "openblt.h"
#include <cstring>
extern "C" void loadFirmware(const char* filename)
{
JNIEXPORT void JNICALL com_rusefi_maintenance_OpenbltJni_loadFirmware(JNIEnv* env, jobject, jstring jFilename) {
const char* filename = env->GetStringUTFChars(jFilename, 0);
BltFirmwareInit(BLT_FIRMWARE_PARSER_SRECORD);
if (BltFirmwareLoadFromFile(filename, 0) != BLT_RESULT_OK) {
@ -17,13 +20,15 @@ extern "C" void loadFirmware(const char* filename)
if (BltFirmwareGetSegmentCount() == 0) {
// todo: error handling
}
env->ReleaseStringUTFChars(jFilename, filename);
}
tBltSessionSettingsXcpV10 xcpSettings;
tBltTransportSettingsXcpV10Rs232 transportSettings;
char s_portName[256];
static tBltSessionSettingsXcpV10 xcpSettings;
static tBltTransportSettingsXcpV10Rs232 transportSettings;
static char s_portName[256];
extern "C" void sessionStart(const char* portName) {
JNIEXPORT void JNICALL com_rusefi_maintenance_OpenbltJni_sessionStart(JNIEnv* env, jobject, jstring jSerialPort) {
xcpSettings.timeoutT1 = 1000;
xcpSettings.timeoutT3 = 2000;
xcpSettings.timeoutT4 = 10000;
@ -33,7 +38,10 @@ extern "C" void sessionStart(const char* portName) {
xcpSettings.seedKeyFile = nullptr;
xcpSettings.connectMode = 0;
const char* portName = env->GetStringUTFChars(jSerialPort, 0);
strncpy(s_portName, portName, sizeof(s_portName));
env->ReleaseStringUTFChars(jSerialPort, portName);
transportSettings.portName = s_portName;
transportSettings.baudrate = 115200;
@ -44,7 +52,7 @@ extern "C" void sessionStart(const char* portName) {
}
}
extern "C" void erase() {
JNIEXPORT void JNICALL com_rusefi_maintenance_OpenbltJni_erase(JNIEnv*, jobject) {
int result = 0;
uint32_t segmentIdx;
@ -106,7 +114,7 @@ extern "C" void erase() {
}
}
extern "C" void program() {
JNIEXPORT void JNICALL com_rusefi_maintenance_OpenbltJni_program(JNIEnv*, jobject) {
uint32_t segmentIdx;
uint32_t segmentLen;
uint32_t segmentBase;
@ -166,16 +174,8 @@ extern "C" void program() {
}
}
extern "C" void stop() {
JNIEXPORT void JNICALL com_rusefi_maintenance_OpenbltJni_stop(JNIEnv*, jobject) {
BltSessionStop();
BltSessionTerminate();
BltFirmwareTerminate();
}
int main() {
loadFirmware("fome_update.srec");
sessionStart("COM8");
erase();
program();
stop();
}