updating dr 12 in server, changing signature to get fail for getdynamicrange

This commit is contained in:
maliakal_d 2022-02-18 10:32:07 +01:00
parent d2731c77a3
commit 0fb6c8b823
13 changed files with 291 additions and 116 deletions

View File

@ -702,8 +702,16 @@ void resetPeripheral() {
} }
/* set parameters - dr, adcenablemask */ /* set parameters - dr, adcenablemask */
int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int setDynamicRange(int dr) { return DYNAMIC_RANGE; } int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
int setADCEnableMask(uint32_t mask) { int setADCEnableMask(uint32_t mask) {
if (mask == 0u) { if (mask == 0u) {

View File

@ -931,7 +931,10 @@ unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec) {
int Feb_Control_PrepareForAcquisition() { int Feb_Control_PrepareForAcquisition() {
LOG(logINFOBLUE, ("Preparing for Acquisition\n")); LOG(logINFOBLUE, ("Preparing for Acquisition\n"));
Feb_Control_PrintAcquisitionSetup(); if (!Feb_Control_PrintAcquisitionSetup()) {
LOG(logERROR, ("Could not prepare acquisition\n"));
return 0;
}
if (Feb_Control_Reset() == STATUS_ERROR) { if (Feb_Control_Reset() == STATUS_ERROR) {
LOG(logERROR, ("Trouble reseting daq or data stream\n")); LOG(logERROR, ("Trouble reseting daq or data stream\n"));
@ -988,20 +991,26 @@ int Feb_Control_PrepareForAcquisition() {
return 1; return 1;
} }
void Feb_Control_PrintAcquisitionSetup() { int Feb_Control_PrintAcquisitionSetup() {
time_t rawtime; time_t rawtime;
time(&rawtime); time(&rawtime);
struct tm *timeinfo = localtime(&rawtime); struct tm *timeinfo = localtime(&rawtime);
LOG(logINFO, int dr = 0;
("Starting an exposure: (%s)" if (!Feb_Control_GetDynamicRange(&dr)) {
LOG(logERROR, ("Could not print acquisition set up\n"));
return 0;
}
LOG(logINFO, ("Starting an exposure: (%s)"
"\t Dynamic range nbits: %d\n" "\t Dynamic range nbits: %d\n"
"\t Trigger mode: 0x%x\n" "\t Trigger mode: 0x%x\n"
"\t Number of exposures: %d\n" "\t Number of exposures: %d\n"
"\t Exsposure time (if used): %f seconds.\n" "\t Exsposure time (if used): %f seconds.\n"
"\t Exsposure period (if used): %f seconds.\n\n", "\t Exsposure period (if used): %f seconds.\n\n",
asctime(timeinfo), Feb_Control_GetDynamicRange(), asctime(timeinfo), dr, Feb_Control_triggerMode,
Feb_Control_triggerMode, Feb_Control_GetNExposures(), Feb_Control_GetNExposures(), Feb_Control_exposure_time_in_sec,
Feb_Control_exposure_time_in_sec, Feb_Control_exposure_period_in_sec)); Feb_Control_exposure_period_in_sec));
return 1;
} }
int Feb_Control_StartAcquisition() { int Feb_Control_StartAcquisition() {
@ -1173,25 +1182,35 @@ int Feb_Control_SetDynamicRange(unsigned int dr) {
static unsigned int everything_but_bit_mode = DAQ_STATIC_BIT_PROGRAM | static unsigned int everything_but_bit_mode = DAQ_STATIC_BIT_PROGRAM |
DAQ_STATIC_BIT_CHIP_TEST | DAQ_STATIC_BIT_CHIP_TEST |
DAQ_STATIC_BIT_ROTEST; DAQ_STATIC_BIT_ROTEST;
if (dr == 4) { switch (dr) {
case 4:
Feb_Control_staticBits = Feb_Control_staticBits =
DAQ_STATIC_BIT_M4 | DAQ_STATIC_BIT_M4 |
(Feb_Control_staticBits & (Feb_Control_staticBits &
everything_but_bit_mode); // leave test bits in currernt state everything_but_bit_mode); // leave test bits in currernt state
Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING;
} else if (dr == 8) { break;
case 8:
Feb_Control_staticBits = DAQ_STATIC_BIT_M8 | (Feb_Control_staticBits & Feb_Control_staticBits = DAQ_STATIC_BIT_M8 | (Feb_Control_staticBits &
everything_but_bit_mode); everything_but_bit_mode);
Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING;
} else if (dr == 16 || dr == 12) { break;
case 12:
case 16:
Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits & Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits &
everything_but_bit_mode); everything_but_bit_mode);
Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING;
} else if (dr == 32) {
// disable 16 bit conversion if 12 bit mode (enable if 16 bit)
if (!Feb_Control_Disable16bitConversion(dr == 12))
return 0;
break;
case 32:
Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits & Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits &
everything_but_bit_mode); everything_but_bit_mode);
Feb_Control_subFrameMode |= DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; Feb_Control_subFrameMode |= DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING;
} else { break;
default:
LOG(logERROR, LOG(logERROR,
("dynamic range (%d) not valid, not setting bit mode.\n", dr)); ("dynamic range (%d) not valid, not setting bit mode.\n", dr));
LOG(logINFO, ("Set dynamic range int must equal 4,8 16, or 32.\n")); LOG(logINFO, ("Set dynamic range int must equal 4,8 16, or 32.\n"));
@ -1202,15 +1221,63 @@ int Feb_Control_SetDynamicRange(unsigned int dr) {
return 1; return 1;
} }
unsigned int Feb_Control_GetDynamicRange() { int Feb_Control_GetDynamicRange(unsigned int *retval) {
if (Feb_Control_subFrameMode & DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) if (Feb_Control_subFrameMode & DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) {
return 32; *retval = 32;
else if (DAQ_STATIC_BIT_M4 & Feb_Control_staticBits) } else if (DAQ_STATIC_BIT_M4 & Feb_Control_staticBits) {
return 4; *retval = 4;
else if (DAQ_STATIC_BIT_M8 & Feb_Control_staticBits) } else if (DAQ_STATIC_BIT_M8 & Feb_Control_staticBits) {
return 8; *retval = 8;
}
return 16; int disable16 = 0;
if (!Feb_Control_Get16bitConversionDisabled(&disable16)) {
LOG(logERROR, ("Could not get dynamic range (12 or 16 bit)\n"));
return 0;
}
if (disable16) {
*retval = 12;
} else {
*retval = 16;
}
return 1;
}
int Feb_Control_Disable16bitConversion(int disable) {
LOG(logINFO, ("%s 16 bit expansion\n", disable ? "Disabling" : "Enabling"));
unsigned int regval = 0;
if (!Feb_Control_ReadRegister(DAQ_REG_HRDWRE, &regval)) {
LOG(logERROR, ("Could not %s 16 bit expansion (bit mode)\n",
(disable ? "disable" : "enable")));
return 0;
}
if (disable) {
regval |= DAQ_REG_HRDWRE_DSBL_16BIT_MSK;
} else {
regval &= ~DAQ_REG_HRDWRE_DSBL_16BIT_MSK;
}
if (!Feb_Control_WriteRegister(DAQ_REG_HRDWRE, regval)) {
LOG(logERROR, ("Could not %s 16 bit expansion (bit mode)\n",
(disable ? "disable" : "enable")));
return 0;
}
return 1;
}
int Feb_Control_Get16bitConversionDisabled(int *ret) {
unsigned int regval = 0;
if (!Feb_Control_ReadRegister(DAQ_REG_HRDWRE, &regval)) {
LOG(logERROR, ("Could not get 16 bit expansion (bit mode)\n"));
return 0;
}
if (regval | DAQ_REG_HRDWRE_DSBL_16BIT_MSK) {
*ret = 1;
} else {
*ret = 0;
}
return 1;
} }
int Feb_Control_SetReadoutSpeed(unsigned int readout_speed) { int Feb_Control_SetReadoutSpeed(unsigned int readout_speed) {
@ -1553,7 +1620,10 @@ int Feb_Control_SetChipSignalsToTrimQuad(int enable) {
regval &= ~(DAQ_REG_HRDWRE_PROGRAM_MSK | DAQ_REG_HRDWRE_M8_MSK); regval &= ~(DAQ_REG_HRDWRE_PROGRAM_MSK | DAQ_REG_HRDWRE_M8_MSK);
} }
return Feb_Control_WriteRegister(DAQ_REG_HRDWRE, regval); if (!Feb_Control_WriteRegister(DAQ_REG_HRDWRE, regval)) {
LOG(logERROR, ("Could not set chip signals to trim quad\n"));
return 0;
}
} }
return 1; return 1;
} }
@ -1611,6 +1681,18 @@ int Feb_Control_WriteRegister(uint32_t offset, uint32_t data) {
side[iloop], actualOffset)); side[iloop], actualOffset));
return 0; return 0;
} }
uint32_t regVal = 0;
if (!Feb_Interface_ReadRegister(addr[iloop], actualOffset,
&regVal)) {
LOG(logERROR, ("Could not read %s register\n", addr[iloop]));
return 0;
}
if (regVal != data) {
LOG(logERROR,
("Could not write %s register. Write 0x%x, read 0x%x\n",
addr[iloop], data, regVal));
return 0;
}
} }
} }
@ -1823,7 +1905,11 @@ int64_t Feb_Control_Get_RateTable_Period_in_nsec() {
int Feb_Control_SetRateCorrectionTau(int64_t tau_in_Nsec) { int Feb_Control_SetRateCorrectionTau(int64_t tau_in_Nsec) {
// period = exptime if 16bit, period = subexptime if 32 bit // period = exptime if 16bit, period = subexptime if 32 bit
int dr = Feb_Control_GetDynamicRange(); int dr = 0;
if (!Feb_Control_GetDynamicRange(&dr)) {
LOG(logERROR, ("Could not set rate correction tau\n"));
return 0;
}
double period_in_sec = double period_in_sec =
(double)(Feb_Control_GetSubFrameExposureTime()) / (double)1e9; (double)(Feb_Control_GetSubFrameExposureTime()) / (double)1e9;
if (dr == 16) if (dr == 16)

View File

@ -55,7 +55,7 @@ int Feb_Control_ResetChipPartially();
int Feb_Control_SendBitModeToBebServer(); int Feb_Control_SendBitModeToBebServer();
unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec); unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec);
int Feb_Control_PrepareForAcquisition(); int Feb_Control_PrepareForAcquisition();
void Feb_Control_PrintAcquisitionSetup(); int Feb_Control_PrintAcquisitionSetup();
int Feb_Control_StartAcquisition(); int Feb_Control_StartAcquisition();
int Feb_Control_StopAcquisition(); int Feb_Control_StopAcquisition();
int Feb_Control_IsReadyForTrigger(int *readyForTrigger); int Feb_Control_IsReadyForTrigger(int *readyForTrigger);
@ -64,7 +64,9 @@ int Feb_Control_SoftwareTrigger(int block);
// parameters // parameters
int Feb_Control_SetDynamicRange(unsigned int dr); int Feb_Control_SetDynamicRange(unsigned int dr);
unsigned int Feb_Control_GetDynamicRange(); int Feb_Control_GetDynamicRange(unsigned int *retval);
int Feb_Control_Disable16bitConversion(int disable);
int Feb_Control_Get16bitConversionDisabled();
int Feb_Control_SetReadoutSpeed(unsigned int readout_speed); int Feb_Control_SetReadoutSpeed(unsigned int readout_speed);
int Feb_Control_SetReadoutMode(unsigned int readout_mode); int Feb_Control_SetReadoutMode(unsigned int readout_mode);
int Feb_Control_SetTriggerMode(unsigned int trigger_mode); int Feb_Control_SetTriggerMode(unsigned int trigger_mode);

View File

@ -29,6 +29,8 @@
#define DAQ_REG_HRDWRE_OW_MASTER_MSK (0x00000001 << DAQ_REG_HRDWRE_OW_MASTER_OFST) #define DAQ_REG_HRDWRE_OW_MASTER_MSK (0x00000001 << DAQ_REG_HRDWRE_OW_MASTER_OFST)
#define DAQ_REG_HRDWRE_MASTER_OFST (4) #define DAQ_REG_HRDWRE_MASTER_OFST (4)
#define DAQ_REG_HRDWRE_MASTER_MSK (0x00000001 << DAQ_REG_HRDWRE_MASTER_OFST) #define DAQ_REG_HRDWRE_MASTER_MSK (0x00000001 << DAQ_REG_HRDWRE_MASTER_OFST)
#define DAQ_REG_HRDWRE_DSBL_16BIT_OFST (5)
#define DAQ_REG_HRDWRE_DSBL_16BIT_MSK (0x00000001 << DAQ_REG_HRDWRE_DSBL_16BIT_OFST)
#define DAQ_REG_HRDWRE_PROGRAM_OFST (30) #define DAQ_REG_HRDWRE_PROGRAM_OFST (30)
#define DAQ_REG_HRDWRE_PROGRAM_MSK (0x00000001 << DAQ_REG_HRDWRE_PROGRAM_OFST) #define DAQ_REG_HRDWRE_PROGRAM_MSK (0x00000001 << DAQ_REG_HRDWRE_PROGRAM_OFST)
#define DAQ_REG_HRDWRE_M8_OFST (31) #define DAQ_REG_HRDWRE_M8_OFST (31)

View File

@ -821,8 +821,9 @@ int readRegister(uint32_t offset, uint32_t *retval) {
/* set parameters - dr, roi */ /* set parameters - dr, roi */
int setDynamicRange(int dr) { int setDynamicRange(int dr) {
// setting dr if (dr <= 0) {
if (dr > 0) { return FAIL;
}
#ifdef VIRTUAL #ifdef VIRTUAL
LOG(logINFO, ("Setting dynamic range: %d\n", dr)); LOG(logINFO, ("Setting dynamic range: %d\n", dr));
#else #else
@ -837,14 +838,21 @@ int setDynamicRange(int dr) {
sharedMemory_unlockLocalLink(); sharedMemory_unlockLocalLink();
#endif #endif
eiger_dynamicrange = dr; eiger_dynamicrange = dr;
return OK;
} }
// getting dr
#ifndef VIRTUAL int getDynamicRange(int *retval) {
#ifdef VIRTUAL
*retval = eiger_dynamicrange;
#else
sharedMemory_lockLocalLink(); sharedMemory_lockLocalLink();
eiger_dynamicrange = Feb_Control_GetDynamicRange(); if (!Feb_Control_GetDynamicRange(&eiger_dynamicrange)) {
sharedMemory_unlockLocalLink();
return FAIL;
}
sharedMemory_unlockLocalLink(); sharedMemory_unlockLocalLink();
#endif #endif
return eiger_dynamicrange; return OK;
} }
/* parameters - readout */ /* parameters - readout */
@ -1159,6 +1167,7 @@ int setModule(sls_detector_module myMod, char *mess) {
// if quad, set M8 and PROGRAM manually // if quad, set M8 and PROGRAM manually
if (!Feb_Control_SetChipSignalsToTrimQuad(1)) { if (!Feb_Control_SetChipSignalsToTrimQuad(1)) {
sharedMemory_unlockLocalLink();
return FAIL; return FAIL;
} }
@ -1171,6 +1180,7 @@ int setModule(sls_detector_module myMod, char *mess) {
// if quad, reset M8 and PROGRAM manually // if quad, reset M8 and PROGRAM manually
if (!Feb_Control_SetChipSignalsToTrimQuad(0)) { if (!Feb_Control_SetChipSignalsToTrimQuad(0)) {
sharedMemory_unlockLocalLink();
return FAIL; return FAIL;
} }
@ -1180,6 +1190,7 @@ int setModule(sls_detector_module myMod, char *mess) {
// if quad, reset M8 and PROGRAM manually // if quad, reset M8 and PROGRAM manually
if (!Feb_Control_SetChipSignalsToTrimQuad(0)) { if (!Feb_Control_SetChipSignalsToTrimQuad(0)) {
sharedMemory_unlockLocalLink();
return FAIL; return FAIL;
} }
@ -1924,7 +1935,8 @@ int setRateCorrection(
else if (custom_tau_in_nsec == -1) else if (custom_tau_in_nsec == -1)
custom_tau_in_nsec = Feb_Control_Get_RateTable_Tau_in_nsec(); custom_tau_in_nsec = Feb_Control_Get_RateTable_Tau_in_nsec();
int dr = Feb_Control_GetDynamicRange(); int dr = eiger_dynamicrange;
// get period = subexptime if 32bit , else period = exptime if 16 bit // get period = subexptime if 32bit , else period = exptime if 16 bit
int64_t actual_period = int64_t actual_period =
Feb_Control_GetSubFrameExposureTime(); // already in nsec Feb_Control_GetSubFrameExposureTime(); // already in nsec
@ -2780,9 +2792,9 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod) {
int calculateDataBytes() { int calculateDataBytes() {
if (send_to_ten_gig) if (send_to_ten_gig)
return setDynamicRange(-1) * ONE_GIGA_CONSTANT * TEN_GIGA_BUFFER_SIZE; return eiger_dynamicrange * ONE_GIGA_CONSTANT * TEN_GIGA_BUFFER_SIZE;
else else
return setDynamicRange(-1) * TEN_GIGA_CONSTANT * ONE_GIGA_BUFFER_SIZE; return eiger_dynamicrange * TEN_GIGA_CONSTANT * ONE_GIGA_BUFFER_SIZE;
} }
int getTotalNumberOfChannels() { int getTotalNumberOfChannels() {

View File

@ -5,7 +5,7 @@
#define LINKED_SERVER_NAME "eigerDetectorServer" #define LINKED_SERVER_NAME "eigerDetectorServer"
#define REQUIRED_FIRMWARE_VERSION (29) #define REQUIRED_FIRMWARE_VERSION (30)
// virtual ones renamed for consistency // virtual ones renamed for consistency
// real ones keep previous name for compatibility (already in production) // real ones keep previous name for compatibility (already in production)
#ifdef VIRTUAL #ifdef VIRTUAL

View File

@ -952,7 +952,16 @@ void resetPeripheral() {
/* set parameters - dr, roi */ /* set parameters - dr, roi */
int setDynamicRange(int dr) { return DYNAMIC_RANGE; } int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
/* parameters - timer */ /* parameters - timer */
void setNumFrames(int64_t val) { void setNumFrames(int64_t val) {

View File

@ -788,7 +788,16 @@ void setMasterSlaveConfiguration() {
/* set parameters - dr, roi */ /* set parameters - dr, roi */
int setDynamicRange(int dr) { return DYNAMIC_RANGE; } int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
int setROI(ROI arg) { int setROI(ROI arg) {

View File

@ -796,7 +796,16 @@ void resetPeripheral() {
/* set parameters - dr, roi */ /* set parameters - dr, roi */
int setDynamicRange(int dr) { return DYNAMIC_RANGE; } int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
void setADCInvertRegister(uint32_t val) { void setADCInvertRegister(uint32_t val) {
LOG(logINFO, ("Setting ADC Port Invert Reg to 0x%x\n", val)); LOG(logINFO, ("Setting ADC Port Invert Reg to 0x%x\n", val));

View File

@ -700,7 +700,16 @@ void resetPeripheral() {
/* set parameters - dr, adcenablemask */ /* set parameters - dr, adcenablemask */
int setDynamicRange(int dr) { return DYNAMIC_RANGE; } int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
int setADCEnableMask(uint32_t mask) { int setADCEnableMask(uint32_t mask) {
if (mask == 0u) { if (mask == 0u) {

View File

@ -729,7 +729,9 @@ void resetPeripheral() {
/* set parameters - dr, roi */ /* set parameters - dr, roi */
int setDynamicRange(int dr) { int setDynamicRange(int dr) {
if (dr > 0) { if (dr <= 0) {
return FAIL;
}
uint32_t regval = 0; uint32_t regval = 0;
switch (dr) { switch (dr) {
/*case 1: TODO:Not implemented in firmware yet /*case 1: TODO:Not implemented in firmware yet
@ -754,21 +756,26 @@ int setDynamicRange(int dr) {
updatePacketizing(); updatePacketizing();
} }
int getDynamicRange(int *retval) {
uint32_t regval = bus_r(CONFIG_REG) & CONFIG_DYNAMIC_RANGE_MSK; uint32_t regval = bus_r(CONFIG_REG) & CONFIG_DYNAMIC_RANGE_MSK;
switch (regval) { switch (regval) {
/*case CONFIG_DYNAMIC_RANGE_1_VAL: TODO:Not implemented in firmware yet /*case CONFIG_DYNAMIC_RANGE_1_VAL: TODO:Not implemented in firmware yet
return 1;*/ return 1;*/
case CONFIG_DYNAMIC_RANGE_8_VAL: case CONFIG_DYNAMIC_RANGE_8_VAL:
return 8; *retval = 8;
break;
case CONFIG_DYNAMIC_RANGE_16_VAL: case CONFIG_DYNAMIC_RANGE_16_VAL:
return 16; *retval = 16;
break;
case CONFIG_DYNAMIC_RANGE_24_VAL: case CONFIG_DYNAMIC_RANGE_24_VAL:
return 32; *retval = 32;
break;
default: default:
LOG(logERROR, ("Invalid dynamic range %d read back\n", LOG(logERROR, ("Invalid dynamic range %d read back\n",
regval >> CONFIG_DYNAMIC_RANGE_OFST)); regval >> CONFIG_DYNAMIC_RANGE_OFST));
return -1; return FAIL;
} }
return OK;
} }
/* set parameters - readout */ /* set parameters - readout */
@ -1091,7 +1098,8 @@ void updatePacketizing() {
// 10g // 10g
if (tgEnable) { if (tgEnable) {
const int dr = setDynamicRange(-1); int dr = 0;
getDynamicRange(&dr);
packetsPerFrame = 1; packetsPerFrame = 1;
if (dr == 32 && ncounters > 1) { if (dr == 32 && ncounters > 1) {
packetsPerFrame = 2; packetsPerFrame = 2;
@ -2202,7 +2210,8 @@ void *start_timer(void *arg) {
const int imageSize = calculateDataBytes(); const int imageSize = calculateDataBytes();
const int tgEnable = enableTenGigabitEthernet(-1); const int tgEnable = enableTenGigabitEthernet(-1);
const int dr = setDynamicRange(-1); int dr = 0;
getDynamicRange(&dr);
int ncounters = __builtin_popcount(getCounterMask()); int ncounters = __builtin_popcount(getCounterMask());
int dataSize = 0; int dataSize = 0;
int packetsPerFrame = 0; int packetsPerFrame = 0;
@ -2523,7 +2532,8 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod) {
int calculateDataBytes() { int calculateDataBytes() {
int numCounters = __builtin_popcount(getCounterMask()); int numCounters = __builtin_popcount(getCounterMask());
int dr = setDynamicRange(-1); int dr = 0;
getDynamicRange(&dr);
return (NCHAN_1_COUNTER * NCHIP * numCounters * ((double)dr / 8.00)); return (NCHAN_1_COUNTER * NCHIP * numCounters * ((double)dr / 8.00));
} }

View File

@ -173,6 +173,7 @@ void setMasterSlaveConfiguration();
// parameters - dr, roi // parameters - dr, roi
int setDynamicRange(int dr); int setDynamicRange(int dr);
int getDynamicRange(int *retval);
#ifdef GOTTHARDD #ifdef GOTTHARDD
int setROI(ROI arg); int setROI(ROI arg);
ROI getROI(); ROI getROI();

View File

@ -2821,14 +2821,20 @@ int set_dynamic_range(int file_des) {
defined(MOENCHD) || defined(GOTTHARD2D) defined(MOENCHD) || defined(GOTTHARD2D)
case 16: case 16:
#endif #endif
retval = setDynamicRange(dr); ret = setDynamicRange(dr);
LOG(logDEBUG1, ("Dynamic range: %d\n", retval)); if (ret == FAIL) {
if (retval == -1) { sprintf(mess, "Could not set dynamic range to %d\n", dr);
ret = FAIL;
sprintf(mess, "Could not get dynamic range.\n");
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} } else {
ret = getDynamicRange(&retval);
if (ret == FAIL) {
strcpy(mess, "Could not get dynamic range\n");
LOG(logERROR, (mess));
} else {
LOG(logDEBUG1, ("Dynamic range: %d\n", retval));
validate(&ret, mess, dr, retval, "set dynamic range", DEC); validate(&ret, mess, dr, retval, "set dynamic range", DEC);
}
}
break; break;
default: default:
modeNotImplemented("Dynamic range", dr); modeNotImplemented("Dynamic range", dr);
@ -4649,13 +4655,20 @@ int set_read_n_rows(int file_des) {
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} else { } else {
#ifdef EIGERD #ifdef EIGERD
int dr = setDynamicRange(GET_FLAG); int dr = 0;
ret = getDynamicRange(&dr);
if (ret == FAIL) {
strcpy(mess,
"Could not read n rows (failed to get dynamic range)\n");
LOG(logERROR, (mess));
} else {
int isTenGiga = enableTenGigabitEthernet(GET_FLAG); int isTenGiga = enableTenGigabitEthernet(GET_FLAG);
unsigned int maxnl = MAX_ROWS_PER_READOUT; unsigned int maxnl = MAX_ROWS_PER_READOUT;
unsigned int maxnp = (isTenGiga ? 4 : 16) * dr; unsigned int maxnp = (isTenGiga ? 4 : 16) * dr;
if ((arg * maxnp) % maxnl) { if ((arg * maxnp) % maxnl) {
ret = FAIL; ret = FAIL;
sprintf(mess, sprintf(
mess,
"Could not set number of rows to %d. For %d bit " "Could not set number of rows to %d. For %d bit "
"mode and 10 giga %s, (%d (num " "mode and 10 giga %s, (%d (num "
"rows) x %d (max num packets for this mode)) must be " "rows) x %d (max num packets for this mode)) must be "
@ -4685,7 +4698,8 @@ int set_read_n_rows(int file_des) {
{ {
if (setReadNRows(arg) == FAIL) { if (setReadNRows(arg) == FAIL) {
ret = FAIL; ret = FAIL;
sprintf(mess, "Could not set number of rows to %d.\n", arg); sprintf(mess, "Could not set number of rows to %d.\n",
arg);
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} else { } else {
int retval = getReadNRows(); int retval = getReadNRows();
@ -4701,6 +4715,7 @@ int set_read_n_rows(int file_des) {
} }
} }
} }
}
#endif #endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -7111,7 +7126,10 @@ int get_receiver_parameters(int file_des) {
} }
// dynamic range // dynamic range
i32 = setDynamicRange(GET_FLAG); ret = getDynamicRange(&i32);
if (ret == FAIL) {
i32 = 0;
}
n += sendData(file_des, &i32, sizeof(i32), INT32); n += sendData(file_des, &i32, sizeof(i32), INT32);
if (n < 0) if (n < 0)
return printSocketReadError(); return printSocketReadError();