removed salas code for the time being, implemented overwrite, fixed prob of communciating between detector and receiver for settimer

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@803 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d
2014-03-25 15:32:12 +00:00
parent b743ab2d04
commit 8b833b0f7e
20 changed files with 314 additions and 52 deletions

View File

@@ -36,12 +36,14 @@ struct EigerReceiverScanConfiguration {
int scanTag;
int numberOfFrames;
bool doFileWrite;
bool doFileOverWrite;
EigerReceiverScanConfiguration():
dynamicRange(-1),
scanTag(-1),
numberOfFrames(-1),
doFileWrite(false) {};
doFileWrite(false),
doFileOverWrite(false){};
};
class EigerReceiverImplementation: public EigerReceiver {
@@ -163,6 +165,11 @@ public:
return(scan_config.doFileWrite);
}
int getEnableOverwrite() const {
DEBUG("getEnableOverwrite() returns " << scan_config.doFileOverWrite);
return(scan_config.doFileOverWrite);
}
slsDetectorDefs::runStatus getStatus() const {
DEBUG("getStatus(): return " <<status);
return(status);
@@ -204,6 +211,12 @@ public:
return(getEnableFileWrite());
}
int setEnableOverwrite(const int i) {
DEBUG("setEnableOverwrite() called with " << i);
scan_config.doFileOverWrite = i;
return(getEnableOverwrite());
}
int startReceiver(char message[]) {
DEBUG("startReceiver(): return 0.");
status = slsDetectorDefs::RUNNING;

View File

@@ -115,6 +115,12 @@ public:
*/
virtual int getEnableFileWrite() const = 0;
/**
* Returns file overwrite enable
* 1: YES 0: NO
*/
virtual int getEnableOverwrite() const = 0;
/**
* Set File Name (without frame index, file index and extension)
@param c file name
@@ -167,6 +173,13 @@ public:
*/
virtual int setEnableFileWrite(const int i) = 0;
/**
* Set enable file overwrite
* @param i file overwrite enable
/returns file overwrite enable
*/
virtual int setEnableOverwrite(const int i) = 0;
/**
* Starts Receiver - activate all configuration settings to the eiger receiver and start to listen for packets
@param message is the error message if there is an error

View File

@@ -38,7 +38,9 @@ slsReceiverFunctionList::slsReceiverFunctionList(detectorType det):
eth(NULL),
maxPacketsPerFile(0),
enableFileWrite(1),
overwrite(1),
fileIndex(0),
scanTag(0),
frameIndexNeeded(0),
acqStarted(false),
measurementStarted(false),
@@ -324,7 +326,20 @@ int slsReceiverFunctionList::setEnableFileWrite(int i){
int slsReceiverFunctionList::enableOverwrite(int i){
if(i!=-1){
if(myDetectorType == EIGER)
receiver->setEnableOverwrite(i);
else
overwrite=i;
}
if(myDetectorType == EIGER)
return receiver->getEnableOverwrite();
else
return overwrite;
}
@@ -373,9 +388,17 @@ int32_t slsReceiverFunctionList::setNumberOfFrames(int32_t fnum){
}
int32_t slsReceiverFunctionList::setScanTag(int32_t stag){
if(stag >= 0)
receiver->setScanTag(stag);
return receiver->getScanTag();
if(stag >= 0){
if(myDetectorType == EIGER)
receiver->setScanTag(stag);
else
scanTag = stag;
}
if(myDetectorType == EIGER)
return receiver->getScanTag();
else
return scanTag;
}
int32_t slsReceiverFunctionList::setDynamicRange(int32_t dr){
@@ -437,7 +460,8 @@ int64_t slsReceiverFunctionList::setAcquisitionPeriod(int64_t index){
if(index >= 0){
if(index != acquisitionPeriod){
acquisitionPeriod = index;
setupFifoStructure();
if(myDetectorType != EIGER)
setupFifoStructure();
}
}
return acquisitionPeriod;
@@ -982,7 +1006,12 @@ int slsReceiverFunctionList::createNewFile(){
sfilefd = NULL;
}
//open file
if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){
if(!overwrite){
if (NULL == (sfilefd = fopen((const char *) (savefilename), "wx"))){
cout << "Error: Could not create new file " << savefilename << endl;
return FAIL;
}
}else if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){
cout << "Error: Could not create file " << savefilename << endl;
return FAIL;
}

View File

@@ -141,8 +141,12 @@ public:
*/
int setEnableFileWrite(int i);
/**
* Enable/disable overwrite
* @param i enable
* Returns enable over write
*/
int enableOverwrite(int i);
@@ -377,6 +381,9 @@ private:
/** File write enable */
int enableFileWrite;
/** File over write enable */
int overwrite;
/** Complete File name */
char savefilename[MAX_STR_LENGTH];
@@ -389,6 +396,9 @@ private:
/** File Index */
int fileIndex;
/** scan tag */
int scanTag;
/** if frame index required in file name */
int frameIndexNeeded;

View File

@@ -321,6 +321,9 @@ int slsReceiverFuncs::function_table(){
flist[F_ENABLE_COMPRESSION] = &slsReceiverFuncs::enable_compression;
flist[F_SET_DETECTOR_HOSTNAME] = &slsReceiverFuncs::set_detector_hostname;
flist[F_SET_DYNAMIC_RANGE] = &slsReceiverFuncs::set_dynamic_range;
flist[F_ENABLE_OVERWRITE] = &slsReceiverFuncs::enable_overwrite;
//General Functions
flist[F_LOCK_SERVER] = &slsReceiverFuncs::lock_receiver;
@@ -1657,6 +1660,61 @@ int slsReceiverFuncs::set_dynamic_range() {
int slsReceiverFuncs::enable_overwrite() {
ret=OK;
int retval=-1;
int index;
strcpy(mess,"Could not enable/disable overwrite\n");
// receive arguments
if(socket->ReceiveDataOnly(&index,sizeof(index)) < 0 ){
strcpy(mess,"Error reading from socket\n");
ret = FAIL;
}
// execute action if the arguments correctly arrived
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (ret==OK) {
if (lockStatus==1 && socket->differentClients==1){
sprintf(mess,"Receiver locked by %s\n", socket->lastClientIP);
ret=FAIL;
}
else
retval=slsReceiverList->enableOverwrite(index);
}
#ifdef VERBOSE
if(ret!=FAIL)
cout << "overwrite:" << retval << endl;
else
cout << mess << endl;
#endif
#endif
if(ret==OK && socket->differentClients){
cout << "Force update" << endl;
ret=FORCE_UPDATE;
}
// send answer
socket->SendDataOnly(&ret,sizeof(ret));
if(ret==FAIL)
socket->SendDataOnly(mess,sizeof(mess));
socket->SendDataOnly(&retval,sizeof(retval));
//return ok/fail
return ret;
}

View File

@@ -163,6 +163,9 @@ public:
/** set dynamic range */
int set_dynamic_range();
/** enable overwrite */
int enable_overwrite();
//General Functions
/** Locks Receiver */