diff --git a/integrationTests/test-eigerIntegration.cpp b/integrationTests/test-eigerIntegration.cpp
index 2fc9bdeb3..f63a91753 100644
--- a/integrationTests/test-eigerIntegration.cpp
+++ b/integrationTests/test-eigerIntegration.cpp
@@ -10,9 +10,9 @@ class MultiDetectorFixture {
public:
MultiDetectorFixture() : d(0, true, true) {
- d.setHostname(hostname.c_str());
- if (my_ip != "undefined")
- d.setReceiverHostname(my_ip);
+ d.setHostname(test::hostname.c_str());
+ if (test::my_ip != "undefined")
+ d.setReceiverHostname(test::my_ip);
}
~MultiDetectorFixture() { d.freeSharedMemory(); }
};
@@ -99,7 +99,6 @@ int to_time(uint32_t reg) {
TEST_CASE_METHOD(MultiDetectorFixture, "Read/write register",
"[.eigerintegration][cli]") {
- d.setTimer(ti::MEASUREMENTS_NUMBER, 1);
d.setNumberOfFrames(1);
d.setExposureTime(10000);
d.acquire();
@@ -132,7 +131,7 @@ TEST_CASE_METHOD(MultiDetectorFixture, "Get time left",
}
TEST_CASE_METHOD(MultiDetectorFixture, "Get ID", "[.eigerintegration][cli]") {
- std::string hn = hostname;
+ std::string hn = test::hostname;
hn.erase(std::remove(begin(hn), end(hn), 'b'), end(hn));
hn.erase(std::remove(begin(hn), end(hn), 'e'), end(hn));
auto hostnames = sls::split(hn, '+');
diff --git a/integrationTests/test-integrationDectector.cpp b/integrationTests/test-integrationDectector.cpp
index aa9153790..4270d6060 100755
--- a/integrationTests/test-integrationDectector.cpp
+++ b/integrationTests/test-integrationDectector.cpp
@@ -16,27 +16,27 @@
// Header holding all configurations for different detectors
#include "tests/config.h"
#include "tests/globals.h"
-
+// using namespace test;
// using dt = slsDetectorDefs::detectorType;
// extern std::string hostname;
// extern std::string detector_type;
// extern dt type;
TEST_CASE("Single detector no receiver", "[.integration][.single]") {
- auto t = slsDetector::getTypeFromDetector(hostname);
- CHECK(t == type);
+ auto t = slsDetector::getTypeFromDetector(test::hostname);
+ CHECK(t == test::type);
slsDetector d(t);
CHECK(d.getDetectorTypeAsEnum() == t);
- CHECK(d.getDetectorTypeAsString() == detector_type);
+ CHECK(d.getDetectorTypeAsString() == test::detector_type);
- d.setHostname(hostname);
- CHECK(d.getHostname() == hostname);
+ d.setHostname(test::hostname);
+ CHECK(d.getHostname() == test::hostname);
d.setOnline(true);
CHECK(d.getOnlineFlag() == true);
- CHECK(d.setDetectorType() == type);
+ CHECK(d.setDetectorType() == test::type);
d.freeSharedMemory();
}
@@ -54,8 +54,8 @@ TEST_CASE("Set control port then create a new object with this control port",
int new_cport = 1993;
int new_sport = 2000;
{
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setOnline(true);
CHECK(d.getControlPort() == old_cport);
d.setControlPort(new_cport);
@@ -64,8 +64,8 @@ TEST_CASE("Set control port then create a new object with this control port",
d.freeSharedMemory();
}
{
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setControlPort(new_cport);
d.setStopPort(new_sport);
CHECK(d.getControlPort() == new_cport);
@@ -79,8 +79,8 @@ TEST_CASE("Set control port then create a new object with this control port",
d.freeSharedMemory();
}
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setOnline(true);
CHECK(d.getStopPort() == DEFAULT_PORTNO + 1);
d.freeSharedMemory();
@@ -143,8 +143,8 @@ TEST_CASE("single EIGER detector no receiver basic set and get",
TEST_CASE("Locking mechanism and last ip", "[.integration][.single]") {
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setOnline(true);
// Check that detector server is unlocked then lock
@@ -161,13 +161,13 @@ TEST_CASE("Locking mechanism and last ip", "[.integration][.single]") {
d.lockServer(0);
CHECK(d.lockServer() == 0);
- CHECK(d.getLastClientIP() == my_ip);
+ CHECK(d.getLastClientIP() == test::my_ip);
d.freeSharedMemory();
}
TEST_CASE("Set settings", "[.integration][.single]"){
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setOnline(true);
CHECK(d.setSettings(defs::STANDARD) == defs::STANDARD);
}
@@ -197,8 +197,8 @@ TEST_CASE("Timer functions", "[.integration][cli]") {
// MEASURED_SUBPERIOD, /**< measured subperiod */
// MAX_TIMERS
- slsDetector d(type);
- d.setHostname(hostname);
+ slsDetector d(test::type);
+ d.setHostname(test::hostname);
d.setOnline(true);
// Number of frames
@@ -214,14 +214,14 @@ TEST_CASE("Timer functions", "[.integration][cli]") {
d.setTimer(slsDetectorDefs::timerIndex::FRAME_PERIOD, period);
CHECK(d.setTimer(slsDetectorDefs::timerIndex::FRAME_PERIOD) == period);
- if (type != dt::EIGER) {
+ if (test::type != dt::EIGER) {
auto delay = 10000;
d.setTimer(slsDetectorDefs::timerIndex::DELAY_AFTER_TRIGGER, delay);
CHECK(d.setTimer(slsDetectorDefs::timerIndex::DELAY_AFTER_TRIGGER) ==
delay);
}
- if (type != dt::EIGER) {
+ if (test::type != dt::EIGER) {
auto gates = 1;
d.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER, gates);
CHECK(d.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER) == gates);
@@ -231,7 +231,7 @@ TEST_CASE("Timer functions", "[.integration][cli]") {
d.setTimer(slsDetectorDefs::timerIndex::CYCLES_NUMBER, cycles);
CHECK(d.setTimer(slsDetectorDefs::timerIndex::CYCLES_NUMBER) == cycles);
- if (type == dt::EIGER) {
+ if (test::type == dt::EIGER) {
auto subtime = 200;
d.setTimer(slsDetectorDefs::timerIndex::SUBFRAME_ACQUISITION_TIME,
subtime);
diff --git a/integrationTests/test-integrationMulti.cpp b/integrationTests/test-integrationMulti.cpp
index 2eb138eb3..2df42fc60 100755
--- a/integrationTests/test-integrationMulti.cpp
+++ b/integrationTests/test-integrationMulti.cpp
@@ -7,19 +7,19 @@
using namespace Catch::literals;
TEST_CASE("Initialize a multi detector", "[.integration][.multi]") {
- auto hostnames = sls::split(hostname, '+');
+ auto hostnames = sls::split(test::hostname, '+');
multiSlsDetector d(0, true, true);
- d.setHostname(hostname.c_str());
+ d.setHostname(test::hostname.c_str());
REQUIRE(d.setOnline() == true); // get!
- CHECK(d.getHostname() == hostname);
+ CHECK(d.getHostname() == test::hostname);
for (size_t i = 0; i != hostnames.size(); ++i) {
CHECK(d.getHostname(i) == hostnames[i]);
}
- CHECK(d.getDetectorTypeAsEnum() == type);
- CHECK(d.getDetectorTypeAsString() == detector_type);
+ CHECK(d.getDetectorTypeAsEnum() == test::type);
+ CHECK(d.getDetectorTypeAsString() == test::detector_type);
CHECK(d.getNumberOfDetectors() == hostnames.size());
d.freeSharedMemory();
@@ -30,7 +30,7 @@ TEST_CASE("Initialize a multi detector", "[.integration][.multi]") {
TEST_CASE("Set and read timers", "[.integration][.multi]") {
multiSlsDetector d(0, true, true);
- d.setHostname(hostname.c_str());
+ d.setHostname(test::hostname.c_str());
// FRAME_NUMBER
int n_frames = 3;
@@ -58,9 +58,6 @@ TEST_CASE("Set and read timers", "[.integration][.multi]") {
// PROGRESS, /**< fraction of measurement elapsed - only get! */
// MEASUREMENTS_NUMBER,
- int measurements = 2;
- d.setTimer(ti::MEASUREMENTS_NUMBER, measurements);
- CHECK(d.setTimer(ti::MEASUREMENTS_NUMBER, -1) == measurements);
// FRAMES_FROM_START,
// FRAMES_FROM_START_PG,
@@ -68,7 +65,7 @@ TEST_CASE("Set and read timers", "[.integration][.multi]") {
// SUBFRAME_ACQUISITION_TIME, /**< subframe exposure time */
double subframe_exposure = 2000000; // ns
- if (type == dt::EIGER) {
+ if (test::type == dt::EIGER) {
d.setSubFrameExposureTime(subframe_exposure);
CHECK(d.setSubFrameExposureTime(-1) == Approx(subframe_exposure));
}
@@ -77,13 +74,13 @@ TEST_CASE("Set and read timers", "[.integration][.multi]") {
// SUBFRAME_DEADTIME, /**< subframe deadtime */
double subframe_deadtime = 4000; // ns
- if (type == dt::EIGER) {
+ if (test::type == dt::EIGER) {
d.setSubFrameExposureDeadTime(subframe_deadtime);
CHECK(d.setSubFrameExposureDeadTime(-1) == Approx(subframe_deadtime));
}
- if (type == dt::EIGER) {
+ if (test::type == dt::EIGER) {
// 32bit is needed for subframe exposure
d.setDynamicRange(32);
CHECK(d.setDynamicRange(-1) == 32);
diff --git a/slsDetectorGui/forms/form_tab_measurement.ui b/slsDetectorGui/forms/form_tab_measurement.ui
index ffcf9b848..8454d2434 100755
--- a/slsDetectorGui/forms/form_tab_measurement.ui
+++ b/slsDetectorGui/forms/form_tab_measurement.ui
@@ -255,6 +255,27 @@
QFrame::Plain
+ -
+
+
+ Run Index:
+
+
+
+ -
+
+
+ <nobr>Sets output file name prefix</nobr><br>
+<nobr>Check the box to enable write to file. </nobr>
+
+
+ File Name:
+
+
+ true
+
+
+
-
@@ -322,24 +343,62 @@
- -
-
-
- Run Index:
+
-
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>The starting frame number of next acquisition.</p><p>#startingfnum</p></body></html>
+
+
+
+
+
+
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+
+
+
+ -1
+
+
+ 2000000000
+
+
+ 0
- -
-
+
-
+
+
+ false
+
- <nobr>Sets output file name prefix</nobr><br>
-<nobr>Check the box to enable write to file. </nobr>
+ <html><head/><body><p>The starting frame number of next acquisition.</p><p>#startingfnum</p></body></html>
- File Name:
-
-
- true
+ Next Frame Number:
diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h
index ce97ad69d..7da464d2e 100755
--- a/slsDetectorGui/include/qTabMeasurement.h
+++ b/slsDetectorGui/include/qTabMeasurement.h
@@ -33,6 +33,7 @@ private slots:
void SetFileWrite(bool val);
void SetFileName();
void SetRunIndex(int val);
+ void SetStartingFrameNumber(int val);
void UpdateProgress();
void StartAcquisition();
void StopAcquisition();
@@ -54,6 +55,7 @@ private:
void GetFileWrite();
void GetFileName();
void GetRunIndex();
+ void GetStartingFrameNumber();
void ResetProgress();
@@ -81,6 +83,7 @@ private:
QPalette red;
bool delayImplemented;
bool sampleImplemented;
+ bool startingFnumImplemented;
bool isAcquisitionStopped{false};
int numMeasurements{1};
int currentMeasurement{0};
diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp
index 5c11335d5..7efad7761 100755
--- a/slsDetectorGui/src/qTabMeasurement.cpp
+++ b/slsDetectorGui/src/qTabMeasurement.cpp
@@ -37,7 +37,8 @@ void qTabMeasurement::SetupWidgetWindow() {
sampleImplemented = false;
delayImplemented = true;
- // by default, delay is disabled in form
+ startingFnumImplemented = false;
+ // by default, delay and starting fnum is disabled in form
lblDelay->setEnabled(true);
spinDelay->setEnabled(true);
comboDelayUnit->setEnabled(true);
@@ -50,6 +51,14 @@ void qTabMeasurement::SetupWidgetWindow() {
break;
case slsDetectorDefs::EIGER:
delayImplemented = false;
+ lblStartingFrameNumber->setEnabled(true);
+ spinStartingFrameNumber->setEnabled(true);
+ startingFnumImplemented = true;
+ break;
+ case slsDetectorDefs::JUNGFRAU:
+ lblStartingFrameNumber->setEnabled(true);
+ spinStartingFrameNumber->setEnabled(true);
+ startingFnumImplemented = true;
break;
default:
break;
@@ -83,6 +92,9 @@ void qTabMeasurement::Initialization() {
connect(chkFile, SIGNAL(toggled(bool)), this, SLOT(SetFileWrite(bool)));
connect(dispFileName, SIGNAL(editingFinished()), this, SLOT(SetFileName()));
connect(spinIndex, SIGNAL(valueChanged(int)), this, SLOT(SetRunIndex(int)));
+ if (startingFnumImplemented) {
+ connect(spinStartingFrameNumber, SIGNAL(valueChanged(int)), this, SLOT(SetStartingFrameNumber(int)));
+ }
connect(progressTimer, SIGNAL(timeout()), this, SLOT(UpdateProgress()));
connect(btnStart, SIGNAL(clicked()), this, SLOT(StartAcquisition()));
connect(btnStop, SIGNAL(clicked()), this, SLOT(StopAcquisition()));
@@ -512,6 +524,26 @@ void qTabMeasurement::SetRunIndex(int val) {
} CATCH_HANDLE("Could not set acquisition file index.", "qTabMeasurement::SetRunIndex", this, &qTabMeasurement::GetRunIndex)
}
+void qTabMeasurement::GetStartingFrameNumber() {
+ FILE_LOG(logDEBUG) << "Getting Starting Frame Number";
+ disconnect(spinStartingFrameNumber, SIGNAL(valueChanged(int)), this, SLOT(SetStartingFrameNumber(int)));
+
+ try {
+ auto retval = myDet->getStartingFrameNumber();
+ spinStartingFrameNumber->setValue(retval);
+ } CATCH_DISPLAY ("Could not get starting frame number.", "qTabMeasurement::GetStartingFrameNumber")
+
+ connect(spinStartingFrameNumber, SIGNAL(valueChanged(int)), this, SLOT(SetStartingFrameNumber(int)));
+}
+
+void qTabMeasurement::SetStartingFrameNumber(int val) {
+ FILE_LOG(logINFO) << "Setting Starting frame number to " << val;
+
+ try {
+ myDet->setStartingFrameNumber(val);
+ } CATCH_HANDLE("Could not set starting frame number.", "qTabMeasurement::SetStartingFrameNumber", this, &qTabMeasurement::GetStartingFrameNumber)
+}
+
void qTabMeasurement::ResetProgress() {
FILE_LOG(logDEBUG) << "Resetting progress";
lblCurrentFrame->setText("0");
@@ -590,6 +622,9 @@ void qTabMeasurement::AcquireFinished() {
FILE_LOG(logDEBUG) << "Acquire Finished";
UpdateProgress();
GetRunIndex();
+ if (startingFnumImplemented) {
+ GetStartingFrameNumber();
+ }
FILE_LOG(logDEBUG) << "Measurement " << currentMeasurement << " finished";
// next measurement if acq is not stopped
if (!isAcquisitionStopped && ((currentMeasurement + 1) < numMeasurements)) {
@@ -639,6 +674,9 @@ void qTabMeasurement::Refresh() {
GetFileWrite();
GetFileName();
GetRunIndex();
+ if (startingFnumImplemented) {
+ GetStartingFrameNumber();
+ }
ResetProgress();
}
diff --git a/slsDetectorServers/eigerDetectorServer/Beb.c b/slsDetectorServers/eigerDetectorServer/Beb.c
index 8d25e91e3..605b904ce 100755
--- a/slsDetectorServers/eigerDetectorServer/Beb.c
+++ b/slsDetectorServers/eigerDetectorServer/Beb.c
@@ -1302,47 +1302,77 @@ int Beb_SetStartingFrameNumber(uint64_t value) {
if (fd < 0) {
FILE_LOG(logERROR, ("Set Start Frame Number FAIL\n"));
return FAIL;
- } else {
- // since the read is not implemented in firmware yet
- Beb_deactivatedStartFrameNumber = value;
+ }
+ // since the read is not implemented in firmware yet
+ Beb_deactivatedStartFrameNumber = value;
- // decrement for firmware
- uint64_t valueInFirmware = value - 1;
- Beb_Write32(csp0base, UDP_HEADER_FRAME_NUMBER_LSB_OFST, valueInFirmware & (0xffffffff));
- Beb_Write32(csp0base, UDP_HEADER_FRAME_NUMBER_MSB_OFST, (valueInFirmware >> 32) & (0xffffffff));
- Beb_close(fd,csp0base);
- }
+ // decrement for firmware
+ uint64_t valueInFirmware = value - 1;
+ Beb_Write32(csp0base, UDP_HEADER_FRAME_NUMBER_LSB_OFST, valueInFirmware & (0xffffffff));
+ Beb_Write32(csp0base, UDP_HEADER_FRAME_NUMBER_MSB_OFST, (valueInFirmware >> 32) & (0xffffffff));
+ Beb_close(fd,csp0base);
- uint64_t retval = -1;
- if ((Beb_GetStartingFrameNumber(&retval) == OK) && (retval == value)) {
- FILE_LOG(logINFO, ("Going to reset Frame Number\n"));
- Beb_ResetFrameNumber();
- }
+ FILE_LOG(logINFO, ("Going to reset Frame Number\n"));
+ Beb_ResetFrameNumber();
return OK;
}
-int Beb_GetStartingFrameNumber(uint64_t* retval) {
+int Beb_GetStartingFrameNumber(uint64_t* retval, int tengigaEnable) {
if (!Beb_activated) {
*retval = Beb_deactivatedStartFrameNumber;
return OK;
}
- FILE_LOG(logDEBUG1, ("Getting start frame number\n"));
- // since it is not implemented in firmware yet
- *retval = Beb_deactivatedStartFrameNumber;
-/*
+ FILE_LOG(logDEBUG1, ("Getting start frame number\n"));
u_int32_t* csp0base = 0;
- int fd = Beb_open(&csp0base, XPAR_PLB_GPIO_TEST_BASEADDR);
+ int fd = Beb_open(&csp0base, XPAR_COUNTER_BASEADDR);
if (fd < 0) {
- FILE_LOG(logERROR, ("Set Start Frame Number FAIL\n"));
+ FILE_LOG(logERROR, ("Get Start Frame Number FAIL\n"));
return FAIL;
- } else {
- *retval = Beb_Read32(csp0base, UDP_HEADER_FRAME_NUMBER_MSB_OFST);
- uint32_t lretval = Beb_Read32(csp0base, UDP_HEADER_FRAME_NUMBER_MSB_OFST);
- *retval = (*retval << 32) | lretval;
+ }
+
+ uint32_t temp = 0;
+ if (!tengigaEnable) {
+ uint64_t left1g = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST);
+ temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST);
+ left1g = ((left1g << 32) | temp) >> 16;
+ ++left1g; // increment for firmware
+
+ uint64_t right1g = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST);
+ temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST);
+ right1g = ((right1g << 32) | temp) >> 16;
+ ++right1g; // increment for firmware
+
Beb_close(fd,csp0base);
+ if (left1g != right1g) {
+ FILE_LOG(logERROR, ("Retrieved inconsistent frame numbers from 1g left %llu and right %llu\n",
+ (long long int)left1g, (long long int)right1g));
+ *retval = (left1g > right1g) ? left1g : right1g; // give max to set it to when stopping acq & different value
+ return -2; // to differentiate between failed address mapping
+ }
+ *retval = left1g;
+ }
+
+ else {
+ uint64_t left10g = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST);
+ temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST);
+ left10g = ((left10g << 32) | temp) >> 16;
+ ++left10g; // increment for firmware
+
+ uint64_t right10g = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST);
+ temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST);
+ right10g = ((right10g << 32) | temp) >> 16;
+ Beb_close(fd,csp0base);
+ ++right10g; // increment for firmware
+
+ if (left10g != right10g) {
+ FILE_LOG(logERROR, ("Retrieved inconsistent frame numbers from `0g left %llu and right %llu\n",
+ (long long int)left10g, (long long int)right10g));
+ *retval = (left10g > right10g) ? left10g : right10g; // give max to set it to when stopping acq & different value
+ return -2; // to differentiate between failed address mapping
+ }
+ *retval = left10g;
}
-*/
return OK;
}
diff --git a/slsDetectorServers/eigerDetectorServer/Beb.h b/slsDetectorServers/eigerDetectorServer/Beb.h
index f215e5d4d..36d2c0ca7 100755
--- a/slsDetectorServers/eigerDetectorServer/Beb.h
+++ b/slsDetectorServers/eigerDetectorServer/Beb.h
@@ -78,7 +78,7 @@ void Beb_SetQuad(int value);
int Beb_GetQuad();
int Beb_SetDetectorPosition(int pos[]);
int Beb_SetStartingFrameNumber(uint64_t value);
-int Beb_GetStartingFrameNumber(uint64_t* retval);
+int Beb_GetStartingFrameNumber(uint64_t* retval, int tengigaEnable);
uint16_t Beb_swap_uint16( uint16_t val);
int Beb_open(u_int32_t** csp0base, u_int32_t offset);
diff --git a/slsDetectorServers/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorServers/eigerDetectorServer/FebRegisterDefs.h
index 9f3ac5454..686771347 100755
--- a/slsDetectorServers/eigerDetectorServer/FebRegisterDefs.h
+++ b/slsDetectorServers/eigerDetectorServer/FebRegisterDefs.h
@@ -202,9 +202,6 @@
#define UDP_HEADER_Y_OFST (16)
#define UDP_HEADER_Y_MSK (0xFFFF << UDP_HEADER_Y_OFST)
-// udp header (frame number)
-#define UDP_HEADER_FRAME_NUMBER_LSB_OFST (0x0140)
-#define UDP_HEADER_FRAME_NUMBER_MSB_OFST (0x0160)
diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer
index 031b60865..9d18f2e85 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 486be8cca..e8e80bcad 100755
--- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
@@ -666,7 +666,7 @@ int getStartingFrameNumber(uint64_t* retval) {
*retval = eiger_virtual_startingframenumber;
return OK;
#else
- return Beb_GetStartingFrameNumber(retval);
+ return Beb_GetStartingFrameNumber(retval, send_to_ten_gig);
#endif
}
@@ -1311,11 +1311,17 @@ int setDetectorPosition(int pos[]) {
}
void setQuad(int value) {
+#ifndef VIRTUAL
Beb_SetQuad(value);
+#endif
}
int getQuad() {
+#ifdef VIRTUAL
+ return 0;
+#else
return Beb_GetQuad();
+#endif
}
int enableTenGigabitEthernet(int val) {
@@ -1793,11 +1799,17 @@ int stopStateMachine() {
eiger_virtual_stop = 0;
return OK;
#else
+ if ((Feb_Control_StopAcquisition() != STATUS_IDLE) || (!Beb_StopAcquisition()) ) {
+ FILE_LOG(logERROR, ("failed to stop acquisition\n"));
+ return FAIL;
+ }
- if ((Feb_Control_StopAcquisition() == STATUS_IDLE) & Beb_StopAcquisition())
- return OK;
- FILE_LOG(logERROR, ("failed to stop acquisition\n"));
- return FAIL;
+ // ensure all have same starting frame numbers
+ uint64_t retval = 0;
+ if(Beb_GetStartingFrameNumber(&retval, send_to_ten_gig) == -2) {
+ Beb_SetStartingFrameNumber(retval + 1);
+ }
+ return OK;
#endif
}
diff --git a/slsDetectorServers/eigerDetectorServer/xparameters.h b/slsDetectorServers/eigerDetectorServer/xparameters.h
index 446c89859..fbdac2b1f 100755
--- a/slsDetectorServers/eigerDetectorServer/xparameters.h
+++ b/slsDetectorServers/eigerDetectorServer/xparameters.h
@@ -56,16 +56,34 @@ XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR
/** Version Numbers */
#define XPAR_VERSION 0xc6000000
+
+
/* Definitions for peripheral PLB_GPIO_TEST */
#define XPAR_PLB_GPIO_TEST_BASEADDR 0xD1010000
#define XPAR_PLB_GPIO_TEST_HIGHADDR 0xD101FFFF
+// udp header (set frame number)
+#define UDP_HEADER_FRAME_NUMBER_LSB_OFST (0x0140)
+#define UDP_HEADER_FRAME_NUMBER_MSB_OFST (0x0160)
+
+
/* Definitions for packet, frame and delay down counters */
#define XPAR_COUNTER_BASEADDR 0xD1020000
#define XPAR_COUNTER_HIGHADDR 0xD102FFFF
+// udp header (get frame number)
+#define UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST (0x0004)
+#define UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST (0x0024)
+#define UDP_HEADER_GET_FNUM_1G_RIGHT_LSB_OFST (0x0044)
+#define UDP_HEADER_GET_FNUM_1G_RIGHT_MSB_OFST (0x0064)
+#define UDP_HEADER_GET_FNUM_10G_LEFT_LSB_OFST (0x0084)
+#define UDP_HEADER_GET_FNUM_10G_LEFT_MSB_OFST (0x00A4)
+#define UDP_HEADER_GET_FNUM_10G_RIGHT_LSB_OFST (0x00C4)
+#define UDP_HEADER_GET_FNUM_10G_RIGHT_MSB_OFST (0x00E4)
+
+
/* Definitions for peripheral PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT */
#define XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR 0xC4100000
diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c
index 3b9bece4e..988269bfb 100755
--- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c
+++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c
@@ -4044,6 +4044,9 @@ int set_starting_frame_number(int file_des) {
if (ret == FAIL) {
sprintf(mess, "Could not get starting frame number. Failed to map address.\n");
FILE_LOG(logERROR,(mess));
+ } else if (ret == -2) {
+ sprintf(mess, "Inconsistent starting frame number from left and right FPGA. Please set it.\n");
+ FILE_LOG(logERROR,(mess));
} else {
if (arg != retval) {
ret = FAIL;
@@ -4073,6 +4076,9 @@ int get_starting_frame_number(int file_des) {
if (ret == FAIL) {
sprintf(mess, "Could not get starting frame number. Failed to map address.\n");
FILE_LOG(logERROR,(mess));
+ } else if (ret == -2) {
+ sprintf(mess, "Inconsistent starting frame number from left and right FPGA. Please set it.\n");
+ FILE_LOG(logERROR,(mess));
} else {
FILE_LOG(logDEBUG1, ("Start frame number retval: %u\n", retval));
}
diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h
index e84110be2..b498cdf09 100644
--- a/slsSupportLib/include/versionAPI.h
+++ b/slsSupportLib/include/versionAPI.h
@@ -4,7 +4,7 @@
#define APICTB 0x190604
#define APIGOTTHARD 0x190715
#define APIJUNGFRAU 0x190718
-#define APIEIGER 0x190722
+#define APIEIGER 0x190723
#define APILIB 0x190723
#define APIRECEIVER 0x190722
#define APIGUI 0x190723