Dev/g2 stop frame number (#980)

* get/set next frame number in G2 (firmware only has set, no get)
* firmware has issues: each stop keeps 2 frame header in fifo and the resetting frame number happens after that
* removed the option to set burstmode to burst external or continuwous internal
* needs to be revisited before 9.0.0
This commit is contained in:
maliakal_d 2024-10-02 15:26:06 +02:00 committed by GitHub
parent e59de85a33
commit 5e024153bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 235 additions and 105 deletions

View File

@ -743,7 +743,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def nextframenumber(self): def nextframenumber(self):
"""[Eiger][Jungfrau][Moench][CTB][Xilinx CTB] Next frame number. Stopping acquisition might result in different frame numbers for different modules. """ """[Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2] Next frame number. Stopping acquisition might result in different frame numbers for different modules. So, after stopping, next frame number (max + 1) is set for all the modules afterwards."""
return self.getNextFrameNumber() return self.getNextFrameNumber()
@nextframenumber.setter @nextframenumber.setter

View File

@ -135,11 +135,16 @@
#define DTA_OFFSET_REG (0x0A * REG_OFFSET + BASE_CONTROL) #define DTA_OFFSET_REG (0x0A * REG_OFFSET + BASE_CONTROL)
/** Module ID Register */
#define MOD_ID_REG (0x0B * REG_OFFSET + BASE_CONTROL) #define MOD_ID_REG (0x0B * REG_OFFSET + BASE_CONTROL)
#define MOD_ID_OFST (0) #define MOD_ID_OFST (0)
#define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST) #define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST)
/** Next Frame Number Register */
#define FRAME_NUMBER_LSB_REG (0x0C * REG_OFFSET + BASE_CONTROL)
#define FRAME_NUMBER_MSB_REG (0x0D * REG_OFFSET + BASE_CONTROL)
/* ASIC registers --------------------------------------------------*/ /* ASIC registers --------------------------------------------------*/
/* ASIC Config register */ /* ASIC Config register */

View File

@ -45,7 +45,6 @@ char initErrorMessage[MAX_STR_LENGTH];
#ifdef VIRTUAL #ifdef VIRTUAL
pthread_t pthread_virtual_tid; pthread_t pthread_virtual_tid;
int64_t virtual_currentFrameNumber = 2;
int virtual_moduleid = 0; int virtual_moduleid = 0;
#endif #endif
@ -75,6 +74,8 @@ int filterResistor = 0;
int cdsGain = 0; int cdsGain = 0;
int detPos[2] = {}; int detPos[2] = {};
int chipConfigured = 0; int chipConfigured = 0;
uint64_t nextFrameNumber = 0;
uint64_t acqStartFrameNumber = 0;
int isInitCheckDone() { return initCheckDone; } int isInitCheckDone() { return initCheckDone; }
@ -424,6 +425,8 @@ void setupDetector() {
detPos[0] = 0; detPos[0] = 0;
detPos[1] = 0; detPos[1] = 0;
chipConfigured = 0; chipConfigured = 0;
nextFrameNumber = 0;
acqStartFrameNumber = 0;
thisSettings = UNINITIALIZED; thisSettings = UNINITIALIZED;
injectedChannelsOffset = 0; injectedChannelsOffset = 0;
@ -528,6 +531,7 @@ void setupDetector() {
setSettings(DEFAULT_SETTINGS); setSettings(DEFAULT_SETTINGS);
// Initialization of acquistion parameters // Initialization of acquistion parameters
setNextFrameNumber(DEFAULT_FRAME_NUMBER);
setNumFrames(DEFAULT_NUM_FRAMES); setNumFrames(DEFAULT_NUM_FRAMES);
setNumTriggers(DEFAULT_NUM_CYCLES); setNumTriggers(DEFAULT_NUM_CYCLES);
setNumBursts(DEFAULT_NUM_BURSTS); setNumBursts(DEFAULT_NUM_BURSTS);
@ -1068,6 +1072,73 @@ int getDynamicRange(int *retval) {
} }
/* parameters - timer */ /* parameters - timer */
int setNextFrameNumber(uint64_t value) {
LOG(logINFO, ("Setting next frame number: %lu\n", value));
// decrement by 1 for firmware
setU64BitReg(value - 1, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
nextFrameNumber = value;
acqStartFrameNumber = value;
return OK;
}
int getNextFrameNumber(uint64_t *value) {
#ifdef VIRTUAL
return nextFrameNumber;
#endif
// no acquisition has occured
if ((nextFrameNumber - acqStartFrameNumber) == 0) {
LOG(logDEBUG, ("No acquisition has occured nf:%lld, acqStart:%lld\n",
nextFrameNumber, acqStartFrameNumber));
*value = nextFrameNumber;
return OK;
}
// Not implemented in firmware, calculate for now
int64_t framesLeft = getNumFramesLeft();
int64_t repeatsLeft = getNumTriggersLeft();
int64_t burstsLeft = getNumBurstsLeft();
int64_t numFrames = getNumFrames();
LOG(logDEBUG, ("fl:%lld rl:%lld bl:%lld nf:%ld\n", framesLeft,
repeatsLeft, burstsLeft, numFrames));
// burst mode
if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) {
// cannot get framesleft. So fix at 0
framesLeft = 0;
// repeats = #bursts (auto burst)
if (getTiming() == AUTO_TIMING) {
repeatsLeft = burstsLeft;
}
}
// continuous mdoe
else {
// repeats = 1 (no trigger for continuous auto)
if (getTiming() == AUTO_TIMING) {
repeatsLeft = 0;
}
// frames = 1 (no frames for continuous trigger)
else {
framesLeft = 0;
numFrames = 1;
}
}
LOG(logDEBUG, ("update fl:%lld rl:%lld bl:%lld nf:%ld\n", framesLeft,
repeatsLeft, burstsLeft, numFrames));
*value = nextFrameNumber;
// if not last frame
if (framesLeft != 0 || repeatsLeft != 0) {
if (framesLeft && !repeatsLeft)
framesLeft += 2; // why??
*value -= ((numFrames * repeatsLeft) + framesLeft);
}
LOG(logDEBUG, ("get next frame number retval: %lu\n", *value));
return OK;
}
void setNumFrames(int64_t val) { void setNumFrames(int64_t val) {
if (val > 0) { if (val > 0) {
numFramesReg = val; numFramesReg = val;
@ -1329,7 +1400,9 @@ int64_t getNumFramesLeft() {
if ((burstMode == CONTINUOUS_INTERNAL || if ((burstMode == CONTINUOUS_INTERNAL ||
burstMode == CONTINUOUS_EXTERNAL) && burstMode == CONTINUOUS_EXTERNAL) &&
getTiming() == AUTO_TIMING) { getTiming() == AUTO_TIMING) {
return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG); LOG(logDEBUG, ("getFramesLeft: %lld\n",
get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG)));
return (get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG) + 1);
} }
return -1; return -1;
} }
@ -1337,7 +1410,7 @@ int64_t getNumFramesLeft() {
int64_t getNumTriggersLeft() { int64_t getNumTriggersLeft() {
// trigger // trigger
if (getTiming() == TRIGGER_EXPOSURE) { if (getTiming() == TRIGGER_EXPOSURE) {
return get64BitReg(GET_CYCLES_LSB_REG, GET_CYCLES_MSB_REG); return (get64BitReg(GET_CYCLES_LSB_REG, GET_CYCLES_MSB_REG) + 1);
} }
return -1; return -1;
} }
@ -1356,7 +1429,7 @@ int64_t getNumBurstsLeft() {
// burst and auto // burst and auto
if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) && if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) &&
getTiming() == AUTO_TIMING) { getTiming() == AUTO_TIMING) {
return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG); return (get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG) + 1);
} }
return -1; return -1;
} }
@ -3360,6 +3433,39 @@ int startStateMachine() {
// start state machine // start state machine
bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_STRT_ACQSTN_MSK); bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_STRT_ACQSTN_MSK);
LOG(logDEBUG, ("Next frame number: %ld\n", nextFrameNumber));
acqStartFrameNumber = nextFrameNumber;
// increment the current frame number by (#frames x #triggers)
// done because there is no get frame number (decremented at stop with what
// is left)
{
int64_t frames = getNumFrames();
int64_t repeats = getNumTriggers();
int64_t bursts = getNumBursts();
if (getTiming() == AUTO_TIMING) {
// burst mode, repeats = #bursts
if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) {
repeats = bursts;
}
// continuous, repeats = 1 (no trigger as well)
else {
repeats = 1;
}
}
// trigger
else {
// continuous, numFrames is limited
if (burstMode == CONTINUOUS_INTERNAL ||
burstMode == CONTINUOUS_EXTERNAL) {
frames = 1;
}
}
nextFrameNumber += frames * repeats;
LOG(logDEBUG,
("If not stopped, nextframenumber: %ld\n", nextFrameNumber));
}
LOG(logINFO, ("Status Register: %08x\n", bus_r(STATUS_REG))); LOG(logINFO, ("Status Register: %08x\n", bus_r(STATUS_REG)));
return OK; return OK;
} }
@ -3419,7 +3525,7 @@ void *start_timer(void *arg) {
*((uint16_t *)(imageData + i * sizeof(uint16_t))) = *((uint16_t *)(imageData + i * sizeof(uint16_t))) =
(uint16_t)channelVal; (uint16_t)channelVal;
// LOG(logINFORED, ("[%d]:0x%08x\n", i, channelVal)); LOG(logDEBUG, ("[%d]:0x%08x\n", i, channelVal));
} }
char vetoData[vetodatasize]; char vetoData[vetodatasize];
memset(vetoData, 0, sizeof(vetodatasize)); memset(vetoData, 0, sizeof(vetodatasize));
@ -3427,109 +3533,121 @@ void *start_timer(void *arg) {
*((uint16_t *)(vetoData + i)) = i; *((uint16_t *)(vetoData + i)) = i;
} }
int iRxEntry = firstDest; {
// loop over number of repeats uint64_t frameNr = 0;
for (int repeatNr = 0; repeatNr != numRepeats; ++repeatNr) { getNextFrameNumber(&frameNr);
struct timespec rbegin, rend; int iRxEntry = firstDest;
clock_gettime(CLOCK_REALTIME, &rbegin); // loop over number of repeats
for (int repeatNr = 0; repeatNr != numRepeats; ++repeatNr) {
// loop over number of frames struct timespec rbegin, rend;
for (int frameNr = 0; frameNr != numFrames; ++frameNr) { clock_gettime(CLOCK_REALTIME, &rbegin);
// check if manual stop // loop over number of frames
if (sharedMemory_getStop() == 1) { for (int iframes = 0; iframes != numFrames; ++iframes) {
break;
}
// change gain and data for every frame // check if manual stop
{ if (sharedMemory_getStop() == 1) {
const int nchannels = NCHIP * NCHAN; setNextFrameNumber(frameNr + (repeatNr * numFrames) +
int gainVal = 0; iframes + 1);
for (int i = 0; i < nchannels; ++i) { break;
if ((i % nchannels) < 400) { }
gainVal = 1 + frameNr;
} else if ((i % nchannels) < 800) { // change gain and data for every frame
gainVal = 2 + frameNr; {
} else { const int nchannels = NCHIP * NCHAN;
gainVal = 3 + frameNr; int gainVal = 0;
for (int i = 0; i < nchannels; ++i) {
if ((i % nchannels) < 400) {
gainVal = 1 + iframes;
} else if ((i % nchannels) < 800) {
gainVal = 2 + iframes;
} else {
gainVal = 3 + iframes;
}
int dataVal =
*((uint16_t *)(imageData + i * sizeof(uint16_t)));
dataVal += iframes;
int channelVal = (dataVal & ~GAIN_VAL_MSK) |
(gainVal << GAIN_VAL_OFST);
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
(uint16_t)channelVal;
} }
int dataVal =
*((uint16_t *)(imageData + i * sizeof(uint16_t)));
dataVal += frameNr;
int channelVal =
(dataVal & ~GAIN_VAL_MSK) | (gainVal << GAIN_VAL_OFST);
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
(uint16_t)channelVal;
} }
} // sleep for exposure time
// sleep for exposure time struct timespec begin, end;
struct timespec begin, end; clock_gettime(CLOCK_REALTIME, &begin);
clock_gettime(CLOCK_REALTIME, &begin); usleep(expUs);
usleep(expUs);
// first interface // first interface
char packetData[packetsize]; char packetData[packetsize];
memset(packetData, 0, packetsize); memset(packetData, 0, packetsize);
// set header
sls_detector_header *header = (sls_detector_header *)(packetData);
header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION;
header->frameNumber = virtual_currentFrameNumber;
header->packetNumber = 0;
header->modId = virtual_moduleid;
header->row = detPos[Y];
header->column = detPos[X];
// fill data
memcpy(packetData + sizeof(sls_detector_header), imageData,
datasize);
// send 1 packet = 1 frame
sendUDPPacket(iRxEntry, 0, packetData, packetsize);
// second interface (veto)
char packetData2[vetopacketsize];
memset(packetData2, 0, vetopacketsize);
if (i10gbe) {
// set header // set header
veto_header *header = (veto_header *)(packetData2); sls_detector_header *header =
header->frameNumber = virtual_currentFrameNumber; (sls_detector_header *)(packetData);
header->bunchId = 0; header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION;
header->frameNumber =
frameNr + (repeatNr * numFrames) + iframes;
header->packetNumber = 0;
header->modId = virtual_moduleid;
header->row = detPos[Y];
header->column = detPos[X];
// fill data // fill data
memcpy(packetData2 + sizeof(veto_header), vetoData, memcpy(packetData + sizeof(sls_detector_header), imageData,
vetodatasize); datasize);
// send 1 packet = 1 frame // send 1 packet = 1 frame
sendUDPPacket(iRxEntry, 1, packetData2, vetopacketsize); sendUDPPacket(iRxEntry, 0, packetData, packetsize);
}
LOG(logINFO,
("Sent frame %s: %d (bursts/ triggers: %d) [%lld] to E%d\n",
(i10gbe ? "(+veto)" : ""), frameNr, repeatNr,
(long long unsigned int)virtual_currentFrameNumber, iRxEntry));
clock_gettime(CLOCK_REALTIME, &end);
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
(end.tv_nsec - begin.tv_nsec));
// sleep for (period - exptime) // second interface (veto)
if (frameNr < numFrames) { // if there is a next frame char packetData2[vetopacketsize];
if (periodNs > timeNs) { memset(packetData2, 0, vetopacketsize);
usleep((periodNs - timeNs) / 1000); if (i10gbe) {
// set header
veto_header *header = (veto_header *)(packetData2);
header->frameNumber =
frameNr + (repeatNr * numFrames) + iframes;
header->bunchId = 0;
// fill data
memcpy(packetData2 + sizeof(veto_header), vetoData,
vetodatasize);
// send 1 packet = 1 frame
sendUDPPacket(iRxEntry, 1, packetData2, vetopacketsize);
}
LOG(logINFO,
("Sent frame %s: %d (bursts/ triggers: %d) [%lld] to E%d\n",
(i10gbe ? "(+veto)" : ""), frameNr, repeatNr,
(frameNr + (repeatNr * numFrames) + iframes), iRxEntry));
clock_gettime(CLOCK_REALTIME, &end);
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
(end.tv_nsec - begin.tv_nsec));
// sleep for (period - exptime)
if (iframes < numFrames) { // if there is a next frame
if (periodNs > timeNs) {
usleep((periodNs - timeNs) / 1000);
}
}
++iRxEntry;
if (iRxEntry == numUdpDestinations) {
iRxEntry = 0;
} }
} }
++virtual_currentFrameNumber;
++iRxEntry;
if (iRxEntry == numUdpDestinations) {
iRxEntry = 0;
}
}
clock_gettime(CLOCK_REALTIME, &rend);
int64_t timeNs = ((rend.tv_sec - rbegin.tv_sec) * 1E9 +
(rend.tv_nsec - rbegin.tv_nsec));
// sleep for (repeatPeriodNs - time remaining) clock_gettime(CLOCK_REALTIME, &rend);
if (repeatNr < numRepeats) { // if there is a next repeat int64_t timeNs = ((rend.tv_sec - rbegin.tv_sec) * 1E9 +
if (repeatPeriodNs > timeNs) { (rend.tv_nsec - rbegin.tv_nsec));
usleep((repeatPeriodNs - timeNs) / 1000);
// sleep for (repeatPeriodNs - time remaining)
if (repeatNr < numRepeats) { // if there is a next repeat
if (repeatPeriodNs > timeNs) {
usleep((repeatPeriodNs - timeNs) / 1000);
}
} }
} }
// already being set in the start acquisition (also for real detectors)
setNextFrameNumber(frameNr + (numRepeats * numFrames) + 1);
} }
closeUDPSocket(0); closeUDPSocket(0);

View File

@ -61,6 +61,7 @@
#define DEFAULT_BURST_MODE (BURST_INTERNAL) #define DEFAULT_BURST_MODE (BURST_INTERNAL)
#define DEFAULT_FILTER_RESISTOR (0) #define DEFAULT_FILTER_RESISTOR (0)
#define DEFAILT_CDS_GAIN (0) #define DEFAILT_CDS_GAIN (0)
#define DEFAULT_FRAME_NUMBER (1)
#define DEFAULT_NUM_FRAMES (1) #define DEFAULT_NUM_FRAMES (1)
#define DEFAULT_NUM_CYCLES (1) #define DEFAULT_NUM_CYCLES (1)
#define DEFAULT_NUM_BURSTS (1) #define DEFAULT_NUM_BURSTS (1)

View File

@ -269,7 +269,8 @@ int selectStoragecellStart(int pos);
int getMaxStoragecellStart(); int getMaxStoragecellStart();
#endif #endif
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \ #if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) || \
defined(GOTTHARD2D)
int setNextFrameNumber(uint64_t value); int setNextFrameNumber(uint64_t value);
int getNextFrameNumber(uint64_t *value); int getNextFrameNumber(uint64_t *value);
#endif #endif

View File

@ -4710,7 +4710,8 @@ int set_next_frame_number(int file_des) {
LOG(logDEBUG1, ("Setting next frame number to %llu\n", arg)); LOG(logDEBUG1, ("Setting next frame number to %llu\n", arg));
#if !defined(EIGERD) && !defined(JUNGFRAUD) && !defined(MOENCHD) && \ #if !defined(EIGERD) && !defined(JUNGFRAUD) && !defined(MOENCHD) && \
!defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && \
!defined(GOTTHARD2D)
functionNotImplemented(); functionNotImplemented();
#else #else
// only set // only set
@ -4789,7 +4790,8 @@ int get_next_frame_number(int file_des) {
LOG(logDEBUG1, ("Getting next frame number \n")); LOG(logDEBUG1, ("Getting next frame number \n"));
#if !defined(EIGERD) && !defined(JUNGFRAUD) && !defined(MOENCHD) && \ #if !defined(EIGERD) && !defined(JUNGFRAUD) && !defined(MOENCHD) && \
!defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && \
!defined(GOTTHARD2D)
functionNotImplemented(); functionNotImplemented();
#else #else
// get // get
@ -6751,8 +6753,8 @@ int set_burst_mode(int file_des) {
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
switch (arg) { switch (arg) {
case BURST_INTERNAL: case BURST_INTERNAL:
case BURST_EXTERNAL: // case BURST_EXTERNAL:
case CONTINUOUS_INTERNAL: // case CONTINUOUS_INTERNAL:
case CONTINUOUS_EXTERNAL: case CONTINUOUS_EXTERNAL:
break; break;
default: default:

View File

@ -764,7 +764,7 @@ readnrows:
function: setReadNRows function: setReadNRows
nextframenumber: nextframenumber:
help: "[n_value]\n\t[Eiger][Jungfrau][Moench][Ctb][Xilinx Ctb] Next frame number. Stopping acquisition might result in different frame numbers for different modules." help: "[n_value]\n\t[Eiger][Jungfrau][Moench][Ctb][Xilinx Ctb][Gotthard2] Next frame number. Stopping acquisition might result in different frame numbers for different modules. So, after stopping, next frame number (max + 1) is set for all the modules afterwards."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:

View File

@ -661,11 +661,13 @@ class Detector {
Result<std::vector<int64_t>> Result<std::vector<int64_t>>
getRxCurrentFrameIndex(Positions pos = {}) const; getRxCurrentFrameIndex(Positions pos = {}) const;
/** [Eiger][Jungfrau][Moench][CTB][Xilinx CTB] */ /** [Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2] */
Result<uint64_t> getNextFrameNumber(Positions pos = {}) const; Result<uint64_t> getNextFrameNumber(Positions pos = {}) const;
/** [Eiger][Jungfrau][Moench][CTB][Xilinx CTB] Stopping acquisition might /** [Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2] Stopping
* result in different frame numbers for different modules.*/ * acquisition might result in different frame numbers for different
* modules. So, after stopping, next frame number (max + 1) is set for all
* the modules afterwards.*/
void setNextFrameNumber(uint64_t value, Positions pos = {}); void setNextFrameNumber(uint64_t value, Positions pos = {});
/** [Eiger][Mythen3][Jungfrau][Moench] Sends an internal software trigger to /** [Eiger][Mythen3][Jungfrau][Moench] Sends an internal software trigger to

View File

@ -911,7 +911,8 @@ void Detector::stopDetector(Positions pos) {
case defs::JUNGFRAU: case defs::JUNGFRAU:
case defs::MOENCH: case defs::MOENCH:
case defs::CHIPTESTBOARD: case defs::CHIPTESTBOARD:
case defs::XILINX_CHIPTESTBOARD: { case defs::XILINX_CHIPTESTBOARD:
case defs::GOTTHARD2: {
auto res = getNextFrameNumber(pos); auto res = getNextFrameNumber(pos);
if (!res.equal()) { if (!res.equal()) {
uint64_t maxVal = 0; uint64_t maxVal = 0;

View File

@ -2403,7 +2403,7 @@ TEST_CASE("nextframenumber", "[.cmdcall]") {
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU || if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
det_type == defs::MOENCH || det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH || det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) { det_type == defs::XILINX_CHIPTESTBOARD || det_type == defs::GOTTHARD2) {
auto prev_sfnum = det.getNextFrameNumber(); auto prev_sfnum = det.getNextFrameNumber();
REQUIRE_THROWS(caller.call("nextframenumber", {"0"}, -1, PUT)); REQUIRE_THROWS(caller.call("nextframenumber", {"0"}, -1, PUT));
{ {

View File

@ -6,9 +6,9 @@
#define APIRECEIVER "developer 0x230224" #define APIRECEIVER "developer 0x230224"
#define APICTB "developer 0x240918" #define APICTB "developer 0x240918"
#define APIGOTTHARD "developer 0x240918" #define APIGOTTHARD "developer 0x240918"
#define APIGOTTHARD2 "developer 0x240918"
#define APIMOENCH "developer 0x240918" #define APIMOENCH "developer 0x240918"
#define APIXILINXCTB "developer 0x240918" #define APIXILINXCTB "developer 0x240918"
#define APIEIGER "developer 0x240918" #define APIEIGER "developer 0x240918"
#define APIMYTHEN3 "developer 0x241001" #define APIMYTHEN3 "developer 0x241001"
#define APIJUNGFRAU "developer 0x241001" #define APIJUNGFRAU "developer 0x241001"
#define APIGOTTHARD2 "developer 0x241002"