Merge pull request #349 from slsdetectorgroup/moenchfnum

Moenchfnum
This commit is contained in:
Dhanya Thattil 2022-01-31 08:37:35 +01:00 committed by GitHub
commit 5a3caf22d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 127 additions and 87 deletions

View File

@ -26,6 +26,7 @@ This document describes the differences between v6.1.0 and v6.0.0.
- refactoring (rxr) - refactoring (rxr)
- fixed patsetbit and patsetmask for moench - fixed patsetbit and patsetmask for moench
- changed default vref of adc9257 to 2V for moench (from 1.33V) - changed default vref of adc9257 to 2V for moench (from 1.33V)
- moench and ctb - can set the starting frame number of next acquisition
- mythen server kernel check incompatible (cet timezone) - mythen server kernel check incompatible (cet timezone)

View File

@ -594,7 +594,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def nextframenumber(self): def nextframenumber(self):
"""[Eiger][Jungfrau] Next frame number. Stopping acquisition might result in different frame numbers for different modules. """ """[Eiger][Jungfrau][Moench][CTB] Next frame number. Stopping acquisition might result in different frame numbers for different modules. """
return self.getNextFrameNumber() return self.getNextFrameNumber()
@nextframenumber.setter @nextframenumber.setter

View File

@ -165,11 +165,9 @@
#define PATTERN_OUT_LSB_REG (0x20 << MEM_MAP_SHIFT) #define PATTERN_OUT_LSB_REG (0x20 << MEM_MAP_SHIFT)
#define PATTERN_OUT_MSB_REG (0x21 << MEM_MAP_SHIFT) #define PATTERN_OUT_MSB_REG (0x21 << MEM_MAP_SHIFT)
/* Frames From Start 64 bit RO register TODO */ /* Frame number of next acquisition register (64 bit register) */
//#define FRAMES_FROM_START_LSB_REG (0x22 << MEM_MAP_SHIFT) // Not #define NEXT_FRAME_NUMB_LOCAL_LSB_REG (0x22 << MEM_MAP_SHIFT)
// used in FW #define FRAMES_FROM_START_MSB_REG (0x23 << #define NEXT_FRAME_NUMB_LOCAL_MSB_REG (0x23 << MEM_MAP_SHIFT)
// MEM_MAP_SHIFT)
//// Not used in FW
/* Frames From Start PG 64 bit RO register. Reset using CONTROL_CRST. TODO */ /* Frames From Start PG 64 bit RO register. Reset using CONTROL_CRST. TODO */
#define FRAMES_FROM_START_PG_LSB_REG (0x24 << MEM_MAP_SHIFT) #define FRAMES_FROM_START_PG_LSB_REG (0x24 << MEM_MAP_SHIFT)

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;
#endif #endif
// 1g readout // 1g readout
@ -581,6 +580,7 @@ void setupDetector() {
LOG(logERROR, ("%s\n\n", initErrorMessage)); LOG(logERROR, ("%s\n\n", initErrorMessage));
initError = FAIL; initError = FAIL;
} }
setNextFrameNumber(DEFAULT_STARTING_FRAME_NUMBER);
} }
int updateDatabytesandAllocateRAM() { int updateDatabytesandAllocateRAM() {
@ -898,6 +898,24 @@ int getReadoutMode() {
} }
/* parameters - timer */ /* parameters - timer */
int setNextFrameNumber(uint64_t value) {
LOG(logINFO,
("Setting next frame number: %llu\n", (long long unsigned int)value));
setU64BitReg(value, NEXT_FRAME_NUMB_LOCAL_LSB_REG,
NEXT_FRAME_NUMB_LOCAL_MSB_REG);
#ifndef VIRTUAL
// for 1g udp interface
setUDPFrameNumber(value);
#endif
return OK;
}
int getNextFrameNumber(uint64_t *retval) {
*retval = getU64BitReg(NEXT_FRAME_NUMB_LOCAL_LSB_REG,
NEXT_FRAME_NUMB_LOCAL_MSB_REG);
return OK;
}
void setNumFrames(int64_t val) { void setNumFrames(int64_t val) {
if (val > 0) { if (val > 0) {
LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val)); LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val));
@ -2000,11 +2018,14 @@ void *start_timer(void *arg) {
} }
// Send data // Send data
uint64_t frameNr = 0;
getNextFrameNumber(&frameNr);
// loop over number of frames // loop over number of frames
for (int frameNr = 0; frameNr != numFrames; ++frameNr) { for (int iframes = 0; iframes != numFrames; ++iframes) {
// check if manual stop // check if manual stop
if (sharedMemory_getStop() == 1) { if (sharedMemory_getStop() == 1) {
setNextFrameNumber(frameNr + iframes + 1);
break; break;
} }
@ -2023,7 +2044,7 @@ void *start_timer(void *arg) {
sls_detector_header *header = (sls_detector_header *)(packetData); sls_detector_header *header = (sls_detector_header *)(packetData);
header->detType = (uint16_t)myDetectorType; header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION - 1; header->version = SLS_DETECTOR_HEADER_VERSION - 1;
header->frameNumber = virtual_currentFrameNumber; header->frameNumber = frameNr + iframes;
header->packetNumber = i; header->packetNumber = i;
header->modId = 0; header->modId = 0;
header->row = detPos[X]; header->row = detPos[X];
@ -2036,19 +2057,18 @@ void *start_timer(void *arg) {
sendUDPPacket(0, 0, packetData, packetSize); sendUDPPacket(0, 0, packetData, packetSize);
} }
LOG(logINFO, ("Sent frame: %d [%lld]\n", frameNr, LOG(logINFO, ("Sent frame: %d [%lld]\n", iframes, frameNr + iframes));
(long long unsigned int)virtual_currentFrameNumber));
clock_gettime(CLOCK_REALTIME, &end); clock_gettime(CLOCK_REALTIME, &end);
int64_t timeNs = int64_t timeNs =
((end.tv_sec - begin.tv_sec) * 1E9 + (end.tv_nsec - begin.tv_nsec)); ((end.tv_sec - begin.tv_sec) * 1E9 + (end.tv_nsec - begin.tv_nsec));
// sleep for (period - exptime) // sleep for (period - exptime)
if (frameNr < numFrames) { // if there is a next frame if (iframes < numFrames) { // if there is a next frame
if (periodNs > timeNs) { if (periodNs > timeNs) {
usleep((periodNs - timeNs) / 1000); usleep((periodNs - timeNs) / 1000);
} }
} }
++virtual_currentFrameNumber; setNextFrameNumber(frameNr + numFrames);
} }
closeUDPSocket(0); closeUDPSocket(0);

View File

@ -108,21 +108,24 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS };
#define I2C_SHUNT_RESISTER_OHMS (0.005) #define I2C_SHUNT_RESISTER_OHMS (0.005)
/** Default Parameters */ /** Default Parameters */
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL) #define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
#define DEFAULT_NUM_SAMPLES (1) #define DEFAULT_STARTING_FRAME_NUMBER (1)
#define DEFAULT_NUM_FRAMES (1) #define DEFAULT_NUM_SAMPLES (1)
#define DEFAULT_EXPTIME (0) #define DEFAULT_NUM_FRAMES (1)
#define DEFAULT_NUM_CYCLES (1) #define DEFAULT_EXPTIME (0)
#define DEFAULT_PERIOD (1 * 1000 * 1000) // ns #define DEFAULT_NUM_CYCLES (1)
#define DEFAULT_DELAY (0) #define DEFAULT_PERIOD (1 * 1000 * 1000) // ns
#define DEFAULT_HIGH_VOLTAGE (0) #define DEFAULT_DELAY (0)
#define DEFAULT_VLIMIT (-100) #define DEFAULT_HIGH_VOLTAGE (0)
#define DEFAULT_TIMING_MODE (AUTO_TIMING) #define DEFAULT_VLIMIT (-100)
#define DEFAULT_TX_UDP_PORT (0x7e9a) #define DEFAULT_TIMING_MODE (AUTO_TIMING)
#define DEFAULT_RUN_CLK (200) // 40 #define DEFAULT_TX_UDP_PORT (0x7e9a)
#define DEFAULT_ADC_CLK (40) // 20 #define DEFAULT_RUN_CLK (200) // 40
#define DEFAULT_SYNC_CLK (40) // 20 #define DEFAULT_ADC_CLK (40) // 20
#define DEFAULT_DBIT_CLK (200) #define DEFAULT_SYNC_CLK (40) // 20
#define DEFAULT_DBIT_CLK (200)
#define UDP_HEADER_MAX_FRAME_VALUE (0xFFFFFFFFFFFF)
#define HIGHVOLTAGE_MIN (60) #define HIGHVOLTAGE_MIN (60)
#define HIGHVOLTAGE_MAX (200) // min dac val #define HIGHVOLTAGE_MAX (200) // min dac val

View File

@ -165,11 +165,9 @@
#define PATTERN_OUT_LSB_REG (0x20 << MEM_MAP_SHIFT) #define PATTERN_OUT_LSB_REG (0x20 << MEM_MAP_SHIFT)
#define PATTERN_OUT_MSB_REG (0x21 << MEM_MAP_SHIFT) #define PATTERN_OUT_MSB_REG (0x21 << MEM_MAP_SHIFT)
/* Frames From Start 64 bit RO register TODO */ /* Frame number of next acquisition register (64 bit register) */
//#define FRAMES_FROM_START_LSB_REG (0x22 << MEM_MAP_SHIFT) // Not #define NEXT_FRAME_NUMB_LOCAL_LSB_REG (0x22 << MEM_MAP_SHIFT)
// used in FW #define FRAMES_FROM_START_MSB_REG (0x23 << #define NEXT_FRAME_NUMB_LOCAL_MSB_REG (0x23 << MEM_MAP_SHIFT)
// MEM_MAP_SHIFT)
//// Not used in FW
/* Frames From Start PG 64 bit RO register. Reset using CONTROL_CRST. TODO */ /* Frames From Start PG 64 bit RO register. Reset using CONTROL_CRST. TODO */
#define FRAMES_FROM_START_PG_LSB_REG (0x24 << MEM_MAP_SHIFT) #define FRAMES_FROM_START_PG_LSB_REG (0x24 << MEM_MAP_SHIFT)

View File

@ -43,7 +43,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;
#endif #endif
// 1g readout // 1g readout
@ -569,6 +568,7 @@ void setupDetector() {
setFrequency(ADC_CLK, DEFAULT_ADC_CLK); setFrequency(ADC_CLK, DEFAULT_ADC_CLK);
setFrequency(DBIT_CLK, DEFAULT_DBIT_CLK); setFrequency(DBIT_CLK, DEFAULT_DBIT_CLK);
setPhase(ADC_CLK, DEFAULT_ADC_PHASE_DEG, 1); setPhase(ADC_CLK, DEFAULT_ADC_PHASE_DEG, 1);
setNextFrameNumber(DEFAULT_STARTING_FRAME_NUMBER);
} }
int updateDatabytesandAllocateRAM() { int updateDatabytesandAllocateRAM() {
@ -800,6 +800,24 @@ uint32_t getADCInvertRegister() {
} }
/* parameters - timer */ /* parameters - timer */
int setNextFrameNumber(uint64_t value) {
LOG(logINFO,
("Setting next frame number: %llu\n", (long long unsigned int)value));
setU64BitReg(value, NEXT_FRAME_NUMB_LOCAL_LSB_REG,
NEXT_FRAME_NUMB_LOCAL_MSB_REG);
#ifndef VIRTUAL
// for 1g udp interface
setUDPFrameNumber(value);
#endif
return OK;
}
int getNextFrameNumber(uint64_t *retval) {
*retval = getU64BitReg(NEXT_FRAME_NUMB_LOCAL_LSB_REG,
NEXT_FRAME_NUMB_LOCAL_MSB_REG);
return OK;
}
void setNumFrames(int64_t val) { void setNumFrames(int64_t val) {
if (val > 0) { if (val > 0) {
LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val)); LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val));
@ -1664,11 +1682,14 @@ void *start_timer(void *arg) {
} }
// Send data // Send data
uint64_t frameNr = 0;
getNextFrameNumber(&frameNr);
// loop over number of frames // loop over number of frames
for (int frameNr = 0; frameNr != numFrames; ++frameNr) { for (int iframes = 0; iframes != numFrames; ++iframes) {
// check if manual stop // check if manual stop
if (sharedMemory_getStop() == 1) { if (sharedMemory_getStop() == 1) {
setNextFrameNumber(frameNr + iframes + 1);
break; break;
} }
@ -1686,7 +1707,7 @@ void *start_timer(void *arg) {
sls_detector_header *header = (sls_detector_header *)(packetData); sls_detector_header *header = (sls_detector_header *)(packetData);
header->detType = (uint16_t)myDetectorType; header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION - 1; header->version = SLS_DETECTOR_HEADER_VERSION - 1;
header->frameNumber = virtual_currentFrameNumber; header->frameNumber = frameNr + iframes;
header->packetNumber = i; header->packetNumber = i;
header->modId = 0; header->modId = 0;
header->row = detPos[X]; header->row = detPos[X];
@ -1699,19 +1720,18 @@ void *start_timer(void *arg) {
sendUDPPacket(0, 0, packetData, packetSize); sendUDPPacket(0, 0, packetData, packetSize);
} }
LOG(logINFO, ("Sent frame: %d [%lld]\n", frameNr, LOG(logINFO, ("Sent frame: %d [%lld]\n", iframes, frameNr + iframes));
(long long unsigned int)virtual_currentFrameNumber));
clock_gettime(CLOCK_REALTIME, &end); clock_gettime(CLOCK_REALTIME, &end);
int64_t timeNs = int64_t timeNs =
((end.tv_sec - begin.tv_sec) * 1E9 + (end.tv_nsec - begin.tv_nsec)); ((end.tv_sec - begin.tv_sec) * 1E9 + (end.tv_nsec - begin.tv_nsec));
// sleep for (period - exptime) // sleep for (period - exptime)
if (frameNr < numFrames) { // if there is a next frame if (iframes < numFrames) { // if there is a next frame
if (periodNs > timeNs) { if (periodNs > timeNs) {
usleep((periodNs - timeNs) / 1000); usleep((periodNs - timeNs) / 1000);
} }
} }
++virtual_currentFrameNumber; setNextFrameNumber(frameNr + numFrames);
} }
closeUDPSocket(0); closeUDPSocket(0);

View File

@ -78,18 +78,19 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS };
#define NCHANS_PER_ADC (25) #define NCHANS_PER_ADC (25)
/** Default Parameters */ /** Default Parameters */
#define DEFAULT_PATTERN_FILE ("DefaultPattern_moench.txt") #define DEFAULT_PATTERN_FILE ("DefaultPattern_moench.txt")
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL) #define DEFAULT_STARTING_FRAME_NUMBER (1)
#define DEFAULT_NUM_SAMPLES (5000) #define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
#define DEFAULT_EXPTIME (0) #define DEFAULT_NUM_SAMPLES (5000)
#define DEFAULT_NUM_FRAMES (1) #define DEFAULT_EXPTIME (0)
#define DEFAULT_NUM_CYCLES (1) #define DEFAULT_NUM_FRAMES (1)
#define DEFAULT_PERIOD (1 * 1000 * 1000) // ns #define DEFAULT_NUM_CYCLES (1)
#define DEFAULT_DELAY (0) #define DEFAULT_PERIOD (1 * 1000 * 1000) // ns
#define DEFAULT_HIGH_VOLTAGE (0) #define DEFAULT_DELAY (0)
#define DEFAULT_VLIMIT (-100) #define DEFAULT_HIGH_VOLTAGE (0)
#define DEFAULT_TIMING_MODE (AUTO_TIMING) #define DEFAULT_VLIMIT (-100)
#define DEFAULT_TX_UDP_PORT (0x7e9a) #define DEFAULT_TIMING_MODE (AUTO_TIMING)
#define DEFAULT_TX_UDP_PORT (0x7e9a)
#define DEFAULT_RUN_CLK_AT_STARTUP (200) // 40 #define DEFAULT_RUN_CLK_AT_STARTUP (200) // 40
#define DEFAULT_ADC_CLK_AT_STARTUP (40) // 20 #define DEFAULT_ADC_CLK_AT_STARTUP (40) // 20
@ -104,6 +105,8 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS };
#define DEFAULT_PIPELINE (15) #define DEFAULT_PIPELINE (15)
#define DEFAULT_SETTINGS (G4_HIGHGAIN) #define DEFAULT_SETTINGS (G4_HIGHGAIN)
#define UDP_HEADER_MAX_FRAME_VALUE (0xFFFFFFFFFFFF)
// settings // settings
#define DEFAULT_PATMASK (0x00000C800000800AULL) #define DEFAULT_PATMASK (0x00000C800000800AULL)
#define G1_HIGHGAIN_PATSETBIT (0x00000C0000008008ULL) #define G1_HIGHGAIN_PATSETBIT (0x00000C0000008008ULL)

View File

@ -4,25 +4,11 @@
#include <inttypes.h> #include <inttypes.h>
/**
* Get current udp packet number
*/
uint32_t getUDPPacketNumber(); uint32_t getUDPPacketNumber();
/**
* Get current udp frame number
*/
uint64_t getUDPFrameNumber(); uint64_t getUDPFrameNumber();
void setUDPFrameNumber(uint64_t fnum);
/** /**
* Called for each UDP packet header creation
* @param buffer pointer to header
* @param id module id * @param id module id
*/ */
void createUDPPacketHeader(char *buffer, uint16_t id); void createUDPPacketHeader(char *buffer, uint16_t id);
/**
* fill up the udp packet with data till its full
* @param buffer pointer to memory
*/
int fillUDPPacket(char *buffer); int fillUDPPacket(char *buffer);

View File

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

View File

@ -32,6 +32,11 @@ uint64_t udpFrameNumber = 0;
uint32_t getUDPPacketNumber() { return udpPacketNumber; } uint32_t getUDPPacketNumber() { return udpPacketNumber; }
uint64_t getUDPFrameNumber() { return udpFrameNumber; } uint64_t getUDPFrameNumber() { return udpFrameNumber; }
void setUDPFrameNumber(uint64_t fnum) {
LOG(logINFO, ("Setting next frame number also for 1g to %lld\n", fnum));
// this gets incremented before setting it
udpFrameNumber = fnum - 1;
}
void createUDPPacketHeader(char *buffer, uint16_t id) { void createUDPPacketHeader(char *buffer, uint16_t id) {
memset(buffer, 0, sizeof(sls_detector_header)); memset(buffer, 0, sizeof(sls_detector_header));

View File

@ -4411,9 +4411,10 @@ int set_next_frame_number(int file_des) {
if (receiveData(file_des, &arg, sizeof(arg), INT64) < 0) if (receiveData(file_des, &arg, sizeof(arg), INT64) < 0)
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting next frame number to %llu\n", arg)); LOG(logDEBUG1, ("Setting next frame number to %llu\n", arg));
#if (!defined(EIGERD)) && (!defined(JUNGFRAUD)) #if (!defined(EIGERD)) && (!defined(JUNGFRAUD)) && (!defined(MOENCHD)) && \
(!defined(CHIPTESTBOARDD))
functionNotImplemented(); functionNotImplemented();
#else #else
// only set // only set
@ -4423,7 +4424,7 @@ int set_next_frame_number(int file_des) {
sprintf(mess, "Could not set next frame number. Cannot be 0.\n"); sprintf(mess, "Could not set next frame number. Cannot be 0.\n");
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} }
#ifdef EIGERD #if (defined(EIGERD)) || (defined(MOENCHD)) || (defined(CHIPTESTBOARDD))
else if (arg > UDP_HEADER_MAX_FRAME_VALUE) { else if (arg > UDP_HEADER_MAX_FRAME_VALUE) {
ret = FAIL; ret = FAIL;
#ifdef VIRTUAL #ifdef VIRTUAL
@ -4443,16 +4444,18 @@ int set_next_frame_number(int file_des) {
else { else {
ret = setNextFrameNumber(arg); ret = setNextFrameNumber(arg);
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess, "Could not set next frame number. Failed to " sprintf(
"map address.\n"); mess, "Could not set next frame number. %s\n",
(myDetectorType == EIGER ? "Failed to map address" : ""));
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} }
if (ret == OK) { if (ret == OK) {
uint64_t retval = 0; uint64_t retval = 0;
ret = getNextFrameNumber(&retval); ret = getNextFrameNumber(&retval);
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess, "Could not get next frame number. Failed " sprintf(mess, "Could not set next frame number. %s\n",
"to map address.\n"); (myDetectorType == EIGER ? "Failed to map address"
: ""));
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} else if (ret == -2) { } else if (ret == -2) {
sprintf(mess, "Inconsistent next frame number from " sprintf(mess, "Inconsistent next frame number from "
@ -4489,14 +4492,15 @@ 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)) #if (!defined(EIGERD)) && (!defined(JUNGFRAUD)) && (!defined(MOENCHD)) && \
(!defined(CHIPTESTBOARDD))
functionNotImplemented(); functionNotImplemented();
#else #else
// get // get
ret = getNextFrameNumber(&retval); ret = getNextFrameNumber(&retval);
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess, "Could not get next frame number. Failed to map " sprintf(mess, "Could not set next frame number. %s\n",
"address.\n"); (myDetectorType == EIGER ? "Failed to map address" : ""));
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} else if (ret == -2) { } else if (ret == -2) {
sprintf(mess, "Inconsistent next frame number from left and right " sprintf(mess, "Inconsistent next frame number from left and right "

View File

@ -594,11 +594,11 @@ class Detector {
Result<std::vector<uint64_t>> Result<std::vector<uint64_t>>
getNumMissingPackets(Positions pos = {}) const; getNumMissingPackets(Positions pos = {}) const;
/** [Eiger][Jungfrau] */ /** [Eiger][Jungfrau][Moench][CTB] */
Result<uint64_t> getNextFrameNumber(Positions pos = {}) const; Result<uint64_t> getNextFrameNumber(Positions pos = {}) const;
/** [Eiger][Jungfrau] Stopping acquisition might result in different frame /** [Eiger][Jungfrau][Moench][CTB] Stopping acquisition might result in
* numbers for different modules.*/ * different frame numbers for different modules.*/
void setNextFrameNumber(uint64_t value, Positions pos = {}); void setNextFrameNumber(uint64_t value, Positions pos = {});
/** [Eiger][Mythen3] Sends an internal software trigger to the detector /** [Eiger][Mythen3] Sends an internal software trigger to the detector

View File

@ -1537,11 +1537,12 @@ class CmdProxy {
GET_COMMAND(rx_missingpackets, getNumMissingPackets, GET_COMMAND(rx_missingpackets, getNumMissingPackets,
"\n\tNumber of missing packets for each port in receiver."); "\n\tNumber of missing packets for each port in receiver.");
INTEGER_COMMAND_VEC_ID(nextframenumber, getNextFrameNumber, INTEGER_COMMAND_VEC_ID(
setNextFrameNumber, StringTo<uint64_t>, nextframenumber, getNextFrameNumber, setNextFrameNumber,
"[n_value]\n\t[Eiger][Jungfrau] Next frame number. " StringTo<uint64_t>,
"Stopping acquisition might result in " "[n_value]\n\t[Eiger][Jungfrau][Moench][CTB] Next frame number. "
"different frame numbers for different modules."); "Stopping acquisition might result in different frame numbers for "
"different modules.");
GET_COMMAND(scanerrmsg, getScanErrorMessage, GET_COMMAND(scanerrmsg, getScanErrorMessage,
"\n\tGets Scan error message if scan ended in error for non " "\n\tGets Scan error message if scan ended in error for non "

View File

@ -6,10 +6,10 @@
#define APIRECEIVER 0x211124 #define APIRECEIVER 0x211124
#define APIGUI 0x211124 #define APIGUI 0x211124
#define APIEIGER 0x220128
#define APICTB 0x220128 #define APICTB 0x220128
#define APIGOTTHARD 0x220128 #define APIGOTTHARD 0x220128
#define APIGOTTHARD2 0x220128 #define APIGOTTHARD2 0x220128
#define APIJUNGFRAU 0x220128 #define APIJUNGFRAU 0x220128
#define APIMYTHEN3 0x220128 #define APIMYTHEN3 0x220128
#define APIMOENCH 0x220128 #define APIMOENCH 0x220128
#define APIEIGER 0x220128