Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
LOFAR
Manage
Activity
Members
Labels
Plan
Issues
Wiki
Jira issues
Open Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RadioObservatory
LOFAR
Commits
a8b87b4a
Commit
a8b87b4a
authored
18 years ago
by
cvs
Browse files
Options
Downloads
Patches
Plain Diff
%lofarcvsmv%: Moved to LOFAR/JAVA/MAC/jRSP
parent
e1428044
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
MAC/APL/GUI/jRSP/src/nl_astron_lofar_mac_apl_gui_jrsp_Board.cc
+0
-656
0 additions, 656 deletions
...PL/GUI/jRSP/src/nl_astron_lofar_mac_apl_gui_jrsp_Board.cc
with
0 additions
and
656 deletions
MAC/APL/GUI/jRSP/src/nl_astron_lofar_mac_apl_gui_jrsp_Board.cc
deleted
100644 → 0
+
0
−
656
View file @
e1428044
// Always include lofar_config.h
#include
<lofar_config.h>
// Includes
#include
<jRSP/nl_astron_lofar_mac_apl_gui_jrsp_Board.h>
#include
<RSP/RSPport.h>
using
namespace
LOFAR
;
using
namespace
LOFAR
::
RSP
;
#include
<cstdio>
#include
<iostream>
using
namespace
std
;
// Define function's
jobject
ConvertBoardStatus
(
JNIEnv
*
,
BoardStatus
&
);
/**
* Returns a pointer to a new instance of RSPport. The returned pointer can be
* used by the other functions to call functions from RSPport without using
* a different RSPport.
* Every RSPport makes a connection with the RSP driver, so we only want one
* RSPport.
* @param env The java environment interface pointer.
* @param obj The "this" pointer.
* @return ptrRSPport Pointer to the RSPport object.
*/
JNIEXPORT
jint
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_init
(
JNIEnv
*
env
,
jobject
obj
,
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
;
}
/**
* Deletes the instance of RSPport we have created in init() based on the jint
* we have passed with this method.
* @param env The Java environment interface pointer.
* @param obj The "this" pointer.
* @param ptrRSPport Pointer to the RSPport that will be deleted.
*/
JNIEXPORT
void
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_delete
(
JNIEnv
*
env
,
jobject
obj
,
jint
ptrRSPport
)
{
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
delete
(
IOport
);
}
/**
* Implementation of the JNI method declared in the java file (nl.astron.lofar.mac.apl.gui.jrsp.Board).
* This function fills a BoardStatus object, that is returned by this method, with data from RSPIO.
* @param env The Java environment interface pointer.
* @param obj The "this" pointer.
* @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_mac_apl_gui_jrsp_Board_retrieveStatus
(
JNIEnv
*
env
,
jobject
obj
,
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/mac/apl/gui/jrsp/BoardStatus"
),
NULL
);
for
(
uint
i
=
0
;
i
<
vecBoardStatus
.
size
();
i
++
)
{
env
->
SetObjectArrayElement
(
arrBoardStatus
,
i
,
ConvertBoardStatus
(
env
,
vecBoardStatus
[
i
]));
}
return
arrBoardStatus
;
}
/**
* This method converts an C++ BoardStatus to a Java BoardStatus.
* @param BoardStatus C++ BoardStatus
* @return jobject Java 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/mac/apl/gui/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/mac/apl/gui/jrsp/SyncStatus;"
);
jfieldID
fidBlp1Sync
=
env
->
GetFieldID
(
clsStatus
,
"blp1Sync"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/SyncStatus;"
);
jfieldID
fidBlp2Sync
=
env
->
GetFieldID
(
clsStatus
,
"blp2Sync"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/SyncStatus;"
);
jfieldID
fidBlp3Sync
=
env
->
GetFieldID
(
clsStatus
,
"blp3Sync"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/SyncStatus;"
);
jfieldID
fidBlp0Rcu
=
env
->
GetFieldID
(
clsStatus
,
"blp0Rcu"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/RCUStatus;"
);
jfieldID
fidBlp1Rcu
=
env
->
GetFieldID
(
clsStatus
,
"blp1Rcu"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/RCUStatus;"
);
jfieldID
fidBlp2Rcu
=
env
->
GetFieldID
(
clsStatus
,
"blp2Rcu"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/RCUStatus;"
);
jfieldID
fidBlp3Rcu
=
env
->
GetFieldID
(
clsStatus
,
"blp3Rcu"
,
"Lnl/astron/lofar/mac/apl/gui/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/mac/apl/gui/jrsp/ADOStatus;"
);
jfieldID
fidBlp1AdcOffset
=
env
->
GetFieldID
(
clsStatus
,
"blp1AdcOffset"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/ADOStatus;"
);
jfieldID
fidBlp2AdcOffset
=
env
->
GetFieldID
(
clsStatus
,
"blp2AdcOffset"
,
"Lnl/astron/lofar/mac/apl/gui/jrsp/ADOStatus;"
);
jfieldID
fidBlp3AdcOffset
=
env
->
GetFieldID
(
clsStatus
,
"blp3AdcOffset"
,
"Lnl/astron/lofar/mac/apl/gui/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/mac/apl/gui/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
)
{
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
);
}
}
if
(
fidBlp1Sync
!=
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
);
}
}
if
(
fidBlp2Sync
!=
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
);
}
}
if
(
fidBlp3Sync
!=
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
);
}
}
// RCUStatus: blp0Rcu - blp3Rcu
jclass
clsRCUStatus
=
env
->
FindClass
(
"nl/astron/lofar/mac/apl/gui/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
)
{
env
->
SetIntField
(
objBlp0Rcu
,
fidNofOverflowX
,
boardStatus
.
blp0_rcu
.
nof_overflowx
);
env
->
SetIntField
(
objBlp0Rcu
,
fidNofOverflowY
,
boardStatus
.
blp0_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
)
{
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/mac/apl/gui/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
->
SetIntField
(
objBlp0AdcOffset
,
fidAdcOffsetX
,
boardStatus
.
blp0_adc_offset
.
adc_offset_x
);
env
->
SetIntField
(
objBlp0AdcOffset
,
fidAdcOffsetY
,
boardStatus
.
blp0_adc_offset
.
adc_offset_y
);
}
}
if
(
fidBlp1AdcOffset
!=
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
);
}
}
if
(
fidBlp2AdcOffset
!=
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
);
}
}
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
;
}
/**
* Sets the waveform settings.
* @param env
* @param obj
* @param rcuMask
* @param mode
* @param frequency
* @param amplitude
*/
JNIEXPORT
jboolean
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_setWaveformSettings
(
JNIEnv
*
env
,
jobject
obj
,
jint
rcuMask
,
jint
mode
,
jdouble
frequency
,
jshort
phase
,
jint
amplitude
,
jint
ptrRSPport
)
{
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
setWaveformSettings
(
rcuMask
,
mode
,
frequency
,
phase
,
amplitude
);
}
/**
* Returns the subband stats.
* @param env
* @param obj
* @param rcuMask
* @param ptrRSPport
* @return jdoubleArray
*/
JNIEXPORT
jdoubleArray
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getSubbandStats
(
JNIEnv
*
env
,
jobject
obj
,
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
;
}
/**
* Returns a array of nl.astron.lofar.mac.apl.gui.jrsp.WGRegisterType elements.
*/
JNIEXPORT
jobjectArray
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getWaveformSettings
(
JNIEnv
*
env
,
jobject
obj
,
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/mac/apl/gui/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
);
}
// return array
return
arrResults
;
}
// getWaveformSettings()
/**
* Returns the number of connected RCU's.
*/
JNIEXPORT
jint
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getNrRCUs
(
JNIEnv
*
env
,
jobject
obj
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
getNrRCUs
();
}
/**
* Returns the number of connected boards.
*/
JNIEXPORT
jint
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getNrRSPBoards
(
JNIEnv
*
env
,
jobject
obj
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
getNrRSPboards
();
}
/**
* Returns the maximum number of boards that could be connected.
*/
JNIEXPORT
jint
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getMaxRSPBoards
(
JNIEnv
*
env
,
jobject
obj
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
getMaxRSPboards
();
}
/**
* Sets filter.
* @param env
* @param obj
* @param rcuMask
* @param filterNr The number of the filter to apply.
* @param ptrRSPport Pointer to the RSPport instance.
*/
JNIEXPORT
jboolean
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_setFilter
(
JNIEnv
*
env
,
jobject
obj
,
jint
rcuMask
,
jint
filterNr
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
setFilter
(
rcuMask
,
filterNr
);
}
/**
* Sends clear signal to the selected board.
* @param env
* @param obj
* @param rcuMask A mask holding the selected board.
* @param ptrRSPport Pointer to the RSPport instance
*/
JNIEXPORT
jboolean
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_sendClear
(
JNIEnv
*
env
,
jobject
obj
,
jint
rcuMask
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
sendClear
(
rcuMask
);
}
/**
* Sends reset signal to the selected board.
* @param env
* @param obj
* @param rcuMask A mask holding the selected board.
* @param ptrRSPport Pointer to the RSPport instance
*/
JNIEXPORT
jboolean
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_sendReset
(
JNIEnv
*
env
,
jobject
obj
,
jint
rcuMask
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
sendReset
(
rcuMask
);
}
/**
* Sends sync signal to the selected board.
* @param env
* @param obj
* @param rcuMask A mask holding the selected board.
* @param ptrRSPport Pointer to the RSPport instance
*/
JNIEXPORT
jboolean
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_sendSync
(
JNIEnv
*
env
,
jobject
obj
,
jint
rcuMask
,
jint
ptrRSPport
)
{
// get pointer to RSPport
RSPport
*
IOport
=
(
RSPport
*
)
ptrRSPport
;
return
IOport
->
sendSync
(
rcuMask
);
}
/**
* @param env
* @param obj
* @param mask
* @param ptrRSPport
*/
JNIEXPORT
jdoubleArray
JNICALL
Java_nl_astron_lofar_mac_apl_gui_jrsp_Board_getBeamletStats
(
JNIEnv
*
env
,
jobject
obj
,
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
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment