From c9a57cfdfa0edda0df5905b954bd0844b06da9f9 Mon Sep 17 00:00:00 2001 From: schlaepfer Date: Tue, 10 Jan 2006 17:00:38 +0000 Subject: [PATCH] - BDI_dll.cpp updated (wrong version was checked in) git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@80 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c --- JNIdll/BDI.dll | Bin 0 -> 39442 bytes JNIdll/BDI_dll.cpp | 347 +++++++++++++++++++++++++++------------------ JNIdll/makefile | 32 ----- 3 files changed, 212 insertions(+), 167 deletions(-) create mode 100644 JNIdll/BDI.dll diff --git a/JNIdll/BDI.dll b/JNIdll/BDI.dll new file mode 100644 index 0000000000000000000000000000000000000000..d794ca31f38af33099f9ddde630fca8de026930b GIT binary patch literal 39442 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 literal 0 HcmV?d00001 diff --git a/JNIdll/BDI_dll.cpp b/JNIdll/BDI_dll.cpp index 3d92399..7ee9e1b 100644 --- a/JNIdll/BDI_dll.cpp +++ b/JNIdll/BDI_dll.cpp @@ -1,13 +1,15 @@ #include #include #include +#include #define EXPORT JNIEXPORT -//#define STACKTRACE_DEPTH 5 -#define NOF_VM_ARGS 5 -//#define PIPEBUFSIZE 4096 -//#define PIPE_TIMEOUT 500 //ms +#define NOF_VM_ARGS 4 + +#define PIPEBUFSIZE 4096 +#define PIPE_TIMEOUT 500 //ms + // Classes #define USB_Device_Class "ch/ntb/mcdp/usb/USBDevice" #define BDI555_Class "ch/ntb/mcdp/bdi/MPC555" @@ -19,9 +21,17 @@ JNIEnv *env = NULL; JavaVM *jvm = NULL; +// Pipe names +char stdout_pipename[32] = "\\\\.\\pipe\\BDIDll_stdout"; +char stderr_pipename[32] = "\\\\.\\pipe\\BDIDll_stderr"; // Pipe handles HANDLE hStdout_pipe, hStderr_pipe; +// status flags +int stdOutErr_redirected = FALSE; +int jvm_created = FALSE, jvm_classPtrs_done = FALSE, \ + jvm_mIDs_done = FALSE, jvm_redirection_done = FALSE; + // Java classes jclass cls_USB_Device, cls_BDI555, cls_BDI332, cls_Redirect, cls_Uart0; // USB_Device @@ -46,6 +56,70 @@ jmethodID mid_Redirect_redirect; // Uart0 jmethodID mid_Uart0_write, mid_Uart0_read; +BOOL setupNamedPipes(){ + + hStdout_pipe = CreateNamedPipe( + stdout_pipename, // pipe name + PIPE_ACCESS_INBOUND,// server only writes and client only reads + PIPE_TYPE_BYTE | // message type pipe + PIPE_WAIT, // non blocking mode + 1, // max. instances + PIPEBUFSIZE, // output buffer size + PIPEBUFSIZE, // input buffer size + PIPE_TIMEOUT, // client time-out + NULL); // default security attribute + + if (hStdout_pipe == INVALID_HANDLE_VALUE) + { + fprintf(stderr, "CreateNamedPipe (stdout_pipe) failed\n"); + return FALSE; + } + + hStderr_pipe = CreateNamedPipe( + stderr_pipename, // pipe name + PIPE_ACCESS_INBOUND,// server only writes and client only reads + PIPE_TYPE_BYTE | // message type pipe + PIPE_WAIT, // non blocking mode + 1, // max. instances + PIPEBUFSIZE, // output buffer size + PIPEBUFSIZE, // input buffer size + PIPE_TIMEOUT, // client time-out + NULL); // default security attribute + + if (hStderr_pipe == INVALID_HANDLE_VALUE) + { + fprintf(stderr, "CreateNamedPipe (stderr_pipe) failed\n"); + return FALSE; + } + // Connect the reading end of the hStdout_pipe and assign it to stdout + if (freopen(stdout_pipename, "w", stdout) == NULL) { + fprintf(stderr, "freopen(stdout_pipename, w, stdout) failed\n"); + return FALSE; + } + + // Connect the reading end of the hStderr_pipe and assign it to sterr + if (freopen(stderr_pipename, "w", stderr) == NULL) { + fprintf(stderr, "freopen(stderr_pipename, w, stderr) failed\n"); + return FALSE; + } + return TRUE; +} + +void flushAll() +{ + fflush(stderr); + fflush(stdout); +} + +void fprintf_flush(FILE* stream, const char *format, ...) +{ + va_list argptr; + va_start(argptr, format); + + vfprintf(stream, format, argptr); + fflush(stream); +} + EXPORT HANDLE getOutPipeHandle(){ return hStdout_pipe; } @@ -54,23 +128,6 @@ EXPORT HANDLE getErrPipeHandle(){ return hStderr_pipe; } - -//BOOL redirect(){ -// -// // Connect the reading end of the hStdout_pipe and assign it to stdout -// if (freopen(stdout_pipename, "w", stdout) == NULL) { -// fprintf(stderr, "freopen(stdout_pipename, w, stdout) failed\n"); -// return FALSE; -// } -// -// // Connect the reading end of the hStderr_pipe and assign it to sterr -// if (freopen(stderr_pipename, "w", stderr) == NULL) { -// fprintf(stderr, "freopen(stderr_pipename, w, stderr) failed\n"); -// return FALSE; -// } -// return TRUE; -//} - EXPORT int destroyJVM() { jint result = -1; @@ -78,18 +135,18 @@ EXPORT int destroyJVM() if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } - env = NULL; } if (jvm) { result = jvm->DestroyJavaVM(); - jvm = NULL; - fprintf(stderr, "JVM destroyed\n"); + fprintf_flush(stderr, "JVM destroyed\n"); } -// if (!CloseHandle(hStdout_pipe)) -// fprintf(stderr, "Close stdout_pipe failed\n"); -// if (!CloseHandle(hStderr_pipe)) -// fprintf(stderr, "Close stderr_pipe failed\n"); - return result; + // reset flags + jvm_created = FALSE; + jvm_classPtrs_done = FALSE; + jvm_mIDs_done = FALSE; + jvm_redirection_done = FALSE; + + return result; } jint JNICALL _vfprintf_(FILE *fp, const char *format, va_list args) @@ -100,340 +157,346 @@ jint JNICALL _vfprintf_(FILE *fp, const char *format, va_list args) EXPORT int createJVM(char *classpath) { - - char javaclasspath[128]; + char javaclasspath[1024]; jint res; JavaVMInitArgs vm_args; JavaVMOption options[NOF_VM_ARGS]; - if (jvm == NULL) { - -// if (!setupNamedPipes()) { -// printf("setupNamedPipes() failed\n"); -// return FALSE; -// } + if (!stdOutErr_redirected) { + // writing to the stdout/stderr stream will write to pipes + // USE fprintf_flush INSTEAD OF printf/fprintf TO WRITE TO THE PIPES + if (!setupNamedPipes()) { + fprintf_flush(stderr, "setupNamedPipes() failed\n"); + return FALSE; + } + stdOutErr_redirected = TRUE; + } + if (!jvm_created) { + + fprintf_flush(stdout, "Starting JVM: classpath: %s\n", classpath); + sprintf(javaclasspath, "-Djava.class.path=%s", classpath); - // TODO: remove - printf("classpath: %s\n", javaclasspath); - - options[0].optionString = javaclasspath; - options[1].optionString = "-Xms4M"; - options[2].optionString = "-Xmx64M"; - options[3].optionString = "-Xss512K"; - options[4].optionString = "-Xoss400K"; -// options[1].optionString = "-Xoss"; -// options[2].optionString = "-Xmx512m"; -// options[3].optionString = "-Xss5m"; -// options[1].optionString = "-XX:+StackTraceInThrowable"; -// options[2].optionString = "-Xcheck:jni"; -// -// options[3].optionString = "vfprintf"; -// options[3].extraInfo = (void*) _vfprintf_; - - // sprintf(options[2].optionString, "-XX:MaxJavaStackTraceDepth=%d", STACKTRACE_DEPTH); + options[0].optionString = "-Xmx20m"; // specify the maximum heap size that the JVM is allowed to grow to + options[1].optionString = javaclasspath; + options[2].optionString = "-verbose:class,jni"; + options[3].optionString = "-Djava.compiler=NONE"; vm_args.version = JNI_VERSION_1_4; vm_args.options = options; vm_args.nOptions = NOF_VM_ARGS; vm_args.ignoreUnrecognized = JNI_FALSE; - - // TODO: remove - printf("trying to create jvm\n"); /* Create the Java VM */ res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if (res < 0) { - fprintf(stderr, "Can't create Java VM\n"); + fprintf_flush(stderr, "Can't create Java VM\n"); return FALSE; } - - // TODO: remove - printf("jvm created\n"); - + jvm_created = TRUE; + } else { + fprintf_flush(stdout, "JVM already created -> creating class pointers\n"); + } + + if (!jvm_classPtrs_done) { /* create class pointers */ cls_USB_Device = env->FindClass(USB_Device_Class); if (cls_USB_Device == 0) { - fprintf(stderr, "Can't find %s class", USB_Device_Class); + fprintf_flush(stderr, "Can't find %s class\n", USB_Device_Class); return FALSE; } cls_BDI555 = env->FindClass(BDI555_Class); if (cls_BDI555 == 0) { - fprintf(stderr, "Can't find %s class", BDI555_Class); + fprintf_flush(stderr, "Can't find %s class\n", BDI555_Class); return FALSE; } cls_BDI332 = env->FindClass(BDI332_Class); if (cls_BDI332 == 0) { - fprintf(stderr, "Can't find %s class", BDI332_Class); - return FALSE; - } - - cls_Redirect = env->FindClass(Redirect_Class); - if (cls_Redirect == 0) { - fprintf(stderr, "Can't find %s class", Redirect_Class); - return FALSE; - } - - cls_Uart0 = env->FindClass(Uart0_Class); - if (cls_Uart0 == 0) { - fprintf(stderr, "Can't find %s class", Uart0_Class); + fprintf_flush(stderr, "Can't find %s class\n", BDI332_Class); return FALSE; } + cls_Redirect = env->FindClass(Redirect_Class); + if (cls_Redirect == 0) { + fprintf_flush(stderr, "Can't find %s class\n", Redirect_Class); + return FALSE; + } + + cls_Uart0 = env->FindClass(Uart0_Class); + if (cls_Uart0 == 0) { + fprintf_flush(stderr, "Can't find %s class\n", Uart0_Class); + return FALSE; + } + jvm_classPtrs_done = TRUE; + } else { + fprintf_flush(stdout, "Class Pointers already created -> creating method IDs\n"); + } + + if (!jvm_mIDs_done) { /* create method pointers */ // USB_Device mid_USB_Dev_open = env->GetStaticMethodID(cls_USB_Device, "open", "()V"); if (mid_USB_Dev_open == 0) { - fprintf(stderr, "Can't find USB_Device.open\n"); + fprintf_flush(stderr, "Can't find USB_Device.open\n"); return FALSE; } mid_USB_Dev_close = env->GetStaticMethodID(cls_USB_Device, "close", "()V"); if (mid_USB_Dev_close == 0) { - fprintf(stderr, "Can't find USB_Device.close\n"); + fprintf_flush(stderr, "Can't find USB_Device.close\n"); return FALSE; } mid_USB_Dev_reset = env->GetStaticMethodID(cls_USB_Device, "reset", "()V"); if (mid_USB_Dev_reset == 0) { - fprintf(stderr, "Can't find USB_Device.reset\n"); + fprintf_flush(stderr, "Can't find USB_Device.reset\n"); return FALSE; } // BDI555 mid_BDI555_break_ = env->GetStaticMethodID(cls_BDI555, "break_", "()V"); if (mid_BDI555_break_ == 0) { - fprintf(stderr, "Can't find BDI555.break_\n"); + fprintf_flush(stderr, "Can't find BDI555.break_\n"); return FALSE; } mid_BDI555_go = env->GetStaticMethodID(cls_BDI555, "go", "()V"); if (mid_BDI555_go == 0) { - fprintf(stderr, "Can't find BDI555.go\n"); + fprintf_flush(stderr, "Can't find BDI555.go\n"); return FALSE; } mid_BDI555_reset_target = env->GetStaticMethodID(cls_BDI555, "reset_target", "()V"); if (mid_BDI555_reset_target == 0) { - fprintf(stderr, "Can't find BDI555.reset_target\n"); + fprintf_flush(stderr, "Can't find BDI555.reset_target\n"); return FALSE; } mid_BDI555_isFreezeAsserted = env->GetStaticMethodID(cls_BDI555, "isFreezeAsserted", "()Z"); if (mid_BDI555_isFreezeAsserted == 0) { - fprintf(stderr, "Can't find BDI555.isFreezeAsserted\n"); + fprintf_flush(stderr, "Can't find BDI555.isFreezeAsserted\n"); return FALSE; } mid_BDI555_startFastDownload = env->GetStaticMethodID(cls_BDI555, "startFastDownload", "(I)V"); if (mid_BDI555_startFastDownload == 0) { - fprintf(stderr, "Can't find BDI555.startFastDownload\n"); + fprintf_flush(stderr, "Can't find BDI555.startFastDownload\n"); return FALSE; } mid_BDI555_fastDownload = env->GetStaticMethodID(cls_BDI555, "fastDownload", "([II)V"); if (mid_BDI555_fastDownload == 0) { - fprintf(stderr, "Can't find BDI555.fastDownload\n"); + fprintf_flush(stderr, "Can't find BDI555.fastDownload\n"); return FALSE; } mid_BDI555_stopFastDownload = env->GetStaticMethodID(cls_BDI555, "stopFastDownload", "()V"); if (mid_BDI555_stopFastDownload == 0) { - fprintf(stderr, "Can't find BDI555.stopFastDownload\n"); + fprintf_flush(stderr, "Can't find BDI555.stopFastDownload\n"); return FALSE; } mid_BDI555_writeMem = env->GetStaticMethodID(cls_BDI555, "writeMem", "(III)V"); if (mid_BDI555_writeMem == 0) { - fprintf(stderr, "Can't find BDI555.writeMem\n"); + fprintf_flush(stderr, "Can't find BDI555.writeMem\n"); return FALSE; } mid_BDI555_readMem = env->GetStaticMethodID(cls_BDI555, "readMem", "(II)I"); if (mid_BDI555_readMem == 0) { - fprintf(stderr, "Can't find BDI555.readMem\n"); + fprintf_flush(stderr, "Can't find BDI555.readMem\n"); return FALSE; } mid_BDI555_writeMemSeq = env->GetStaticMethodID(cls_BDI555, "writeMemSeq", "(II)V"); if (mid_BDI555_writeMemSeq == 0) { - fprintf(stderr, "Can't find BDI555.writeMemSeq\n"); + fprintf_flush(stderr, "Can't find BDI555.writeMemSeq\n"); return FALSE; } mid_BDI555_readMemSeq = env->GetStaticMethodID(cls_BDI555, "readMemSeq", "(I)I"); if (mid_BDI555_readMemSeq == 0) { - fprintf(stderr, "Can't find BDI555.readMemSeq\n"); + fprintf_flush(stderr, "Can't find BDI555.readMemSeq\n"); return FALSE; } mid_BDI555_readGPR = env->GetStaticMethodID(cls_BDI555, "readGPR", "(I)I"); if (mid_BDI555_readGPR == 0) { - fprintf(stderr, "Can't find BDI555.readGPR\n"); + fprintf_flush(stderr, "Can't find BDI555.readGPR\n"); return FALSE; } mid_BDI555_writeGPR = env->GetStaticMethodID(cls_BDI555, "writeGPR", "(II)V"); if (mid_BDI555_writeGPR == 0) { - fprintf(stderr, "Can't find BDI555.writeGPR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeGPR\n"); return FALSE; } mid_BDI555_readSPR = env->GetStaticMethodID(cls_BDI555, "readSPR", "(I)I"); if (mid_BDI555_readSPR == 0) { - fprintf(stderr, "Can't find BDI555.readSPR\n"); + fprintf_flush(stderr, "Can't find BDI555.readSPR\n"); return FALSE; } mid_BDI555_writeSPR = env->GetStaticMethodID(cls_BDI555, "writeSPR", "(II)V"); if (mid_BDI555_writeSPR == 0) { - fprintf(stderr, "Can't find BDI555.writeSPR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeSPR\n"); return FALSE; } mid_BDI555_readMSR = env->GetStaticMethodID(cls_BDI555, "readMSR", "()I"); if (mid_BDI555_readMSR == 0) { - fprintf(stderr, "Can't find BDI555.readMSR\n"); + fprintf_flush(stderr, "Can't find BDI555.readMSR\n"); return FALSE; } mid_BDI555_writeMSR = env->GetStaticMethodID(cls_BDI555, "writeMSR", "(I)V"); if (mid_BDI555_writeMSR == 0) { - fprintf(stderr, "Can't find BDI555.writeMSR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeMSR\n"); return FALSE; } mid_BDI555_readFPR = env->GetStaticMethodID(cls_BDI555, "readFPR", "(II)J"); if (mid_BDI555_readFPR == 0) { - fprintf(stderr, "Can't find BDI555.readFPR\n"); + fprintf_flush(stderr, "Can't find BDI555.readFPR\n"); return FALSE; } mid_BDI555_writeFPR = env->GetStaticMethodID(cls_BDI555, "writeFPR", "(IIJ)V"); if (mid_BDI555_writeFPR == 0) { - fprintf(stderr, "Can't find BDI555.writeFPR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeFPR\n"); return FALSE; } mid_BDI555_readCR = env->GetStaticMethodID(cls_BDI555, "readCR", "()I"); if (mid_BDI555_readCR == 0) { - fprintf(stderr, "Can't find BDI555.readCR\n"); + fprintf_flush(stderr, "Can't find BDI555.readCR\n"); return FALSE; } mid_BDI555_writeCR = env->GetStaticMethodID(cls_BDI555, "writeCR", "(I)V"); if (mid_BDI555_writeCR == 0) { - fprintf(stderr, "Can't find BDI555.writeCR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeCR\n"); return FALSE; } mid_BDI555_readFPSCR = env->GetStaticMethodID(cls_BDI555, "readFPSCR", "()I"); if (mid_BDI555_readFPSCR == 0) { - fprintf(stderr, "Can't find BDI555.readFPSCR\n"); + fprintf_flush(stderr, "Can't find BDI555.readFPSCR\n"); return FALSE; } mid_BDI555_writeFPSCR = env->GetStaticMethodID(cls_BDI555, "writeFPSCR", "(I)V"); if (mid_BDI555_writeFPSCR == 0) { - fprintf(stderr, "Can't find BDI555.writeFPSCR\n"); + fprintf_flush(stderr, "Can't find BDI555.writeFPSCR\n"); return FALSE; } mid_BDI555_isTargetInDebugMode = env->GetStaticMethodID(cls_BDI555, "isTargetInDebugMode", "()Z"); if (mid_BDI555_isTargetInDebugMode == 0) { - fprintf(stderr, "Can't find BDI555.isTargetInDebugMode\n"); + fprintf_flush(stderr, "Can't find BDI555.isTargetInDebugMode\n"); return FALSE; } mid_BDI555_setGpr31 = env->GetStaticMethodID(cls_BDI555, "setGpr31", "(I)V"); if (mid_BDI555_setGpr31 == 0) { - fprintf(stderr, "Can't find BDI555.setGpr31\n"); + fprintf_flush(stderr, "Can't find BDI555.setGpr31\n"); return FALSE; } // BDI332 mid_BDI332_nopsToLegalCmd = env->GetStaticMethodID(cls_BDI332, "nopsToLegalCmd", "()V"); if (mid_BDI332_nopsToLegalCmd == 0) { - fprintf(stderr, "Can't find BDI332.nopsToLegalCmd\n"); + fprintf_flush(stderr, "Can't find BDI332.nopsToLegalCmd\n"); return FALSE; } mid_BDI332_break_ = env->GetStaticMethodID(cls_BDI332, "break_", "()V"); if (mid_BDI332_break_ == 0) { - fprintf(stderr, "Can't find BDI332.break_\n"); + fprintf_flush(stderr, "Can't find BDI332.break_\n"); return FALSE; } mid_BDI332_go = env->GetStaticMethodID(cls_BDI332, "go", "()V"); if (mid_BDI332_go == 0) { - fprintf(stderr, "Can't find BDI332.go\n"); + fprintf_flush(stderr, "Can't find BDI332.go\n"); return FALSE; } mid_BDI332_reset_target = env->GetStaticMethodID(cls_BDI332, "reset_target", "()V"); if (mid_BDI332_reset_target == 0) { - fprintf(stderr, "Can't find BDI332.reset_target\n"); + fprintf_flush(stderr, "Can't find BDI332.reset_target\n"); return FALSE; } mid_BDI332_reset_peripherals = env->GetStaticMethodID(cls_BDI332, "reset_peripherals", "()V"); if (mid_BDI332_reset_peripherals == 0) { - fprintf(stderr, "Can't find BDI332.reset_peripherals\n"); + fprintf_flush(stderr, "Can't find BDI332.reset_peripherals\n"); return FALSE; } mid_BDI332_isFreezeAsserted = env->GetStaticMethodID(cls_BDI332, "isFreezeAsserted", "()Z"); if (mid_BDI332_isFreezeAsserted == 0) { - fprintf(stderr, "Can't find BDI332.isFreezeAsserted\n"); + fprintf_flush(stderr, "Can't find BDI332.isFreezeAsserted\n"); return FALSE; } mid_BDI332_fillMem = env->GetStaticMethodID(cls_BDI332, "fillMem", "([II)V"); if (mid_BDI332_fillMem == 0) { - fprintf(stderr, "Can't find BDI332.fillMem\n"); + fprintf_flush(stderr, "Can't find BDI332.fillMem\n"); return FALSE; } mid_BDI332_dumpMem = env->GetStaticMethodID(cls_BDI332, "dumpMem", "(I)[I"); if (mid_BDI332_dumpMem == 0) { - fprintf(stderr, "Can't find BDI332.dumpMem\n"); + fprintf_flush(stderr, "Can't find BDI332.dumpMem\n"); return FALSE; } mid_BDI332_writeMem = env->GetStaticMethodID(cls_BDI332, "writeMem", "(III)V"); if (mid_BDI332_writeMem == 0) { - fprintf(stderr, "Can't find BDI332.writeMem\n"); + fprintf_flush(stderr, "Can't find BDI332.writeMem\n"); return FALSE; } mid_BDI332_readMem = env->GetStaticMethodID(cls_BDI332, "readMem", "(II)I"); if (mid_BDI332_readMem == 0) { - fprintf(stderr, "Can't find BDI332.readMem\n"); + fprintf_flush(stderr, "Can't find BDI332.readMem\n"); return FALSE; } mid_BDI332_readUserReg = env->GetStaticMethodID(cls_BDI332, "readUserReg", "(I)I"); if (mid_BDI332_readUserReg == 0) { - fprintf(stderr, "Can't find BDI332.readUserReg\n"); + fprintf_flush(stderr, "Can't find BDI332.readUserReg\n"); return FALSE; } mid_BDI332_writeUserReg = env->GetStaticMethodID(cls_BDI332, "writeUserReg", "(II)V"); if (mid_BDI332_writeUserReg == 0) { - fprintf(stderr, "Can't find BDI332.writeUserReg\n"); + fprintf_flush(stderr, "Can't find BDI332.writeUserReg\n"); return FALSE; } mid_BDI332_readUserReg = env->GetStaticMethodID(cls_BDI332, "readUserReg", "(I)I"); if (mid_BDI332_readUserReg == 0) { - fprintf(stderr, "Can't find BDI332.readUserReg\n"); + fprintf_flush(stderr, "Can't find BDI332.readUserReg\n"); return FALSE; } mid_BDI332_writeSysReg = env->GetStaticMethodID(cls_BDI332, "writeSysReg", "(II)V"); if (mid_BDI332_writeSysReg == 0) { - fprintf(stderr, "Can't find BDI332.writeSysReg\n"); + fprintf_flush(stderr, "Can't find BDI332.writeSysReg\n"); return FALSE; } mid_BDI332_readSysReg = env->GetStaticMethodID(cls_BDI332, "readSysReg", "(I)I"); if (mid_BDI332_readSysReg == 0) { - fprintf(stderr, "Can't find BDI332.readSysReg\n"); + fprintf_flush(stderr, "Can't find BDI332.readSysReg\n"); return FALSE; } mid_BDI332_isTargetInDebugMode = env->GetStaticMethodID(cls_BDI332, "isTargetInDebugMode", "()Z"); if (mid_BDI332_isTargetInDebugMode == 0) { - fprintf(stderr, "Can't find BDI332.isTargetInDebugMode\n"); + fprintf_flush(stderr, "Can't find BDI332.isTargetInDebugMode\n"); return FALSE; } - + // Redirect Class mid_Redirect_redirect = env->GetStaticMethodID(cls_Redirect, "redirect", "()V"); if (mid_Redirect_redirect == 0) { - fprintf(stderr, "Can't find Redirect.redirect\n"); + fprintf_flush(stderr, "Can't find Redirect.redirect\n"); return FALSE; } - - // Call redirect - env->CallStaticVoidMethod(cls_Redirect, mid_Redirect_redirect); // Uart0 Class mid_Uart0_write = env->GetStaticMethodID(cls_Uart0, "write", "([BI)Z"); if (mid_Uart0_write == 0) { - fprintf(stderr, "Can't find Uart0.write\n"); + fprintf_flush(stderr, "Can't find Uart0.write\n"); return FALSE; } mid_Uart0_read = env->GetStaticMethodID(cls_Uart0, "read", "()[B"); if (mid_Uart0_read == 0) { - fprintf(stderr, "Can't find Uart0.read\n"); + fprintf_flush(stderr, "Can't find Uart0.read\n"); return FALSE; } - + + jvm_mIDs_done = TRUE; + } else { + fprintf_flush(stdout, "Method IDs already created -> trying to redirect ouput streams\n"); } + + if (!jvm_redirection_done) { + // Call redirect + env->CallStaticVoidMethod(cls_Redirect, mid_Redirect_redirect); + + jvm_redirection_done = TRUE; + } else { + fprintf_flush(stdout, "Redirection already done -> everything successfully set up!\n"); + } + return TRUE; } @@ -452,7 +515,10 @@ EXPORT int checkForExceptions() { return FALSE; } -// USB_Device methods +/* USB_Device methods + * + * For documentatione see the java doc. + */ EXPORT void USB_Device_open() { env->CallStaticVoidMethod(cls_USB_Device, mid_USB_Dev_open); @@ -468,7 +534,10 @@ EXPORT void USB_Device_reset() env->CallStaticVoidMethod(cls_USB_Device, mid_USB_Dev_reset); } -// BDI 555 methods +/* BDI 555 methods + * + * For documentatione see the java doc. + */ EXPORT void BDI555_break_() { env->CallStaticVoidMethod(cls_BDI555, mid_BDI555_break_); @@ -613,7 +682,10 @@ EXPORT void BDI555_setGpr31(int gpr31) } -// BDI 332 methods +/* BDI 332 methods + * + * For documentatione see the java doc. + */ EXPORT void BDI332_nopsToLegalCmd() { env->CallStaticVoidMethod(cls_BDI332, mid_BDI332_nopsToLegalCmd); @@ -660,7 +732,7 @@ EXPORT void BDI332_fillMem(int downloadData[], int dataLength) return; } // for (int i = 0; i < dataLength; ++i) { -// printf("data %d: %x\n", i, downloadData[i]); +// fprintf_flush(stdout, ("data %d: %x\n", i, downloadData[i]); // } env->SetIntArrayRegion(jdata, 0, dataLength, (jint*) downloadData); @@ -722,6 +794,11 @@ EXPORT BOOL BDI332_isTargetInDebugMode() return (isAsserted != JNI_FALSE); } +/* + * UART functions + * + * For documentatione see the java doc. + */ EXPORT int UART0_read(char result[]) { jbyteArray byteArray; @@ -754,7 +831,7 @@ EXPORT int UART0_write(char data[], int dataLength) return FALSE; } // for (int i = 0; i < dataLength; ++i) { -// printf("data %d: %x\n", i, data[i]); +// fprintf_flush(stdout, ("data %d: %x\n", i, data[i]); // } env->SetByteArrayRegion(jdata, 0, dataLength, (jbyte*) data); diff --git a/JNIdll/makefile b/JNIdll/makefile index fc70261..8c1e514 100644 --- a/JNIdll/makefile +++ b/JNIdll/makefile @@ -1,34 +1,12 @@ -EXESRC=BDI_exe.cpp -SRC=invoke.cpp DLLSRC=BDI_dll.cpp DLL=BDI.dll DEF=BDI.def -IMPLIB=BDI555.lib -IMPLIBA=libbdi555.a JVMLIBA=libjvm.a OBJ=$(SRC:.c=.o) # replaces the .c from SRC with .o -EXE=BDI_exe.exe -INVOKE=invoke.exe JAVA_HOME="C:/Program Files/Java/jdk1.5.0_04" CC=gcc RM=rm -REIMP=reimp - -all: $(INVOKE) # all is dependent on $(EXE) to be complete -$(INVOKE): $(OBJ) # $(EXE) is dependent on all of the files in $(OBJ) to exist - $(CC) -Wall -D_JNI_IMPLEMENTATION_ \ - -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/win32 \ - -o $(INVOKE) $(SRC) $(JVMLIBA) - -exe: $(EXE) # all is dependent on $(EXE) to be complete -$(EXE): $(OBJ) # $(EXE) is dependent on all of the files in $(OBJ) to exist - $(CC) -Wall -D_JNI_IMPLEMENTATION_ \ - -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/win32 \ - -o $(EXE) $(EXESRC) $(JVMLIBA) - -cleanExe: - $(RM) $(EXE) dll: $(DLL) $(DLL): $(DLLSRC) @@ -42,15 +20,5 @@ $(DLL): $(DLLSRC) # -I$(JAVAPATH)/include -I$(JAVAPATH)/include/win32 \ # -shared $(DLLSRC) -o $(DLL) $(JVMLIBA) -impLib: $(IMPLIB) -$(IMPLIB): $(DEF) - dlltool -U -d $(DEF) -l $(IMPLIB) - -lib: $(IMPLIBA) -$(IMPLIBA): $(DEF) - lib /machine:i386 /def:$(DEF) - $(REIMP) $(IMPLIB) - clean: $(RM) $(DLL) - $(RM) $(EXE)