mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 01:58:00 +02:00
slsReciever, slsDetector: configurable number of images per file, removed all the receiver threads from using generalData->maxframesperfile, yet to do: infinite images, bug fix, virtual hdf5 has -1 for all pixels in last image
This commit is contained in:
@ -5636,6 +5636,42 @@ string multiSlsDetector::setFileName(string s) {
|
||||
|
||||
|
||||
|
||||
int multiSlsDetector::setReceiverFramesPerFile(int f) {
|
||||
int ret=-100;
|
||||
if(!threadpool){
|
||||
cout << "Error in creating threadpool. Exiting" << endl;
|
||||
return -1;
|
||||
}else{
|
||||
//return storage values
|
||||
int* iret[thisMultiDetector->numberOfDetectors];
|
||||
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet){
|
||||
if(detectors[idet]){
|
||||
iret[idet]= new int(-1);
|
||||
Task* task = new Task(new func1_t<int,int>(&slsDetector::setReceiverFramesPerFile,
|
||||
detectors[idet],f,iret[idet]));
|
||||
threadpool->add_task(task);
|
||||
}
|
||||
}
|
||||
threadpool->startExecuting();
|
||||
threadpool->wait_for_tasks_to_complete();
|
||||
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet){
|
||||
if(detectors[idet]){
|
||||
if(iret[idet] != NULL){
|
||||
if (ret==-100)
|
||||
ret=*iret[idet];
|
||||
else if (ret!=*iret[idet])
|
||||
ret=-1;
|
||||
delete iret[idet];
|
||||
}else ret=-1;
|
||||
if(detectors[idet]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<idet));
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
slsReceiverDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f) {
|
||||
int ret=-100, ret1;
|
||||
|
||||
|
@ -1279,6 +1279,13 @@ class multiSlsDetector : public slsDetectorUtils {
|
||||
*/
|
||||
string setFileName(string s="");
|
||||
|
||||
/**
|
||||
Sets the max frames per file in receiver
|
||||
@param f max frames per file
|
||||
\returns max frames per file in receiver
|
||||
*/
|
||||
int setReceiverFramesPerFile(int f = -1);
|
||||
|
||||
/**
|
||||
Sets up the file format
|
||||
@param f file format
|
||||
|
@ -803,6 +803,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
|
||||
thisDetector->receiver_zmqport = 0;
|
||||
thisDetector->receiver_upstream = false;
|
||||
thisDetector->receiver_read_freq = 0;
|
||||
thisDetector->receiver_framesPerFile = -1;
|
||||
|
||||
for (int ia=0; ia<MAX_ACTIONS; ++ia) {
|
||||
strcpy(thisDetector->actionScript[ia],"none");
|
||||
@ -938,6 +939,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
|
||||
if (thisReceiver != NULL)
|
||||
delete thisReceiver;
|
||||
thisReceiver = new receiverInterface(dataSocket);
|
||||
setReceiverFramesPerFile();
|
||||
|
||||
// zmq ports
|
||||
if (posId != -1) {
|
||||
@ -6417,6 +6419,7 @@ string slsDetector::setReceiver(string receiverIP){
|
||||
std::cout << "rx streaming port:" << thisDetector->receiver_zmqport << endl;
|
||||
std::cout << "r_readfreq:" << thisDetector->receiver_read_freq << endl << endl;
|
||||
std::cout << "rx_datastream:" << enableDataStreamingFromReceiver(-1) << endl << endl;
|
||||
std::cout << "r_framesperfile:" << thisDetector->receiver_framesPerFile << endl;
|
||||
/** enable compresison, */
|
||||
#endif
|
||||
if(setDetectorType()!= GENERIC){
|
||||
@ -6431,6 +6434,7 @@ string slsDetector::setReceiver(string receiverIP){
|
||||
setFileName(fileIO::getFileName());
|
||||
setFileIndex(fileIO::getFileIndex());
|
||||
setFileFormat(fileIO::getFileFormat());
|
||||
setReceiverFramesPerFile(thisDetector->receiver_framesPerFile);
|
||||
pthread_mutex_lock(&ms);
|
||||
int imask = parentDet->enableWriteToFileMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
@ -8585,8 +8589,31 @@ string slsDetector::setFileName(string s) {
|
||||
}
|
||||
|
||||
|
||||
int slsDetector::setReceiverFramesPerFile(int f) {
|
||||
int fnum = F_SET_RECEIVER_FRAMES_PER_FILE;
|
||||
int ret = FAIL;
|
||||
int retval = -1;
|
||||
int arg = f;
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Sending frames per file to receiver " << arg << std::endl;
|
||||
#endif
|
||||
if (connectData() == OK){
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
}
|
||||
if(ret!=FAIL && retval > -1){
|
||||
thisDetector->receiver_framesPerFile = retval;
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
|
||||
return thisDetector->receiver_framesPerFile;
|
||||
}
|
||||
|
||||
slsReceiverDefs::fileFormat slsDetector::setFileFormat(fileFormat f){
|
||||
int fnum=F_SET_RECEIVER_FILE_FORMAT;
|
||||
int ret = FAIL;
|
||||
|
@ -287,7 +287,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
|
||||
int dataBytesInclGapPixels;
|
||||
/** additional json header */
|
||||
char receiver_additionalJsonHeader[MAX_STR_LENGTH];
|
||||
|
||||
/** frames per file in receiver */
|
||||
int receiver_framesPerFile;
|
||||
|
||||
|
||||
} sharedSlsDetector;
|
||||
@ -1671,6 +1672,13 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
|
||||
*/
|
||||
string setFileName(string s="");
|
||||
|
||||
/**
|
||||
Sets the max frames per file in receiver
|
||||
@param f max frames per file
|
||||
\returns max frames per file in receiver
|
||||
*/
|
||||
int setReceiverFramesPerFile(int f = -1);
|
||||
|
||||
/**
|
||||
Sets up the file format
|
||||
@param f file format
|
||||
|
@ -1754,7 +1754,6 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
||||
|
||||
|
||||
|
||||
|
||||
/* Acquisition actions */
|
||||
|
||||
/*! \page actions Actions
|
||||
@ -2217,6 +2216,13 @@ 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;
|
||||
|
||||
/* pattern generator */
|
||||
|
||||
/*! \page ctb Chiptest board
|
||||
@ -6369,6 +6375,16 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
|
||||
sprintf(answer,"%d",myDet->setReceiverSilentMode());
|
||||
return string(answer);
|
||||
|
||||
} else if(cmd=="r_framesperfile") {
|
||||
if (action==PUT_ACTION){
|
||||
if (sscanf(args[1],"%d",&ival)) {
|
||||
myDet->setReceiverFramesPerFile(ival);
|
||||
} else return string("could not scan max frames per file\n");
|
||||
}
|
||||
char answer[100];
|
||||
memset(answer, 0, 100);
|
||||
sprintf(answer,"%s %d",answer, myDet->setReceiverFramesPerFile());
|
||||
return string(answer);
|
||||
}
|
||||
|
||||
|
||||
@ -6388,6 +6404,7 @@ 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;
|
||||
}
|
||||
if (action==GET_ACTION || action==HELP_ACTION){
|
||||
os << "receiver \t returns the status of receiver - can be running or idle" << std::endl;
|
||||
@ -6397,6 +6414,7 @@ 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;
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
@ -793,6 +793,14 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
|
||||
*/
|
||||
virtual string setFileName(string s="")=0;
|
||||
|
||||
/**
|
||||
Sets the max frames per file in receiver
|
||||
@param f max frames per file
|
||||
\returns max frames per file in receiver
|
||||
*/
|
||||
virtual int setReceiverFramesPerFile(int f = -1) = 0;
|
||||
|
||||
|
||||
/**
|
||||
Sets up the file format
|
||||
@param f file format
|
||||
|
Reference in New Issue
Block a user