gotthard receiver works so far without cpu file write and tcp generic socket lock

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@337 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d
2012-11-12 15:48:28 +00:00
parent 6ee21ba810
commit 8f7872d056
21 changed files with 516 additions and 344 deletions

View File

@ -123,7 +123,8 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
strcpy(thisMultiDetector->fileName,"run");
/** set fileIndex to default to 0*/
thisMultiDetector->fileIndex=0;
/** set frames per file to default to 1*/
thisMultiDetector->framesPerFile=1;
/** set progress Index to default to 0*/
thisMultiDetector->progressIndex=0;
@ -229,7 +230,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
filePath=thisMultiDetector->filePath;
fileName=thisMultiDetector->fileName;
fileIndex=&thisMultiDetector->fileIndex;
framesPerFile=&thisMultiDetector->framesPerFile;
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) {
@ -3714,6 +3715,52 @@ int multiSlsDetector::getCurrentFrameIndex() {
int multiSlsDetector::resetFramesCaught(int index) {
int ret=-100, ret1;
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++){
if (detectors[i]){
ret1=detectors[i]->resetFramesCaught(index);
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
}
}
return ret;
}
int* multiSlsDetector::readFrameFromReceiver(){
int nel=(thisMultiDetector->dataBytes)/sizeof(int);
int n;
int* retval=new int[nel];
int *retdet, *p=retval;
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
if (detectors[id]) {
retdet=detectors[id]->readFrameFromReceiver();
if (retdet) {
n=detectors[id]->getDataBytes();
memcpy(p,retdet,n);
delete [] retdet;
p+=n/sizeof(int);
}else {
#ifdef VERBOSE
cout << "Receiver for detector " << id << " does not have data left " << endl;
#endif
delete [] retval;
return NULL;
}
}
}
return retval;
};
int multiSlsDetector::lockReceiver(int lock) {
int ret=-100, ret1;

View File

@ -111,6 +111,8 @@ class multiSlsDetector : public slsDetectorUtils {
char fileName[MAX_STR_LENGTH];
/** path of the output files */
char filePath[MAX_STR_LENGTH];
/** max frames per file */
int framesPerFile;
/** corrections to be applied to the data \see ::correctionFlags */
int correctionMask;
@ -1084,6 +1086,17 @@ class multiSlsDetector : public slsDetectorUtils {
*/
int getCurrentFrameIndex();
/**
* resets framescaught
* @param index frames caught by receiver
* @param index if frame index is needed
*/
int resetFramesCaught(int index=-1);
/**
/returns a frame read from recever
*/
int* readFrameFromReceiver();
/** Locks/Unlocks the connection to the receiver
/param lock sets (1), usets (0), gets (-1) the lock