From 3da4bf81fe2272d9db29744795e77cec6237da23 Mon Sep 17 00:00:00 2001 From: balken <sdos@astron.nl> Date: Wed, 18 Oct 2006 08:21:45 +0000 Subject: [PATCH] BugID: 946 entered debugging info and try-catch statements in interface --- .../astron/lofar/java/mac/jrsp/RSPMask.java | 2 +- .../nl_astron_lofar_java_mac_jrsp_Board.cc | 1079 +++++++++-------- 2 files changed, 603 insertions(+), 478 deletions(-) diff --git a/JAVA/MAC/jRSP/src/nl/astron/lofar/java/mac/jrsp/RSPMask.java b/JAVA/MAC/jRSP/src/nl/astron/lofar/java/mac/jrsp/RSPMask.java index bc85cea8547..54a355c083f 100644 --- a/JAVA/MAC/jRSP/src/nl/astron/lofar/java/mac/jrsp/RSPMask.java +++ b/JAVA/MAC/jRSP/src/nl/astron/lofar/java/mac/jrsp/RSPMask.java @@ -37,7 +37,7 @@ public class RSPMask implements IMask { */ public RSPMask() { - itsMask = 0; + itsMask = 1; } /** diff --git a/JAVA/MAC/jRSP/src/nl_astron_lofar_java_mac_jrsp_Board.cc b/JAVA/MAC/jRSP/src/nl_astron_lofar_java_mac_jrsp_Board.cc index f8b53e6343b..5fc10a942bf 100644 --- a/JAVA/MAC/jRSP/src/nl_astron_lofar_java_mac_jrsp_Board.cc +++ b/JAVA/MAC/jRSP/src/nl_astron_lofar_java_mac_jrsp_Board.cc @@ -24,26 +24,30 @@ jobject ConvertBoardStatus(JNIEnv*, BoardStatus&); * @param obj The "this" pointer. * @return ptrRSPport Pointer to the RSPport object. */ -JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_init(JNIEnv * env, jobject obj, jstring hostname) +JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_init(JNIEnv * env, jobject, jstring hostname) { - // Convert the jstring hostname to a C++ string. - const char * charsHostname = env->GetStringUTFChars(hostname, 0); - string strHostname (charsHostname); - - RSPport * IOport; - jint ptrRSPport = 0; // the return value, pointer to RSPport. - - try { - IOport = new RSPport(strHostname); - ptrRSPport = (jint)IOport; // set return value to pointer. - } catch (exception &ex) { - env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); - } - - // Free local references. - env->ReleaseStringUTFChars(hostname, charsHostname); - - return ptrRSPport; + // Convert the jstring hostname to a C++ string. + const char * charsHostname = env->GetStringUTFChars(hostname, 0); + string strHostname (charsHostname); + + cout << "Entering init hostname: " << hostname << endl; + RSPport * IOport; + jint ptrRSPport = 0; // the return value, pointer to RSPport. + + try { + IOport = new RSPport(strHostname); + ptrRSPport = (jint)IOport; // set return value to pointer. + } catch (exception &ex) { + cout << "Error during init hostname: " << hostname << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + + // Free local references. + env->ReleaseStringUTFChars(hostname, charsHostname); + + cout << "Leaving init hostname: " << hostname << endl; + return ptrRSPport; } /** @@ -53,9 +57,11 @@ JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_init(JNIEnv * en * @param obj The "this" pointer. * @param ptrRSPport Pointer to the RSPport that will be deleted. */ -JNIEXPORT void JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_delete(JNIEnv * env, jobject obj, jint ptrRSPport) { - RSPport * IOport = (RSPport*)ptrRSPport; - delete(IOport); +JNIEXPORT void JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_delete(JNIEnv * , jobject, jint ptrRSPport) { + cout << "Entering delete" << endl; + RSPport * IOport = (RSPport*)ptrRSPport; + delete(IOport); + cout <<"Leaving delete" << endl; } /** @@ -66,23 +72,33 @@ JNIEXPORT void JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_delete(JNIEnv * * @param ptrRSPport Pointer to the RSPport that should be used. * @return status A array of StatusBoard class instances filled with information. */ -JNIEXPORT jobjectArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_retrieveStatus(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jobjectArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_retrieveStatus(JNIEnv * env, jobject , jint rcuMask, jint ptrRSPport) { - // Use RSPport to get a vector with BoardStatus. - vector<BoardStatus> vecBoardStatus; - - RSPport * IOport = (RSPport*)ptrRSPport; - vecBoardStatus = IOport->getBoardStatus(rcuMask); - - // The jobjectArray that is going to be returned. - jobjectArray arrBoardStatus = (jobjectArray)env->NewObjectArray(vecBoardStatus.size(), env->FindClass("nl/astron/lofar/java/mac/jrsp/BoardStatus"), NULL); - - for(uint i=0; i<vecBoardStatus.size(); i++) - { - env->SetObjectArrayElement(arrBoardStatus, i, ConvertBoardStatus(env, vecBoardStatus[i])); - } + cout << "Entering retrieveStatus rcuMask: " << rcuMask << endl; + + // Use RSPport to get a vector with BoardStatus. + vector<BoardStatus> vecBoardStatus; + jobjectArray arrBoardStatus; + RSPport * IOport = (RSPport*)ptrRSPport; + try { + vecBoardStatus = IOport->getBoardStatus(rcuMask); - return arrBoardStatus; + // The jobjectArray that is going to be returned. + arrBoardStatus = (jobjectArray)env->NewObjectArray(vecBoardStatus.size(), env->FindClass("nl/astron/lofar/java/mac/jrsp/BoardStatus"), NULL); + + for(uint i=0; i<vecBoardStatus.size(); i++) + { + env->SetObjectArrayElement(arrBoardStatus, i, ConvertBoardStatus(env, vecBoardStatus[i])); + } + } catch (exception &ex) { + cout << "Error during retrieveStatus rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + + cout << "Leaving retrieveStatus rcuMask: " << rcuMask << endl; + + return arrBoardStatus; } /** @@ -90,346 +106,348 @@ JNIEXPORT jobjectArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_retrieve * @param BoardStatus C++ BoardStatus * @return jobject Java BoardStatus */ -jobject ConvertBoardStatus(JNIEnv * env, BoardStatus &boardStatus) +jobject ConvertBoardStatus(JNIEnv *env, BoardStatus &boardStatus) { - // TODO: Deze code buiten deze functie plaatsen zodat het niet vaker dan een keer aangeroepen hoeft te worden. - // Get a reference to the class of the status (BoardStatus). - jclass clsStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/BoardStatus"); - if(clsStatus == NULL) + cout << "Entering ConvertBoardStatus" << endl; + // TODO: Deze code buiten deze functie plaatsen zodat het niet vaker dan een keer aangeroepen hoeft te worden. + // Get a reference to the class of the status (BoardStatus). + jclass clsStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/BoardStatus"); + if(clsStatus == NULL) + { + return NULL; + } + static jmethodID sbConstructorId = env->GetMethodID(clsStatus, "<init>", "()V"); + if(sbConstructorId == NULL) + { + return NULL; + } + jobject status = env->NewObject(clsStatus, sbConstructorId, NULL); + + // Get field identifiers for the member variables of the StatusBoard class. + jfieldID fidVoltage1V2 = env->GetFieldID(clsStatus, "voltage1V2", "D"); + jfieldID fidVoltage2V5 = env->GetFieldID(clsStatus, "voltage2V5", "D"); + jfieldID fidVoltage3V3 = env->GetFieldID(clsStatus, "voltage3V3", "D"); + jfieldID fidPcbTemp = env->GetFieldID(clsStatus, "pcbTemp", "S"); + jfieldID fidBpTemp = env->GetFieldID(clsStatus, "bpTemp", "S"); + jfieldID fidAp0Temp = env->GetFieldID(clsStatus, "ap0Temp", "S"); + jfieldID fidAp1Temp = env->GetFieldID(clsStatus, "ap1Temp", "S"); + jfieldID fidAp2Temp = env->GetFieldID(clsStatus, "ap2Temp", "S"); + jfieldID fidAp3Temp = env->GetFieldID(clsStatus, "ap3Temp", "S"); + jfieldID fidBpClock = env->GetFieldID(clsStatus, "bpClock", "S"); + jfieldID fidNofFrames = env->GetFieldID(clsStatus, "nofFrames", "I"); + jfieldID fidNofErrors = env->GetFieldID(clsStatus, "nofErrors", "I"); + jfieldID fidLastError = env->GetFieldID(clsStatus, "lastError", "S"); + jfieldID fidSeqNr = env->GetFieldID(clsStatus, "seqNr", "I"); + jfieldID fidError = env->GetFieldID(clsStatus, "error", "S"); + jfieldID fidIfUnderTest = env->GetFieldID(clsStatus, "ifUnderTest", "S"); + jfieldID fidMode = env->GetFieldID(clsStatus, "mode", "S"); + jfieldID fidRiErrors = env->GetFieldID(clsStatus, "riErrors", "I"); + jfieldID fidRcuxErrors = env->GetFieldID(clsStatus, "rcuxErrors", "I"); + jfieldID fidRcuyErrors = env->GetFieldID(clsStatus, "rcuyErrors", "I"); + jfieldID fidLcuErrors = env->GetFieldID(clsStatus, "lcuErrors", "I"); + jfieldID fidCepErrors = env->GetFieldID(clsStatus, "cepErrors", "I"); + jfieldID fidSerdesErrors = env->GetFieldID(clsStatus, "serdesErrors", "I"); + jfieldID fidAp0RiErrors = env->GetFieldID(clsStatus, "ap0RiErrors", "I"); + jfieldID fidAp1RiErrors = env->GetFieldID(clsStatus, "ap1RiErrors", "I"); + jfieldID fidAp2RiErrors = env->GetFieldID(clsStatus, "ap2RiErrors", "I"); + jfieldID fidAp3RiErrors = env->GetFieldID(clsStatus, "ap3RiErrors", "I"); + jfieldID fidBlp0Sync = env->GetFieldID(clsStatus, "blp0Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); + jfieldID fidBlp1Sync = env->GetFieldID(clsStatus, "blp1Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); + jfieldID fidBlp2Sync = env->GetFieldID(clsStatus, "blp2Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); + jfieldID fidBlp3Sync = env->GetFieldID(clsStatus, "blp3Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); + jfieldID fidBlp0Rcu = env->GetFieldID(clsStatus, "blp0Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); + jfieldID fidBlp1Rcu = env->GetFieldID(clsStatus, "blp1Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); + jfieldID fidBlp2Rcu = env->GetFieldID(clsStatus, "blp2Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); + jfieldID fidBlp3Rcu = env->GetFieldID(clsStatus, "blp3Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); + jfieldID fidCpRdy = env->GetFieldID(clsStatus, "cpRdy", "Z"); + jfieldID fidCpErr = env->GetFieldID(clsStatus, "cpErr", "Z"); + jfieldID fidCpFpga = env->GetFieldID(clsStatus, "cpFpga", "Z"); + jfieldID fidCpIm = env->GetFieldID(clsStatus, "cpIm", "Z"); + jfieldID fidCpTrig = env->GetFieldID(clsStatus, "cpTrig", "S"); + jfieldID fidBlp0AdcOffset = env->GetFieldID(clsStatus, "blp0AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); + jfieldID fidBlp1AdcOffset = env->GetFieldID(clsStatus, "blp1AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); + jfieldID fidBlp2AdcOffset = env->GetFieldID(clsStatus, "blp2AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); + jfieldID fidBlp3AdcOffset = env->GetFieldID(clsStatus, "blp3AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); + + // Access fields and fill them + if(fidVoltage1V2 != 0) + { + env->SetDoubleField(status, fidVoltage1V2, boardStatus.rsp.voltage_1_2 / 192.0 * 2.5); + } + if(fidVoltage2V5 != 0) + { + env->SetDoubleField(status, fidVoltage2V5, boardStatus.rsp.voltage_2_5 / 192.0 * 3.3); + } + if(fidVoltage3V3 != 0) + { + env->SetDoubleField(status, fidVoltage3V3, boardStatus.rsp.voltage_3_3 / 192.0 * 5.0); + } + if(fidPcbTemp != 0) + { + env->SetShortField(status, fidPcbTemp, boardStatus.rsp.pcb_temp); + } + if(fidBpTemp != 0) + { + env->SetShortField(status, fidBpTemp, boardStatus.rsp.bp_temp); + } + if(fidAp0Temp != 0) + { + env->SetShortField(status, fidAp0Temp, boardStatus.rsp.ap0_temp); + } + if(fidAp1Temp != 0) + { + env->SetShortField(status, fidAp1Temp, boardStatus.rsp.ap1_temp); + } + if(fidAp2Temp != 0) + { + env->SetShortField(status, fidAp2Temp, boardStatus.rsp.ap2_temp); + } + if(fidAp3Temp != 0) + { + env->SetShortField(status, fidAp3Temp, boardStatus.rsp.ap3_temp); + } + if(fidBpClock != 0) + { + env->SetShortField(status, fidBpClock, boardStatus.rsp.bp_clock); + } + if(fidNofFrames != 0) + { + env->SetIntField(status, fidNofFrames, boardStatus.eth.nof_frames); + } + if(fidNofErrors != 0) + { + env->SetIntField(status, fidNofErrors, boardStatus.eth.nof_errors); + } + if(fidLastError != 0) + { + env->SetShortField(status, fidLastError, boardStatus.eth.last_error); + } + if(fidSeqNr != 0) + { + env->SetIntField(status, fidSeqNr, boardStatus.mep.seqnr); + } + if(fidError != 0) + { + env->SetShortField(status, fidError, boardStatus.mep.error); + } + if(fidIfUnderTest != 0) + { + env->SetShortField(status, fidIfUnderTest, boardStatus.diag.interface); + } + if(fidMode != 0) + { + env->SetShortField(status, fidMode, boardStatus.diag.mode); + } + if(fidRiErrors != 0) + { + env->SetIntField(status, fidRiErrors, boardStatus.diag.ri_errors); + } + if(fidRcuxErrors != 0) + { + env->SetIntField(status, fidRcuxErrors, boardStatus.diag.rcux_errors); + } + if(fidRcuyErrors != 0) + { + env->SetIntField(status, fidRcuyErrors, boardStatus.diag.rcuy_errors); + } + if(fidLcuErrors != 0) + { + env->SetIntField(status, fidLcuErrors, boardStatus.diag.lcu_errors); + } + if(fidCepErrors != 0) + { + env->SetIntField(status, fidCepErrors, boardStatus.diag.cep_errors); + } + if(fidSerdesErrors != 0) + { + env->SetIntField(status, fidSerdesErrors, boardStatus.diag.serdes_errors); + } + if(fidAp0RiErrors != 0) + { + env->SetIntField(status, fidAp0RiErrors, boardStatus.diag.ap0_ri_errors); + } + if(fidAp1RiErrors != 0) + { + env->SetIntField(status, fidAp1RiErrors, boardStatus.diag.ap1_ri_errors); + } + if(fidAp2RiErrors != 0) + { + env->SetIntField(status, fidAp2RiErrors, boardStatus.diag.ap2_ri_errors); + } + if(fidAp3RiErrors != 0) + { + env->SetIntField(status, fidAp3RiErrors, boardStatus.diag.ap3_ri_errors); + } + + // SyncStatus: blp0Sync - blp3Sync + jclass clsSyncStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/SyncStatus"); + jfieldID fidExtCount = env->GetFieldID(clsSyncStatus, "extCount", "I"); + jfieldID fidSyncCount = env->GetFieldID(clsSyncStatus, "syncCount", "I"); + jfieldID fidSampleOffset = env->GetFieldID(clsSyncStatus, "sampleOffset", "I"); + jfieldID fidSliceCount = env->GetFieldID(clsSyncStatus, "sliceCount", "I"); + + if(fidBlp0Sync != 0) + { + jobject objBlp0Sync = env->GetObjectField(status, fidBlp0Sync); + if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) { - return NULL; + env->SetIntField(objBlp0Sync, fidExtCount, boardStatus.ap0_sync.ext_count); + env->SetIntField(objBlp0Sync, fidSyncCount, boardStatus.ap0_sync.sync_count); + env->SetIntField(objBlp0Sync, fidSampleOffset, boardStatus.ap0_sync.sample_offset); + env->SetIntField(objBlp0Sync, fidSliceCount, boardStatus.ap0_sync.slice_count); } - static jmethodID sbConstructorId = env->GetMethodID(clsStatus, "<init>", "()V"); - if(sbConstructorId == NULL) + } + + if(fidBlp1Sync != 0) + { + jobject objBlp1Sync = env->GetObjectField(status, fidBlp1Sync); + if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) { - return NULL; + env->SetIntField(objBlp1Sync, fidExtCount, boardStatus.ap1_sync.ext_count); + env->SetIntField(objBlp1Sync, fidSyncCount, boardStatus.ap1_sync.sync_count); + env->SetIntField(objBlp1Sync, fidSampleOffset, boardStatus.ap1_sync.sample_offset); + env->SetIntField(objBlp1Sync, fidSliceCount, boardStatus.ap1_sync.slice_count); } - jobject status = env->NewObject(clsStatus, sbConstructorId, NULL); - - // Get field identifiers for the member variables of the StatusBoard class. - jfieldID fidVoltage1V2 = env->GetFieldID(clsStatus, "voltage1V2", "D"); - jfieldID fidVoltage2V5 = env->GetFieldID(clsStatus, "voltage2V5", "D"); - jfieldID fidVoltage3V3 = env->GetFieldID(clsStatus, "voltage3V3", "D"); - jfieldID fidPcbTemp = env->GetFieldID(clsStatus, "pcbTemp", "S"); - jfieldID fidBpTemp = env->GetFieldID(clsStatus, "bpTemp", "S"); - jfieldID fidAp0Temp = env->GetFieldID(clsStatus, "ap0Temp", "S"); - jfieldID fidAp1Temp = env->GetFieldID(clsStatus, "ap1Temp", "S"); - jfieldID fidAp2Temp = env->GetFieldID(clsStatus, "ap2Temp", "S"); - jfieldID fidAp3Temp = env->GetFieldID(clsStatus, "ap3Temp", "S"); - jfieldID fidBpClock = env->GetFieldID(clsStatus, "bpClock", "S"); - jfieldID fidNofFrames = env->GetFieldID(clsStatus, "nofFrames", "I"); - jfieldID fidNofErrors = env->GetFieldID(clsStatus, "nofErrors", "I"); - jfieldID fidLastError = env->GetFieldID(clsStatus, "lastError", "S"); - jfieldID fidSeqNr = env->GetFieldID(clsStatus, "seqNr", "I"); - jfieldID fidError = env->GetFieldID(clsStatus, "error", "S"); - jfieldID fidIfUnderTest = env->GetFieldID(clsStatus, "ifUnderTest", "S"); - jfieldID fidMode = env->GetFieldID(clsStatus, "mode", "S"); - jfieldID fidRiErrors = env->GetFieldID(clsStatus, "riErrors", "I"); - jfieldID fidRcuxErrors = env->GetFieldID(clsStatus, "rcuxErrors", "I"); - jfieldID fidRcuyErrors = env->GetFieldID(clsStatus, "rcuyErrors", "I"); - jfieldID fidLcuErrors = env->GetFieldID(clsStatus, "lcuErrors", "I"); - jfieldID fidCepErrors = env->GetFieldID(clsStatus, "cepErrors", "I"); - jfieldID fidSerdesErrors = env->GetFieldID(clsStatus, "serdesErrors", "I"); - jfieldID fidAp0RiErrors = env->GetFieldID(clsStatus, "ap0RiErrors", "I"); - jfieldID fidAp1RiErrors = env->GetFieldID(clsStatus, "ap1RiErrors", "I"); - jfieldID fidAp2RiErrors = env->GetFieldID(clsStatus, "ap2RiErrors", "I"); - jfieldID fidAp3RiErrors = env->GetFieldID(clsStatus, "ap3RiErrors", "I"); - jfieldID fidBlp0Sync = env->GetFieldID(clsStatus, "blp0Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); - jfieldID fidBlp1Sync = env->GetFieldID(clsStatus, "blp1Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); - jfieldID fidBlp2Sync = env->GetFieldID(clsStatus, "blp2Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); - jfieldID fidBlp3Sync = env->GetFieldID(clsStatus, "blp3Sync", "Lnl/astron/lofar/java/mac/jrsp/SyncStatus;"); - jfieldID fidBlp0Rcu = env->GetFieldID(clsStatus, "blp0Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); - jfieldID fidBlp1Rcu = env->GetFieldID(clsStatus, "blp1Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); - jfieldID fidBlp2Rcu = env->GetFieldID(clsStatus, "blp2Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); - jfieldID fidBlp3Rcu = env->GetFieldID(clsStatus, "blp3Rcu", "Lnl/astron/lofar/java/mac/jrsp/RCUStatus;"); - jfieldID fidCpRdy = env->GetFieldID(clsStatus, "cpRdy", "Z"); - jfieldID fidCpErr = env->GetFieldID(clsStatus, "cpErr", "Z"); - jfieldID fidCpFpga = env->GetFieldID(clsStatus, "cpFpga", "Z"); - jfieldID fidCpIm = env->GetFieldID(clsStatus, "cpIm", "Z"); - jfieldID fidCpTrig = env->GetFieldID(clsStatus, "cpTrig", "S"); - jfieldID fidBlp0AdcOffset = env->GetFieldID(clsStatus, "blp0AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); - jfieldID fidBlp1AdcOffset = env->GetFieldID(clsStatus, "blp1AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); - jfieldID fidBlp2AdcOffset = env->GetFieldID(clsStatus, "blp2AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); - jfieldID fidBlp3AdcOffset = env->GetFieldID(clsStatus, "blp3AdcOffset", "Lnl/astron/lofar/java/mac/jrsp/ADOStatus;"); - - // Access fields and fill them - if(fidVoltage1V2 != 0) - { - env->SetDoubleField(status, fidVoltage1V2, boardStatus.rsp.voltage_1_2 / 192.0 * 2.5); - } - if(fidVoltage2V5 != 0) - { - env->SetDoubleField(status, fidVoltage2V5, boardStatus.rsp.voltage_2_5 / 192.0 * 3.3); - } - if(fidVoltage3V3 != 0) - { - env->SetDoubleField(status, fidVoltage3V3, boardStatus.rsp.voltage_3_3 / 192.0 * 5.0); - } - if(fidPcbTemp != 0) - { - env->SetShortField(status, fidPcbTemp, boardStatus.rsp.pcb_temp); - } - if(fidBpTemp != 0) - { - env->SetShortField(status, fidBpTemp, boardStatus.rsp.bp_temp); - } - if(fidAp0Temp != 0) - { - env->SetShortField(status, fidAp0Temp, boardStatus.rsp.ap0_temp); - } - if(fidAp1Temp != 0) - { - env->SetShortField(status, fidAp1Temp, boardStatus.rsp.ap1_temp); - } - if(fidAp2Temp != 0) - { - env->SetShortField(status, fidAp2Temp, boardStatus.rsp.ap2_temp); - } - if(fidAp3Temp != 0) - { - env->SetShortField(status, fidAp3Temp, boardStatus.rsp.ap3_temp); - } - if(fidBpClock != 0) - { - env->SetShortField(status, fidBpClock, boardStatus.rsp.bp_clock); - } - if(fidNofFrames != 0) - { - env->SetIntField(status, fidNofFrames, boardStatus.eth.nof_frames); - } - if(fidNofErrors != 0) - { - env->SetIntField(status, fidNofErrors, boardStatus.eth.nof_errors); - } - if(fidLastError != 0) - { - env->SetShortField(status, fidLastError, boardStatus.eth.last_error); - } - if(fidSeqNr != 0) - { - env->SetIntField(status, fidSeqNr, boardStatus.mep.seqnr); - } - if(fidError != 0) - { - env->SetShortField(status, fidError, boardStatus.mep.error); - } - if(fidIfUnderTest != 0) - { - env->SetShortField(status, fidIfUnderTest, boardStatus.diag.interface); - } - if(fidMode != 0) - { - env->SetShortField(status, fidMode, boardStatus.diag.mode); - } - if(fidRiErrors != 0) - { - env->SetIntField(status, fidRiErrors, boardStatus.diag.ri_errors); - } - if(fidRcuxErrors != 0) - { - env->SetIntField(status, fidRcuxErrors, boardStatus.diag.rcux_errors); - } - if(fidRcuyErrors != 0) - { - env->SetIntField(status, fidRcuyErrors, boardStatus.diag.rcuy_errors); - } - if(fidLcuErrors != 0) - { - env->SetIntField(status, fidLcuErrors, boardStatus.diag.lcu_errors); - } - if(fidCepErrors != 0) - { - env->SetIntField(status, fidCepErrors, boardStatus.diag.cep_errors); - } - if(fidSerdesErrors != 0) - { - env->SetIntField(status, fidSerdesErrors, boardStatus.diag.serdes_errors); - } - if(fidAp0RiErrors != 0) - { - env->SetIntField(status, fidAp0RiErrors, boardStatus.diag.ap0_ri_errors); - } - if(fidAp1RiErrors != 0) - { - env->SetIntField(status, fidAp1RiErrors, boardStatus.diag.ap1_ri_errors); - } - if(fidAp2RiErrors != 0) - { - env->SetIntField(status, fidAp2RiErrors, boardStatus.diag.ap2_ri_errors); - } - if(fidAp3RiErrors != 0) - { - env->SetIntField(status, fidAp3RiErrors, boardStatus.diag.ap3_ri_errors); - } - - // SyncStatus: blp0Sync - blp3Sync - jclass clsSyncStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/SyncStatus"); - jfieldID fidExtCount = env->GetFieldID(clsSyncStatus, "extCount", "I"); - jfieldID fidSyncCount = env->GetFieldID(clsSyncStatus, "syncCount", "I"); - jfieldID fidSampleOffset = env->GetFieldID(clsSyncStatus, "sampleOffset", "I"); - jfieldID fidSliceCount = env->GetFieldID(clsSyncStatus, "sliceCount", "I"); - - if(fidBlp0Sync != 0) + } + + if(fidBlp2Sync != 0) + { + jobject objBlp2Sync = env->GetObjectField(status, fidBlp2Sync); + if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) { - jobject objBlp0Sync = env->GetObjectField(status, fidBlp0Sync); - if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) - { - env->SetIntField(objBlp0Sync, fidExtCount, boardStatus.ap0_sync.ext_count); - env->SetIntField(objBlp0Sync, fidSyncCount, boardStatus.ap0_sync.sync_count); - env->SetIntField(objBlp0Sync, fidSampleOffset, boardStatus.ap0_sync.sample_offset); - env->SetIntField(objBlp0Sync, fidSliceCount, boardStatus.ap0_sync.slice_count); - } + env->SetIntField(objBlp2Sync, fidExtCount, boardStatus.ap2_sync.ext_count); + env->SetIntField(objBlp2Sync, fidSyncCount, boardStatus.ap2_sync.sync_count); + env->SetIntField(objBlp2Sync, fidSampleOffset, boardStatus.ap2_sync.sample_offset); + env->SetIntField(objBlp2Sync, fidSliceCount, boardStatus.ap2_sync.slice_count); } - - if(fidBlp1Sync != 0) + } + + if(fidBlp3Sync != 0) + { + jobject objBlp3Sync = env->GetObjectField(status, fidBlp3Sync); + if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) { - jobject objBlp1Sync = env->GetObjectField(status, fidBlp1Sync); - if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) - { - env->SetIntField(objBlp1Sync, fidExtCount, boardStatus.ap1_sync.ext_count); - env->SetIntField(objBlp1Sync, fidSyncCount, boardStatus.ap1_sync.sync_count); - env->SetIntField(objBlp1Sync, fidSampleOffset, boardStatus.ap1_sync.sample_offset); - env->SetIntField(objBlp1Sync, fidSliceCount, boardStatus.ap1_sync.slice_count); - } + env->SetIntField(objBlp3Sync, fidExtCount, boardStatus.ap3_sync.ext_count); + env->SetIntField(objBlp3Sync, fidSyncCount, boardStatus.ap3_sync.sync_count); + env->SetIntField(objBlp3Sync, fidSampleOffset, boardStatus.ap3_sync.sample_offset); + env->SetIntField(objBlp3Sync, fidSliceCount, boardStatus.ap3_sync.slice_count); } - - if(fidBlp2Sync != 0) + } + + // RCUStatus: blp0Rcu - blp3Rcu + jclass clsRCUStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/RCUStatus"); + jfieldID fidNofOverflowX = env->GetFieldID(clsRCUStatus, "nofOverflowX", "I"); + jfieldID fidNofOverflowY = env->GetFieldID(clsRCUStatus, "nofOverflowY", "I"); + + if(fidBlp0Rcu != 0) + { + jobject objBlp0Rcu = env->GetObjectField(status, fidBlp0Rcu); + if(fidNofOverflowX != 0 && fidNofOverflowY != 0) { - jobject objBlp2Sync = env->GetObjectField(status, fidBlp2Sync); - if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) - { - env->SetIntField(objBlp2Sync, fidExtCount, boardStatus.ap2_sync.ext_count); - env->SetIntField(objBlp2Sync, fidSyncCount, boardStatus.ap2_sync.sync_count); - env->SetIntField(objBlp2Sync, fidSampleOffset, boardStatus.ap2_sync.sample_offset); - env->SetIntField(objBlp2Sync, fidSliceCount, boardStatus.ap2_sync.slice_count); - } + env->SetIntField(objBlp0Rcu, fidNofOverflowX, boardStatus.blp0_rcu.nof_overflowx); + env->SetIntField(objBlp0Rcu, fidNofOverflowY, boardStatus.blp0_rcu.nof_overflowy); } - - if(fidBlp3Sync != 0) + } + + if(fidBlp1Rcu != 0) + { + jobject objBlp1Rcu = env->GetObjectField(status, fidBlp1Rcu); + if(fidNofOverflowX != 0 && fidNofOverflowY != 0) { - jobject objBlp3Sync = env->GetObjectField(status, fidBlp3Sync); - if(fidExtCount != 0 && fidSyncCount != 0 && fidSampleOffset != 0 && fidSliceCount != 0) - { - env->SetIntField(objBlp3Sync, fidExtCount, boardStatus.ap3_sync.ext_count); - env->SetIntField(objBlp3Sync, fidSyncCount, boardStatus.ap3_sync.sync_count); - env->SetIntField(objBlp3Sync, fidSampleOffset, boardStatus.ap3_sync.sample_offset); - env->SetIntField(objBlp3Sync, fidSliceCount, boardStatus.ap3_sync.slice_count); - } + env->SetIntField(objBlp1Rcu, fidNofOverflowX, boardStatus.blp1_rcu.nof_overflowx); + env->SetIntField(objBlp1Rcu, fidNofOverflowY, boardStatus.blp1_rcu.nof_overflowy); } - - // RCUStatus: blp0Rcu - blp3Rcu - jclass clsRCUStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/RCUStatus"); - jfieldID fidNofOverflowX = env->GetFieldID(clsRCUStatus, "nofOverflowX", "I"); - jfieldID fidNofOverflowY = env->GetFieldID(clsRCUStatus, "nofOverflowY", "I"); - - if(fidBlp0Rcu != 0) + } + + if(fidBlp2Rcu != 0) + { + jobject objBlp2Rcu = env->GetObjectField(status, fidBlp2Rcu); + if(fidNofOverflowX != 0 && fidNofOverflowY != 0) { - jobject objBlp0Rcu = env->GetObjectField(status, fidBlp0Rcu); - if(fidNofOverflowX != 0 && fidNofOverflowY != 0) - { - env->SetIntField(objBlp0Rcu, fidNofOverflowX, boardStatus.blp0_rcu.nof_overflowx); - env->SetIntField(objBlp0Rcu, fidNofOverflowY, boardStatus.blp0_rcu.nof_overflowy); - } + env->SetIntField(objBlp2Rcu, fidNofOverflowX, boardStatus.blp2_rcu.nof_overflowx); + env->SetIntField(objBlp2Rcu, fidNofOverflowY, boardStatus.blp2_rcu.nof_overflowy); } - - if(fidBlp1Rcu != 0) - { - jobject objBlp1Rcu = env->GetObjectField(status, fidBlp1Rcu); - if(fidNofOverflowX != 0 && fidNofOverflowY != 0) - { - env->SetIntField(objBlp1Rcu, fidNofOverflowX, boardStatus.blp1_rcu.nof_overflowx); - env->SetIntField(objBlp1Rcu, fidNofOverflowY, boardStatus.blp1_rcu.nof_overflowy); - } - } - - if(fidBlp2Rcu != 0) - { - jobject objBlp2Rcu = env->GetObjectField(status, fidBlp2Rcu); - if(fidNofOverflowX != 0 && fidNofOverflowY != 0) - { - env->SetIntField(objBlp2Rcu, fidNofOverflowX, boardStatus.blp2_rcu.nof_overflowx); - env->SetIntField(objBlp2Rcu, fidNofOverflowY, boardStatus.blp2_rcu.nof_overflowy); - } - } - - if(fidBlp3Rcu != 0) - { - jobject objBlp3Rcu = env->GetObjectField(status, fidBlp3Rcu); - if(fidNofOverflowX != 0 && fidNofOverflowY != 0) - { - env->SetIntField(objBlp3Rcu, fidNofOverflowX, boardStatus.blp3_rcu.nof_overflowx); - env->SetIntField(objBlp3Rcu, fidNofOverflowY, boardStatus.blp3_rcu.nof_overflowy); - } - } - - if(fidCpRdy != 0) - { - env->SetBooleanField(status, fidCpRdy, boardStatus.cp_status.rdy); - } - if(fidCpErr != 0) - { - env->SetBooleanField(status, fidCpErr, boardStatus.cp_status.err); - } - if(fidCpFpga != 0) + } + + if(fidBlp3Rcu != 0) + { + jobject objBlp3Rcu = env->GetObjectField(status, fidBlp3Rcu); + if(fidNofOverflowX != 0 && fidNofOverflowY != 0) { - env->SetBooleanField(status, fidCpFpga, boardStatus.cp_status.fpga); + env->SetIntField(objBlp3Rcu, fidNofOverflowX, boardStatus.blp3_rcu.nof_overflowx); + env->SetIntField(objBlp3Rcu, fidNofOverflowY, boardStatus.blp3_rcu.nof_overflowy); } - if(fidCpIm != 0) + } + + if(fidCpRdy != 0) + { + env->SetBooleanField(status, fidCpRdy, boardStatus.cp_status.rdy); + } + if(fidCpErr != 0) + { + env->SetBooleanField(status, fidCpErr, boardStatus.cp_status.err); + } + if(fidCpFpga != 0) + { + env->SetBooleanField(status, fidCpFpga, boardStatus.cp_status.fpga); + } + if(fidCpIm != 0) + { + env->SetBooleanField(status, fidCpIm, boardStatus.cp_status.im); + } + if(fidCpTrig != 0) + { + env->SetShortField(status, fidCpTrig, boardStatus.cp_status.trig); + } + + // ADOStatus: blp0AdcOffset - blp3AdcOffset + jclass clsADOStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/ADOStatus"); + jfieldID fidAdcOffsetX = env->GetFieldID(clsADOStatus, "adcOffsetX", "I"); + jfieldID fidAdcOffsetY = env->GetFieldID(clsADOStatus, "adcOffsetY", "I"); + + if(fidBlp0AdcOffset != 0) + { + jobject objBlp0AdcOffset = env->GetObjectField(status, fidBlp0AdcOffset); + if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) { - env->SetBooleanField(status, fidCpIm, boardStatus.cp_status.im); + env->SetIntField(objBlp0AdcOffset, fidAdcOffsetX, boardStatus.blp0_adc_offset.adc_offset_x); + env->SetIntField(objBlp0AdcOffset, fidAdcOffsetY, boardStatus.blp0_adc_offset.adc_offset_y); } - if(fidCpTrig != 0) - { - env->SetShortField(status, fidCpTrig, boardStatus.cp_status.trig); - } - - // ADOStatus: blp0AdcOffset - blp3AdcOffset - jclass clsADOStatus = env->FindClass("nl/astron/lofar/java/mac/jrsp/ADOStatus"); - jfieldID fidAdcOffsetX = env->GetFieldID(clsADOStatus, "adcOffsetX", "I"); - jfieldID fidAdcOffsetY = env->GetFieldID(clsADOStatus, "adcOffsetY", "I"); - - if(fidBlp0AdcOffset != 0) + } + if(fidBlp1AdcOffset != 0) + { + jobject objBlp1AdcOffset = env->GetObjectField(status, fidBlp1AdcOffset); + if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) { - jobject objBlp0AdcOffset = env->GetObjectField(status, fidBlp0AdcOffset); - if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) - { - env->SetIntField(objBlp0AdcOffset, fidAdcOffsetX, boardStatus.blp0_adc_offset.adc_offset_x); - env->SetIntField(objBlp0AdcOffset, fidAdcOffsetY, boardStatus.blp0_adc_offset.adc_offset_y); - } + env->SetIntField(objBlp1AdcOffset, fidAdcOffsetX, boardStatus.blp1_adc_offset.adc_offset_x); + env->SetIntField(objBlp1AdcOffset, fidAdcOffsetY, boardStatus.blp1_adc_offset.adc_offset_y); } - if(fidBlp1AdcOffset != 0) + } + if(fidBlp2AdcOffset != 0) + { + jobject objBlp2AdcOffset = env->GetObjectField(status, fidBlp2AdcOffset); + if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) { - jobject objBlp1AdcOffset = env->GetObjectField(status, fidBlp1AdcOffset); - if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) - { - env->SetIntField(objBlp1AdcOffset, fidAdcOffsetX, boardStatus.blp1_adc_offset.adc_offset_x); - env->SetIntField(objBlp1AdcOffset, fidAdcOffsetY, boardStatus.blp1_adc_offset.adc_offset_y); - } + env->SetIntField(objBlp2AdcOffset, fidAdcOffsetX, boardStatus.blp2_adc_offset.adc_offset_x); + env->SetIntField(objBlp2AdcOffset, fidAdcOffsetY, boardStatus.blp2_adc_offset.adc_offset_y); } - if(fidBlp2AdcOffset != 0) + } + if(fidBlp3AdcOffset != 0) + { + jobject objBlp3AdcOffset = env->GetObjectField(status, fidBlp3AdcOffset); + if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) { - jobject objBlp2AdcOffset = env->GetObjectField(status, fidBlp2AdcOffset); - if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) - { - env->SetIntField(objBlp2AdcOffset, fidAdcOffsetX, boardStatus.blp2_adc_offset.adc_offset_x); - env->SetIntField(objBlp2AdcOffset, fidAdcOffsetY, boardStatus.blp2_adc_offset.adc_offset_y); - } + env->SetIntField(objBlp3AdcOffset, fidAdcOffsetX, boardStatus.blp3_adc_offset.adc_offset_x); + env->SetIntField(objBlp3AdcOffset, fidAdcOffsetY, boardStatus.blp3_adc_offset.adc_offset_y); } - if(fidBlp3AdcOffset != 0) - { - jobject objBlp3AdcOffset = env->GetObjectField(status, fidBlp3AdcOffset); - if(fidAdcOffsetX != 0 && fidAdcOffsetY != 0) - { - env->SetIntField(objBlp3AdcOffset, fidAdcOffsetX, boardStatus.blp3_adc_offset.adc_offset_x); - env->SetIntField(objBlp3AdcOffset, fidAdcOffsetY, boardStatus.blp3_adc_offset.adc_offset_y); - } - } - - // Free local references. - env->DeleteLocalRef(clsStatus); - - // Return status. - return status; + } + + // Free local references. + env->DeleteLocalRef(clsStatus); + + cout << "Leaving ConvertStatus" << endl; + // Return status. + return status; } /** @@ -441,10 +459,24 @@ jobject ConvertBoardStatus(JNIEnv * env, BoardStatus &boardStatus) * @param frequency * @param amplitude */ -JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setWaveformSettings(JNIEnv * env, jobject obj, jint rcuMask, jint mode, jdouble frequency, jshort phase, jint amplitude, jint ptrRSPport) +JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setWaveformSettings(JNIEnv *env , jobject , jint rcuMask, jint mode, jdouble frequency, jshort phase, jint amplitude, jint ptrRSPport) { - RSPport * IOport = (RSPport*)ptrRSPport; - return IOport->setWaveformSettings(rcuMask, mode, frequency, phase, amplitude); + cout << "Entering setWaveformSettings rcuMask: " << rcuMask << " mode: " << mode << " frequency: " << + frequency << " phase: " << phase << " amplitude: " << amplitude << endl; + jboolean result=false; + + RSPport * IOport = (RSPport*)ptrRSPport; + try { + result=IOport->setWaveformSettings(rcuMask, mode, frequency, phase, amplitude); + } catch (exception &ex) { + cout << "Error during setWaveformSettings rcuMask: " << rcuMask << " mode: " << mode << " frequency: " << + frequency << " phase: " << phase << " amplitude: " << amplitude << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving setWaveformSettings rcuMask: " << rcuMask << " mode: " << mode << " frequency: " << + frequency << " phase: " << phase << " amplitude: " << amplitude << endl; + return result; } /** @@ -455,117 +487,163 @@ JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setWaveformS * @param ptrRSPport * @return jdoubleArray */ -JNIEXPORT jdoubleArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getSubbandStats(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jdoubleArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getSubbandStats(JNIEnv * env, jobject , jint rcuMask, jint ptrRSPport) { - RSPport * IOport = (RSPport *) ptrRSPport; - - // get a vector with the subband stats - vector<double> vecData = IOport->getSubbandStats(rcuMask); - - // make a jdouble array to return to Java - jdoubleArray ret = env->NewDoubleArray(vecData.size()); - - // move vecData elements to ret - for (int i = 0; i < vecData.size(); i++) - { - env->SetDoubleArrayRegion(ret, i, 1, &vecData[i]); - } - - // return array - return ret; + cout << "Entering getSubbandStats rcuMask: " << rcuMask << endl; + jdoubleArray ret; + RSPport * IOport = (RSPport *) ptrRSPport; + + try { + // get a vector with the subband stats + vector<double> vecData = IOport->getSubbandStats(rcuMask); + + // make a jdouble array to return to Java + ret = env->NewDoubleArray(vecData.size()); + + // move vecData elements to ret + for (uint i = 0; i < vecData.size(); i++) + { + env->SetDoubleArrayRegion(ret, i, 1, &vecData[i]); + } + } catch (exception &ex) { + cout << "Error during getSubbandStats rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + + cout << "Leaving getSubbandStats rcuMask: " << rcuMask << endl; + + // return array + return ret; } /** * Returns a array of nl.astron.lofar.java.mac.jrsp.WGRegisterType elements. */ -JNIEXPORT jobjectArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getWaveformSettings(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jobjectArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getWaveformSettings(JNIEnv * env, jobject , jint rcuMask, jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - // get vector with register types - vector<struct WGSettings::WGRegisterType> vecData = IOport->getWaveformSettings(rcuMask); - - /* - * JNI part - * get class, constructor and field identifiers. - */ - - // jni: class - jclass clsWGRegisterType = env->FindClass("nl/astron/lofar/java/mac/jrsp/WGRegisterType"); - if (clsWGRegisterType == NULL) { - return NULL; - } - - // jni: constructor - static jmethodID midConstructor = env->GetMethodID(clsWGRegisterType, "<init>", "()V"); - if (midConstructor == NULL) { - return NULL; - } - - // jni: fields - jfieldID fidMode = env->GetFieldID(clsWGRegisterType, "mode", "S"); - jfieldID fidPhase = env->GetFieldID(clsWGRegisterType, "phase", "S"); - jfieldID fidNofSamples = env->GetFieldID(clsWGRegisterType, "nofSamples", "I"); - jfieldID fidFrequency = env->GetFieldID(clsWGRegisterType, "frequency", "D"); - jfieldID fidAmplitude = env->GetFieldID(clsWGRegisterType, "amplitude", "J"); - if (fidMode == 0 || fidPhase == 0 || fidNofSamples == 0 || fidFrequency == 0 || fidAmplitude == 0) { - return NULL; - } - - // construct return array - jobjectArray arrResults = (jobjectArray) env->NewObjectArray(vecData.size(), clsWGRegisterType, NULL); - - // process vector and add itens to array - for (int i = 0; i < vecData.size(); i++) { - // make new (j)WGRegisterType - jobject temp = env->NewObject(clsWGRegisterType, midConstructor, NULL); - - env->SetShortField(temp, fidMode, vecData[i].mode); - env->SetShortField(temp, fidPhase, vecData[i].phase); - env->SetIntField(temp, fidNofSamples, vecData[i].nof_samples); - env->SetDoubleField(temp, fidFrequency, vecData[i].freq); - env->SetLongField(temp, fidAmplitude, vecData[i].ampl); - - // add object to return array - env->SetObjectArrayElement(arrResults, i, temp); - } + cout << "Entering getWaveformSettings rcuMask: " << rcuMask << endl; + jobjectArray arrResults; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + + try { + // get vector with register types + vector<struct WGSettings::WGRegisterType> vecData = IOport->getWaveformSettings(rcuMask); + + /* + * JNI part + * get class, constructor and field identifiers. + */ + + // jni: class + jclass clsWGRegisterType = env->FindClass("nl/astron/lofar/java/mac/jrsp/WGRegisterType"); + if (clsWGRegisterType == NULL) { + return NULL; + } + + // jni: constructor + static jmethodID midConstructor = env->GetMethodID(clsWGRegisterType, "<init>", "()V"); + if (midConstructor == NULL) { + return NULL; + } + + // jni: fields + jfieldID fidMode = env->GetFieldID(clsWGRegisterType, "mode", "S"); + jfieldID fidPhase = env->GetFieldID(clsWGRegisterType, "phase", "S"); + jfieldID fidNofSamples = env->GetFieldID(clsWGRegisterType, "nofSamples", "I"); + jfieldID fidFrequency = env->GetFieldID(clsWGRegisterType, "frequency", "D"); + jfieldID fidAmplitude = env->GetFieldID(clsWGRegisterType, "amplitude", "J"); + if (fidMode == 0 || fidPhase == 0 || fidNofSamples == 0 || fidFrequency == 0 || fidAmplitude == 0) { + return NULL; + } + + // construct return array + arrResults = (jobjectArray) env->NewObjectArray(vecData.size(), clsWGRegisterType, NULL); + + // process vector and add itens to array + for (uint i = 0; i < vecData.size(); i++) { + // make new (j)WGRegisterType + jobject temp = env->NewObject(clsWGRegisterType, midConstructor, NULL); + + env->SetShortField(temp, fidMode, vecData[i].mode); + env->SetShortField(temp, fidPhase, vecData[i].phase); + env->SetIntField(temp, fidNofSamples, vecData[i].nof_samples); + env->SetDoubleField(temp, fidFrequency, vecData[i].freq); + env->SetLongField(temp, fidAmplitude, vecData[i].ampl); + + // add object to return array + env->SetObjectArrayElement(arrResults, i, temp); + } + } catch (exception &ex) { + cout << "Error during getWaveformSettings rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } - // return array - return arrResults; + cout << "Leaving getWaveformSettings rcuMask: " << rcuMask << endl; + // return array + return arrResults; } // getWaveformSettings() /** * Returns the number of connected RCU's. */ -JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getNrRCUs(JNIEnv * env, jobject obj, jint ptrRSPport) +JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getNrRCUs(JNIEnv *env, jobject , jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->getNrRCUs(); + cout << "Entering getNrRCUs" << endl; + jint result; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result= IOport->getNrRCUs(); + } catch (exception &ex) { + cout << "Error during getNrRCUs" << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving getNrRCUs" << endl; + return result; } /** * Returns the number of connected boards. */ -JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getNrRSPBoards(JNIEnv * env, jobject obj, jint ptrRSPport) +JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getNrRSPBoards(JNIEnv *env, jobject , jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->getNrRSPboards(); + cout << "Entering getNrRSPBoards" << endl; + jint result; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->getNrRSPboards(); + } catch (exception &ex) { + cout << "Error during getNrRSPBoards" << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving getNrRSPBoards" << endl; + return result; } /** * Returns the maximum number of boards that could be connected. */ -JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getMaxRSPBoards(JNIEnv * env, jobject obj, jint ptrRSPport) +JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getMaxRSPBoards(JNIEnv *env , jobject , jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->getMaxRSPboards(); + cout << "Entering getMaxRSPBoards" << endl; + jint result; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->getMaxRSPboards(); + } catch (exception &ex) { + cout << "Error during getMaxRSPBoards" << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving getMaxRSPBoards" << endl; + return result; } /** @@ -576,12 +654,21 @@ JNIEXPORT jint JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getMaxRSPBoards( * @param filterNr The number of the filter to apply. * @param ptrRSPport Pointer to the RSPport instance. */ -JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setFilter(JNIEnv * env, jobject obj, jint rcuMask, jint filterNr, jint ptrRSPport) +JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setFilter(JNIEnv *env , jobject, jint rcuMask, jint filterNr, jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->setFilter(rcuMask, filterNr); + cout << "Entering setFilterrcuMask: " << rcuMask << endl; + jboolean result=false; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->setFilter(rcuMask, filterNr); + } catch (exception &ex) { + cout << "Error during setFilterrcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving setFilterrcuMask: " << rcuMask << endl; + return result; } /** @@ -591,12 +678,21 @@ JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_setFilter(JN * @param rcuMask A mask holding the selected board. * @param ptrRSPport Pointer to the RSPport instance */ -JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendClear(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendClear(JNIEnv *env, jobject, jint rcuMask, jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->sendClear(rcuMask); + cout << "Entering sendClear rcuMask: " << rcuMask << endl; + jboolean result=false; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->sendClear(rcuMask); + } catch (exception &ex) { + cout << "Error during sendClear rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving sendClear rcuMask: " << rcuMask << endl; + return result; } /** @@ -606,12 +702,22 @@ JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendClear(JN * @param rcuMask A mask holding the selected board. * @param ptrRSPport Pointer to the RSPport instance */ -JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendReset(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendReset(JNIEnv *env , jobject, jint rcuMask, jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->sendReset(rcuMask); + + cout << "Entering sendReset rcuMask: " << rcuMask << endl; + jboolean result=false; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->sendReset(rcuMask); + } catch (exception &ex) { + cout << "Error during sendReset rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving sendReset rcuMask: " << rcuMask << endl; + return result; } /** @@ -621,12 +727,21 @@ JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendReset(JN * @param rcuMask A mask holding the selected board. * @param ptrRSPport Pointer to the RSPport instance */ -JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendSync(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendSync(JNIEnv *env , jobject , jint rcuMask, jint ptrRSPport) { - // get pointer to RSPport - RSPport * IOport = (RSPport *) ptrRSPport; - - return IOport->sendSync(rcuMask); + cout << "Entering sendSync rcuMask: " << rcuMask << endl; + jboolean result=false; + // get pointer to RSPport + RSPport * IOport = (RSPport *) ptrRSPport; + try { + result=IOport->sendSync(rcuMask); + } catch (exception &ex) { + cout << "Error during sendSync rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + cout << "Leaving sendSync rcuMask: " << rcuMask << endl; + return result; } /** @@ -635,22 +750,32 @@ JNIEXPORT jboolean JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_sendSync(JNI * @param mask * @param ptrRSPport */ -JNIEXPORT jdoubleArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getBeamletStats(JNIEnv * env, jobject obj, jint rcuMask, jint ptrRSPport) +JNIEXPORT jdoubleArray JNICALL Java_nl_astron_lofar_java_mac_jrsp_Board_getBeamletStats(JNIEnv *env , jobject , jint rcuMask, jint ptrRSPport) { - RSPport * IOport = (RSPport *) ptrRSPport; - - // get a vector with the subband stats - vector<double> vecData = IOport->getBeamletStats(rcuMask); - - // make a jdouble array to return to Java - jdoubleArray ret = env->NewDoubleArray(vecData.size()); - - // move vecData elements to ret - for (int i = 0; i < vecData.size(); i++) - { - env->SetDoubleArrayRegion(ret, i, 1, &vecData[i]); - } - - // return array - return ret; + cout << "entering getBeamletStats rcuMask: " << rcuMask << endl; + jdoubleArray ret; + RSPport * IOport = (RSPport *) ptrRSPport; + + try { + // get a vector with the subband stats + vector<double> vecData = IOport->getBeamletStats(rcuMask); + + // make a jdouble array to return to Java + jdoubleArray ret = env->NewDoubleArray(vecData.size()); + + // move vecData elements to ret + for (uint i = 0; i < vecData.size(); i++) + { + env->SetDoubleArrayRegion(ret, i, 1, &vecData[i]); + } + } catch (exception &ex) { + cout << "Error during getBeamletStats rcuMask: " << rcuMask << endl; + cout << "What: " << ex.what() << endl; + env->ThrowNew(env->FindClass("java/lang/Exception"), ex.what()); + } + + + cout << "leaving getBeamletStats rcuMask: " << rcuMask << endl; + // return array + return ret; } -- GitLab