mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-16 00:49:22 +01:00
ctb: removed setroi, instead using adcenablemask
This commit is contained in:
@@ -212,12 +212,12 @@ public:
|
||||
|
||||
/**
|
||||
* Set databytes (ctb, moench)
|
||||
* @param f readout flags
|
||||
* @param r roi
|
||||
* @param a adc enable mask
|
||||
* @param s number of samples
|
||||
* @param t tengiga enable
|
||||
* @param f readout flags
|
||||
*/
|
||||
virtual void setImageSize(std::vector<slsDetectorDefs::ROI> r, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
virtual void setImageSize(uint32_t a, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
cprintf(RED,"setImageSize is a generic function that should be overloaded by a derived class\n");
|
||||
};
|
||||
|
||||
@@ -584,26 +584,26 @@ public:
|
||||
headerWriteEnable = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set databytes (ctb, moench)
|
||||
/**
|
||||
* Set databytes (ctb, moench)
|
||||
* @param a adc enable mask
|
||||
* @param s number of samples
|
||||
* @param t tengiga enable
|
||||
* @param f readout flags
|
||||
* @param r roi
|
||||
* @param s number of samples
|
||||
* @param t tengiga enable
|
||||
*/
|
||||
void setImageSize(std::vector<slsDetectorDefs::ROI> r, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
*/
|
||||
void setImageSize(uint32_t a, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
int nchans = 0;
|
||||
if (f != slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
// analog channels
|
||||
if (f == slsDetectorDefs::NORMAL_READOUT || f & slsDetectorDefs::ANALOG_AND_DIGITAL) {
|
||||
nchans += NCHAN_ANALOG;
|
||||
// if roi
|
||||
if (r.size()) {
|
||||
nchans = 0;
|
||||
for (auto &roi : r) {
|
||||
nchans += (roi.xmax - roi.xmin + 1);
|
||||
}
|
||||
}
|
||||
if (a == BIT32_MASK) {
|
||||
nchans = 32;
|
||||
} else {
|
||||
for (int ich = 0; ich < 32; ++ich) {
|
||||
if (a & (1 << ich))
|
||||
++nchans;
|
||||
}
|
||||
}
|
||||
}
|
||||
// digital channels
|
||||
if (f & slsDetectorDefs::DIGITAL_ONLY || f & slsDetectorDefs::ANALOG_AND_DIGITAL) {
|
||||
@@ -686,22 +686,22 @@ public:
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set databytes (ctb, moench)
|
||||
/**
|
||||
* Set databytes (ctb, moench)
|
||||
* @param a adc enable mask
|
||||
* @param s number of samples
|
||||
* @param t tengiga enable
|
||||
* @param f readout flags
|
||||
* @param r roi
|
||||
* @param s number of samples
|
||||
* @param t tengiga enable
|
||||
*/
|
||||
void setImageSize(std::vector<slsDetectorDefs::ROI> r, int s, bool t,
|
||||
slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
*/
|
||||
void setImageSize(uint32_t a, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
|
||||
int nchans = 32;
|
||||
// if roi
|
||||
if (r.size()) {
|
||||
nchans = 0;
|
||||
for (auto &roi : r) {
|
||||
nchans += abs(roi.xmax - roi.xmin) + 1;
|
||||
}
|
||||
if (a == BIT32_MASK) {
|
||||
nchans = 32;
|
||||
} else {
|
||||
for (int ich = 0; ich < 32; ++ich) {
|
||||
if (a & (1 << ich))
|
||||
++nchans;
|
||||
}
|
||||
}
|
||||
|
||||
nPixelsX = nchans;
|
||||
|
||||
@@ -194,6 +194,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
||||
*/
|
||||
std::vector<ROI> getROI() const;
|
||||
|
||||
/**
|
||||
* Get ADC Enable Mask
|
||||
* @return ADC Enable Mask
|
||||
*/
|
||||
uint32_t getADCEnableMask() const;
|
||||
|
||||
/**
|
||||
* Get the streaming frequency
|
||||
* @return 0 for timer, n for nth frame frequency
|
||||
@@ -474,6 +480,13 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
||||
*/
|
||||
int setROI(const std::vector<ROI> new_roi);
|
||||
|
||||
/**
|
||||
* Set ADC Enable Mask
|
||||
* @param mask ADC Enable Mask
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int setADCEnableMask(const uint32_t mask);
|
||||
|
||||
/**
|
||||
* Set the streaming frequency
|
||||
* @param freq 0 for timer, n for nth frame frequency
|
||||
@@ -855,6 +868,8 @@ private:
|
||||
//***acquisition parameters***
|
||||
/* ROI */
|
||||
std::vector<ROI> roi;
|
||||
/** ADC Enable Mask */
|
||||
uint32_t adcEnableMask;
|
||||
/** streaming frequency */
|
||||
uint32_t streamingFrequency;
|
||||
/** Streaming timer when frequency is 0 */
|
||||
|
||||
@@ -282,6 +282,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
||||
/** set readout flags */
|
||||
int set_readout_flags();
|
||||
|
||||
/** set adc mask */
|
||||
int set_adc_mask();
|
||||
|
||||
|
||||
/** detector type */
|
||||
detectorType myDetectorType;
|
||||
|
||||
@@ -100,6 +100,7 @@ void slsReceiverImplementation::InitializeMembers() {
|
||||
|
||||
//***acquisition parameters***
|
||||
roi.clear();
|
||||
adcEnableMask = BIT32_MASK;
|
||||
streamingFrequency = 0;
|
||||
streamingTimerInMs = DEFAULT_STREAMING_TIMER_IN_MS;
|
||||
dataStreamEnable = false;
|
||||
@@ -289,6 +290,11 @@ std::vector<slsDetectorDefs::ROI> slsReceiverImplementation::getROI() const{
|
||||
return roi;
|
||||
}
|
||||
|
||||
uint32_t slsReceiverImplementation::getADCEnableMask() const{
|
||||
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||
return adcEnableMask;
|
||||
}
|
||||
|
||||
uint32_t slsReceiverImplementation::getStreamingFrequency() const{
|
||||
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||
return streamingFrequency;
|
||||
@@ -463,7 +469,7 @@ int slsReceiverImplementation::setReadOutFlags(const readOutFlags f) {
|
||||
|
||||
// side effects
|
||||
if (myDetectorType == CHIPTESTBOARD) {
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
generalData->setImageSize(adcEnableMask, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
for (const auto& it : dataProcessor)
|
||||
it->SetPixelDimension();
|
||||
if (SetupFifoStructure() == FAIL)
|
||||
@@ -749,7 +755,7 @@ int slsReceiverImplementation::setUDPSocketBufferSize(const int64_t s) {
|
||||
/***acquisition parameters***/
|
||||
int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> new_roi) {
|
||||
bool change = false;
|
||||
if (roi.size() != new_roi.size())
|
||||
if (roi.size() != new_roi.size())
|
||||
change = true;
|
||||
else {
|
||||
for (size_t i = 0; i != new_roi.size(); ++i) {
|
||||
@@ -770,13 +776,6 @@ int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> ne
|
||||
generalData->SetROI(new_roi);
|
||||
framesPerFile = generalData->maxFramesPerFile;
|
||||
break;
|
||||
case MOENCH:
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable);
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable,
|
||||
readoutFlags);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -806,6 +805,32 @@ int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> ne
|
||||
return OK;
|
||||
}
|
||||
|
||||
int slsReceiverImplementation::setADCEnableMask(uint32_t mask) {
|
||||
if (adcEnableMask != mask) {
|
||||
adcEnableMask = mask;
|
||||
|
||||
switch (myDetectorType) {
|
||||
case MOENCH:
|
||||
generalData->setImageSize(mask, numberOfSamples, tengigaEnable);
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
generalData->setImageSize(mask, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
for (const auto& it : dataProcessor)
|
||||
it->SetPixelDimension();
|
||||
if (SetupFifoStructure() == FAIL)
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
FILE_LOG(logINFO) << "ADC Enable Mask: 0x" << std::hex << adcEnableMask << std::dec;
|
||||
FILE_LOG (logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
int slsReceiverImplementation::setStreamingFrequency(const uint32_t freq) {
|
||||
if (streamingFrequency != freq) {
|
||||
@@ -921,9 +946,9 @@ int slsReceiverImplementation::setNumberofSamples(const uint64_t i) {
|
||||
numberOfSamples = i;
|
||||
|
||||
if(myDetectorType == MOENCH) {
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable);
|
||||
generalData->setImageSize(adcEnableMask, numberOfSamples, tengigaEnable);
|
||||
} else if(myDetectorType == CHIPTESTBOARD) {
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
generalData->setImageSize(adcEnableMask, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
}
|
||||
for (const auto& it : dataProcessor)
|
||||
it->SetPixelDimension();
|
||||
@@ -962,10 +987,10 @@ int slsReceiverImplementation::setTenGigaEnable(const bool b) {
|
||||
generalData->SetTenGigaEnable(b,dynamicRange);
|
||||
break;
|
||||
case MOENCH:
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable);
|
||||
generalData->setImageSize(adcEnableMask, numberOfSamples, tengigaEnable);
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
generalData->setImageSize(roi, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
generalData->setImageSize(adcEnableMask, numberOfSamples, tengigaEnable, readoutFlags);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -227,6 +227,7 @@ int slsReceiverTCPIPInterface::function_table(){
|
||||
flist[F_RECEIVER_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_padding_enable;
|
||||
flist[F_RECEIVER_DEACTIVATED_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable;
|
||||
flist[F_RECEIVER_SET_READOUT_FLAGS] = &slsReceiverTCPIPInterface::set_readout_flags;
|
||||
flist[F_RECEIVER_SET_ADC_MASK] = &slsReceiverTCPIPInterface::set_adc_mask;
|
||||
|
||||
for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) {
|
||||
FILE_LOG(logDEBUG1) << "function fnum: " << i << " (" <<
|
||||
@@ -2034,3 +2035,36 @@ int slsReceiverTCPIPInterface::set_readout_flags() {
|
||||
}
|
||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int slsReceiverTCPIPInterface::set_adc_mask() {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
uint32_t arg = -1;
|
||||
uint32_t retval = -1;
|
||||
|
||||
// get args, return if socket crashed, ret is fail if receiver is not null
|
||||
if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL)
|
||||
return FAIL;
|
||||
|
||||
// base object not null
|
||||
else if (ret == OK) {
|
||||
// set
|
||||
// verify if receiver is unlocked and idle
|
||||
if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) {
|
||||
FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg;
|
||||
receiver->setADCEnableMask(arg);
|
||||
}
|
||||
|
||||
// get
|
||||
retval = receiver->getADCEnableMask();
|
||||
if (ret == OK && retval != arg) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Could not ADC enable mask. Set 0x%x, but read 0x%x\n", arg, retval);
|
||||
FILE_LOG(logERROR) << mess;
|
||||
}
|
||||
FILE_LOG(logDEBUG1) << "ADC enable mask retval: " << retval;
|
||||
}
|
||||
return interface->Server_SendResult(false, ret, &retval, sizeof(retval), mess);
|
||||
}
|
||||
Reference in New Issue
Block a user