mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
bit field for missing packets, added commands r_padding and r_discardpolicy, hdf5 bitfield metadata left to do
This commit is contained in:
@ -740,6 +740,8 @@ void slsDetector::initializeDetectorStructure(detectorType type) {
|
||||
thisDetector->detectorControlAPIVersion = 0;
|
||||
thisDetector->detectorStopAPIVersion = 0;
|
||||
thisDetector->receiverAPIVersion = 0;
|
||||
thisDetector->receiver_frameDiscardMode = NO_DISCARD;
|
||||
thisDetector->receiver_framePadding = 1;
|
||||
|
||||
|
||||
// get the detector parameters based on type
|
||||
@ -5171,6 +5173,9 @@ string slsDetector::setReceiver(string receiverIP) {
|
||||
std::cout << "file name:" << fileIO::getFileName() << endl;
|
||||
std::cout << "file index:" << fileIO::getFileIndex() << endl;
|
||||
std::cout << "file format:" << fileIO::getFileFormat() << endl;
|
||||
std::cout << "r_framesperfile:" << thisDetector->receiver_framesPerFile << endl;
|
||||
std::cout << "r_discardpolicy:" << thisDetector->receiver_frameDiscardMode << endl;
|
||||
std::cout << "r_padding:" << thisDetector->receiver_framePadding << endl;
|
||||
pthread_mutex_lock(&ms);
|
||||
std::cout << "write enable:" << multiDet->enableWriteToFileMask() << endl;
|
||||
std::cout << "overwrite enable:" << multiDet->enableOverwriteMask() << endl;
|
||||
@ -5182,17 +5187,17 @@ string slsDetector::setReceiver(string receiverIP) {
|
||||
std::cout << "sub exp time:" << thisDetector->timerValue[SUBFRAME_ACQUISITION_TIME]
|
||||
<< endl;
|
||||
std::cout << "sub period:" << thisDetector->timerValue[SUBFRAME_PERIOD] << endl;
|
||||
std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl;
|
||||
std::cout << "flippeddatax:" << thisDetector->flippedData[d] << endl;
|
||||
std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl << endl;
|
||||
std::cout << "dynamic range:" << thisDetector->dynamicRange << endl;
|
||||
std::cout << "flippeddatax:" << thisDetector->flippedData[X] << endl;
|
||||
std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl;
|
||||
std::cout << "Gap pixels: " << thisDetector->gappixels << endl;
|
||||
std::cout << "rx streaming source ip:" << thisDetector->receiver_zmqip << endl;
|
||||
std::cout << "rx additional json header:" << thisDetector->receiver_additionalJsonHeader << endl;
|
||||
std::cout << "enable gap pixels:" << thisDetector->gappixels << endl;
|
||||
std::cout << "rx streaming port:" << thisDetector->receiver_zmqport << endl;
|
||||
std::cout << "r_readfreq:" << thisDetector->receiver_read_freq << endl << endl;
|
||||
std::cout << "r_readfreq:" << thisDetector->receiver_read_freq << endl;
|
||||
std::cout << "rx_datastream:" << enableDataStreamingFromReceiver(-1) << endl << endl;
|
||||
std::cout << "r_framesperfile:" << thisDetector->receiver_framesPerFile << endl;
|
||||
/** enable compresison, */
|
||||
|
||||
#endif
|
||||
if(setDetectorType()!= GENERIC){
|
||||
if(!detId)
|
||||
@ -5207,6 +5212,8 @@ string slsDetector::setReceiver(string receiverIP) {
|
||||
setFileIndex(fileIO::getFileIndex());
|
||||
setFileFormat(fileIO::getFileFormat());
|
||||
setReceiverFramesPerFile(thisDetector->receiver_framesPerFile);
|
||||
setReceiverFramesDiscardPolicy(thisDetector->receiver_frameDiscardMode);
|
||||
setReceiverPartialFramesPadding(thisDetector->receiver_framePadding);
|
||||
pthread_mutex_lock(&ms);
|
||||
int imask = multiDet->enableWriteToFileMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
@ -5234,7 +5241,7 @@ string slsDetector::setReceiver(string receiverIP) {
|
||||
if(thisDetector->myDetectorType == EIGER)
|
||||
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
|
||||
|
||||
enableGapPixels(enableGapPixels(-1));
|
||||
enableGapPixels(thisDetector->gappixels);
|
||||
|
||||
// data streaming
|
||||
setReadReceiverFrequency(thisDetector->receiver_read_freq);
|
||||
@ -8430,6 +8437,18 @@ int slsDetector::updateReceiverNoWait() {
|
||||
fileIO::setFileFormat(ind);
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
// frames per file
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_framesPerFile = ind;
|
||||
|
||||
// frame discard policy
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_frameDiscardMode = (frameDiscardPolicy)ind;
|
||||
|
||||
// frame padding
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_framePadding = ind;
|
||||
|
||||
// file write enable
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
pthread_mutex_lock(&ms);
|
||||
@ -8442,6 +8461,10 @@ int slsDetector::updateReceiverNoWait() {
|
||||
multiDet->enableOverwriteMask(ind);
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
// gap pixels
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->gappixels = ind;
|
||||
|
||||
// receiver read frequency
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_read_freq = ind;
|
||||
@ -8450,10 +8473,6 @@ int slsDetector::updateReceiverNoWait() {
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_zmqport = ind;
|
||||
|
||||
// receiver streaming enable
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->receiver_upstream = ind;
|
||||
|
||||
// streaming source ip
|
||||
n += dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH);
|
||||
strcpy(thisDetector->receiver_zmqip, path);
|
||||
@ -8462,9 +8481,11 @@ int slsDetector::updateReceiverNoWait() {
|
||||
n += dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH);
|
||||
strcpy(thisDetector->receiver_additionalJsonHeader, path);
|
||||
|
||||
// gap pixels
|
||||
// receiver streaming enable
|
||||
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
thisDetector->gappixels = ind;
|
||||
thisDetector->receiver_upstream = ind;
|
||||
|
||||
|
||||
|
||||
if (!n) printf("n: %d\n", n);
|
||||
|
||||
@ -8706,7 +8727,9 @@ int slsDetector::setReceiverFramesPerFile(int f) {
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
}
|
||||
if(ret!=FAIL && retval > -1){
|
||||
if(ret==FAIL)
|
||||
setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET));
|
||||
else if(ret!=FAIL && retval > -1){
|
||||
thisDetector->receiver_framesPerFile = retval;
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
@ -8716,6 +8739,61 @@ int slsDetector::setReceiverFramesPerFile(int f) {
|
||||
return thisDetector->receiver_framesPerFile;
|
||||
}
|
||||
|
||||
|
||||
slsReceiverDefs::frameDiscardPolicy slsDetector::setReceiverFramesDiscardPolicy(frameDiscardPolicy f) {
|
||||
int fnum = F_RECEIVER_DISCARD_POLICY;
|
||||
int ret = FAIL;
|
||||
int retval = -1;
|
||||
int arg = f;
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Sending frames discard policy to receiver " << arg << std::endl;
|
||||
#endif
|
||||
if (connectData() == OK){
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
}
|
||||
if(ret==FAIL)
|
||||
setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET));
|
||||
else if(ret!=FAIL && retval > -1){
|
||||
thisDetector->receiver_frameDiscardMode = (frameDiscardPolicy)retval;
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
|
||||
return thisDetector->receiver_frameDiscardMode;
|
||||
}
|
||||
|
||||
int slsDetector::setReceiverPartialFramesPadding(int f) {
|
||||
int fnum = F_RECEIVER_PADDING_ENABLE;
|
||||
int ret = FAIL;
|
||||
int retval = -1;
|
||||
int arg = f;
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Sending partial frames enable to receiver " << arg << std::endl;
|
||||
#endif
|
||||
if (connectData() == OK){
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
}
|
||||
if(ret==FAIL)
|
||||
setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET));
|
||||
else if(ret!=FAIL && retval > -1){
|
||||
thisDetector->receiver_framePadding = (bool)retval;
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
|
||||
return thisDetector->receiver_framePadding;
|
||||
}
|
||||
|
||||
slsReceiverDefs::fileFormat slsDetector::setFileFormat(fileFormat f) {
|
||||
int fnum=F_SET_RECEIVER_FILE_FORMAT;
|
||||
int ret = FAIL;
|
||||
@ -9331,7 +9409,7 @@ int slsDetector::setReceiverSilentMode(int i) {
|
||||
disconnectData();
|
||||
}
|
||||
if(ret==FAIL)
|
||||
setErrorMask((getErrorMask())|(RECEIVER_SILENT_MODE_NOT_SET));
|
||||
setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET));
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
@ -25,7 +25,9 @@ class receiverInterface;
|
||||
#define NCHIPSMAX 10
|
||||
#define NCHANSMAX 65536
|
||||
#define NDACSMAX 16
|
||||
|
||||
/**
|
||||
* parameter list that has to be initialized depending on the detector type
|
||||
*/
|
||||
typedef struct detParameterList {
|
||||
int nModMaxX;
|
||||
int nModMaxY;
|
||||
@ -367,6 +369,12 @@ private:
|
||||
/** receiver server software API version */
|
||||
int64_t receiverAPIVersion;
|
||||
|
||||
/** receiver frames discard policy */
|
||||
frameDiscardPolicy receiver_frameDiscardMode;
|
||||
|
||||
/** receiver partial frames padding enable */
|
||||
bool receiver_framePadding;
|
||||
|
||||
} sharedSlsDetector;
|
||||
|
||||
|
||||
@ -2025,6 +2033,20 @@ public:
|
||||
*/
|
||||
int setReceiverFramesPerFile(int f = -1);
|
||||
|
||||
/**
|
||||
* Sets the frames discard policy in receiver
|
||||
* @param f frames discard policy
|
||||
* @returns frames discard policy set in receiver
|
||||
*/
|
||||
frameDiscardPolicy setReceiverFramesDiscardPolicy(frameDiscardPolicy f = GET_FRAME_DISCARD_POLICY);
|
||||
|
||||
/**
|
||||
* Sets the partial frames padding enable in receiver
|
||||
* @param f partial frames padding enable
|
||||
* @returns partial frames padding enable in receiver
|
||||
*/
|
||||
int setReceiverPartialFramesPadding(int f = -1);
|
||||
|
||||
/**
|
||||
* Returns file format
|
||||
* @returns file name
|
||||
|
@ -2234,6 +2234,27 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
||||
++i;
|
||||
|
||||
/*! \page receiver
|
||||
- <b>r_framesperfile</b> sets/gets the frames per file in receiver. 0 means infinite or all frames in a single file. \c Returns \c (int)
|
||||
*/
|
||||
descrToFuncMap[i].m_pFuncName="r_framesperfile"; //OK
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
||||
++i;
|
||||
|
||||
/*! \page receiver
|
||||
- <b>r_discardpolicy</b> sets/gets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest). \c Returns \c (int)
|
||||
*/
|
||||
descrToFuncMap[i].m_pFuncName="r_discardpolicy"; //OK
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
||||
++i;
|
||||
|
||||
/*! \page receiver
|
||||
- <b>r_padding</b> sets/gets the frame padding in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames. \c Returns \c (int)
|
||||
*/
|
||||
descrToFuncMap[i].m_pFuncName="r_padding"; //OK
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
||||
++i;
|
||||
|
||||
/* pattern generator */
|
||||
|
||||
/*! \page ctb Chiptest board
|
||||
@ -6324,7 +6345,9 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
|
||||
sprintf(answer,"%d",myDet->setReceiverSilentMode());
|
||||
return string(answer);
|
||||
|
||||
} else if(cmd=="r_framesperfile") {
|
||||
}
|
||||
|
||||
else if(cmd=="r_framesperfile") {
|
||||
if (action==PUT_ACTION){
|
||||
if (sscanf(args[1],"%d",&ival)) {
|
||||
myDet->setReceiverFramesPerFile(ival);
|
||||
@ -6332,10 +6355,35 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
|
||||
}
|
||||
char answer[100];
|
||||
memset(answer, 0, 100);
|
||||
sprintf(answer,"%s %d",answer, myDet->setReceiverFramesPerFile());
|
||||
sprintf(answer,"%s", myDet->setReceiverFramesPerFile());
|
||||
return string(answer);
|
||||
}
|
||||
|
||||
else if(cmd=="r_discardpolicy") {
|
||||
if (action==PUT_ACTION){
|
||||
if (sscanf(args[1],"%d",&ival) && (ival >= 0) && (ival < NUM_DISCARD_POLICIES)) {
|
||||
myDet->setReceiverFramesDiscardPolicy((frameDiscardPolicy)ival);
|
||||
} else return string("could not scan frames discard policy\n");
|
||||
}
|
||||
char answer[100];
|
||||
memset(answer, 0, 100);
|
||||
sprintf(answer,"%d",myDet->setReceiverFramesDiscardPolicy());
|
||||
return string(answer);
|
||||
}
|
||||
|
||||
else if(cmd=="r_padding") {
|
||||
if (action==PUT_ACTION){
|
||||
if (sscanf(args[1],"%d",&ival)) {
|
||||
myDet->setReceiverPartialFramesPadding(ival);
|
||||
} else return string("could not scan receiver padding enable\n");
|
||||
}
|
||||
char answer[100];
|
||||
memset(answer, 0, 100);
|
||||
sprintf(answer,"%d",myDet->setReceiverPartialFramesPadding());
|
||||
return string(answer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return string("could not decode command");
|
||||
|
||||
@ -6353,7 +6401,9 @@ string slsDetectorCommand::helpReceiver(int narg, char *args[], int action) {
|
||||
os << "tengiga \t sets system to be configure for 10Gbe if set to 1, else 1Gbe if set to 0" << std::endl;
|
||||
os << "rx_fifodepth [val]\t sets receiver fifo depth to val" << std::endl;
|
||||
os << "r_silent [i]\t sets receiver in silent mode, ie. it will not print anything during real time acquisition. 1 sets, 0 unsets." << std::endl;
|
||||
os << "r_framesperfile \t gets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||
os << "r_framesperfile s\t sets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||
os << "r_discardpolicy s\t sets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest)." << std::endl;
|
||||
os << "r_padding s\t enables/disables partial frames to be padded in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
||||
}
|
||||
if (action==GET_ACTION || action==HELP_ACTION){
|
||||
os << "receiver \t returns the status of receiver - can be running or idle" << std::endl;
|
||||
@ -6363,7 +6413,9 @@ string slsDetectorCommand::helpReceiver(int narg, char *args[], int action) {
|
||||
os << "tengiga \t returns 1 if the system is configured for 10Gbe else 0 for 1Gbe" << std::endl;
|
||||
os << "rx_fifodepth \t returns receiver fifo depth" << std::endl;
|
||||
os << "r_silent \t returns receiver silent mode enable. 1 is silent, 0 not silent." << std::endl;
|
||||
os << "r_framesperfile s\t sets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||
os << "r_framesperfile \t gets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||
os << "r_discardpolicy \t gets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest)." << std::endl;
|
||||
os << "r_padding \t gets partial frames padding enable in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
@ -761,6 +761,19 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
|
||||
*/
|
||||
virtual int setReceiverFramesPerFile(int f = -1) = 0;
|
||||
|
||||
/**
|
||||
Sets the frames discard policy in receiver
|
||||
@param f frames discard policy
|
||||
\returns frames discard policy set in receiver
|
||||
*/
|
||||
virtual frameDiscardPolicy setReceiverFramesDiscardPolicy(frameDiscardPolicy f = GET_FRAME_DISCARD_POLICY) = 0;
|
||||
|
||||
/**
|
||||
Sets the partial frames padding enable in receiver
|
||||
@param f partial frames padding enable
|
||||
\returns partial frames padding enable in receiver
|
||||
*/
|
||||
virtual int setReceiverPartialFramesPadding(int f = -1) = 0;
|
||||
|
||||
/**
|
||||
Sets up the file format
|
||||
|
Reference in New Issue
Block a user