From 19f7712e6594e190c4c1fff0879be40df9acd0a9 Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Fri, 13 Jan 2012 09:44:04 +0000 Subject: [PATCH] changes which commented out virtual for child functions and some other changes for configuremac and setclientip and setclientmac git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@96 951219d9-93cf-4727-9268-0efd64621fa3 --- .../slsDetector/slsDetector.cpp | 163 ++++++++++++------ slsDetectorSoftware/slsDetector/slsDetector.h | 47 +++-- 2 files changed, 142 insertions(+), 68 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 1f17bcd2f..55676f230 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -2844,7 +2844,6 @@ int slsDetector::setThresholdEnergy(int e_eV, int imod, detectorSettings isetti detectorSettings slsDetector::setSettings( detectorSettings isettings, int imod){ - std::cout<<"dfgfdgdgdf"<myDetectorType){ + case GOTTHARD: + n = controlSocket->ReceiveDataOnly(lastClientIP,sizeof(lastClientIP)); + cout << "Updating detector last modified by " << lastClientIP << endl; + break; + default: + n = controlSocket->ReceiveDataOnly(lastClientIP,sizeof(lastClientIP)); + cout << "Updating detector last modified by " << lastClientIP << endl; - n = controlSocket->ReceiveDataOnly(lastClientIP,sizeof(lastClientIP)); - cout << "Updating detector last modified by " << lastClientIP << endl; + n = controlSocket->ReceiveDataOnly(&nm,sizeof(nm)); + thisDetector->nMod[X]=nm; + n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); + thisDetector->nMod[Y]=nm; + thisDetector->nMods=thisDetector->nMod[Y]*thisDetector->nMod[X]; - n = controlSocket->ReceiveDataOnly(&nm,sizeof(nm)); - thisDetector->nMod[X]=nm; - n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); - thisDetector->nMod[Y]=nm; - thisDetector->nMods=thisDetector->nMod[Y]*thisDetector->nMod[X]; - - n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); - thisDetector->dynamicRange=nm; + n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); + thisDetector->dynamicRange=nm; - n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); - thisDetector->dataBytes=nm; - //t=setSettings(GET_SETTINGS); - n = controlSocket->ReceiveDataOnly( &t,sizeof(t)); - thisDetector->currentSettings=t; - //thr=getThresholdEnergy(); - n = controlSocket->ReceiveDataOnly( &thr,sizeof(thr)); - thisDetector->currentThresholdEV=thr; - //retval=setFrames(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[FRAME_NUMBER]=retval; - // retval=setExposureTime(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[ACQUISITION_TIME]=retval; - - //retval=setPeriod(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[FRAME_PERIOD]=retval; - //retval=setDelay(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[DELAY_AFTER_TRIGGER]=retval; - // retval=setGates(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[GATES_NUMBER]=retval; - //retval=setProbes(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[PROBES_NUMBER]=retval; - //retval=setTrains(tns); - n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); - thisDetector->timerValue[CYCLES_NUMBER]=retval; + n = controlSocket->ReceiveDataOnly( &nm,sizeof(nm)); + thisDetector->dataBytes=nm; + //t=setSettings(GET_SETTINGS); + n = controlSocket->ReceiveDataOnly( &t,sizeof(t)); + thisDetector->currentSettings=t; + //thr=getThresholdEnergy(); + n = controlSocket->ReceiveDataOnly( &thr,sizeof(thr)); + thisDetector->currentThresholdEV=thr; + //retval=setFrames(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[FRAME_NUMBER]=retval; + // retval=setExposureTime(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[ACQUISITION_TIME]=retval; + //retval=setPeriod(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[FRAME_PERIOD]=retval; + //retval=setDelay(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[DELAY_AFTER_TRIGGER]=retval; + // retval=setGates(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[GATES_NUMBER]=retval; + //retval=setProbes(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[PROBES_NUMBER]=retval; + //retval=setTrains(tns); + n = controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[CYCLES_NUMBER]=retval; + } return OK; } @@ -5068,9 +5072,10 @@ int slsDetector::getScanPrecision(int iscan){ char* slsDetector::setClientIP(string clientIP){ int wrongFormat=1; + struct sockaddr_in sa; - if(clientIP.length()==15){ - if((clientIP[3]==':')&&(clientIP[7]==':')&&(clientIP[11]==':')){ + if(clientIP.length()<16){ + if((clientIP[3]=='.')&&(clientIP[7]=='.')&&(clientIP[11]=='.')){ int result = inet_pton(AF_INET, clientIP.c_str(), &(sa.sin_addr)); if(result!=0){ sprintf(thisDetector->clientIP,clientIP.c_str()); @@ -5103,14 +5108,72 @@ char* slsDetector::setClientMAC(string clientMAC){ int slsDetector::configureMAC(){ - if(!strcmp(getClientIP(),"none")) - return -1; - else if(!strcmp(getClientMAC(),"none")) + int retval; + int ret=FAIL; + int fnum=F_CONFIGURE_MAC; + char mess[100]; + char arg[2][50]; + char cword[50]="", *pcword; + string sword; + strcpy(arg[0],getClientIP()); + strcpy(arg[1],getClientMAC()); + + +#ifdef VERBOSE + std::cout<< "slsDetector configureMAC "<< std::endl; +#endif + if(!strcmp(arg[0],"none")) return -1; + else if(!strcmp(arg[1],"none")) + return -1; +#ifdef VERBOSE + std::cout<< "IP/MAC Addresses in valid format "<< std::endl; +#endif - cout<<"\n\ndfgfdgklfdhgldf\n\n\n"; + //converting IPaddress to hex. + pcword = strtok (arg[0],"."); + while (pcword != NULL) { + sprintf(arg[0],"%02x",atoi(pcword)); + strcat(cword,arg[0]); + pcword = strtok (NULL, "."); + } + strcpy(arg[0],cword); + std::cout<<"arg0:"<onlineFlag==ONLINE_FLAG) { + if (controlSocket) { + if (controlSocket->Connect()>=0) { + controlSocket->SendDataOnly(&fnum,sizeof(fnum)); + controlSocket->SendDataOnly(arg,sizeof(arg)); + controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); + if (ret!=FAIL) + controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); + else { + controlSocket->ReceiveDataOnly(mess,sizeof(mess)); + std::cout<< "Detector returned error: " << mess << std::endl; + } + controlSocket->Disconnect(); + if (ret==FORCE_UPDATE) + updateDetector(); + } + } + } +#ifdef VERBOSE + std::cout<< "Configuring MAC - returned "<< retval << std::endl; +#endif + if (ret==FAIL) { + std::cout<< "Configuring MAC failed " << std::endl; + } + return retval; } @@ -8155,7 +8218,7 @@ int slsDetector::retrieveDetectorSetup(string fname1, int level){ #endif myfname=fname; #ifdef VERBOSE - std::cout<< "trim file name is "<< myfname << std::endl; + std::cout<< "file name is "<< myfname << std::endl; #endif infile.open(myfname.c_str(), ios_base::in); if (infile.is_open()) { @@ -8288,7 +8351,7 @@ int slsDetector::retrieveDetectorSetup(string fname1, int level){ strcpy(thisDetector->settingsFile,fname.c_str()); return myMod; } else { - std::cout<< "could not open trim file " << myfname << std::endl; + std::cout<< "could not open settings file " << myfname << std::endl; if (nflag) deleteModule(myMod); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 4aeee57aa..fc1cef9da 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -341,8 +341,8 @@ typedef struct sharedSlsDetector { //slsDetector(string const fname); // ~slsDetector(){while(dataQueue.size()>0){}}; /** destructor */ - virtual ~slsDetector();//{ disconnect_channels();}; - + ~slsDetector();//{ disconnect_channels();}; + //virtual ~slsDetector();//{ disconnect_channels();}; /** sets the onlineFlag \param off can be:
GET_ONLINE_FLAG, returns wether the detector is in online or offline state;
OFFLINE_FLAG, detector in offline state (i.e. no communication to the detector - using only local structure - no data acquisition possible!);
ONLINE_FLAG detector in online state (i.e. communication to the detector updating the local structure) */ @@ -370,15 +370,15 @@ typedef struct sharedSlsDetector { Should be implemented in the specific detector class /sa mythenDetector::readConfigurationFile */ - - virtual int readConfigurationFile(string const fname); + int readConfigurationFile(string const fname); + // virtual int readConfigurationFile(string const fname); /** Purely virtual function Should be implemented in the specific detector class /sa mythenDetector::writeConfigurationFile */ - virtual int writeConfigurationFile(string const fname); - + int writeConfigurationFile(string const fname); + //virtual int writeConfigurationFile(string const fname); /* It should be possible to dump all the settings of the detector (including trimbits, threshold energy, gating/triggering, acquisition time etc. in a file and retrieve it for repeating the measurement with identicals ettings, if necessary @@ -389,14 +389,15 @@ typedef struct sharedSlsDetector { Should be implemented in the specific detector class /sa mythenDetector::dumpDetectorSetup */ - virtual int dumpDetectorSetup(string const fname, int level=0); + int dumpDetectorSetup(string const fname, int level=0); + //virtual int dumpDetectorSetup(string const fname, int level=0); /** Purely virtual function Should be implemented in the specific detector class /sa mythenDetector::retrieveDetectorSetup */ - virtual int retrieveDetectorSetup(string const fname, int level=0); - + int retrieveDetectorSetup(string const fname, int level=0); + //virtual int retrieveDetectorSetup(string const fname, int level=0); /** configure the socket communication and initializes the socket instances @@ -498,7 +499,8 @@ typedef struct sharedSlsDetector { \sa mythenDetector::readSettingsFile */ - virtual sls_detector_module* readSettingsFile(string fname, sls_detector_module* myMod=NULL); + sls_detector_module* readSettingsFile(string fname, sls_detector_module* myMod=NULL); + //virtual sls_detector_module* readSettingsFile(string fname, sls_detector_module* myMod=NULL); /** Pure virtual function @@ -509,7 +511,8 @@ typedef struct sharedSlsDetector { \sa ::sls_detector_module mythenDetector::writeSettingsFile(string, sls_detector_module) */ - virtual int writeSettingsFile(string fname, sls_detector_module mod); + int writeSettingsFile(string fname, sls_detector_module mod); + //virtual int writeSettingsFile(string fname, sls_detector_module mod); /** Pure virtual function @@ -519,7 +522,8 @@ typedef struct sharedSlsDetector { \returns OK or FAIL if the file could not be written \sa ::sls_detector_module sharedSlsDetector mythenDetector::writeSettingsFile(string, int) */ - virtual int writeSettingsFile(string fname, int imod); + int writeSettingsFile(string fname, int imod); + //virtual int writeSettingsFile(string fname, int imod); /** @@ -719,7 +723,9 @@ typedef struct sharedSlsDetector { \offset reference to the offset variable \sa sharedSlsDetector mythenDetector::readCalibrationFile */ - virtual int readCalibrationFile(string fname, float &gain, float &offset); + int readCalibrationFile(string fname, float &gain, float &offset); + //virtual int readCalibrationFile(string fname, float &gain, float &offset); + /** writes a calibration file @@ -728,7 +734,8 @@ typedef struct sharedSlsDetector { \param offset \sa sharedSlsDetector mythenDetector::writeCalibrationFile */ - virtual int writeCalibrationFile(string fname, float gain, float offset); + int writeCalibrationFile(string fname, float gain, float offset); + //virtual int writeCalibrationFile(string fname, float gain, float offset); /** @@ -999,7 +1006,8 @@ typedef struct sharedSlsDetector { \returns current register value \sa ::sls_detector_module */ - virtual int setModule(int reg, int imod=-1); + int setModule(int reg, int imod=-1); + //virtual int setModule(int reg, int imod=-1); /** configure chip @@ -1007,14 +1015,16 @@ typedef struct sharedSlsDetector { \returns current register value \sa ::sls_detector_module */ - virtual int setModule(sls_detector_module module); + int setModule(sls_detector_module module); + //virtual int setModule(sls_detector_module module); /** get module \param imod module number \returns pointer to module structure (which has bee created and must then be deleted) */ - virtual sls_detector_module *getModule(int imod); + sls_detector_module *getModule(int imod); + //virtual sls_detector_module *getModule(int imod); // calibration functions // int setCalibration(int imod, detectorSettings isettings, float gain, float offset); @@ -1055,7 +1065,8 @@ typedef struct sharedSlsDetector { in this function trimbits/settings and calibration files are searched in the settingsDir and calDir directories and the detector is initialized */ - virtual detectorSettings setSettings(detectorSettings isettings, int imod=-1); + detectorSettings setSettings(detectorSettings isettings, int imod=-1); + //virtual detectorSettings setSettings(detectorSettings isettings, int imod=-1); /**