diff --git a/slsDetectorGui/forms/form_cloneplot.ui b/slsDetectorGui/forms/form_cloneplot.ui
index 0965e65f2..5184ce500 100644
--- a/slsDetectorGui/forms/form_cloneplot.ui
+++ b/slsDetectorGui/forms/form_cloneplot.ui
@@ -55,6 +55,149 @@
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+
+
+
+
+ 0
+ 150
+ 110
+
+
+
+
+
+
+
+
+ 0
+ 150
+ 110
+
+
+
+
+
+
+
+
+ 139
+ 142
+ 142
+
+
+
+
+
+
+
+ Complete Image
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+
+
+
+
+ 255
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 139
+ 142
+ 142
+
+
+
+
+
+
+
+ Missing Packets
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 117
+ 20
+
+
+
+
+ -
@@ -241,7 +384,7 @@
0
0
376
- 28
+ 27
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 419
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Sans Serif
+ 10
+
+
+
+ Sample Plot
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+ 9
+
+
+ 0
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+
+
+
+
+ 255
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 139
+ 142
+ 142
+
+
+
+
+
+
+
+ Missing Packets
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+
+
+
+
+ 0
+ 150
+ 110
+
+
+
+
+
+
+
+
+ 0
+ 150
+ 110
+
+
+
+
+
+
+
+
+ 139
+ 142
+ 142
+
+
+
+
+
+
+
+ Complete Image
+
+
+ Qt::AlignCenter
+
+
+
diff --git a/slsDetectorGui/include/qCloneWidget.h b/slsDetectorGui/include/qCloneWidget.h
index f7f000fb6..831ac33e4 100644
--- a/slsDetectorGui/include/qCloneWidget.h
+++ b/slsDetectorGui/include/qCloneWidget.h
@@ -14,7 +14,7 @@ class qCloneWidget : public QMainWindow, private Ui::ClonePlotObject {
qCloneWidget(QWidget *parent, SlsQt1DPlot *p1, SlsQt2DPlot *p2,
SlsQt1DPlot *gp1, SlsQt2DPlot *gp, QString title,
QString filePath, QString fileName, int64_t aIndex,
- bool displayStats, QString min, QString max, QString sum);
+ bool displayStats, QString min, QString max, QString sum, bool completeImage);
~qCloneWidget();
diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h
index 1699c574a..b3898494a 100644
--- a/slsDetectorGui/include/qDrawPlot.h
+++ b/slsDetectorGui/include/qDrawPlot.h
@@ -114,6 +114,7 @@ class qDrawPlot : public QWidget, private Ui::PlotObject {
QString zTitle2d{"Intensity"};
QString plotTitle{""};
QString indexTitle{""};
+ bool completeImage{false};
bool xyRangeChanged{false};
double xyRange[4]{0, 0, 0, 0};
bool isXYRange[4]{false, false, false, false};
diff --git a/slsDetectorGui/src/qCloneWidget.cpp b/slsDetectorGui/src/qCloneWidget.cpp
index 6789c3092..42b80439e 100644
--- a/slsDetectorGui/src/qCloneWidget.cpp
+++ b/slsDetectorGui/src/qCloneWidget.cpp
@@ -15,13 +15,20 @@ qCloneWidget::qCloneWidget(QWidget *parent, SlsQt1DPlot *p1, SlsQt2DPlot *p2,
SlsQt1DPlot *gp1, SlsQt2DPlot *gp, QString title,
QString fPath, QString fName, int64_t aIndex,
bool displayStats, QString min, QString max,
- QString sum)
+ QString sum, bool completeImage)
: QMainWindow(parent), plot1d(p1), plot2d(p2), gainplot1d(gp1),
gainplot2d(gp), filePath(fPath), fileName(fName), acqIndex(aIndex) {
setupUi(this);
id = qCloneWidget::NumClones++;
SetupWidgetWindow(title);
DisplayStats(displayStats, min, max, sum);
+ lblCompleteImage->hide();
+ lblInCompleteImage->hide();
+ if (completeImage) {
+ lblCompleteImage->show();
+ } else {
+ lblInCompleteImage->show();
+ }
}
qCloneWidget::~qCloneWidget() {
diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp
index 3e79ba211..39103d78f 100644
--- a/slsDetectorGui/src/qDrawPlot.cpp
+++ b/slsDetectorGui/src/qDrawPlot.cpp
@@ -97,27 +97,13 @@ void qDrawPlot::SetupPlots() {
slsDetectorDefs::xy res = det->getDetectorSize();
nPixelsX = res.x;
nPixelsY = res.y;
- switch (detType) {
- case slsDetectorDefs::EIGER:
- try {
- if (det->getQuad().tsquash("Inconsistent values for quad type")) {
- nPixelsX /= 2;
- nPixelsY *= 2;
- if (nPixelsX != nPixelsY) {
- --nPixelsX;
- }
- }
- }
- CATCH_DISPLAY("Could not get quad.", "qDrawPlot::SetupPlots")
- break;
- default:
- break;
- }
LOG(logINFO) << "nPixelsX:" << nPixelsX;
LOG(logINFO) << "nPixelsY:" << nPixelsY;
boxPlot->setFont(QFont("Sans Serif", qDefs::Q_FONT_SIZE, QFont::Normal));
widgetStatistics->hide();
+ lblCompleteImage->hide();
+ lblInCompleteImage->hide();
// setup 1d data
@@ -586,7 +572,7 @@ void qDrawPlot::ClonePlot() {
clonegainplot2D, boxPlot->title(), fileSavePath,
fileSaveName, currentAcqIndex, displayStatistics,
lblMinDisp->text(), lblMaxDisp->text(),
- lblSumDisp->text());
+ lblSumDisp->text(), completeImage);
}
void qDrawPlot::SavePlot() {
@@ -756,6 +742,7 @@ void qDrawPlot::GetData(detectorData *data, uint64_t frameIndex,
<< " \t dynamic range: " << data->dynamicRange
<< std::endl
<< " \t file index: " << data->fileIndex << std::endl
+ << " \t complete image: " << data->completeImage << std::endl
<< " ]";
progress = (int)data->progressIndex;
@@ -776,6 +763,11 @@ void qDrawPlot::GetData(detectorData *data, uint64_t frameIndex,
delete[] data2d;
data2d = new double[nPixelsY * nPixelsX];
std::fill(data2d, data2d + nPixelsX * nPixelsY, 0);
+ if (gainData) {
+ delete[] gainData;
+ gainData = new double[nPixelsY * nPixelsX];
+ std::fill(gainData, gainData + nPixelsX * nPixelsY, 0);
+ }
}
// convert data to double
@@ -798,6 +790,7 @@ void qDrawPlot::GetData(detectorData *data, uint64_t frameIndex,
if ((int)subFrameIndex != -1) {
indexTitle = QString("%1 %2").arg(frameIndex, subFrameIndex);
}
+ completeImage = data->completeImage;
// reset pedestal
if (resetPedestal) {
@@ -1118,6 +1111,16 @@ void qDrawPlot::UpdatePlot() {
LOG(logDEBUG) << "Update Plot";
boxPlot->setTitle(plotTitle);
+
+ // notify of incomplete images
+ lblCompleteImage->hide();
+ lblInCompleteImage->hide();
+ if(completeImage) {
+ lblCompleteImage->show();
+ } else {
+ lblInCompleteImage->show();
+ }
+
if (is1d) {
Update1dPlot();
} else {
diff --git a/slsDetectorGui/src/qTabPlot.cpp b/slsDetectorGui/src/qTabPlot.cpp
index a9802f4bf..216f3cfe3 100644
--- a/slsDetectorGui/src/qTabPlot.cpp
+++ b/slsDetectorGui/src/qTabPlot.cpp
@@ -64,6 +64,7 @@ void qTabPlot::SetupWidgetWindow() {
chkGapPixels->setEnabled(true);
break;
case slsDetectorDefs::JUNGFRAU:
+ chkGapPixels->setEnabled(true);
chkGainPlot->setEnabled(true);
chkGainPlot->setChecked(true);
plot->EnableGainPlot(true);
@@ -312,8 +313,7 @@ void qTabPlot::GetGapPixels() {
disconnect(chkGapPixels, SIGNAL(toggled(bool)), this,
SLOT(SetGapPixels(bool)));
try {
- auto retval = det->getRxAddGapPixels().tsquash(
- "Inconsistent gap pixels enabled for all detectors.");
+ auto retval = det->getGapPixelsinCallback();
chkGapPixels->setChecked(retval);
}
CATCH_DISPLAY("Could not get gap pixels enable.", "qTabPlot::GetGapPixels")
@@ -324,7 +324,7 @@ void qTabPlot::GetGapPixels() {
void qTabPlot::SetGapPixels(bool enable) {
LOG(logINFO) << "Setting Gap Pixels Enable to " << enable;
try {
- det->setRxAddGapPixels(enable);
+ det->setGapPixelsinCallback(enable);
}
CATCH_HANDLE("Could not set gap pixels enable.", "qTabPlot::SetGapPixels",
this, &qTabPlot::GetGapPixels)
@@ -672,6 +672,8 @@ void qTabPlot::Refresh() {
break;
case slsDetectorDefs::JUNGFRAU:
chkGainPlot->setEnabled(true);
+ chkGapPixels->setEnabled(true);
+ GetGapPixels();
break;
case slsDetectorDefs::GOTTHARD2:
chkGainPlot1D->setEnabled(true);
diff --git a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer
index e655906b9..cde789563 100755
Binary files a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer and b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer differ
diff --git a/slsDetectorServers/eigerDetectorServer/CMakeLists.txt b/slsDetectorServers/eigerDetectorServer/CMakeLists.txt
index d27f38252..912f21bbf 100644
--- a/slsDetectorServers/eigerDetectorServer/CMakeLists.txt
+++ b/slsDetectorServers/eigerDetectorServer/CMakeLists.txt
@@ -22,7 +22,7 @@ target_include_directories(eigerDetectorServerMaster_virtual
target_compile_definitions(eigerDetectorServerMaster_virtual
PUBLIC EIGERD PCCOMPILE STOP_SERVER
- PUBLIC VIRTUAL DVIRTUAL_9M
+ PUBLIC VIRTUAL #VIRTUAL_9M
PUBLIC VIRTUAL_MASTER
)
@@ -38,27 +38,60 @@ install(TARGETS eigerDetectorServerMaster_virtual
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
-add_executable(eigerDetectorServerSlave_virtual
+
+
+
+
+add_executable(eigerDetectorServerSlaveTop_virtual
${src}
)
-target_include_directories(eigerDetectorServerSlave_virtual
+target_include_directories(eigerDetectorServerSlaveTop_virtual
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
-target_compile_definitions(eigerDetectorServerSlave_virtual
+target_compile_definitions(eigerDetectorServerSlaveTop_virtual
PUBLIC EIGERD PCCOMPILE STOP_SERVER
- PUBLIC VIRTUAL DVIRTUAL_9M
+ PUBLIC VIRTUAL #VIRTUAL_9M
+ PUBLIC VIRTUAL_TOP
)
-target_link_libraries(eigerDetectorServerSlave_virtual
+target_link_libraries(eigerDetectorServerSlaveTop_virtual
PUBLIC pthread rt
)
-set_target_properties(eigerDetectorServerSlave_virtual PROPERTIES
+set_target_properties(eigerDetectorServerSlaveTop_virtual PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)
-install(TARGETS eigerDetectorServerSlave_virtual
+install(TARGETS eigerDetectorServerSlaveTop_virtual
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+
+
+
+add_executable(eigerDetectorServerSlaveBottom_virtual
+ ${src}
+)
+
+target_include_directories(eigerDetectorServerSlaveBottom_virtual
+ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_compile_definitions(eigerDetectorServerSlaveBottom_virtual
+ PUBLIC EIGERD PCCOMPILE STOP_SERVER
+ PUBLIC VIRTUAL #VIRTUAL_9M
+)
+
+target_link_libraries(eigerDetectorServerSlaveBottom_virtual
+ PUBLIC pthread rt
+)
+
+set_target_properties(eigerDetectorServerSlaveBottom_virtual PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
+)
+
+install(TARGETS eigerDetectorServerSlaveBottom_virtual
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer
index 1d48a328f..500446b97 100755
Binary files a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer and b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer differ
diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
index c51deb81c..2a59ce9b4 100755
--- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
@@ -20,6 +20,7 @@
// Global variable from slsDetectorServer_funcs
extern int debugflag;
extern udpStruct udpDetails;
+extern const enum detectorType myDetectorType;
// Global variable from communication_funcs.c
extern int isControlServer;
@@ -88,6 +89,8 @@ pthread_t eiger_virtual_tid;
int eiger_virtual_stop = 0;
uint64_t eiger_virtual_startingframenumber = 0;
int eiger_virtual_detPos[2] = {0, 0};
+int eiger_virtual_test_mode = 0;
+int eiger_virtual_quad_mode = 0;
#endif
@@ -179,8 +182,23 @@ void basictests() {
LOG(logINFO, ("Compatibility - success\n"));
}
+#ifdef VIRTUAL
+void setTestImageMode(int ival) {
+ if (ival >= 0) {
+ if (ival == 0) {
+ LOG(logINFO, ("Switching off Image Test Mode\n"));
+ eiger_virtual_test_mode = 0;
+ } else {
+ LOG(logINFO, ("Switching on Image Test Mode\n"));
+ eiger_virtual_test_mode = 1;
+ }
+ }
+}
-
+int getTestImageMode() {
+ return eiger_virtual_test_mode;
+}
+#endif
/* Ids */
@@ -361,7 +379,11 @@ void getModuleConfiguration() {
top = 1;
#else
master = 0;
+#ifdef VIRTUAL_TOP
top = 1;
+#else
+ top = 0;
+#endif
#endif
#ifdef VIRTUAL_9M
normal = 0;
@@ -1291,13 +1313,15 @@ int setQuad(int value) {
if (!Feb_Control_SetQuad(value)) {
return FAIL;
}
+#else
+ eiger_virtual_quad_mode = value;
#endif
return OK;
}
int getQuad() {
#ifdef VIRTUAL
- return 0;
+ return eiger_virtual_quad_mode;
#else
return Beb_GetQuad();
#endif
@@ -1779,95 +1803,144 @@ void* start_timer(void* arg) {
int numPacketsPerFrame = (tgEnable ? 4 : 16) * dr;
int npixelsx = 256 * 2 * bytesPerPixel;
int databytes = 256 * 256 * 2 * bytesPerPixel;
- LOG(logINFO, (" dr:%f\n bytesperpixel:%d\n tgenable:%d\n datasize:%d\n packetsize:%d\n numpackes:%d\n npixelsx:%d\n databytes:%d\n",
- dr, bytesPerPixel, tgEnable, datasize, packetsize, numPacketsPerFrame, npixelsx, databytes));
+ int row = eiger_virtual_detPos[0];
+ int colLeft = top ? eiger_virtual_detPos[1] : eiger_virtual_detPos[1] + 1;
+ int colRight = top ? eiger_virtual_detPos[1] + 1 : eiger_virtual_detPos[1];
+ int ntotpixels = 256 * 256 * 4;
+ LOG(logINFO, (" dr:%d\n bytesperpixel:%f\n tgenable:%d\n datasize:%d\n packetsize:%d\n numpackes:%d\n npixelsx:%d\n databytes:%d\n ntotpixels:%d\n",
+ dr, bytesPerPixel, tgEnable, datasize, packetsize, numPacketsPerFrame, npixelsx, databytes, ntotpixels));
- //TODO: Generate data
- char imageData[databytes * 2];
- memset(imageData, 0, databytes * 2);
- {
- int i = 0;
- for (i = 0; i < databytes * 2; i += sizeof(uint8_t)) {
- *((uint8_t*)(imageData + i)) = i;
- }
- }
-
- //TODO: Send data
- {
- int frameNr = 1;
- for(frameNr=1; frameNr <= numFrames; ++frameNr ) {
-
- //check if virtual_stop is high
- if(eiger_virtual_stop == 1){
- break;
+ //TODO: Generate data
+ char imageData[databytes * 2];
+ memset(imageData, 0, databytes * 2);
+ {
+ int i = 0;
+ switch (dr) {
+ case 4:
+ for (i = 0; i < ntotpixels/2; ++i) {
+ *((uint8_t*)(imageData + i)) = eiger_virtual_test_mode ? 0xEE : (uint8_t)(((2 * i & 0xF) << 4) | ((2 * i + 1) & 0xF));
}
+ break;
+ case 8:
+ for (i = 0; i < ntotpixels; ++i) {
+ *((uint8_t*)(imageData + i)) = eiger_virtual_test_mode ? 0xFE : (uint8_t)i;
+ }
+ break;
+ case 16:
+ for (i = 0; i < ntotpixels; ++i) {
+ *((uint16_t*)(imageData + i * sizeof(uint16_t))) = eiger_virtual_test_mode ? 0xFFE : (uint16_t)i;
+ }
+ break;
+ case 32:
+ for (i = 0; i < ntotpixels; ++i) {
+ *((uint32_t*)(imageData + i * sizeof(uint32_t))) = eiger_virtual_test_mode ? 0xFFFFFE : (uint32_t)i;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ //TODO: Send data
+ {
+ int frameNr = 1;
+ for(frameNr=1; frameNr <= numFrames; ++frameNr ) {
- int srcOffset = 0;
- int srcOffset2 = npixelsx;
+ usleep(eiger_virtual_transmission_delay_frame);
+
+ //check if virtual_stop is high
+ if(eiger_virtual_stop == 1){
+ break;
+ }
+
+ int srcOffset = 0;
+ int srcOffset2 = npixelsx;
+
+ struct timespec begin, end;
+ clock_gettime(CLOCK_REALTIME, &begin);
+ usleep(exp_us);
+ char packetData[packetsize];
+ memset(packetData, 0, packetsize);
+ char packetData2[packetsize];
+ memset(packetData2, 0, packetsize);
- struct timespec begin, end;
- clock_gettime(CLOCK_REALTIME, &begin);
- usleep(exp_us);
- char packetData[packetsize];
- memset(packetData, 0, packetsize);
- char packetData2[packetsize];
- memset(packetData2, 0, packetsize);
-
- // loop packet
- {
- int i = 0;
- for(i = 0; i != numPacketsPerFrame; ++i) {
- int dstOffset = sizeof(sls_detector_header);
- int dstOffset2 = sizeof(sls_detector_header);
- // set header
- sls_detector_header* header = (sls_detector_header*)(packetData);
- header->frameNumber = frameNr;
- header->packetNumber = i;
- header = (sls_detector_header*)(packetData2);
- header->frameNumber = frameNr;
- header->packetNumber = i;
+ // loop packet
+ {
+ int i = 0;
+ for(i = 0; i != numPacketsPerFrame; ++i) {
+ int dstOffset = sizeof(sls_detector_header);
+ int dstOffset2 = sizeof(sls_detector_header);
+ // set header
+ sls_detector_header* header = (sls_detector_header*)(packetData);
+ header->detType = 3;//(uint16_t)myDetectorType; updated when firmware updates
+ header->version = SLS_DETECTOR_HEADER_VERSION - 1;
+ header->frameNumber = frameNr;
+ header->packetNumber = i;
+ header->row = row;
+ header->column = colLeft;
- // fill data
- {
- int psize = 0;
- for (psize = 0; psize < datasize; psize += npixelsx) {
+ header = (sls_detector_header*)(packetData2);
+ header->detType = (uint16_t)myDetectorType;
+ header->version = SLS_DETECTOR_HEADER_VERSION - 1;
+ header->frameNumber = frameNr;
+ header->packetNumber = i;
+ header->row = row;
+ header->column = colRight;
+ if (eiger_virtual_quad_mode) {
+ header->row = 1; // right is next row
+ header->column = 0; // right same first column
+ }
- if (dr == 32 && tgEnable == 0) {
- memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx/2);
- memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx/2);
+ // fill data
+ {
+ int psize = 0;
+ for (psize = 0; psize < datasize; psize += npixelsx) {
+
+ if (dr == 32 && tgEnable == 0) {
+ memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx/2);
+ memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx/2);
+ if (srcOffset % npixelsx == 0) {
+ srcOffset += npixelsx/2;
+ srcOffset2 += npixelsx/2;
+ }
+ // skip the other half (2 packets in 1 line for 32 bit)
+ else {
srcOffset += npixelsx;
- srcOffset2 += npixelsx;
- dstOffset += npixelsx/2;
- dstOffset2 += npixelsx/2;
- } else {
- memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx);
- memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx);
- srcOffset += 2 * npixelsx;
- srcOffset2 += 2 * npixelsx;
- dstOffset += npixelsx;
- dstOffset2 += npixelsx;
+ srcOffset2 += npixelsx;
}
+ dstOffset += npixelsx/2;
+ dstOffset2 += npixelsx/2;
+ } else {
+ memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx);
+ memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx);
+ srcOffset += 2 * npixelsx;
+ srcOffset2 += 2 * npixelsx;
+ dstOffset += npixelsx;
+ dstOffset2 += npixelsx;
}
}
-
- sendUDPPacket(0, packetData, packetsize);
- sendUDPPacket(1, packetData2, packetsize);
}
+ usleep(eiger_virtual_transmission_delay_left);
+ sendUDPPacket(0, packetData, packetsize);
+ usleep(eiger_virtual_transmission_delay_right);
+ sendUDPPacket(1, packetData2, packetsize);
}
- LOG(logINFO, ("Sent frame: %d\n", frameNr));
- clock_gettime(CLOCK_REALTIME, &end);
- int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
- (end.tv_nsec - begin.tv_nsec));
+ }
+ LOG(logINFO, ("Sent frame: %d\n", frameNr));
+ clock_gettime(CLOCK_REALTIME, &end);
+ int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
+ (end.tv_nsec - begin.tv_nsec));
- // sleep for (period - exptime)
- if (frameNr < numFrames) { // if there is a next frame
- if (periodns > time_ns) {
- usleep((periodns - time_ns)/ 1000);
- }
+ // sleep for (period - exptime)
+ if (frameNr < numFrames) { // if there is a next frame
+ if (periodns > time_ns) {
+ usleep((periodns - time_ns)/ 1000);
}
}
}
+ }
+
closeUDPSocket(0);
closeUDPSocket(1);
diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer
index b8b11d260..6d46a5b17 100755
Binary files a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer and b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer differ
diff --git a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer
index 83c0ff984..945d56400 100755
Binary files a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer and b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer differ
diff --git a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c
index e9e7b568e..133879600 100755
--- a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c
@@ -239,10 +239,10 @@ void setTestImageMode(int ival) {
uint32_t addr = MULTI_PURPOSE_REG;
if (ival >= 0) {
if (ival == 0) {
- LOG(logINFO, ("Switching on Image Test Mode\n"));
+ LOG(logINFO, ("Switching off Image Test Mode\n"));
bus_w (addr, bus_r(addr) & ~DGTL_TST_MSK);
} else {
- LOG(logINFO, ("Switching off Image Test Mode\n"));
+ LOG(logINFO, ("Switching on Image Test Mode\n"));
bus_w (addr, bus_r(addr) | DGTL_TST_MSK);
}
}
@@ -915,8 +915,9 @@ int getModule(sls_detector_module *myMod){
if (dacValues[idac] >= 0)
initialized = 1;
}
- if (initialized)
+ if (initialized) {
return OK;
+ }
return FAIL;
}
diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer
index 09b83a2be..7cf0b600d 100755
Binary files a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer and b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer differ
diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
index de6dcfbf8..dba6bad05 100755
--- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
@@ -31,6 +31,7 @@ char initErrorMessage[MAX_STR_LENGTH];
pthread_t pthread_virtual_tid;
int virtual_status = 0;
int virtual_stop = 0;
+int virtual_image_test_mode = 0;
#endif
enum detectorSettings thisSettings = UNINITIALIZED;
@@ -41,6 +42,7 @@ int detPos[4] = {};
int numUDPInterfaces = 1;
+
int isInitCheckDone() {
return initCheckDone;
}
@@ -226,6 +228,23 @@ int testBus() {
}
+#ifdef VIRTUAL
+void setTestImageMode(int ival) {
+ if (ival >= 0) {
+ if (ival == 0) {
+ LOG(logINFO, ("Switching off Image Test Mode\n"));
+ virtual_image_test_mode = 0;
+ } else {
+ LOG(logINFO, ("Switching on Image Test Mode\n"));
+ virtual_image_test_mode = 1;
+ }
+ }
+}
+
+int getTestImageMode() {
+ return virtual_image_test_mode;
+}
+#endif
/* Ids */
@@ -727,8 +746,9 @@ int getModule(sls_detector_module *myMod){
if (dacValues[idac] >= 0)
initialized = 1;
}
- if (initialized)
+ if (initialized) {
return OK;
+ }
return FAIL;
}
@@ -1646,75 +1666,81 @@ void* start_timer(void* arg) {
getNumTriggers() *
(getNumAdditionalStorageCells() + 1));
int64_t exp_us = getExpTime() / 1000;
+ const int npixels = 256 * 256 * 8;
+ const int datasize = 8192;
+ const int packetsize = datasize + sizeof(sls_detector_header);
+ const int numPacketsPerFrame = 128;
+ int transmissionDelayUs = getTransmissionDelayFrame() * 1000;
- //TODO: Generate data
- char imageData[DATA_BYTES];
- memset(imageData, 0, DATA_BYTES);
- {
- int i = 0;
- for (i = 0; i < DATA_BYTES; i += sizeof(uint16_t)) {
- *((uint16_t*)(imageData + i)) = i;
- }
+ //TODO: Generate data
+ char imageData[DATA_BYTES];
+ memset(imageData, 0, DATA_BYTES);
+ {
+ int i = 0;
+ for (i = 0; i < npixels; ++i) {
+ // avoiding gain also being divided when gappixels enabled in call back
+ *((uint16_t*)(imageData + i * sizeof(uint16_t))) = virtual_image_test_mode ? 0x0FFE : (uint16_t)i;
}
- int datasize = 8192;
-
-
- //TODO: Send data
- {
- int frameNr = 0;
- for(frameNr=0; frameNr!= numFrames; ++frameNr ) {
+ }
+
+
+ //TODO: Send data
+ {
+ int frameNr = 0;
+ for(frameNr=0; frameNr!= numFrames; ++frameNr ) {
- //check if virtual_stop is high
- if(virtual_stop == 1){
- break;
- }
+ usleep(transmissionDelayUs);
- int srcOffset = 0;
+ //check if virtual_stop is high
+ if(virtual_stop == 1){
+ break;
+ }
+
+ int srcOffset = 0;
+
+ struct timespec begin, end;
+ clock_gettime(CLOCK_REALTIME, &begin);
+
+ usleep(exp_us);
+
+ char packetData[packetsize];
+ memset(packetData, 0, packetsize);
- struct timespec begin, end;
- clock_gettime(CLOCK_REALTIME, &begin);
+ // loop packet
+ {
+ int i = 0;
+ for(i = 0; i != numPacketsPerFrame; ++i) {
+ // set header
+ sls_detector_header* header = (sls_detector_header*)(packetData);
+ header->detType = (uint16_t)myDetectorType;
+ header->version = SLS_DETECTOR_HEADER_VERSION - 1;
+ header->frameNumber = frameNr;
+ header->packetNumber = i;
+ header->modId = 0;
+ header->row = detPos[X];
+ header->column = detPos[Y];
- usleep(exp_us);
-
- const int size = datasize + sizeof(sls_detector_header);
- char packetData[size];
- memset(packetData, 0, sizeof(sls_detector_header));
-
- // loop packet
- {
- int i = 0;
- for(i=0; i!=128; ++i) {
- // set header
- sls_detector_header* header = (sls_detector_header*)(packetData);
- header->frameNumber = frameNr;
- header->packetNumber = i;
- header->modId = 0;
- header->row = detPos[X];
- header->column = detPos[Y];
- header->detType = (uint16_t)myDetectorType;
- header->version = SLS_DETECTOR_HEADER_VERSION - 1;
- // fill data
- memcpy(packetData + sizeof(sls_detector_header), imageData + srcOffset, datasize);
- srcOffset += datasize;
-
- sendUDPPacket(0, packetData, size);
- }
+ // fill data
+ memcpy(packetData + sizeof(sls_detector_header), imageData + srcOffset, datasize);
+ srcOffset += datasize;
+
+ sendUDPPacket(0, packetData, packetsize);
}
- LOG(logINFO, ("Sent frame: %d\n", frameNr));
- clock_gettime(CLOCK_REALTIME, &end);
- int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
- (end.tv_nsec - begin.tv_nsec));
-
- // sleep for (period - exptime)
- if (frameNr < numFrames) { // if there is a next frame
- if (periodns > time_ns) {
- usleep((periodns - time_ns)/ 1000);
- }
+ }
+ LOG(logINFO, ("Sent frame: %d\n", frameNr));
+ clock_gettime(CLOCK_REALTIME, &end);
+ int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
+ (end.tv_nsec - begin.tv_nsec));
+
+ // sleep for (period - exptime)
+ if (frameNr < numFrames) { // if there is a next frame
+ if (periodns > time_ns) {
+ usleep((periodns - time_ns)/ 1000);
}
}
}
+ }
- // }
closeUDPSocket(0);
diff --git a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
index f3756181a..43c46788c 100755
Binary files a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer and b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer differ
diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c
index 1746ea4bd..4e1e22470 100755
--- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c
@@ -969,8 +969,9 @@ enum detectorSettings getSettings() {
void setDAC(enum DACINDEX ind, int val, int mV) {
- if (val < 0 && val != LTC2620_GetPowerDownValue())
+ if (val < 0 && val != LTC2620_GetPowerDownValue()) {
return;
+ }
char* dac_names[] = {DAC_NAMES};
LOG(logINFO, ("Setting DAC %s\n", dac_names[ind]));
diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer
index 140e67239..0c3b1e35f 100755
Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer differ
diff --git a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h
index 4e7e0d9ff..b2337d03b 100755
--- a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h
+++ b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h
@@ -61,7 +61,7 @@ int testFpga();
int testBus();
#endif
-#ifdef GOTTHARDD
+#if defined(GOTTHARDD) || ((defined(EIGERD) || defined(JUNGFRAUD)) && defined(VIRTUAL))
void setTestImageMode(int ival);
int getTestImageMode();
#endif
diff --git a/slsDetectorServers/slsDetectorServer/src/ASIC_Driver.c b/slsDetectorServers/slsDetectorServer/src/ASIC_Driver.c
index c5f5acc60..a83c29f3b 100755
--- a/slsDetectorServers/slsDetectorServer/src/ASIC_Driver.c
+++ b/slsDetectorServers/slsDetectorServer/src/ASIC_Driver.c
@@ -26,8 +26,12 @@ void ASIC_Driver_SetDefines(char* driverfname) {
}
int ASIC_Driver_Set (int index, int length, char* buffer) {
+ char temp[20];
+ memset(temp, 0, sizeof(temp));
+ sprintf(temp, "%d", index + 1);
char fname[MAX_STR_LENGTH];
- sprintf(fname, "%s%d", ASIC_Driver_DriverFileName, index + 1);
+ strcpy(fname, ASIC_Driver_DriverFileName);
+ strcat(fname, temp);
LOG(logDEBUG2, ("\t[chip index: %d, length: %d, fname: %s]\n", index, length, fname));
{
LOG(logDEBUG2, ("\t[values: \n"));
diff --git a/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c b/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c
index 96ab3261e..26fc6b657 100755
--- a/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c
+++ b/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c
@@ -73,7 +73,11 @@ int LTC2620_D_SetDACValue (int dacnum, int val, int mV, char* dacname, int* dacv
LOG(logINFO, ("Setting DAC %2d [%-12s] : %d dac (%d mV)\n",dacnum, dacname, *dacval, dacmV));
char fname[MAX_STR_LENGTH];
- sprintf(fname, "%s%d", LTC2620_D_DriverFileName, dacnum);
+ strcpy(fname, LTC2620_D_DriverFileName);
+ char temp[20];
+ memset(temp, 0, sizeof(temp));
+ sprintf(temp, "%d", dacnum);
+ strcat(fname, temp);
LOG(logDEBUG1, ("fname %s\n",fname));
//open file
diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c
index 76e5bc705..301b0e51b 100755
--- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c
+++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c
@@ -101,17 +101,25 @@ int main(int argc, char *argv[]){
}
#ifdef STOP_SERVER
- char cmd[100];
- memset(cmd, 0, 100);
+ char cmd[MAX_STR_LENGTH];
+ memset(cmd, 0, MAX_STR_LENGTH);
#endif
if (isControlServer) {
LOG(logINFO, ("Opening control server on port %d \n", portno));
#ifdef STOP_SERVER
{
int i;
- for (i = 0; i < argc; ++i)
- sprintf(cmd, "%s %s", cmd, argv[i]);
- sprintf(cmd,"%s -stopserver -port %d &", cmd, portno + 1);
+ for (i = 0; i < argc; ++i) {
+ if (i > 0) {
+ strcat(cmd, " ");
+ }
+ strcat(cmd, argv[i]);
+ }
+ char temp[50];
+ memset(temp, 0, sizeof(temp));
+ sprintf(temp, " -stopserver -port %d &", portno + 1);
+ strcat(cmd, temp);
+
LOG(logDEBUG1, ("Command to start stop server:%s\n", cmd));
system(cmd);
}
diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c
index fa3fb4ab8..c151d6d76 100755
--- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c
+++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c
@@ -776,10 +776,10 @@ int set_image_test_mode(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting image test mode to \n", arg));
-#ifndef GOTTHARDD
- functionNotImplemented();
-#else
+#if defined(GOTTHARDD) || ((defined(EIGERD) || defined(JUNGFRAUD)) && defined(VIRTUAL))
setTestImageMode(arg);
+#else
+ functionNotImplemented();
#endif
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0);
}
@@ -790,11 +790,11 @@ int get_image_test_mode(int file_des) {
int retval = -1;
LOG(logDEBUG1, ("Getting image test mode\n"));
-#ifndef GOTTHARDD
- functionNotImplemented();
-#else
+#if defined(GOTTHARDD) || ((defined(EIGERD) || defined(JUNGFRAUD)) && defined(VIRTUAL))
retval = getTestImageMode();
LOG(logDEBUG1, ("image test mode retval: %d\n", retval));
+#else
+ functionNotImplemented();
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
@@ -1844,7 +1844,8 @@ int start_acquisition(int file_des) {
#endif
if (configured == FAIL) {
ret = FAIL;
- sprintf(mess, "Could not start acquisition because %s\n", configureMessage);
+ strcpy(mess, "Could not start acquisition because ");
+ strcat(mess, configureMessage);
LOG(logERROR,(mess));
} else {
ret = startStateMachine();
@@ -1979,7 +1980,8 @@ int start_and_read_all(int file_des) {
#endif
if (configured == FAIL) {
ret = FAIL;
- sprintf(mess, "Could not start acquisition because %s\n", configureMessage);
+ strcpy(mess, "Could not start acquisition because ");
+ strcat(mess, configureMessage);
LOG(logERROR,(mess));
} else {
ret = startStateMachine();
@@ -4352,7 +4354,11 @@ int copy_detector_server(int file_des) {
memset(cmd, 0, MAX_STR_LENGTH);
// copy server
- sprintf(cmd, "tftp %s -r %s -g", hostname, sname);
+ strcpy(cmd, "tftp ");
+ strcat(cmd, hostname);
+ strcat(cmd, " -r ");
+ strcat(cmd, sname);
+ strcat(cmd, " -g");
int success = executeCommand(cmd, retvals, logDEBUG1);
if (success == FAIL) {
ret = FAIL;
@@ -4364,7 +4370,8 @@ int copy_detector_server(int file_des) {
else {
LOG(logINFO, ("Server copied successfully\n"));
// give permissions
- sprintf(cmd, "chmod 777 %s", sname);
+ strcpy(cmd, "chmod 777 ");
+ strcat(cmd, sname);
executeCommand(cmd, retvals, logDEBUG1);
// edit /etc/inittab
@@ -4384,7 +4391,9 @@ int copy_detector_server(int file_des) {
LOG(logINFO, ("Deleted all lines containing DetectorServer in /etc/inittab\n"));
// append line
- sprintf(cmd, "echo \"ttyS0::respawn:/./%s\" >> /etc/inittab", sname);
+ strcpy(cmd, "echo \"ttyS0::respawn:/./");
+ strcat(cmd, sname);
+ strcat(cmd, "\" >> /etc/inittab");
executeCommand(cmd, retvals, logDEBUG1);
LOG(logINFO, ("/etc/inittab modified to have %s\n", sname));
diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h
index cc08a6ff9..692711507 100644
--- a/slsDetectorSoftware/include/Detector.h
+++ b/slsDetectorSoftware/include/Detector.h
@@ -5,6 +5,7 @@
#include
#include
#include
+#include