mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-12 04:47:14 +02:00
2. Dev/add jf pedestal feature (#807)
This commit is contained in:
@ -255,6 +255,17 @@
|
||||
#define PLL_CNTRL_ADDR_OFST (16)
|
||||
#define PLL_CNTRL_ADDR_MSK (0x0000003F << PLL_CNTRL_ADDR_OFST)
|
||||
|
||||
|
||||
/* Pedestal Mode Regiser */
|
||||
#define PEDESTAL_MODE_REG (0x57 << MEM_MAP_SHIFT)
|
||||
|
||||
#define PEDESTAL_MODE_ITRTNS_OFST (0)
|
||||
#define PEDESTAL_MODE_ITRTNS_MSK (0x0000FFFF << PEDESTAL_MODE_ITRTNS_OFST)
|
||||
#define PEDESTAL_MODE_LNGTH_OFST (16)
|
||||
#define PEDESTAL_MODE_LNGTH_MSK (0x000000FF << PEDESTAL_MODE_LNGTH_OFST)
|
||||
#define PEDESTAL_MODE_ENBLE_OFST (31)
|
||||
#define PEDESTAL_MODE_ENBLE_MSK (0x00000001 << PEDESTAL_MODE_ENBLE_OFST)
|
||||
|
||||
/* Config Register for chip 1.1 */
|
||||
#define CONFIG_V11_REG (0x58 << MEM_MAP_SHIFT)
|
||||
|
||||
|
Binary file not shown.
@ -55,6 +55,9 @@ int32_t clkPhase[NUM_CLOCKS] = {};
|
||||
int detPos[4] = {};
|
||||
int chipConfigured = 0;
|
||||
|
||||
uint64_t normal_mode_frames = -1;
|
||||
uint64_t normal_mode_triggers = -1;
|
||||
|
||||
int isInitCheckDone() { return initCheckDone; }
|
||||
|
||||
int getInitResult(char **mess) {
|
||||
@ -555,6 +558,13 @@ void setupDetector() {
|
||||
setFlipRows(DEFAULT_FLIP_ROWS);
|
||||
setReadNRows(MAX_ROWS_PER_READOUT);
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
// setting pedestalmode depends on previous values
|
||||
bus_w(PEDESTAL_MODE_REG,
|
||||
bus_r(PEDESTAL_MODE_REG) & ~PEDESTAL_MODE_ENBLE_MSK);
|
||||
#endif
|
||||
setPedestalMode(DEFAULT_PEDESTAL_MODE, DEFAULT_PEDESTAL_FRAMES,
|
||||
DEFAULT_PEDESTAL_LOOPS);
|
||||
}
|
||||
|
||||
int resetToDefaultDacs(int hardReset) {
|
||||
@ -975,6 +985,9 @@ int getNextFrameNumber(uint64_t *retval) {
|
||||
}
|
||||
|
||||
void setNumFrames(int64_t val) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
if (val > 0) {
|
||||
LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val));
|
||||
set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG);
|
||||
@ -986,6 +999,9 @@ int64_t getNumFrames() {
|
||||
}
|
||||
|
||||
void setNumTriggers(int64_t val) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
if (val > 0) {
|
||||
LOG(logINFO, ("Setting number of triggers %lld\n", (long long int)val));
|
||||
set64BitReg(val, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG);
|
||||
@ -1439,6 +1455,9 @@ void setSynchronization(int enable) {
|
||||
}
|
||||
|
||||
void setTiming(enum timingMode arg) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
switch (arg) {
|
||||
case AUTO_TIMING:
|
||||
LOG(logINFO, ("Set Timing: Auto\n"));
|
||||
@ -2513,6 +2532,81 @@ uint64_t getSelectCurrentSource() {
|
||||
}
|
||||
}
|
||||
|
||||
int getPedestalMode() {
|
||||
return ((bus_r(PEDESTAL_MODE_REG) & PEDESTAL_MODE_ENBLE_MSK) >>
|
||||
PEDESTAL_MODE_ENBLE_OFST);
|
||||
}
|
||||
|
||||
void getPedestalParameters(uint8_t *frames, uint16_t *loops) {
|
||||
uint32_t addr = PEDESTAL_MODE_REG;
|
||||
*frames =
|
||||
((bus_r(addr) & PEDESTAL_MODE_LNGTH_MSK) >> PEDESTAL_MODE_LNGTH_OFST);
|
||||
*loops = ((bus_r(PEDESTAL_MODE_REG) & PEDESTAL_MODE_ITRTNS_MSK) >>
|
||||
PEDESTAL_MODE_ITRTNS_OFST);
|
||||
}
|
||||
|
||||
void setPedestalMode(int enable, uint8_t frames, uint16_t loops) {
|
||||
int prevPedestalEnable = getPedestalMode();
|
||||
uint32_t addr = PEDESTAL_MODE_REG;
|
||||
|
||||
if (enable) {
|
||||
LOG(logINFOBLUE, ("Enabling pedestal mode [frames: %hhu, loops: %hu]\n",
|
||||
frames, loops));
|
||||
// enable
|
||||
bus_w(addr, bus_r(addr) | PEDESTAL_MODE_ENBLE_MSK);
|
||||
// frames
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_LNGTH_MSK);
|
||||
bus_w(addr, bus_r(addr) | ((frames << PEDESTAL_MODE_LNGTH_OFST) &
|
||||
PEDESTAL_MODE_LNGTH_MSK));
|
||||
// loops
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_ITRTNS_MSK);
|
||||
bus_w(addr, bus_r(addr) | ((loops << PEDESTAL_MODE_ITRTNS_OFST) &
|
||||
PEDESTAL_MODE_ITRTNS_MSK));
|
||||
|
||||
// if it was switched off before, remember the #frames and #triggers
|
||||
if (prevPedestalEnable == 0) {
|
||||
normal_mode_frames = getNumFrames();
|
||||
normal_mode_triggers = getNumTriggers();
|
||||
LOG(logINFO, ("\tRemembering Normal mode #frames and "
|
||||
"#triggers[%lld, %lld]\n",
|
||||
normal_mode_frames, normal_mode_triggers));
|
||||
}
|
||||
|
||||
// overwrite #frames and #triggers to new values
|
||||
int64_t expFrames = -1;
|
||||
int64_t expTriggers = -1;
|
||||
enum timingMode timing = getTiming();
|
||||
if (timing == AUTO_TIMING ||
|
||||
(timing == TRIGGER_EXPOSURE && normal_mode_frames > 1)) {
|
||||
expFrames = frames * loops * 2;
|
||||
expTriggers = 1;
|
||||
} else {
|
||||
expFrames = 1;
|
||||
expTriggers = frames * loops * 2;
|
||||
}
|
||||
LOG(logINFO, ("\tOverwriting [#frames: %lld, #triggers: %lld]\n",
|
||||
expFrames, expTriggers));
|
||||
set64BitReg(expFrames, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG);
|
||||
set64BitReg(expTriggers, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG);
|
||||
|
||||
} else {
|
||||
LOG(logINFOBLUE, ("Disabling pedestal mode\n"));
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_ENBLE_MSK);
|
||||
|
||||
// if it was switched on before, reset the normal mode #frames and
|
||||
// #triggers
|
||||
if (prevPedestalEnable == 1) {
|
||||
LOG(logINFO,
|
||||
("\tResetting to Normal mode [#frames:%lld, #triggers:%lld\n",
|
||||
normal_mode_frames, normal_mode_triggers));
|
||||
set64BitReg(normal_mode_frames, SET_FRAMES_LSB_REG,
|
||||
SET_FRAMES_MSB_REG);
|
||||
set64BitReg(normal_mode_triggers, SET_CYCLES_LSB_REG,
|
||||
SET_CYCLES_MSB_REG);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int getTenGigaFlowControl() {
|
||||
return ((bus_r(CONFIG_REG) & CONFIG_ETHRNT_FLW_CNTRL_MSK) >>
|
||||
CONFIG_ETHRNT_FLW_CNTRL_OFST);
|
||||
|
@ -5,8 +5,8 @@
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define MIN_REQRD_VRSN_T_RD_API 0x171220
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x230516 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x230515 // 2.0 pcb (version = 011)
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x230920 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x230921 // 2.0 pcb (version = 011)
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define HARDWARE_VERSION_NUMBERS \
|
||||
@ -52,6 +52,9 @@
|
||||
#define DEFAULT_FLIP_ROWS (0)
|
||||
#define DEFAULT_FILTER_RESISTOR (1) // higher resistor
|
||||
#define DEFAULT_FILTER_CELL (0)
|
||||
#define DEFAULT_PEDESTAL_MODE (0)
|
||||
#define DEFAULT_PEDESTAL_FRAMES (1)
|
||||
#define DEFAULT_PEDESTAL_LOOPS (1)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200)
|
||||
|
@ -556,6 +556,9 @@ int getCurrentSource();
|
||||
int getFixCurrentSource();
|
||||
int getNormalCurrentSource();
|
||||
uint64_t getSelectCurrentSource();
|
||||
int getPedestalMode();
|
||||
void getPedestalParameters(uint8_t *frames, uint16_t *loops);
|
||||
void setPedestalMode(int enable, uint8_t frames, uint16_t loops);
|
||||
#endif
|
||||
|
||||
// eiger specific - iodelay, pulse, rate, temp, activate, delay nw parameter
|
||||
|
@ -327,3 +327,5 @@ int getRow();
|
||||
int setRow(int);
|
||||
int getColumn();
|
||||
int setColumn(int);
|
||||
int get_pedestal_mode(int);
|
||||
int set_pedestal_mode(int);
|
||||
|
@ -486,6 +486,8 @@ void function_table() {
|
||||
flist[F_SET_ROW] = &set_row;
|
||||
flist[F_GET_COLUMN] = &get_column;
|
||||
flist[F_SET_COLUMN] = &set_column;
|
||||
flist[F_GET_PEDESTAL_MODE] = &get_pedestal_mode;
|
||||
flist[F_SET_PEDESTAL_MODE] = &set_pedestal_mode;
|
||||
|
||||
// check
|
||||
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
||||
@ -724,7 +726,18 @@ int set_timing_mode(int file_des) {
|
||||
case GATED:
|
||||
case TRIGGER_GATED:
|
||||
#endif
|
||||
setTiming(arg);
|
||||
#if JUNGFRAUD
|
||||
// cannot set in pedestal mode
|
||||
if (getPedestalMode()) {
|
||||
ret = FAIL;
|
||||
sprintf(mess,
|
||||
"Cannot set timing mode in pedestal mode. Switch off "
|
||||
"pedestal mode to change timing mode.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
#endif
|
||||
if (ret == OK)
|
||||
setTiming(arg);
|
||||
break;
|
||||
default:
|
||||
modeNotImplemented("Timing mode", (int)arg);
|
||||
@ -1935,57 +1948,59 @@ int acquire(int blocking, int file_des) {
|
||||
#ifdef EIGERD
|
||||
// check for hardware mac and hardware ip
|
||||
if (udpDetails[0].srcmac != getDetectorMAC()) {
|
||||
ret = FAIL;
|
||||
uint64_t sourcemac = getDetectorMAC();
|
||||
char src_mac[MAC_ADDRESS_SIZE];
|
||||
getMacAddressinString(src_mac, MAC_ADDRESS_SIZE, sourcemac);
|
||||
sprintf(mess,
|
||||
ret = FAIL;
|
||||
uint64_t sourcemac = getDetectorMAC();
|
||||
char src_mac[MAC_ADDRESS_SIZE];
|
||||
getMacAddressinString(src_mac, MAC_ADDRESS_SIZE, sourcemac);
|
||||
sprintf(
|
||||
mess,
|
||||
"Invalid udp source mac address for this detector. Must be "
|
||||
"same as hardware detector mac address %s\n",
|
||||
src_mac);
|
||||
LOG(logERROR, (mess));
|
||||
} else if (!enableTenGigabitEthernet(GET_FLAG) &&
|
||||
(udpDetails[0].srcip != getDetectorIP())) {
|
||||
ret = FAIL;
|
||||
uint32_t sourceip = getDetectorIP();
|
||||
char src_ip[INET_ADDRSTRLEN];
|
||||
getIpAddressinString(src_ip, sourceip);
|
||||
sprintf(mess,
|
||||
LOG(logERROR, (mess));
|
||||
} else if (!enableTenGigabitEthernet(GET_FLAG) &&
|
||||
(udpDetails[0].srcip != getDetectorIP())) {
|
||||
ret = FAIL;
|
||||
uint32_t sourceip = getDetectorIP();
|
||||
char src_ip[INET_ADDRSTRLEN];
|
||||
getIpAddressinString(src_ip, sourceip);
|
||||
sprintf(
|
||||
mess,
|
||||
"Invalid udp source ip address for this detector. Must be "
|
||||
"same as hardware detector ip address %s in 1G readout "
|
||||
"mode \n",
|
||||
src_ip);
|
||||
LOG(logERROR, (mess));
|
||||
} else
|
||||
LOG(logERROR, (mess));
|
||||
} else
|
||||
#endif
|
||||
if (configured == FAIL) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not start acquisition because ");
|
||||
strcat(mess, configureMessage);
|
||||
LOG(logERROR, (mess));
|
||||
} else if (sharedMemory_getScanStatus() == RUNNING) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not start acquisition because a scan is "
|
||||
"already running!\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
memset(scanErrMessage, 0, MAX_STR_LENGTH);
|
||||
sharedMemory_setScanStop(0);
|
||||
sharedMemory_setScanStatus(IDLE); // if it was error
|
||||
if (pthread_create(&pthread_tid, NULL, &start_state_machine,
|
||||
&blocking)) {
|
||||
if (configured == FAIL) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not start acquisition thread!\n");
|
||||
strcpy(mess, "Could not start acquisition because ");
|
||||
strcat(mess, configureMessage);
|
||||
LOG(logERROR, (mess));
|
||||
} else if (sharedMemory_getScanStatus() == RUNNING) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not start acquisition because a scan is "
|
||||
"already running!\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
// wait for blocking always (scan or not)
|
||||
// non blocking-no scan also wait (for error message)
|
||||
// non blcoking-scan dont wait (there is scanErrorMessage)
|
||||
if (blocking || !scan) {
|
||||
pthread_join(pthread_tid, NULL);
|
||||
memset(scanErrMessage, 0, MAX_STR_LENGTH);
|
||||
sharedMemory_setScanStop(0);
|
||||
sharedMemory_setScanStatus(IDLE); // if it was error
|
||||
if (pthread_create(&pthread_tid, NULL, &start_state_machine,
|
||||
&blocking)) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not start acquisition thread!\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
// wait for blocking always (scan or not)
|
||||
// non blocking-no scan also wait (for error message)
|
||||
// non blcoking-scan dont wait (there is scanErrorMessage)
|
||||
if (blocking || !scan) {
|
||||
pthread_join(pthread_tid, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
}
|
||||
@ -2211,6 +2226,14 @@ int set_num_frames(int file_des) {
|
||||
(long long unsigned int)arg, MAX_FRAMES_IN_BURST_MODE);
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
#elif JUNGFRAUD
|
||||
// cannot set in pedestal mode
|
||||
if (getPedestalMode()) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Cannot set frames in pedestal mode. It is "
|
||||
"overwritten anyway.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
#endif
|
||||
if (ret == OK) {
|
||||
setNumFrames(arg);
|
||||
@ -2247,10 +2270,22 @@ int set_num_triggers(int file_des) {
|
||||
|
||||
// only set
|
||||
if (Server_VerifyLock() == OK) {
|
||||
setNumTriggers(arg);
|
||||
int64_t retval = getNumTriggers();
|
||||
LOG(logDEBUG1, ("retval num triggers %lld\n", (long long int)retval));
|
||||
validate64(&ret, mess, arg, retval, "set number of triggers", DEC);
|
||||
#if JUNGFRAUD
|
||||
// cannot set in pedestal mode
|
||||
if (getPedestalMode()) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Cannot set triggers in pedestal mode. It is "
|
||||
"overwritten anyway.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
#endif
|
||||
if (ret == OK) {
|
||||
setNumTriggers(arg);
|
||||
int64_t retval = getNumTriggers();
|
||||
LOG(logDEBUG1,
|
||||
("retval num triggers %lld\n", (long long int)retval));
|
||||
validate64(&ret, mess, arg, retval, "set number of triggers", DEC);
|
||||
}
|
||||
}
|
||||
return Server_SendResult(file_des, INT64, NULL, 0);
|
||||
}
|
||||
@ -7791,62 +7826,20 @@ int set_scan(int file_des) {
|
||||
int stop = args[3];
|
||||
int step = args[4];
|
||||
|
||||
// disable scan
|
||||
if (enable == 0) {
|
||||
LOG(logINFOBLUE, ("Disabling scan"));
|
||||
scan = 0;
|
||||
numScanSteps = 0;
|
||||
// setting number of frames to 1
|
||||
int64_t arg = 1;
|
||||
setNumFrames(arg);
|
||||
retval = getNumFrames();
|
||||
LOG(logDEBUG1, ("retval num frames %lld\n", (long long int)retval));
|
||||
validate64(&ret, mess, arg, retval, "set number of frames", DEC);
|
||||
#ifdef JUNGFRAUD
|
||||
if (getPedestalMode()) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Cannot set scan when in pedestal mode.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
// enable scan
|
||||
else {
|
||||
if ((start < stop && step <= 0) || (stop < start && step >= 0)) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Invalid scan parameters\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
// trimbit scan
|
||||
if (index == TRIMBIT_SCAN) {
|
||||
LOG(logINFOBLUE, ("Trimbit scan enabled\n"));
|
||||
scanTrimbits = 1;
|
||||
scanGlobalIndex = index;
|
||||
scanSettleTime_ns = dacTime;
|
||||
}
|
||||
// dac scan
|
||||
else {
|
||||
// validate index
|
||||
getDACIndex(index);
|
||||
if (ret == OK) {
|
||||
LOG(logINFOBLUE, ("Dac [%d] scan enabled\n", index));
|
||||
scanTrimbits = 0;
|
||||
scanGlobalIndex = index;
|
||||
scanSettleTime_ns = dacTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
// valid scan
|
||||
if (ret == OK) {
|
||||
scan = 1;
|
||||
numScanSteps = (abs(stop - start) / abs(step)) + 1;
|
||||
if (scanSteps != NULL) {
|
||||
free(scanSteps);
|
||||
}
|
||||
scanSteps = malloc(numScanSteps * sizeof(int));
|
||||
for (int i = 0; i != numScanSteps; ++i) {
|
||||
scanSteps[i] = start + i * step;
|
||||
LOG(logDEBUG1, ("scansteps[%d]:%d\n", i, scanSteps[i]));
|
||||
}
|
||||
LOG(logINFOBLUE, ("Enabling scan for %s, start[%d], stop[%d], "
|
||||
"step[%d], nsteps[%d]\n",
|
||||
scanTrimbits == 1 ? "trimbits" : "dac", start,
|
||||
stop, step, numScanSteps));
|
||||
|
||||
// setting number of frames to scansteps
|
||||
#endif
|
||||
if (ret == OK) {
|
||||
// disable scan
|
||||
if (enable == 0) {
|
||||
LOG(logINFOBLUE, ("Disabling scan"));
|
||||
scan = 0;
|
||||
numScanSteps = 0;
|
||||
// setting number of frames to 1
|
||||
int64_t arg = 1;
|
||||
setNumFrames(arg);
|
||||
retval = getNumFrames();
|
||||
@ -7854,7 +7847,63 @@ int set_scan(int file_des) {
|
||||
("retval num frames %lld\n", (long long int)retval));
|
||||
validate64(&ret, mess, arg, retval, "set number of frames",
|
||||
DEC);
|
||||
retval = numScanSteps;
|
||||
}
|
||||
// enable scan
|
||||
else {
|
||||
if ((start < stop && step <= 0) ||
|
||||
(stop < start && step >= 0)) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Invalid scan parameters\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
// trimbit scan
|
||||
if (index == TRIMBIT_SCAN) {
|
||||
LOG(logINFOBLUE, ("Trimbit scan enabled\n"));
|
||||
scanTrimbits = 1;
|
||||
scanGlobalIndex = index;
|
||||
scanSettleTime_ns = dacTime;
|
||||
}
|
||||
// dac scan
|
||||
else {
|
||||
// validate index
|
||||
getDACIndex(index);
|
||||
if (ret == OK) {
|
||||
LOG(logINFOBLUE,
|
||||
("Dac [%d] scan enabled\n", index));
|
||||
scanTrimbits = 0;
|
||||
scanGlobalIndex = index;
|
||||
scanSettleTime_ns = dacTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
// valid scan
|
||||
if (ret == OK) {
|
||||
scan = 1;
|
||||
numScanSteps = (abs(stop - start) / abs(step)) + 1;
|
||||
if (scanSteps != NULL) {
|
||||
free(scanSteps);
|
||||
}
|
||||
scanSteps = malloc(numScanSteps * sizeof(int));
|
||||
for (int i = 0; i != numScanSteps; ++i) {
|
||||
scanSteps[i] = start + i * step;
|
||||
LOG(logDEBUG1, ("scansteps[%d]:%d\n", i, scanSteps[i]));
|
||||
}
|
||||
LOG(logINFOBLUE,
|
||||
("Enabling scan for %s, start[%d], stop[%d], "
|
||||
"step[%d], nsteps[%d]\n",
|
||||
scanTrimbits == 1 ? "trimbits" : "dac", start, stop,
|
||||
step, numScanSteps));
|
||||
|
||||
// setting number of frames to scansteps
|
||||
int64_t arg = 1;
|
||||
setNumFrames(arg);
|
||||
retval = getNumFrames();
|
||||
LOG(logDEBUG1,
|
||||
("retval num frames %lld\n", (long long int)retval));
|
||||
validate64(&ret, mess, arg, retval, "set number of frames",
|
||||
DEC);
|
||||
retval = numScanSteps;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -10740,4 +10789,108 @@ int setColumn(int value) {
|
||||
memcpy(pos, getDetectorPosition(), sizeof(pos));
|
||||
pos[X] = value;
|
||||
return setDetectorPosition(pos);
|
||||
}
|
||||
}
|
||||
|
||||
int get_pedestal_mode(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int retvalEnable = -1;
|
||||
uint8_t retvalFrames = -1;
|
||||
uint16_t retvalLoops = -1;
|
||||
LOG(logDEBUG1, ("Getting pedestal mode\n"));
|
||||
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
retvalEnable = getPedestalMode();
|
||||
getPedestalParameters(&retvalFrames, &retvalLoops);
|
||||
LOG(logDEBUG1, ("pedestal mode retval: [enable:%d frames:%hhu, "
|
||||
"loops:%hu]\n",
|
||||
retvalEnable, retvalFrames, retvalLoops));
|
||||
#endif
|
||||
Server_SendResult(file_des, INT32, NULL, 0);
|
||||
if (ret != FAIL) {
|
||||
sendData(file_des, &retvalEnable, sizeof(retvalEnable), INT32);
|
||||
sendData(file_des, &retvalFrames, sizeof(retvalFrames), OTHER);
|
||||
sendData(file_des, &retvalLoops, sizeof(retvalLoops), INT16);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int set_pedestal_mode(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int enable = -1;
|
||||
uint8_t frames = -1;
|
||||
uint16_t loops = -1;
|
||||
|
||||
if (receiveData(file_des, &enable, sizeof(enable), INT32) < 0)
|
||||
return printSocketReadError();
|
||||
if (receiveData(file_des, &frames, sizeof(frames), OTHER) < 0)
|
||||
return printSocketReadError();
|
||||
if (receiveData(file_des, &loops, sizeof(loops), INT16) < 0)
|
||||
return printSocketReadError();
|
||||
LOG(logDEBUG1, ("Setting pedestal mode: enable:%d frames:%hhu, "
|
||||
"loops:%hu]\n",
|
||||
enable, frames, loops));
|
||||
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// only set
|
||||
if (Server_VerifyLock() == OK) {
|
||||
if (check_detector_idle("set pedestal mode") == OK) {
|
||||
if (enable != 0 && enable != 1) {
|
||||
ret = FAIL;
|
||||
sprintf(
|
||||
mess,
|
||||
"Could not set pedestal mode. Invalid enable argument %d. "
|
||||
"Options: [0, 1]\n",
|
||||
enable);
|
||||
LOG(logERROR, (mess));
|
||||
} else if (enable == 1 && (frames == 0 || loops == 0)) {
|
||||
ret = FAIL;
|
||||
sprintf(mess,
|
||||
"Could not set pedestal mode. Frames and loops cannot "
|
||||
"be 0. [%hhu, %hu].\n",
|
||||
frames, loops);
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
setPedestalMode(enable, frames, loops);
|
||||
int retvalEnable = getPedestalMode();
|
||||
LOG(logDEBUG1, ("pedestal mode retval: %d\n", retvalEnable));
|
||||
if (enable != retvalEnable) {
|
||||
ret = FAIL;
|
||||
sprintf(
|
||||
mess,
|
||||
"Could not set pedestal mode. Tried to %s, but is %s\n",
|
||||
(enable ? "enable" : "disable"),
|
||||
(retvalEnable ? "enabled" : "disabled"));
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
if (enable) {
|
||||
uint8_t retvalFrames = -1;
|
||||
uint16_t retvalLoops = -1;
|
||||
getPedestalParameters(&retvalFrames, &retvalLoops);
|
||||
LOG(logDEBUG1,
|
||||
("pedestal mode retval: [enable:%d frames:%hhu, "
|
||||
"loops:%hu]\n",
|
||||
retvalEnable, retvalFrames, retvalLoops));
|
||||
if (frames != retvalFrames || loops != retvalLoops) {
|
||||
ret = FAIL;
|
||||
sprintf(
|
||||
mess,
|
||||
"Could not set pedestal mode. Tried to set "
|
||||
"[enable: %d, frames: %hhu, loops: %hu], but got "
|
||||
"[enable: %d, frames: %hhu, loops: %hu].\n",
|
||||
enable, frames, loops, retvalEnable, retvalFrames,
|
||||
retvalLoops);
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
}
|
||||
|
Reference in New Issue
Block a user