diff --git a/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.cpp~ b/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.cpp~ deleted file mode 100644 index e359b426d..000000000 --- a/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.cpp~ +++ /dev/null @@ -1,423 +0,0 @@ -#include "angularConversionStatic.h" - -#include -#include -#include -#include -#include "angleConversionConstant.h" - -#include "sls_detector_defs.h" -#include "angleFunction.h" -using namespace std; - -angularConversionStatic::angularConversionStatic() -{ - //angleFunctionPointer=0; - registerAngleFunctionCallback(&defaultAngleFunction); - -} - -angularConversionStatic::~angularConversionStatic(){ - -} - - - -double* angularConversionStatic::convertAngles(double pos, int nch, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir) { - int imod=0; - double *ang=new double[nch]; - double enc=pos; - angleConversionConstant *p=NULL; - - int ch0=0; - int chlast=chansPerMod[0]-1; - int nchmod=chansPerMod[0]; - p=angOff[imod]; - if (mF[imod]==0) - enc=0; - else - enc=pos; - - for (int ip=0; ipchlast) { - imod++; - p=angOff[imod]; - if (mF[imod]==0) - enc=0; - else - enc=pos; - - ch0=chlast+1; - nchmod=chansPerMod[imod]; - if (nchmod>0) - chlast=ch0+nchmod-1; - } - - if (p) - ang[ip]=angle(ip-ch0, \ - enc, \ - fo+go, \ - p->r_conversion, \ - p->center, \ - p->offset, \ - p->tilt, \ - angdir ); - } - return ang; -} - - - - - - -double angularConversionStatic::convertAngle(double pos, int ich, angleConversionConstant *p, int mF, double fo, double go, int angdir) { - - - double enc=0, trans=0; - double ang; - - switch (mF) { - case 0: - enc=0; - trans=0; - break; - case 1: - enc=pos; - trans=0; - break; - case -1: - enc=-pos; - trans=0; - break; - case 2: - enc=0; - trans=pos; - break; - case -2: - enc=0; - trans=-pos; - break; - default: - enc=0; - trans=0; - } - - if (p) - ang=angle(ich, \ - enc, \ - fo+go, \ - p->r_conversion, \ - p->center, \ - p->offset, \ - trans, \ - angdir ); - - return ang; - - - -} - - - - - - - - - - - -double angularConversionStatic::convertAngle(double pos, int ich, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir) { - - int imod=0; - double ang; - double enc=0, trans=0; - angleConversionConstant *p=NULL; - - int ch0=0; - int chlast=chansPerMod[0]-1; - int nchmod=chansPerMod[0]; - - - - while (ich>chlast) { - imod++; - ch0=chlast+1; - nchmod=chansPerMod[imod]; - chlast=ch0+nchmod-1; - } - - p=angOff[imod]; - - - ang=convertAngle(pos, ich-ch0, p, mF[imod], fo, go, angdir); - - return ang; - -} - - - -//static! -int angularConversionStatic::readAngularConversion(string fname, int nmod, angleConversionConstant *angOff) { - - ifstream infile; - string ss; - -#ifdef VERBOSE - std::cout<< "Opening file "<< fname << std::endl; -#endif - infile.open(fname.c_str(), ios_base::in); - if (infile.is_open()) { - readAngularConversion(infile, nmod, angOff); - infile.close(); - } else { - std::cout<< "Could not open calibration file "<< fname << std::endl; - return -1; - } - return 0; -} - - -//static -int angularConversionStatic::readAngularConversion( ifstream& infile, int nmod, angleConversionConstant *angOff) { - string str; - int mod; - double center, ecenter, pitch, epitch; - double r_conv, er_conv; - double off, eoff; - string ss; - int interrupt=0; - int nm=0; - int newangconv=0; - //" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n" - while (infile.good() and interrupt==0) { - getline(infile,str); -#ifdef VERBOSE - cout << "** mod " << nm << " " ; - std::cout<< str << std::endl; -#endif - istringstream ssstr(str); - ssstr >> ss >> mod; - ssstr >> ss >> center; - if (ss==string("center")) - newangconv=1; - ssstr >> ss >> ecenter; - if (newangconv) { - ssstr >> ss >> pitch; - ssstr >> ss >> epitch; - } - ssstr >> ss >> r_conv; - ssstr >> ss >> er_conv; - ssstr >> ss >> off; - ssstr >> ss >> eoff; - if (nm=0 ) { - if (newangconv==0) { - angOff[nm].center=center; - angOff[nm].r_conversion=r_conv; - angOff[nm].offset=off; - angOff[nm].ecenter=ecenter; - angOff[nm].er_conversion=er_conv; - angOff[nm].eoffset=eoff; - } else { - - angOff[nm].tilt=pitch; - angOff[nm].etilt=epitch; - - } - } else - break; - //cout << nm<<" " << angOff[nm].offset << endl; - nm++; - if (nm>=nmod) - break; - - - - - } - return nm; - } - -//static -int angularConversionStatic:: writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff) { - - ofstream outfile; - outfile.open (fname.c_str(),ios_base::out); - if (outfile.is_open()) - { - writeAngularConversion(outfile, nmod, angOff); - outfile.close(); - } else { - std::cout<< "Could not open file " << fname << "for writing"<< std::endl; - return -1; - } - //" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n" - return 0; -} - - - -//static -int angularConversionStatic:: writeAngularConversion(ofstream& outfile, int nmod, angleConversionConstant *angOff) { - - for (int imod=0; imod0) { - -// #ifdef VERBOSE -// cout << "finalize " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl; -// #endif - mp[np]=mp[ibin]/mm[ibin]; - mv[np]=mv[ibin]/mm[ibin]; - me[np]=me[ibin]/mm[ibin]; - me[np]=sqrt(me[ibin]); - mm[np]=mm[ibin]; - np++; - } - } - return np; -} - -//static -int angularConversionStatic::addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nbins, int *badChanMask ) { - - - double binmi=-180.; - int ibin=0; - - if (p1==NULL) - return 0; - if (v1==NULL) - return slsDetectorDefs::FAIL; - - if (mp==NULL) //can be changed if we want to use a fixed bin algorithm! - return slsDetectorDefs::FAIL; - - if (mv==NULL) - return slsDetectorDefs::FAIL; - if (me==NULL) - return slsDetectorDefs::FAIL; - if (mm==NULL) - return slsDetectorDefs::FAIL; - if (nchans==0) - return slsDetectorDefs::FAIL; - - if (binsize<=0) - return slsDetectorDefs::FAIL; - - if (nbins<=0) - return slsDetectorDefs::FAIL; - - for (int ip=0; ip=0) { - mp[ibin]+=p1[ip]; - mv[ibin]+=v1[ip]; - if (e1) - me[ibin]+=(e1[ip]*e1[ip]); - else - me[ibin]+=v1[ip]; - mm[ibin]++; - -// #ifdef VERBOSE -// cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl; -// #endif - } else - return slsDetectorDefs::FAIL; - } - - - return slsDetectorDefs::OK; - -} - -int angularConversionStatic::addPointToMerging(double p1, double v1, double e1, double *mp, double *mv,double *me, int *mm, double binsize,int nbins) { - - - double binmi=-180.; - int ibin=0; - - - if (mp==NULL) //can be changed if we want to use a fixed bin algorithm! - return slsDetectorDefs::FAIL; - - if (mv==NULL) - return slsDetectorDefs::FAIL; - if (me==NULL) - return slsDetectorDefs::FAIL; - if (mm==NULL) - return slsDetectorDefs::FAIL; - - if (binsize<=0) - return slsDetectorDefs::FAIL; - - if (nbins<=0) - return slsDetectorDefs::FAIL; - - - ibin=(int)((p1-binmi)/binsize); - - - if (ibin=0) { - mp[ibin]+=p1; - mv[ibin]+=v1; - if (e1) - me[ibin]+=(e1*e1); - else - me[ibin]+=v1; - mm[ibin]++; - -// #ifdef VERBOSE -// cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl; -// #endif - } else - return slsDetectorDefs::FAIL; - - - return slsDetectorDefs::OK; - -} diff --git a/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.h~ b/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.h~ deleted file mode 100644 index 52c3e53cb..000000000 --- a/slsDetectorSoftware/slsDetectorAnalysis/angularConversionStatic.h~ +++ /dev/null @@ -1,181 +0,0 @@ - -#ifndef ANGULARCONVERSIONSTATIC_H -#define ANGULARCONVERSIONSTATIC_H - -#ifdef __CINT -#define MYROOT -#endif - - - - -#include -#include - -//#include "angleConversionConstant.h" - - - //double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction) - -class angleConversionConstant; - -using namespace std; - -/** - @short Angular conversion constants needed for a detector module - */ - - -/** - -@short methods to set/unset the angular conversion and merge the data -class containing the methods to set/unset the angular conversion and merge the data - - -The angular conversion itself is defined by the angle() function defined in usersFunctions.cpp - -*/ -class angularConversionStatic -// : public virtual slsDetectorDefs -{ - - public: - /** default constructor */ - angularConversionStatic(); - /** virtual destructor */ - virtual ~angularConversionStatic(); - - - - //virtual int readAngularConversion(string fname)=0; - - - - - /** - - reads an angular conversion file - \param fname file to be read - \param nmod number of modules (maximum) to be read - \param angOff pointer to array of angleConversionConstants - \returns OK or FAIL - */ - static int readAngularConversion(string fname, int nmod, angleConversionConstant *angOff); - - /** - reads an angular conversion file - \param ifstream input file stream to be read - \param nmod number of modules (maximum) to be read - \param angOff pointer to array of angleConversionConstants - \returns OK or FAIL - - */ - static int readAngularConversion(ifstream& ifs, int nmod, angleConversionConstant *angOff); - /** - writes an angular conversion file - \param fname file to be written - \param nmod number of modules to be written - \param angOff pointer to array of angleConversionConstants - \returns OK or FAIL - */ - static int writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff); - - /** - writes an angular conversion file - \param ofstream output file stream - \param nmod number of modules to be written - \param angOff pointer to array of angleConversionConstants - \returns OK or FAIL - */ - static int writeAngularConversion(ofstream& ofs, int nmod, angleConversionConstant *angOff); - - /** - sets the arrays of the merged data to 0. NB The array should be created with size nbins >= 360./getBinSize(); - \param mp already merged postions - \param mv already merged data - \param me already merged errors (squared sum) - \param mm multiplicity of merged arrays - \param nbins number of bins - \returns OK or FAIL - */ - static int resetMerging(double *mp, double *mv,double *me, int *mm, int nbins); - - /** - merge dataset - \param p1 angular positions of dataset - \param v1 data - \param e1 errors - \param mp already merged postions - \param mv already merged data - \param me already merged errors (squared sum) - \param mm multiplicity of merged arrays - \param nchans number of channels - \param binsize size of angular bin - \param nb number of angular bins - \param badChanMask badchannelmask (if NULL does not correct for bad channels) - \returns OK or FAIL - */ - - static int addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nb, int *badChanMask=NULL); - - - /** - merge dataset - \param p1 angular positions of dataset - \param v1 data - \param e1 errors - \param mp already merged postions - \param mv already merged data - \param me already merged errors (squared sum) - \param mm multiplicity of merged arrays - \param nchans number of channels - \param binsize size of angular bin - \param nb number of angular bins - \param badChanMask badchannelmask (if NULL does not correct for bad channels) - \returns OK or FAIL - */ - - static int addPointToMerging(double p1, double v1, double e1, double *mp, double *mv,double *me, int *mm, double binsize, int nb); - - - /** - calculates the "final" positions, data value and errors for the merged data - \param mp already merged postions - \param mv already merged data - \param me already merged errors (squared sum) - \param mm multiplicity of merged arrays - \param nb number of bins - \returns FAIL or the number of non empty bins (i.e. points belonging to the pattern) - */ - - static int finalizeMerging(double *mp, double *mv,double *me, int *mm, int nb); - - /** - converts channel number to angle - \param pos encoder position - \returns array of angles corresponding to the channels - */ - - double* convertAngles(double pos, int nch, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir); - - double convertAngle(double pos, int ich, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir); - - - - protected: - - - - - int registerAngleFunctionCallback(double (*fun)(double, double, double, double, double, double, double, int)) {angle = fun; return 0;}; - - - double (*angle)(double, double, double, double, double, double, double, int); - - - // private: - - -}; - -#endif diff --git a/slsDetectorSoftware/slsReceiver/communication_funcs.c b/slsDetectorSoftware/slsReceiver/communication_funcs.c deleted file mode 120000 index 87a4f95d1..000000000 --- a/slsDetectorSoftware/slsReceiver/communication_funcs.c +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/communication_funcs.c \ No newline at end of file diff --git a/slsDetectorSoftware/slsReceiver/communication_funcs.h b/slsDetectorSoftware/slsReceiver/communication_funcs.h deleted file mode 120000 index f220903b2..000000000 --- a/slsDetectorSoftware/slsReceiver/communication_funcs.h +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/communication_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver.c b/slsDetectorSoftware/slsReceiver/slsReceiver.c deleted file mode 100644 index c18aafb4a..000000000 --- a/slsDetectorSoftware/slsReceiver/slsReceiver.c +++ /dev/null @@ -1,73 +0,0 @@ -/* A simple server in the internet domain using TCP - The port number is passed as an argument */ -#include "communication_funcs.h" -#include "slsReceiver_funcs.h" -#include - - -extern int sockfd; - - -void error(char *msg) -{ - perror(msg); -} - -int main(int argc, char *argv[]) -{ - int portno = DEFAULT_PORTNO+2; - int retval = OK; - int sd, fd; - - - //init_receiver(argv[1]); //defined in slsReceiver_funcs - - - sd=bindSocket(portno); //defined in communication_funcs - - sockfd=sd; - - - if (getServerError(sd)) { //defined in communication_funcs - printf("server error!\n"); - return -1; - } - - /* assign function table */ - function_table(); //defined in slsReceiver_funcs -#ifdef VERBOSE - printf("function table assigned \n"); -#endif - -printf("Ready...\n"); - - /* waits for connection */ - while(retval!=GOODBYE) { -#ifdef VERBOSE - printf("\n"); -#endif -#ifdef VERY_VERBOSE - printf("Waiting for client call\n"); -#endif - fd=acceptConnection(sockfd); //defined in communication_funcs -#ifdef VERY_VERBOSE - printf("Conenction accepted\n"); -#endif - if (fd>0) { - retval=decode_function(fd); //defined in slsReceiverServer_funcs -#ifdef VERY_VERBOSE - printf("function executed\n"); -#endif - closeConnection(fd); //defined in communication_funcs -#ifdef VERY_VERBOSE - printf("connection closed\n"); -#endif - } - } - - exitServer(sockfd); //defined in communication_funcs - printf("Goodbye!\n"); - - return 0; -} - diff --git a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.c b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.c deleted file mode 100644 index 85be0385c..000000000 --- a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.c +++ /dev/null @@ -1,398 +0,0 @@ -#ifdef SLS_RECEIVER_FUNCTION_LIST -#include "slsReceiverFunctionList.h" - -#include "sls_detector_defs.h" - -#include -#include /* exit() */ -#include /* memset(), memcpy() */ -#include -#include -#include -#include /* fork(), write(), close() */ -#include -#include -#include -#include -#include /* socket(), bind(), listen(), accept() */ -#include -#include -#include -#include -#include -#include -#include -#include /* uname() */ - -#include /* thread */ - -//constants -#define MAX_BUFLEN 1048576 -#define TCP_PORT_NUMBER 2233 - -#define SRVNAME "localhost" -#define SERVER_PORT 50001 -#define BUFFER_LENGTH 1286 -#define FALSE 0 - -int gui_acquisition_thread_running = 0; -int err = 0; -pthread_t gui_acquisition_thread; - - -char buffer[BUFFER_LENGTH*2]; -char sendbuffer[BUFFER_LENGTH*2]; - -char onebuffer[BUFFER_LENGTH]; -int sd = -1; -int sockfd; - -FILE *sfilefd; - - -char savefilename[128]; -char filePath[MAX_STR_LENGTH]=""; -char fileName[MAX_STR_LENGTH]="run"; -int fileIndex=0; -int frameIndexNeeded=1; - -//for each scan -int frameIndex=0; -int startFrameIndex=-1; -int framesCaught=0; - -//for each acquisition -int acquisitionIndex=0; -int startAcquisitionIndex=-1;//to remember progress for scans -int totalFramesCaught=0; - -int framesInFile=0;//to know when to start next file - - - - - -enum runStatus status = IDLE; - - - -void closeFile(){ - if(gui_acquisition_thread_running){ - printf("Closing file\n"); - fclose(sfilefd); - } - exit(0); -} - - -enum runStatus getReceiverStatus(){ -#ifdef VERBOSE - printf("Status:%d\n",status); -#endif - return status; -} - - - - -char* getFileName(){ - return fileName; -} - -char* setFileName(char fName[]){ - if(strlen(fName)){ - strcpy(fileName,fName); - } - return getFileName(); -} - - - -char* getFilePath(){ - return filePath; -} - -char* setFilePath(char fPath[]){ - if(strlen(fPath)){ - /*check if filepath exists and chop off last '/'*/ - struct stat st; - if(stat(fPath,&st) == 0) - strcpy(filePath,fPath); - } - return getFilePath(); -} - - - - - - -int getFileIndex(){ - return fileIndex; -} - -int setFileIndex(int index){ - if(index>=0){ - fileIndex=index; - } - return getFileIndex(); -} - - - -int getStartFrameIndex(){ - return startFrameIndex; -} - - - -int getFrameIndex(){ - if(startFrameIndex==-1) - frameIndex=0; - else - frameIndex=((int)(*((int*)buffer)) - startFrameIndex)/2; - return frameIndex; -} - - -int getAcquisitionIndex(){ - if(startAcquisitionIndex==-1) - acquisitionIndex=0; - else - acquisitionIndex=((int)(*((int*)buffer)) - startAcquisitionIndex)/2; - return acquisitionIndex; -} - - - -int getFramesCaught(){ - return framesCaught; -} - - -int getTotalFramesCaught(){ - return totalFramesCaught; -} - - -int resetTotalFramesCaught(int index){ - startAcquisitionIndex=-1; - totalFramesCaught=0; - frameIndexNeeded=index; - return frameIndexNeeded; -} - - - -void* startListening(void *arg){ -#ifdef VERYVERBOSE - printf("In startListening()\n"); -#endif - /***********************************************************************/ - /* Variable and structure definitions. */ - /***********************************************************************/ - sd = -1; - int rc1, rc2, rc; - int currframenum, prevframenum; - struct sockaddr_in serveraddr; - struct sockaddr_in clientaddr; - - socklen_t clientaddrlen = sizeof(clientaddr); - framesInFile=0; - frameIndex=0; - startFrameIndex=-1; - framesCaught=0; - - - /***********************************************************************/ - /* Catch signal SIGINT to close files properly */ - /***********************************************************************/ - signal(SIGINT, closeFile); - - - //create file name - if(!frameIndexNeeded) - sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); - else - sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); - - /***********************************************************************/ - /* A do/while(FALSE) loop is used to make error cleanup easier. The */ - /* close() of each of the socket descriptors is only done once at the */ - /* very end of the program. */ - /***********************************************************************/ - do { - /********************************************************************/ - /* The socket() function returns a socket descriptor, which represents */ - /* an endpoint. The statement also identifies that the INET */ - /* (Internet Protocol) address family with the UDP transport */ - /* (SOCK_DGRAM) will be used for this socket. */ - /********************************************************************/ - sd = socket(AF_INET, SOCK_DGRAM, 0); - if (sd < 0) { - perror("socket() failed"); - break; - } - - /********************************************************************/ - /* After the socket descriptor is created, a bind() function gets a */ - /* unique name for the socket. In this example, the user sets the */ - /* s_addr to zero, which means that the UDP port of 3555 will be */ - /* bound to all IP addresses on the system. */ - /********************************************************************/ - memset(&serveraddr, 0, sizeof(serveraddr)); - serveraddr.sin_family = AF_INET; - serveraddr.sin_port = htons(SERVER_PORT); - //serveraddr.sin_addr.s_addr = inet_addr(server_ip); - serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); - - rc = bind(sd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); - if (rc < 0) { - perror("bind() failed"); - break; - } - - - sfilefd = fopen((const char *) (savefilename), "w"); - printf("Saving to ... %s. Ready! \n", savefilename); - - while (gui_acquisition_thread_running) { - /********************************************************************/ - /* The server uses the recvfrom() function to receive that data. */ - /* The recvfrom() function waits indefinitely for data to arrive. */ - /********************************************************************/ - - - if (framesInFile == 20000) { - fclose(sfilefd); - - currframenum=(int)(*((int*)buffer)); - getFrameIndex(); - //create file name - if(!frameIndexNeeded) - sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); - else - sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); - - printf("saving to %s\t\tpacket loss %f %%\t\tframenum %d\n", savefilename,((currframenum-prevframenum-(2*framesInFile))/(double)(2*framesInFile))*100.000,currframenum); - sfilefd = fopen((const char *) (savefilename), "w"); - prevframenum=currframenum; - framesInFile = 0; - } - status = RUNNING; - - rc1 = recvfrom(sd, buffer, sizeof(onebuffer), 0, - (struct sockaddr *) &clientaddr, &clientaddrlen); - //printf("rc1 done\n"); - rc2 = recvfrom(sd, buffer+sizeof(onebuffer), sizeof(onebuffer), 0, - (struct sockaddr *) &clientaddr, &clientaddrlen); - - - //for each scan - if(startFrameIndex==-1){ - startFrameIndex=(int)(*((int*)buffer))-2; - prevframenum=startFrameIndex; - } - //start of acquisition - if(startAcquisitionIndex==-1) - startAcquisitionIndex=startFrameIndex; - - //printf("rc2 done\n"); - if ((rc1 < 0) || (rc2 < 0)) { - perror("recvfrom() failed"); - break; - } - - //so that it doesnt write the last frame twice - if(gui_acquisition_thread_running){ - fwrite(buffer, 1, rc1, sfilefd); - fwrite(buffer+sizeof(onebuffer), 1, rc2, sfilefd); - framesInFile++; - framesCaught++; - totalFramesCaught++; - //printf("saving\n"); - } - } - } while (gui_acquisition_thread_running); - gui_acquisition_thread_running=0; - status = IDLE; - - - /***********************************************************************/ - /* Close down any open socket descriptors */ - /***********************************************************************/ - if (sd != -1){ - printf("Closing sd\n");fflush(stdout); - close(sd); - } - - //close file - fclose(sfilefd); - printf("sfield:%d\n",(int)sfilefd); - - - return NULL; -} - - - - - - - - - -int startReceiver(){ -#ifdef VERBOSE - printf("Starting Receiver\n"); -#endif - - if(!gui_acquisition_thread_running){ - printf("Starting new acquisition threadddd ....\n"); - gui_acquisition_thread_running=1; - //status = RUNNING; - err = pthread_create(&gui_acquisition_thread, NULL,&startListening, NULL); - if(!err){ - while(status!=RUNNING); - printf("\n Thread created successfully.\n"); - }else{ - gui_acquisition_thread_running=0; - status = IDLE; - printf("\n Cant create thread. Status:%d\n",status); - return FAIL; - } - } - - return OK; -} - - - - - -int stopReceiver(){ -#ifdef VERBOSE - printf("Stopping Receiver\n"); -#endif - - if(gui_acquisition_thread_running){ - printf("Stopping new acquisition threadddd ....\n"); - //stop thread - gui_acquisition_thread_running=0; - if (sd != -1) - shutdown(sd, SHUT_RDWR); - pthread_join(gui_acquisition_thread,NULL); - status = IDLE; - } - printf("Status:%d\n",status); - - return OK; -} - - -char* readFrame(char* fName){ - strcpy(fName,savefilename); - return buffer; -} - -#endif diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.c b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.c deleted file mode 100644 index 71664ca90..000000000 --- a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.c +++ /dev/null @@ -1,941 +0,0 @@ -//#include "sls_detector_defs.h" -#include "slsReceiver_funcs.h" -#include "slsReceiverFunctionList.h" - -#include "sls_detector_defs.h" -#include "sls_detector_funcs.h" - -#include -#include - -// Global variables - -int (*flist[256])(int); - - -//defined in the detector specific file -#ifdef MYTHEND -const enum detectorType myDetectorType=MYTHEN; -#elif GOTTHARDD -const enum detectorType myDetectorType=GOTTHARD; -#elif EIGERD -const enum detectorType myDetectorType=EIGER; -#elif PICASSOD -const enum detectorType myDetectorType=PICASSO; -#else -const enum detectorType myDetectorType=GENERIC; -#endif - - -//define in communication_funcs -extern int lockStatus; -extern char lastClientIP[INET_ADDRSTRLEN]; -extern char thisClientIP[INET_ADDRSTRLEN]; -extern int differentClients; - - - -/* global variables for optimized readout */ - -char *dataretval=NULL; -int dataret; -char mess[1000]; -int dataBytes; - - - -/* -int init_receiver() { - - - initializeReceiver(); - - strcpy(mess,"dummy message"); - strcpy(lastClientIP,"none"); - strcpy(thisClientIP,"none1"); - lockStatus=0; - return OK; -} - */ - -int decode_function(int file_des) { - int fnum,n; - int retval=FAIL; -#ifdef VERBOSE - printf( "receive data\n"); -#endif - n = receiveDataOnly(file_des,&fnum,sizeof(fnum)); - if (n <= 0) { -#ifdef VERBOSE - printf("ERROR reading from socket %d, %d %d\n", n, fnum, file_des); -#endif - return FAIL; - } -#ifdef VERBOSE - else - printf("size of data received %d\n",n); -#endif - -#ifdef VERBOSE - printf( "calling function fnum = %d %x\n",fnum,flist[fnum]); -#endif - if (fnum<0 || fnum>255) - fnum=255; - retval=(*flist[fnum])(file_des); - if (retval==FAIL) - printf( "Error executing the function = %d \n",fnum); - return retval; -} - - -int function_table() { - int i; - for (i=0;i<256;i++){ - flist[i]=&M_nofunc; - } - flist[F_EXIT_SERVER]=&exit_server; //not implemented in client - flist[F_EXEC_COMMAND]=&exec_command; //not implemented in client - - - flist[F_SET_FILE_NAME]=&set_file_name; - flist[F_SET_FILE_PATH]=&set_file_dir; - flist[F_SET_FILE_INDEX]=&set_file_index; - flist[F_START_RECEIVER]=&start_receiver; - flist[F_STOP_RECEIVER]=&stop_receiver; - flist[F_GET_RECEIVER_STATUS]=&get_receiver_status; - flist[F_GET_FRAMES_CAUGHT]=&get_frames_caught; - flist[F_GET_FRAME_INDEX]=&get_frame_index; - flist[F_RESET_FRAMES_CAUGHT]=&reset_frames_caught; - flist[F_READ_FRAME]=&read_frame; - - flist[F_LOCK_RECEIVER]=&lock_receiver; - flist[F_SET_PORT]=&set_port; - flist[F_GET_LAST_CLIENT_IP]=&get_last_client_ip; - flist[F_UPDATE_CLIENT]=&update_client; - - -#ifdef VERBOSE - /* for (i=0;i<256;i++){ - printf("function %d located at %x\n",i,flist[i]); - }*/ -#endif - return OK; -} - - - - - - -int set_file_name(int file_des) { - int ret=OK; - int n=0; - char fName[MAX_STR_LENGTH],retval[MAX_STR_LENGTH]=""; - - strcpy(mess,"Could not set file name"); - - - /* receive arguments */ - n = receiveDataOnly(file_des,fName,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - /* execute action if the arguments correctly arrived*/ - if (ret==OK) { -#ifdef SLS_RECEIVER_FUNCTION_LIST - - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } -/* else if((strlen(fName))&&(getReceiverStatus()==RUNNING)){ - strcpy(mess,"Can not set file name while receiver running"); - ret = FAIL; - } -*/ else - strcpy(retval,setFileName(fName)); - } - -#endif -#ifdef VERBOSE - if(ret!=FAIL) - printf("file name:%s\n",retval); - else - printf("%s",mess); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - n = sendDataOnly(file_des,retval,MAX_STR_LENGTH); - - /*return ok/fail*/ - return ret; -} - - - - - - - -int set_file_dir(int file_des) { - int ret=OK; - int n=0; - char fPath[MAX_STR_LENGTH],retval[MAX_STR_LENGTH]=""; - - strcpy(mess,"Could not set file path\n"); - - - /* receive arguments */ - n = receiveDataOnly(file_des,fPath,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - /* execute action if the arguments correctly arrived*/ - if (ret==OK) { -#ifdef SLS_RECEIVER_FUNCTION_LIST - - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } - else if((strlen(fPath))&&(getReceiverStatus()==RUNNING)){ - strcpy(mess,"Can not set file path while receiver running\n"); - ret = FAIL; - } - else{ - strcpy(retval,setFilePath(fPath)); - /* if file path doesnt exist*/ - if(strlen(fPath)) - if (strcmp(retval,fPath)){ - strcpy(mess,"receiver file path does not exist\n"); - ret=FAIL; - } - } - - } -#endif -#ifdef VERBOSE - if(ret!=FAIL) - printf("file path:%s\n",retval); - else - printf("%s",mess); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - n = sendDataOnly(file_des,retval,MAX_STR_LENGTH); - - /*return ok/fail*/ - return ret; -} - - - - - - - -int set_file_index(int file_des) { - int ret=OK; - int n=0; - int index,retval=-1; - - strcpy(mess,"Could not set file index\n"); - - - /* receive arguments */ - n = receiveDataOnly(file_des,&index,sizeof(index)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - /* execute action if the arguments correctly arrived*/ - if (ret==OK) { -#ifdef SLS_RECEIVER_FUNCTION_LIST - - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } -/* else if((index>=0)&&(getReceiverStatus()==RUNNING)){ - strcpy(mess,"Can not set file index while receiver running\n"); - ret = FAIL; - } -*/ else - retval=setFileIndex(index); - } - -#endif -#ifdef VERBOSE - if(ret!=FAIL) - printf("file index:%d\n",retval); - else - printf("%s",mess); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - n = sendDataOnly(file_des,&retval,sizeof(retval)); - - /*return ok/fail*/ - return ret; -} - - - - - - - - -int start_receiver(int file_des) { - int ret=OK; - int n=0; - - strcpy(mess,"Could not start receiver\n"); - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } - else if(!strlen(setFilePath(""))){ - strcpy(mess,"receiver not set up. set receiver ip again.\n"); - ret = FAIL; - } - else if(getReceiverStatus()!=RUNNING) - ret=startReceiver(); -#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - - -int stop_receiver(int file_des) { - int ret=OK; - int n=0; - - strcpy(mess,"Could not stop receiver\n"); - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } - else if(getReceiverStatus()!=IDLE) - ret=stopReceiver(); -#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - - -int get_receiver_status(int file_des) { - int ret=OK; - int n=0; - enum runStatus retval; - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - retval=getReceiverStatus(); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - n = sendDataOnly(file_des,&retval,sizeof(retval)); - /*return ok/fail*/ - return ret; -} - - - - - - - - -int get_frames_caught(int file_des) { - int ret=OK; - int n=0; - int retval=-1; - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - retval=getTotalFramesCaught(); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - n = sendDataOnly(file_des,&retval,sizeof(retval)); - /*return ok/fail*/ - return ret; -} - - - - - - - - - - -int get_frame_index(int file_des) { - int ret=OK; - int n=0; - int retval=-1; - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - retval=getAcquisitionIndex(); -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - n = sendDataOnly(file_des,&retval,sizeof(retval)); - /*return ok/fail*/ - return ret; -} - - - - - - - -int reset_frames_caught(int file_des) { - int ret=OK; - int n=0; - int retval=-1; - int index=-1; - - strcpy(mess,"Could not reset frames caught\n"); - - - /* receive arguments */ - n = receiveDataOnly(file_des,&index,sizeof(index)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if (ret==OK) { - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Receiver locked by %s\n", lastClientIP); - ret=FAIL; - } - else - retval=resetTotalFramesCaught(index); -#endif - } - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - n = sendDataOnly(file_des,&retval,sizeof(retval)); - /*return ok/fail*/ - return ret; -} - - - - - - - -int read_frame(int file_des) { - int ret=OK; - int n=0,i,startIndex=-1; - - char* retval=NULL; - char buffer[1286*2]; - char fName[MAX_STR_LENGTH]; - int arg[2]; - arg[1]=1;//do not flip - int index=-1,index2=-1,fIndex=-1;; - - - strcpy(mess,"Could not read frame\n"); - - - /* execute action if the arguments correctly arrived*/ -#ifdef SLS_RECEIVER_FUNCTION_LIST - //wait till you get first frame 1. to get index(from startindex 2. filename corresponds to buffer value - if(startIndex==-1){ - ret=FAIL; - strcpy(mess,"did not start index\n"); - for(i=0;i<10;i++){ - startIndex=getStartFrameIndex(); - if(startIndex==-1) - usleep(1000000); - else { - ret=OK; - break; - } - } - } - //got atleast first frame, read buffer - if(ret==OK){ - int count=0; - do{ - if(count>0){ printf("\nunmatching: index:%d index2:%d\n",index,index2);fflush(stdout);} - retval=readFrame(fName); - index=(int)(*((int*)retval)); - char* retval2= retval+1286; - index2= (int)(*((int*)retval2)); - count++; - - }while((index%2)==(index2%2)); - - fIndex=((int)(*((int*)retval)) - startIndex)/2; - arg[0]=fIndex-1; - arg[1]=(index%2); - -#ifdef VERBOSE - printf("\nstartIndex:%d\n",startIndex); - printf("fName:%s\n",fName); - if((index%2)==0){ - printf("\nEven Index, must flip:%d\n",index); - fflush(stdout); - } -#endif - } - - -#endif - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - /*if(getReceiverStatus()==IDLE){ - ret=FAIL; -printf("*************STOPPPED***\n"); - }*/ - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - else{ - n = sendDataOnly(file_des,fName,MAX_STR_LENGTH); - n = sendDataOnly(file_des,arg,sizeof(arg)); - n = sendDataOnly(file_des,retval,sizeof(buffer)); - } - /*return ok/fail*/ - return ret; -} - - - - - - - - - - - - - - - - - - - - -int M_nofunc(int file_des){ - - int retval=FAIL; - sprintf(mess,"Unrecognized Function\n"); - printf(mess); - sendDataOnly(file_des,&retval,sizeof(retval)); - sendDataOnly(file_des,mess,sizeof(mess)); - return GOODBYE; -} - - - - - - -int exit_server(int file_des) { - int retval=FAIL; - sendDataOnly(file_des,&retval,sizeof(retval)); - printf("closing server."); - sprintf(mess,"closing server"); - sendDataOnly(file_des,mess,sizeof(mess)); - return GOODBYE; -} - -int exec_command(int file_des) { - char cmd[MAX_STR_LENGTH]; - char answer[MAX_STR_LENGTH]; - int retval=OK; - int sysret=0; - int n=0; - - // receive arguments - n = receiveDataOnly(file_des,cmd,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - retval=FAIL; - } - - // execute action if the arguments correctly arrived - if (retval==OK) { - //#ifdef VERBOSE - printf("executing command %s\n", cmd); - //#endif - if (lockStatus==0 || differentClients==0) - sysret=system(cmd); - - //should be replaced by popen - if (sysret==0) { - sprintf(answer,"Succeeded\n"); - if (lockStatus==1 && differentClients==1) - sprintf(answer,"Detector locked by %s\n", lastClientIP); - } else { - sprintf(answer,"Failed\n"); - retval=FAIL; - } - } else { - sprintf(answer,"Could not receive the command\n"); - } - - // send answer - n = sendDataOnly(file_des,&retval,sizeof(retval)); - n = sendDataOnly(file_des,answer,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error writing to socket"); - retval=FAIL; - } - - - //return ok/fail - return retval; - -} - -int lock_receiver(int file_des) { - - - int n; - int ret=OK; - - int lock; - n = receiveDataOnly(file_des,&lock,sizeof(lock)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (lock)\n"); - ret=FAIL; - } - if (lock>=0) { - if (lockStatus==0 || strcmp(lastClientIP,thisClientIP)==0 || strcmp(lastClientIP,"none")==0) { - lockStatus=lock; - strcpy(lastClientIP,thisClientIP); - } else { - ret=FAIL; - sprintf(mess,"Receiver already locked by %s\n", lastClientIP); - } - } - if (differentClients && ret==OK) - ret=FORCE_UPDATE; - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else - n = sendDataOnly(file_des,&lockStatus,sizeof(lockStatus)); - - return ret; - -} - - - -int set_port(int file_des) { - int n; - int ret=OK; - int sd=-1; - - enum portType p_type; /** data? control? stop? Unused! */ - int p_number; /** new port number */ - - n = receiveDataOnly(file_des,&p_type,sizeof(p_type)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (ptype)\n"); - ret=FAIL; - } - - n = receiveDataOnly(file_des,&p_number,sizeof(p_number)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (pnum)\n"); - ret=FAIL; - } - if (differentClients==1 && lockStatus==1 ) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - if (p_number<1024) { - sprintf(mess,"Too low port number %d\n", p_number); - printf("\n"); - ret=FAIL; - } - - printf("set port %d to %d\n",p_type, p_number); - - sd=bindSocket(p_number); - } - if (sd>=0) { - ret=OK; - if (differentClients ) - ret=FORCE_UPDATE; - } else { - ret=FAIL; - sprintf(mess,"Could not bind port %d\n", p_number); - printf("Could not bind port %d\n", p_number); - if (sd==-10) { - sprintf(mess,"Port %d already set\n", p_number); - printf("Port %d already set\n", p_number); - - } - } - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&p_number,sizeof(p_number)); - closeConnection(file_des); - exitServer(sockfd); - sockfd=sd; - - } - - return ret; - -} - -int get_last_client_ip(int file_des) { - int ret=OK; - int n; - if (differentClients ) - ret=FORCE_UPDATE; - n = sendDataOnly(file_des,&ret,sizeof(ret)); - n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); - - return ret; - -} - - -int send_update(int file_des) { - - int ret=OK; - int n,ind; - char path[MAX_STR_LENGTH]; - - - n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); - //index - ind=getFileIndex(-1); - n = sendDataOnly(file_des,&ind,sizeof(ind)); - //filepath - strcpy(path,getFilePath("")); - n = sendDataOnly(file_des,path,MAX_STR_LENGTH); - //filename - strcpy(path,getFileName("")); - n = sendDataOnly(file_des,path,MAX_STR_LENGTH); - - if (lockStatus==0) { - strcpy(lastClientIP,thisClientIP); - } - - return ret; - - -} - - -int update_client(int file_des) { - - int ret=OK; - sendDataOnly(file_des,&ret,sizeof(ret)); - return send_update(file_des); - - - -} - -/* -int set_master(int file_des) { - - enum masterFlags retval=GET_MASTER; - enum masterFlags arg; - int n; - int ret=OK; - // int regret=OK; - - - sprintf(mess,"can't set master flags\n"); - - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - - if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - retval=setMaster(arg); - - } - if (retval==GET_MASTER) { - ret=FAIL; - } - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} - - - - - - -int set_synchronization(int file_des) { - - enum synchronizationMode retval=GET_MASTER; - enum synchronizationMode arg; - int n; - int ret=OK; - //int regret=OK; - - - sprintf(mess,"can't set synchronization mode\n"); - - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - - if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - retval=setSynchronization(arg); - } - if (retval==GET_SYNCHRONIZATION_MODE) { - ret=FAIL; - } - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} -*/ diff --git a/slsDetectorSoftware/usersFunctions/usersFunctions.c b/slsDetectorSoftware/usersFunctions/usersFunctions.c deleted file mode 100644 index d61c80e6f..000000000 --- a/slsDetectorSoftware/usersFunctions/usersFunctions.c +++ /dev/null @@ -1,328 +0,0 @@ -#include "usersFunctions.h" -#include -#include - - -double pos; -double i0=0; -#ifdef EPICS - -#include -#include - -static double timeout = 3.0; - -chid ch_pos,ch_i0, ch_getpos; -void *ch_arg,*ch_darg,*ch_parg,*ch_poarg,*ch_ioarg; - - - - -/* connect to a PV */ -int connect_channel(const char *name, chid *ch_id) { - int status = ECA_NORMAL; - status = ca_create_channel(name, NULL, NULL, CA_PRIORITY_DEFAULT, ch_id); - if (status != ECA_NORMAL) - return status; - - status = ca_pend_io(timeout); - return status; -} - -/* disconnect to a PV */ -int disconnect_channel(chid ch_id) -{ - ca_clear_channel(ch_id); - ca_flush_io(); -} - -int caget(chid ch_id, double *value) { - - int status = ECA_NORMAL; - - status = ca_get(DBR_DOUBLE, ch_id, value); - if (status != ECA_NORMAL) { - return status; - } - - status = ca_pend_io(timeout); - if (status != ECA_NORMAL) { - return status; - } - - return status; -} - -int caputq(chid ch_id, double value) { - // does not wait! - int status = ECA_NORMAL; - - status = ca_put(DBR_DOUBLE, ch_id, &value); - if (status != ECA_NORMAL) - return status; - - status = ca_pend_io(timeout); - if (status != ECA_NORMAL) { - return status; - } - - return status; -} - -void put_callback(struct event_handler_args args) -{ - epicsEventId eid = (epicsEventId)args.usr; - epicsEventSignal(eid); -} - -int caput(chid ch_id, double value) { - - // waits! - int status = ECA_NORMAL; - epicsEventId eid = epicsEventCreate(epicsEventEmpty); - - status = ca_put_callback(DBR_DOUBLE, - ch_id, - &value, - put_callback, - eid); - status = ca_pend_io(timeout); - if (status != ECA_NORMAL) - return status; - - if (epicsEventWait(eid) != epicsEventWaitOK) - status = ECA_TIMEOUT; - - return status; -} - -//int main(int argc, char *argv[]) { - - - - - - - - -#endif - - - - - - - -/* - contains the conversion channel-angle for a module channel - conv_r=pitch/radius -*/ - - -double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction) { - - - (void) tilt; /* to avoid warning: unused parameter */ - double ang; - - - - ang=180./PI*(center*conv_r+atan((double)(ichan-center)*conv_r))+encoder+totalOffset+offset; - - - cout <<"***" << offset << " " << ang << endl; - - - return direction*ang; - -} - -/* reads the encoder and returns the position */ - -double get_position(void *ch_poarg) { -#ifdef VERBOSE - printf("Getting motor position \n"); -#endif - // caget X04SA-ES2-TH2:RO.RBV - -#ifdef EPICS - int status; - - double value = 256; - if (ch_getpos<0) return -1; - -/* /\* caget *\/ */ - if (caget(ch_getpos, &value) == ECA_NORMAL) { -#ifdef VERBOSE - printf("caget: %f\n", value); -#endif - pos=value; - } else - printf(ca_message(status)); -#endif - - - - return pos; -} - -/* moves the encoder to position p */ - - -int go_to_position(double p,void *ch_parg) { -#ifdef VERBOSE - printf("Setting motor position \n"); -#endif - -#ifdef EPICS - int status; - if (ch_pos<0) return -1; - /* /\* caput and wait until done *\/ */ - if ((status = caput(ch_pos, p)) == ECA_NORMAL) - ; -#ifdef VERBOSE - printf("caput: success\n"); -#endif - else - printf(ca_message(status)); -#else - pos=p; -#endif - //"caputq X04SA-ES2-TH2:RO p" - //cawait -nounit -timeout 3600 X04SA-ES2-TH2:RO.DMOV '==1' - - return p; -} - -/* moves the encoder to position p without waiting */ - -int go_to_position_no_wait(double p) { -#ifdef VERBOSE - printf("Setting motor position no wait \n"); -#endif - - -#ifdef EPICS - int status; - if (ch_pos<0) return -1; - /* /\* caput and wait until done *\/ */ - if ((status = caputq(ch_pos, p)) == ECA_NORMAL) - ; -#ifdef VERBOSE - printf("caputq: success\n"); -#endif - - else - printf(ca_message(status)); -#else - pos=p; -#endif - //"caputq X04SA-ES2-TH2:RO p" - - return p; - - - - - pos=p; - return pos; -} - - -/* reads I0 and returns the intensity */ - -double get_i0(void *ch_ioarg) { -#ifdef VERBOSE - printf("Getting I0 readout \n"); -#endif - -#ifdef EPICS - int status; - - double value = 256; -/* /\* caget *\/ */ - if (ch_i0<0) return -1; - if (caget(ch_i0, &value) == ECA_NORMAL) { -#ifdef VERBOSE - printf("caget: %f\n", value); -#endif - i0=value; - } else - printf(ca_message(status)); -#else - i0++; -#endif - - //"ca_get X04SA-ES2-SC:CH6" - return i0; -} - - -int connect_channels(void *ch_arg) { -#ifdef EPICS - //double value = 256; - /* channel name */ - //const char *name = "ARIDI-PCT:CURRENT"; - /* channel id */ - /* status code */ - int status; - - printf("starting...\n"); - - /* init channel access context before any caget/put */ - ca_context_create(ca_enable_preemptive_callback); - - printf("context created\n"); - - //"caputq X04SA-ES2-TH2:RO p" - - //"ca_get X04SA-ES2-SC:CH6" - - /* open the channel by name and return ch_id */ - status = connect_channel("NULLX04SA-ES2-SC:CH6", &ch_i0); - if (status == ECA_NORMAL) - printf("I0 channel connected \n"); - else { - printf(ca_message(status)); - //ch_i0=-1;; - } - status = connect_channel("X04SA-ES2-TH2:RO", &ch_pos); - if (status == ECA_NORMAL) - printf("Detector position channel connected \n"); - else { - printf(ca_message(status)); - //ch_i0=-1;; - } - status = connect_channel("X04SA-ES2-TH2:RO.RBV", &ch_getpos); - if (status == ECA_NORMAL) - printf("Detector get position channel connected \n"); - else { - printf(ca_message(status)); - //ch_getpos=-1;; - } - - // caget X04SA-ES2-TH2:RO.RBV - - //cawait -nounit -timeout 3600 X04SA-ES2-TH2:RO.DMOV '==1' -#endif - return 0; -} - -int disconnect_channels(void *ch_darg) { -#ifdef EPICS - /* close channel connect */ - disconnect_channel(ch_i0); - disconnect_channel(ch_pos); - disconnect_channel(ch_getpos); - - /* delete channel access context before program exits */ - ca_context_destroy(); -#endif - return 0; -} - - - - - -