From 86fb843021a3072964dae94f16201e7e59d4a76d Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 18 Oct 2018 10:58:48 +0200 Subject: [PATCH] in the process of rewriting detector client interface --- slsDetectorServers/eigerDetectorServer/Feb.c | 335 ------- slsDetectorServers/eigerDetectorServer/Feb.h | 59 -- .../eigerDetectorServer/Makefile | 4 +- .../eigerDetectorServer/Makefile.virtual | 2 +- .../eigerDetectorServer/gitInfo.txt | 8 +- .../eigerDetectorServer/gitInfoEiger.h | 6 +- .../eigerDetectorServer/logger.h | 1 + .../slsDetectorFunctionList.c | 21 +- .../slsDetectorServer_defs.h | 1 - .../slsDetectorServer/communication_funcs.c | 854 +++++++++--------- .../slsDetectorServer/communication_funcs.h | 27 +- slsDetectorServers/slsDetectorServer/logger.h | 63 ++ .../slsDetectorFunctionList.h | 12 +- .../slsDetectorServer/slsDetectorServer.c | 100 +- .../slsDetectorServer_funcs.c | 659 ++++---------- .../slsDetectorServer_funcs.h | 4 +- .../slsDetector/slsDetector.cpp | 490 ++++------ slsDetectorSoftware/slsDetector/slsDetector.h | 42 +- slsReceiverSoftware/include/GeneralData.h | 27 - .../src/slsReceiverImplementation.cpp | 4 - .../src/slsReceiverTCPIPInterface.cpp | 78 +- slsSupportLib/include/ClientInterface.cpp | 43 +- slsSupportLib/include/ClientInterface.h | 40 +- slsSupportLib/include/sls_detector_defs.h | 5 +- 24 files changed, 1012 insertions(+), 1873 deletions(-) delete mode 100644 slsDetectorServers/eigerDetectorServer/Feb.c delete mode 100644 slsDetectorServers/eigerDetectorServer/Feb.h create mode 120000 slsDetectorServers/eigerDetectorServer/logger.h create mode 100644 slsDetectorServers/slsDetectorServer/logger.h diff --git a/slsDetectorServers/eigerDetectorServer/Feb.c b/slsDetectorServers/eigerDetectorServer/Feb.c deleted file mode 100644 index fb9ef7c67..000000000 --- a/slsDetectorServers/eigerDetectorServer/Feb.c +++ /dev/null @@ -1,335 +0,0 @@ - -/** - * @author Ian Johnson - * @version 1.0 - */ - - - -/*#include -#include */ - -#include -#include -#include - - -#include "xparameters.h" -#include "Feb.h" - - - -void Feb_Feb(){ - - Feb_nfebs = 0; - Feb_feb_numb = 0; - - Feb_send_ndata = 0; - Feb_send_buffer_size = 1026; - Feb_send_data_raw = malloc((Feb_send_buffer_size+1)*sizeof(int)); - Feb_send_data = &Feb_send_data_raw[1]; - - Feb_recv_ndata = 0; - Feb_recv_buffer_size = 1026; - Feb_recv_data_raw = malloc((Feb_recv_buffer_size+1)*sizeof(int)); - Feb_recv_data = &Feb_recv_data_raw[1]; - - Local_LocalLinkInterface1(ll,XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); - -} -/* -~Feb(){ - delete ll; - if(feb_numb) delete [] feb_numb; - delete [] send_data_raw; - delete [] recv_data_raw; -} -*/ - -void Feb_SendCompleteFebList(unsigned int n,unsigned int* list){ - unsigned int i; - if(Feb_feb_numb) free(Feb_feb_numb); - Feb_nfebs = n; - Feb_feb_numb = malloc(n*sizeof(unsigned int)); - for(i=0;i0xfff) return 0; - - Feb_send_data_raw[0] = 0x90000000 | (ch<<16); //we - if(Local_Write(ll,4,Feb_send_data_raw)!=4) return 0; - - Feb_send_data_raw[0] = 0xc0000000; //data - return 1;//((Feb_send_ndata+1)*4==Local_Write(ll,(Feb_send_ndata+1)*4,Feb_send_data_raw)); -} - -int Feb_ReadFrom(unsigned int ch, unsigned int ntrys){ - unsigned int t; - if(ch>=0xfff) return 0; - - Feb_recv_data_raw[0] = 0xa0000000 | (ch<<16); //read data - Local_Write(ll,4,Feb_recv_data_raw); - usleep(20); - - Feb_recv_ndata=-1; - for(t=0;t0){ - Feb_recv_ndata--; - break; - } - printf("\t Read try number: %d\n",t); - usleep(1000); - } - - - return (Feb_recv_ndata>=0); -} - -void Feb_PrintData(){ - int i; - printf("Sent data: %d\n",Feb_send_ndata); - for(i=0;i1&&Feb_recv_ndata>1){ - printf("\t\t Tail sent: %d (0x%x) receiver: %d (0x%x)\n",Feb_send_data[Feb_send_ndata-1],Feb_send_data[Feb_send_ndata-1],Feb_recv_data[Feb_recv_ndata-1],Feb_recv_data[Feb_recv_ndata-1]); - }else{ - printf("Error printing tail, too little data nsent = 0x%x, nrecv = 0x%x.\n",Feb_send_ndata, Feb_recv_ndata); - } - Feb_PrintData(); - } - return header_returned_is_ok; -} - - -int Feb_CheckTail(unsigned int valid_bit_mask){ - if(Feb_send_ndata<=1&&Feb_recv_ndata<=1){ - printf("Error checking tail, too little data nsent = %d, nrecv = %d.\n",Feb_send_ndata, Feb_recv_ndata); - return 0; - } - - unsigned int the_tail = Feb_recv_data[Feb_recv_ndata-1]&valid_bit_mask; - if(the_tail!=0){ - printf("Error returned in tail: 0x%x (%d)\n",the_tail,the_tail); - if(the_tail&0x10000000) printf("\t\tBusy flag address error.\n"); - if(the_tail&0x20000000) printf("\t\tRead register address error.\n"); - if(the_tail&0x40000000) printf("\t\tWrite register address error.\n"); - if(the_tail&0x80000000) printf("\t\tBram number error.\n"); - if(the_tail&0x08000000) printf("\t\tFifo to read from error.\n"); - if(the_tail&0x3ff) printf("\t\tNumber of data send error.\n"); - return 0; //error - } - - return 1; -} - - -int Feb_CheckCommunication(){ - Feb_send_data_raw[0] = 0x8fff0000; //rst-all serial coms and lls - if(Local_Write(ll,4,Feb_send_data_raw)!=4) return 0; - - printf("CheckingCommunication ....\n"); - while((Local_Read(ll,Feb_recv_buffer_size*4,Feb_recv_data_raw)/4)>0) printf("\t) Cleanning buffer ...\n"); - - return Feb_SetByteOrder(); -} - - -int Feb_SetByteOrder(){ - - unsigned int i; - Feb_send_ndata = 2; - Feb_send_data[0] = 0; //header - Feb_send_data[1] = 0; //tail - - unsigned int dst = 0xff; - for( i=0;i=nfebs){ - cout<<"Error invalid sub number "<Feb_send_buffer_size-2) return 0; - - Feb_send_ndata = nreads+2; - Feb_send_data[0] = 0x20000000 | nreads << 14; //cmd -> read "00" , nreads - - for(i=0;iFeb_send_buffer_size-2) return 0; - - //cout<<"Write register : "< write nwrites and how many - Feb_send_data[2*nwrites+1] = 0; //tail - - for(i=0;iFeb_send_buffer_size-2) return 0; - - Feb_send_ndata = nwrites+2; - Feb_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address - Feb_send_data[nwrites+1] = 0; //tail - for(i=0;i #include //to gethostname @@ -17,6 +15,9 @@ #include "versionAPI.h" #endif +// Global variable from slsDetectorServer +extern int debugflag; + int default_tau_from_file= -1; #define BEB_NUM 34 @@ -106,7 +107,7 @@ int getFirmwareCheckResult(char** mess) { return firmware_compatibility; } -void checkFirmwareCompatibility(int flag){ +void checkFirmwareCompatibility(){ firmware_compatibility = OK; firmware_check_done = 0; memset(firmware_message, 0, MAX_STR_LENGTH); @@ -148,8 +149,8 @@ void checkFirmwareCompatibility(int flag){ REQUIRED_FIRMWARE_VERSION, (long long int)client_sw_apiversion); - // return if flag is not zero, debug mode - if (flag) { + // return if debugflag is not zero, debug mode + if (debugflag) { firmware_check_done = 1; return; } @@ -1100,7 +1101,7 @@ int setHighVoltage(int val){ /* parameters - timing, extsig */ -enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ +void setTiming( enum externalCommunicationMode arg){ enum externalCommunicationMode ret=GET_EXTERNAL_COMMUNICATION_MODE; if(arg != GET_EXTERNAL_COMMUNICATION_MODE){ switch((int)arg){ @@ -1115,7 +1116,11 @@ enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ #endif eiger_triggermode = ret; } +} + +enum externalCommunicationMode getTiming() { + enum externalCommunicationMode ret = GET_EXTERNAL_COMMUNICATION_MODE; ret = eiger_triggermode; switch((int)ret){ case 0: ret = AUTO_TIMING; break; @@ -1131,9 +1136,6 @@ enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ - - - /* configure mac */ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport, uint32_t udpport2, int ival) { @@ -1832,4 +1834,3 @@ int getNumberOfOffsets(){return NOFFSET;} -//#endif diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index 36260b519..ef382ad5f 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -8,7 +8,6 @@ #define GOODBYE (-200) -#define PROGRAMMING_MODE (-200) #define MIN_REQRD_VRSN_T_RD_API 0x171220 #define REQRD_FRMWR_VRSN 0x180615 diff --git a/slsDetectorServers/slsDetectorServer/communication_funcs.c b/slsDetectorServers/slsDetectorServer/communication_funcs.c index d9f5b3146..beb439ea2 100755 --- a/slsDetectorServers/slsDetectorServer/communication_funcs.c +++ b/slsDetectorServers/slsDetectorServer/communication_funcs.c @@ -1,240 +1,231 @@ #include "communication_funcs.h" -//#include -#include /* for TCP_NODELAY */ +#include "logger.h" + +//#include /* for TCP_NODELAY */ #include #include #include #include - #include -char lastClientIP[INET_ADDRSTRLEN]; -char thisClientIP[INET_ADDRSTRLEN]; -int lockStatus; -int differentClients; -//int socketDescriptor, file_des; -const int send_rec_max_size=SEND_REC_MAX_SIZE; +// Global variables from errno.h extern int errno; +// Variables that will be exported +int lockStatus = 0; +char lastClientIP[INET_ADDRSTRLEN] = ""; +char thisClientIP[INET_ADDRSTRLEN] = ""; +int differentClients = 0; +int isControlServer = 1; +int ret = FAIL; +int fnum = 0; +char mess[MAX_STR_LENGTH]; -char dummyClientIP[INET_ADDRSTRLEN]; - - +// Local variables +char dummyClientIP[INET_ADDRSTRLEN] = ""; +const int send_rec_max_size = SEND_REC_MAX_SIZE; +int myport = -1; +// socket descriptor set fd_set readset, tempset; -int isock=0, maxfd; +// number of socket descrptor listening to +int isock = 0; +// value of socket descriptor, +//becomes max value of socket descriptor (listen) and file descriptor (accept) +int maxfd = 0; -int myport=-1; -//struct sockaddr_in address; -//#define VERBOSE +#define DEFAULT_BACKLOG 5 int bindSocket(unsigned short int port_number) { - int i; + ret = FAIL; + int socketDescriptor = -1; + int i = 0; + struct sockaddr_in addressS; - struct sockaddr_in addressS; - int socketDescriptor; - //int file_des; + // same port + if (myport == port_number) { + sprintf(mess, "Cannot create %s socket with port %d. Already in use before.\n", + (isControlServer ? "control":"stop"), port_number); + FILE_LOG(logERROR, (mess)); + } + // port ok + else { - //file_des= -1; + // create socket + socketDescriptor = socket(AF_INET, SOCK_STREAM,0); + // socket error + if (socketDescriptor < 0) { + sprintf(mess, "Cannot create %s socket with port %d\n", + (isControlServer ? "control":"stop"), port_number); + FILE_LOG(logERROR, (mess)); + } + // socket success + else { + i = 1; + // set port reusable + setsockopt(socketDescriptor, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); + // Set some fields in the serverAddress structure + addressS.sin_family = AF_INET; + addressS.sin_addr.s_addr = htonl(INADDR_ANY); + addressS.sin_port = htons(port_number); + // bind socket error + if(bind(socketDescriptor,(struct sockaddr *) &addressS,sizeof(addressS)) < 0){ + sprintf(mess, "Cannot bind %s socket to port %d.\n", + (isControlServer ? "control":"stop"), port_number); + FILE_LOG(logERROR, (mess)); + } + // bind socket ok + else { + // listen to socket + if (listen(socketDescriptor, DEFAULT_BACKLOG) == 0) { + // clear set of descriptors. set of descriptors needed? + if (isock == 0) { + FD_ZERO(&readset); + } + // add a socket descriptor from listen + FD_SET(socketDescriptor, &readset); + isock++; + maxfd = socketDescriptor; + // success + myport = port_number; + ret = OK; + FILE_LOG(logINFO, (" %s socket bound: isock=%d port=%d fd=%d\n", + (isControlServer ? "Control":"Stop"), isock, port_number, socketDescriptor)); + } + // listen socket error + else { + sprintf(mess, "Cannot bind %s socket to port %d.\n", + (isControlServer ? "control":"stop"), port_number); + FILE_LOG(logERROR, (mess)); + } + } + } + } - - - - - - - if (myport==port_number) - return -10; - - - - - - socketDescriptor = socket(AF_INET, SOCK_STREAM,0); //tcp - - //socketDescriptor = socket(PF_INET, SOCK_STREAM, 0); - - - - if (socketDescriptor < 0) { - printf("Can not create socket\n"); - } else { - - i = 1; - setsockopt(socketDescriptor, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); - // setsockopt(socketDescriptor, IPPROTO_TCP, TCP_NODELAY, (char *) &i, sizeof(i)); - // TCP_CORK - - // Set some fields in the serverAddress structure. - addressS.sin_family = AF_INET; - addressS.sin_addr.s_addr = htonl(INADDR_ANY); - addressS.sin_port = htons(port_number); - - // memset(&address.sin_addr, 0, sizeof(address.sin_addr)); - - - if(bind(socketDescriptor,(struct sockaddr *) &addressS,sizeof(addressS))<0){ - - printf("Can not create socket\n"); - - socketDescriptor=-1; - } else { - if (listen(socketDescriptor, 5)==0) { - - if (isock==0) { - FD_ZERO(&readset); - } - - - FD_SET(socketDescriptor, &readset); - isock++; - maxfd = socketDescriptor; - printf ("%d port %d fd %d\n",isock, port_number,socketDescriptor); - myport=port_number; - } else - printf("error on listen"); - } - } - - - - //int getrlimit(int resource, struct rlimit *rlim); - - - - return socketDescriptor; - + return socketDescriptor; } - - -int getServerError(int socketDescriptor) -{ - if (socketDescriptor<0) return 1; - else return 0; -}; - - int acceptConnection(int socketDescriptor) { - + int j; + struct sockaddr_in addressC; + int file_des = -1; + struct timeval tv; + socklen_t address_length = sizeof(struct sockaddr_in); - int j; + if (socketDescriptor < 0) + return -1; + // copy file descriptor set temporarily + memcpy(&tempset, &readset, sizeof(tempset)); - struct sockaddr_in addressC; - int file_des=-1; - struct timeval tv; - int result; + // set time out as 2777.77 hours? + tv.tv_sec = 10000000; + tv.tv_usec = 0; + // monitor file descrptors + int result = select(maxfd + 1, &tempset, NULL, NULL, &tv); - //socklen_t address_length; - socklen_t address_length=sizeof(struct sockaddr_in); - - if (socketDescriptor<0) - return -1; + // timeout + if (result == 0) { + FILE_LOG(logDEBUG5, ("%s socket select() timed out!\n", + (isControlServer ? "control":"stop"), myport)); + } - memcpy(&tempset, &readset, sizeof(tempset)); - tv.tv_sec = 10000000; - tv.tv_usec = 0; - result = select(maxfd + 1, &tempset, NULL, NULL, &tv); + // error (not signal caught) + else if (result < 0 && errno != EINTR) { + FILE_LOG(logERROR, ("%s socket select() error: %s\n", + (isControlServer ? "control":"stop"), myport, strerror(errno))); + } - if (result == 0) { - printf("select() timed out!\n"); - } else if (result < 0 && errno != EINTR) { - printf("Error in select(): %s\n", strerror(errno)); - } else if (result > 0) { -#ifdef VERBOSE - printf("select returned!\n"); -#endif - for (j=0; j 0) { + FILE_LOG(logDEBUG5, ("%s select returned!\n", (isControlServer ? "control":"stop"))); + // loop through the file descriptor set + for (j = 0; j < maxfd + 1; ++j) { - if ((file_des = accept(j,(struct sockaddr *) &addressC, &address_length)) < 0) { - printf("Error in accept(): %s\n", strerror(errno)); - printf("Error: with server accept, connection refused %d\n", errno); - - - switch(errno) { - case EWOULDBLOCK: - printf("ewouldblock eagain\n"); - break; - case EBADF: - printf("ebadf\n"); - break; - case ECONNABORTED: - printf("econnaborted\n"); - break; - case EFAULT: - printf("efault\n"); - break; - case EINTR: - printf("eintr\n"); - break; - case EINVAL: - printf("einval\n"); - break; - case EMFILE: - printf("emfile\n"); - break; - case ENFILE: - printf("enfile\n"); - break; - case ENOTSOCK: - printf("enotsock\n"); - break; - case EOPNOTSUPP: - printf("eOPNOTSUPP\n"); - break; - case ENOBUFS: - printf("ENOBUFS\n"); - break; - case ENOMEM: - printf("ENOMEM\n"); - break; - case ENOSR: - printf("ENOSR\n"); - break; - case EPROTO: - printf("EPROTO\n"); - break; - default: - printf("unknown error\n"); - } - - // should remove descriptor + // checks if file descriptor part of set + if (FD_ISSET(j, &tempset)) { + FILE_LOG(logDEBUG5, ("fd %d is set\n",j)); - socketDescriptor=-1; - } else { - - inet_ntop(AF_INET, &(addressC.sin_addr), dummyClientIP, INET_ADDRSTRLEN); -#ifdef VERBOSE - printf("connection accepted %d\n",file_des); -#endif - FD_SET(file_des, &readset); - maxfd = (maxfd < file_des)?file_des:maxfd; - } + // clear the temporary set + FD_CLR(j, &tempset); - } - } - } - - - - return file_des; + // accept connection (if error) + if ((file_des = accept(j,(struct sockaddr *) &addressC, &address_length)) < 0) { + FILE_LOG(logERROR, ("%s socket accept() error. Connection refused.\n", + "Error Number: %d, Message: %s\n", + (isControlServer ? "control":"stop"), + myport, errno, strerror(errno))); + switch(errno) { + case EWOULDBLOCK: + FILE_LOG(logERROR, ("ewouldblock eagain")); + break; + case EBADF: + FILE_LOG(logERROR, ("ebadf\n")); + break; + case ECONNABORTED: + FILE_LOG(logERROR, ("econnaborted\n")); + break; + case EFAULT: + FILE_LOG(logERROR, ("efault\n")); + break; + case EINTR: + FILE_LOG(logERROR, ("eintr\n")); + break; + case EINVAL: + FILE_LOG(logERROR, ("einval\n")); + break; + case EMFILE: + FILE_LOG(logERROR, ("emfile\n")); + break; + case ENFILE: + FILE_LOG(logERROR, ("enfile\n")); + break; + case ENOTSOCK: + FILE_LOG(logERROR, ("enotsock\n")); + break; + case EOPNOTSUPP: + FILE_LOG(logERROR, ("eOPNOTSUPP\n")); + break; + case ENOBUFS: + FILE_LOG(logERROR, ("ENOBUFS\n")); + break; + case ENOMEM: + FILE_LOG(logERROR, ("ENOMEM\n")); + break; + case ENOSR: + FILE_LOG(logERROR, ("ENOSR\n")); + break; + case EPROTO: + FILE_LOG(logERROR, ("EPROTO\n")); + break; + default: + FILE_LOG(logERROR, ("unknown error\n")); + } + } + // accept success + else { + inet_ntop(AF_INET, &(addressC.sin_addr), dummyClientIP, INET_ADDRSTRLEN); + FILE_LOG(logDEBUG5, ("%s socket accepted connection, fd= %d\n", + (isControlServer ? "control":"stop"), file_des)); + // add the file descriptor from accept + FD_SET(file_des, &readset); + maxfd = (maxfd < file_des)?file_des:maxfd; + } + } + } + } + return file_des; } @@ -244,22 +235,18 @@ int acceptConnection(int socketDescriptor) { void closeConnection(int file_des) { -#ifdef VERY_VERBOSE -#endif - if(file_des>=0) - close(file_des); - FD_CLR(file_des, &readset); + if(file_des >= 0) + close(file_des); + // remove file descriptor from set + FD_CLR(file_des, &readset); } void exitServer(int socketDescriptor) { - if (socketDescriptor>=0) - close(socketDescriptor); -#ifdef VERY_VERBOSE - printf("Closing server\n"); -#endif - FD_CLR(socketDescriptor, &readset); - socketDescriptor=-1; - isock--; + if (socketDescriptor >= 0) + close(socketDescriptor); + FILE_LOG(logDEBUG5, ("Closing %s server\n", (isControlServer ? "control":"stop"))); + FD_CLR(socketDescriptor, &readset); + isock--; } @@ -267,18 +254,18 @@ void exitServer(int socketDescriptor) { void swapData(void* val,int length,intType itype){ int i; - int16_t* c= (int16_t*)val; - int32_t* a= (int32_t*)val; - int64_t* b= (int64_t*)val; - for(i=0; length > 0; i++){ + int16_t* c = (int16_t*)val; + int32_t* a = (int32_t*)val; + int64_t* b = (int64_t*)val; + for(i = 0; length > 0; i++){ switch(itype){ case INT16: c[i] = ((c[i] & 0x00FF) << 8) | ((c[i] & 0xFF00) >> 8); length -= sizeof(int16_t); break; case INT32: - a[i]=((a[i] << 8) & 0xFF00FF00) | ((a[i] >> 8) & 0xFF00FF ); - a[i]=(a[i] << 16) | ((a[i] >> 16) & 0xFFFF); + a[i] = ((a[i] << 8) & 0xFF00FF00) | ((a[i] >> 8) & 0xFF00FF ); + a[i] = (a[i] << 16) | ((a[i] >> 16) & 0xFFFF); length -= sizeof(int32_t); break; case INT64: @@ -305,57 +292,59 @@ int sendData(int file_des, void* buf,int length, intType itype){ int receiveData(int file_des, void* buf,int length, intType itype){ - int ret = receiveDataOnly(file_des, buf, length); + int lret = receiveDataOnly(file_des, buf, length); #ifndef PCCOMPILE #ifdef EIGERD - if (ret >= 0) swapData(buf, length, itype); + if (lret >= 0) swapData(buf, length, itype); #endif #endif - return ret; + return lret; } - int sendDataOnly(int file_des, void* buf,int length) { - if (!length) - return 0; - int ret = write(file_des, buf, length); //value of -1 is other end socket crash as sigpipe is ignored - if (ret < 0) cprintf(BG_RED, "Error writing to socket. Possible socket crash\n"); - return ret; +int sendDataOnly(int file_des, void* buf,int length) { + if (!length) + return 0; + int lret = write(file_des, buf, length); //value of -1 is other end socket crash as sigpipe is ignored + if (lret < 0) { + FILE_LOG(logERROR, ("Could not write to %s socket. Possible socket crash\n", + (isControlServer ? "control":"stop"))); + } + return lret; } - int receiveDataOnly(int file_des, void* buf,int length) { +int receiveDataOnly(int file_des, void* buf,int length) { - int total_received=0; - int nreceiving; - int nreceived; - if (file_des<0) return -1; -#ifdef VERY_VERBOSE - printf("want to receive %d Bytes\n", length); -#endif + int total_received = 0; + int nreceiving; + int nreceived; + if (file_des<0) return -1; + FILE_LOG(logDEBUG5, ("want to receive %d Bytes to %s server\n", + length, (isControlServer ? "control":"stop"))); - while(length > 0) { - nreceiving = (length>send_rec_max_size) ? send_rec_max_size:length; // (condition) ? if_true : if_false - nreceived = read(file_des,(char*)buf+total_received,nreceiving); - if(!nreceived){ - if(!total_received) { - return -1; //to handle it - } - break; - } - length-=nreceived; - total_received+=nreceived; - } + while(length > 0) { + nreceiving = (length>send_rec_max_size) ? send_rec_max_size:length; // (condition) ? if_true : if_false + nreceived = read(file_des,(char*)buf+total_received,nreceiving); + if(!nreceived){ + if(!total_received) { + return -1; //to handle it + } + break; + } + length -= nreceived; + total_received += nreceived; + } - if (total_received>0) - strcpy(thisClientIP,dummyClientIP); - - if (strcmp(lastClientIP,thisClientIP)) - differentClients=1; - else - differentClients=0; + if (total_received>0) + strcpy(thisClientIP,dummyClientIP); - return total_received; + if (strcmp(lastClientIP,thisClientIP)) + differentClients = 1; + else + differentClients = 0; + + return total_received; } @@ -367,55 +356,49 @@ int sendModule(int file_des, sls_detector_module *myMod) { int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll) { - int ts=0; -#ifdef VERBOSE - int idac; -#endif - int nChips=myMod->nchip; - int nChans=myMod->nchan; - int nAdcs=myMod->nadc; - int nDacs=myMod->ndac; - //ts+= sendDataOnly(file_des,myMod,sizeof(sls_detector_module)); - ts+=sendData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); - ts+=sendData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); - ts+=sendData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); - ts+=sendData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32); - ts+=sendData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32); - ts+=sendData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32); - ts+=sendData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER); - ts+=sendData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER); + int ts = 0; + int nChips = myMod->nchip; + int nChans = myMod->nchan; + int nAdcs = myMod->nadc; + int nDacs = myMod->ndac; -#ifdef VERBOSE - printf("module of size %d sent\n",ts); -#endif - ts+= sendData(file_des,myMod->dacs,sizeof(int)*nDacs,INT32); -#ifdef VERBOSE - printf("dacs of size %d sent\n",ts); - int idac; - for (idac=0; idac< nDacs; idac++) - printf("dac %d is %d\n",idac,(int)myMod->dacs[idac]); -#endif - ts+= sendData(file_des,myMod->adcs,sizeof(int)*nAdcs,INT32); -#ifdef VERBOSE - printf("adcs of size %d sent\n", ts); -#endif + // send module structure + ts += sendData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); + ts += sendData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); + ts += sendData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); + ts += sendData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32); + ts += sendData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32); + ts += sendData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32); + ts += sendData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER); + ts += sendData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER); + FILE_LOG(logDEBUG5, ("module of size %d sent\n",ts)); - /*some detectors dont require sending all trimbits etc.*/ - if(sendAll){ - ts+=sendData(file_des,myMod->chipregs,sizeof(int)*nChips,INT32); -#ifdef VERBOSE - printf("chips of size %d sent\n", ts); -#endif - ts+=sendData(file_des,myMod->chanregs,sizeof(int)*nChans,INT32); -#ifdef VERBOSE - printf("chans of size %d sent - %d\n", ts, myMod->nchan); -#endif - } + // send dac + ts += sendData(file_des,myMod->dacs,sizeof(int)*nDacs,INT32); + FILE_LOG(logDEBUG5, ("dacs of size %d sent\n",ts)); + { + int idac; + for (idac = 0; idac < nDacs; idac++) + FILE_LOG(logDEBUG5, ("dac %d is %d\n",idac,(int)myMod->dacs[idac])); + } -#ifdef VERBOSE - printf("module of size %d sent register %x\n", ts, myMod->reg); -#endif - return ts; + // send adc + ts += sendData(file_des,myMod->adcs,sizeof(int)*nAdcs,INT32); + FILE_LOG(logDEBUG5, ("adcs of size %d sent\n", ts)); + + // some detectors dont require sending all trimbits etc. + if(sendAll) { + // chips + ts += sendData(file_des,myMod->chipregs,sizeof(int)*nChips,INT32); + FILE_LOG(logDEBUG5, ("chips of size %d sent\n", ts)); + + // channels + ts += sendData(file_des,myMod->chanregs,sizeof(int)*nChans,INT32); + FILE_LOG(logDEBUG5, ("chans of size %d sent - %d\n", ts, myMod->nchan)); + } + + FILE_LOG(logDEBUG5, ("module of size %d sent register %x\n", ts, myMod->reg)); + return ts; } @@ -425,146 +408,163 @@ int receiveModule(int file_des, sls_detector_module* myMod) { } int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll) { - int ts=0; - int *dacptr=myMod->dacs; - int *adcptr=myMod->adcs; - int *chipptr=myMod->chipregs, *chanptr=myMod->chanregs; - int nChips, nchipold=myMod->nchip, nchipdiff; - int nChans, nchanold=myMod->nchan, nchandiff; - int nDacs, ndold=myMod->ndac, ndacdiff; - int nAdcs, naold=myMod->nadc, nadcdiff; - ts+=receiveData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); - ts+=receiveData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); - ts+=receiveData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); - ts+=receiveData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32); - ts+=receiveData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32); - ts+=receiveData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32); - ts+=receiveData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER); - ts+=receiveData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER); + int ts = 0; + int *dacptr = myMod->dacs; + int *adcptr = myMod->adcs; + int *chipptr = myMod->chipregs, *chanptr = myMod->chanregs; + int nChips, nchipold = myMod->nchip, nchipdiff; + int nChans, nchanold = myMod->nchan, nchandiff; + int nDacs, ndold = myMod->ndac, ndacdiff; + int nAdcs, naold = myMod->nadc, nadcdiff; + ts += receiveData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); + ts += receiveData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); + ts += receiveData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); + ts += receiveData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32); + ts += receiveData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32); + ts += receiveData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32); + ts += receiveData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER); + ts += receiveData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER); - myMod->dacs=dacptr; - myMod->adcs=adcptr; - myMod->chipregs=chipptr; - myMod->chanregs=chanptr; + myMod->dacs = dacptr; + myMod->adcs = adcptr; + myMod->chipregs = chipptr; + myMod->chanregs = chanptr; #ifdef EIGERD - //feature to exclude sending of trimbtis, nchips=0,nchans=0 in that case - if(myMod->nchip == 0 && myMod->nchan == 0) { - receiveAll=0; - nchipold=0; - nchanold=0; - } +//exclude sending of trimbtis, nchips = 0,nchans = 0 in that case + if(myMod->nchip == 0 && myMod->nchan == 0) { + receiveAll = 0; + nchipold = 0; + nchanold = 0; + } #endif - nChips=myMod->nchip; - nchipdiff=nChips-nchipold; - if (nchipold!=nChips) { - printf("received wrong number of chips\n"); - } -#ifdef VERBOSE - else - printf("received %d chips\n",nChips); -#endif + nChips = myMod->nchip; + nchipdiff = nChips-nchipold; + if (nchipold != nChips) { + FILE_LOG(logERROR, ("received wrong number of chips\n")); + } + else + FILE_LOG(logDEBUG5, ("received %d chips\n",nChips)); - nChans=myMod->nchan; - nchandiff=nChans-nchanold; - if (nchanold!=nChans) { - printf("received wrong number of channels\n"); - } -#ifdef VERBOSE - else - printf("received %d chans\n",nChans); -#endif + nChans = myMod->nchan; + nchandiff = nChans-nchanold; + if (nchanold != nChans) { + FILE_LOG(logERROR, ("received wrong number of channels\n")); + } + else + FILE_LOG(logDEBUG5, ("received %d chans\n",nChans)); - nDacs=myMod->ndac; - ndacdiff=nDacs-ndold; - if (ndold!=nDacs) { - printf("received wrong number of dacs\n"); - } -#ifdef VERBOSE - else - printf("received %d dacs\n",nDacs); -#endif - - nAdcs=myMod->nadc; - nadcdiff=nAdcs-naold; - if (naold!=nAdcs) { - printf("received wrong number of adcs\n"); - } -#ifdef VERBOSE - else - printf("received %d adcs\n",nAdcs); -#endif - if (ndacdiff<=0) { - ts+=receiveData(file_des,myMod->dacs, sizeof(int)*nDacs,INT32); -#ifdef VERBOSE - printf("dacs received\n"); - int id; - for (id=0; iddacs[id]); + nDacs = myMod->ndac; + ndacdiff = nDacs-ndold; + if (ndold != nDacs) { + FILE_LOG(logERROR, ("received wrong number of dacs\n")); + } + else + FILE_LOG(logDEBUG5, ("received %d dacs\n",nDacs)); + + nAdcs = myMod->nadc; + nadcdiff = nAdcs-naold; + if (naold != nAdcs) { + FILE_LOG(logERROR, ("received wrong number of adcs\n")); + } + else + FILE_LOG(logDEBUG5, ("received %d adcs\n",nAdcs)); + if (ndacdiff <= 0) { + ts += receiveData(file_des,myMod->dacs, sizeof(int)*nDacs,INT32); + FILE_LOG(logDEBUG5, ("dacs received\n")); + int id; + for (id = 0; iddacs[id])); + } else { + dacptr = (int*)malloc(ndacdiff*sizeof(int)); + myMod->ndac = ndold; + ts += receiveData(file_des,myMod->dacs, sizeof(int)*ndold,INT32); + ts += receiveData(file_des,dacptr, sizeof(int)*ndacdiff,INT32); + free(dacptr); + return FAIL; + } + + if (nadcdiff <= 0) { + ts += receiveData(file_des,myMod->adcs, sizeof(int)*nAdcs,INT32); + FILE_LOG(logDEBUG5, ("adcs received\n")); + } else { + adcptr = (int*)malloc(nadcdiff*sizeof(int)); + myMod->nadc = naold; + ts += receiveData(file_des,myMod->adcs, sizeof(int)*naold,INT32); + ts += receiveData(file_des,adcptr, sizeof(int)*nadcdiff,INT32); + free(adcptr); + return FAIL; + } -#endif - } else { - dacptr=(int*)malloc(ndacdiff*sizeof(int)); - myMod->ndac=ndold; - ts+=receiveData(file_des,myMod->dacs, sizeof(int)*ndold,INT32); - ts+=receiveData(file_des,dacptr, sizeof(int)*ndacdiff,INT32); - free(dacptr); - return FAIL; - } + // some detectors dont require sending all trimbits etc. + if(receiveAll){ - if (nadcdiff<=0) { - ts+=receiveData(file_des,myMod->adcs, sizeof(int)*nAdcs,INT32); -#ifdef VERBOSE - printf("adcs received\n"); -#endif - } else { - adcptr=(int*)malloc(nadcdiff*sizeof(int)); - myMod->nadc=naold; - ts+=receiveData(file_des,myMod->adcs, sizeof(int)*naold,INT32); - ts+=receiveData(file_des,adcptr, sizeof(int)*nadcdiff,INT32); - free(adcptr); - return FAIL; - } + if (nchipdiff <= 0) { + ts += receiveData(file_des,myMod->chipregs, sizeof(int)*nChips,INT32); + FILE_LOG(logDEBUG5, ("chips received\n")); + } else { + chipptr = (int*)malloc(nchipdiff*sizeof(int)); + myMod->nchip = nchipold; + ts += receiveData(file_des,myMod->chipregs, sizeof(int)*nchipold,INT32); + ts += receiveData(file_des,chipptr, sizeof(int)*nchipdiff,INT32); + free(chipptr); + return FAIL; + } - - /*some detectors dont require sending all trimbits etc.*/ - if(receiveAll){ - - if (nchipdiff<=0) { - ts+=receiveData(file_des,myMod->chipregs, sizeof(int)*nChips,INT32); -#ifdef VERBOSE - printf("chips received\n"); -#endif - } else { - chipptr=(int*)malloc(nchipdiff*sizeof(int)); - myMod->nchip=nchipold; - ts+=receiveData(file_des,myMod->chipregs, sizeof(int)*nchipold,INT32); - ts+=receiveData(file_des,chipptr, sizeof(int)*nchipdiff,INT32); - free(chipptr); - return FAIL; - } - - if (nchandiff<=0) { - ts+=receiveData(file_des,myMod->chanregs, sizeof(int)*nChans,INT32); -#ifdef VERBOSE - printf("chans received\n"); -#endif - } else { - chanptr=(int*)malloc(nchandiff*sizeof(int)); - myMod->nchan=nchanold; - ts+=receiveData(file_des,myMod->chanregs, sizeof(int)*nchanold,INT32); - ts+=receiveData(file_des,chanptr, sizeof(int)*nchandiff,INT32); - free(chanptr); - return FAIL; - } - } -#ifdef VERBOSE - printf("received module of size %d register %x\n",ts,myMod->reg); -#endif - - return ts; + if (nchandiff <= 0) { + ts += receiveData(file_des,myMod->chanregs, sizeof(int)*nChans,INT32); + FILE_LOG(logDEBUG5, ("chans received\n")); + } else { + chanptr = (int*)malloc(nchandiff*sizeof(int)); + myMod->nchan = nchanold; + ts += receiveData(file_des,myMod->chanregs, sizeof(int)*nchanold,INT32); + ts += receiveData(file_des,chanptr, sizeof(int)*nchandiff,INT32); + free(chanptr); + return FAIL; + } + } + FILE_LOG(logDEBUG5, ("received module of size %d register %x\n",ts,myMod->reg)); + return ts; +} + + +void Server_LockedError() { + ret = FAIL; + sprintf(mess,"Detector locked by %s\n", lastClientIP); + FILE_LOG(logWARNING, (mess)); +} + + +int Server_VerifyLock() { + if (differentClients && lockStatus) + Server_LockedError(); + return ret; +} + + +void Server_SendResult(int fileDes, intType itype, int update, void* retval, int retvalSize) { + + // update if different clients + if (update && ret == OK && differentClients) + ret = FORCE_UPDATE; + + // send success of operation + int ret1 = ret; + sendData(fileDes, &ret1,sizeof(ret1), INT32); + if(ret == FAIL) { + // send error message + if (strlen(mess)) + sendData(fileDes, mess, MAX_STR_LENGTH, OTHER); + // debugging feature. should not happen. + else + FILE_LOG(logERROR, ("No error message provided for this failure in %s " + "server. Will mess up TCP.\n", + (isControlServer ? "control":"stop"))); + } + // send return value + sendData(fileDes, retval, retvalSize, itype); } diff --git a/slsDetectorServers/slsDetectorServer/communication_funcs.h b/slsDetectorServers/slsDetectorServer/communication_funcs.h index 4d41098cd..6b2068e20 100755 --- a/slsDetectorServers/slsDetectorServer/communication_funcs.h +++ b/slsDetectorServers/slsDetectorServer/communication_funcs.h @@ -37,11 +37,34 @@ int receiveData(int file_des, void* buf,int length, intType itype); int sendDataOnly(int file_des, void* buf,int length); int receiveDataOnly(int file_des, void* buf,int length); - -int getServerError(int socketDescriptor); int sendModule(int file_des, sls_detector_module *myMod); int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll); int receiveModule(int file_des, sls_detector_module* myMod); int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll); +/** + * Servers sets and prints error message for locked server + * @returns success of operaton + */ +void Server_LockedError(); + + +/** + * Server verifies if it is unlocked, + * sets and prints appropriate message if it is locked and different clients + * @returns success of operaton + */ +int Server_VerifyLock(); + + +/** + * Server sends result to client (also set ret to force_update if different clients) + * @param fileDes file descriptor for the socket + * @param itype 32 or 64 or others to determine to swap data from big endian to little endian + * @param update 1 if one must update if different clients, else 0 + * @param retval pointer to result + * @param retvalSize size of result + */ +void Server_SendResult(int fileDes, intType itype, int update, void* retval, int retvalSize); + #endif diff --git a/slsDetectorServers/slsDetectorServer/logger.h b/slsDetectorServers/slsDetectorServer/logger.h new file mode 100644 index 000000000..c89aafd30 --- /dev/null +++ b/slsDetectorServers/slsDetectorServer/logger.h @@ -0,0 +1,63 @@ +#pragma once + +#include "ansi.h" + +#include +#include +#include + + +#ifdef FIFODEBUG +#define FILELOG_MAX_LEVEL logDEBUG5 +#elif VERYVERBOSE +#define FILELOG_MAX_LEVEL logDEBUG4 +#elif VERBOSE +#define FILELOG_MAX_LEVEL logDEBUG +#endif + +#ifndef FILELOG_MAX_LEVEL +#define FILELOG_MAX_LEVEL logINFOBLUE +#endif + +typedef enum { +logERROR, logWARNING, logINFO, logINFOBLUE, +logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4, logDEBUG5 +}TLogLevel; + +#define ERROR_MSG_LENGTH 1000 + +#define FILE_LOG(lvl, fmt, ...) \ + if (lvl > FILELOG_MAX_LEVEL); \ + else {char* temp = FILELOG_BuildLog fmt; FILELOG_PrintLog(lvl, temp);free(temp);} + +static inline void FILELOG_PrintLog(TLogLevel level, char* m) { + switch(level) { + case logERROR: cprintf(RED BOLD, "ERROR: %s", m); break; + case logWARNING: cprintf(YELLOW BOLD, "WARNING: %s", m); break; + case logINFOBLUE: cprintf(BLUE, "INFO: %s", m); break; + case logINFO: cprintf(RESET, "INFO: %s", m); break; + case logDEBUG: cprintf(MAGENTA, "DEBUG: %s", m); break; + case logDEBUG1: cprintf(MAGENTA, "DEBUG1: %s", m); break; + case logDEBUG2: cprintf(MAGENTA, "DEBUG2: %s", m); break; + case logDEBUG3: cprintf(MAGENTA, "DEBUG3: %s", m); break; + case logDEBUG4: cprintf(MAGENTA, "DEBUG4: %s", m); break; + case logDEBUG5: cprintf(MAGENTA, "DEBUG5: %s", m); break; + } +} + +static inline char* FILELOG_BuildLog(const char* fmt, ...) { + char* p; + va_list ap; + p = malloc(ERROR_MSG_LENGTH); + va_start(ap, fmt); + int ret = vsnprintf(p, ERROR_MSG_LENGTH, fmt, ap); + va_end(ap); + if (ret < 0 || ret >= ERROR_MSG_LENGTH) { + FILELOG_PrintLog(logERROR, ("Could not print the " + "complete error message in the next print.\n")); + } + return p; +}; + + + diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h index 6b0a7ca03..d100b85f8 100644 --- a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h @@ -1,7 +1,3 @@ -#ifdef SLS_DETECTOR_FUNCTION_LIST -#ifndef SLS_DETECTOR_FUNCTION_LIST_H -#define SLS_DETECTOR_FUNCTION_LIST_H - #include "sls_detector_defs.h" #include "slsDetectorServer_defs.h" // DAC_INDEX, ADC_INDEX, also include RegisterDefs.h @@ -22,7 +18,7 @@ int isFirmwareCheckDone(); int getFirmwareCheckResult(char** mess); #endif -void checkFirmwareCompatibility(int flag); +void checkFirmwareCompatibility(); #if defined(MYTHEN3D) || defined(JUNGFRAUD) int checkType(); u_int32_t testFpga(void); @@ -166,7 +162,8 @@ int setHighVoltage(int val); // parameters - timing, extsig -enum externalCommunicationMode setTiming( enum externalCommunicationMode arg); +void setTiming( enum externalCommunicationMode arg); +enum externalCommunicationMode getTiming(); // configure mac #ifdef JUNGFRAUD @@ -264,6 +261,3 @@ int getNumberOfOffsets(); int getNumberOfChannelsPerChip(); - -#endif -#endif diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer.c index fd4b0e443..9a4c56df3 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer.c @@ -3,7 +3,7 @@ #include "sls_detector_defs.h" #include "slsDetectorServer_defs.h" - +#include "logger.h" #include "communication_funcs.h" #include "slsDetectorServer_funcs.h" @@ -12,8 +12,13 @@ #include #include -extern int sockfd; +// Global variables from communication_funcs +extern int isControlServer; +extern int ret; +// Global variables from slsDetectorServer_funcs +extern int sockfd; +extern int debugflag; void error(char *msg){ perror(msg); @@ -22,9 +27,7 @@ void error(char *msg){ int main(int argc, char *argv[]){ int portno = DEFAULT_PORTNO; int retval = OK; - int sd, fd; - int debugflag = 0; - int controlserver = 1; + int fd = 0; // if socket crash, ignores SISPIPE, prevents global signal handler // subsequent read/write to socket gives error - must handle locally @@ -35,21 +38,21 @@ int main(int argc, char *argv[]){ int i; for (i = 1; i < argc; ++i) { if(!strcasecmp(argv[i],"-stopserver")) { - cprintf(BLUE,"Detected stop server\n"); - controlserver = 0; + FILE_LOG(logINFO, ("Detected stop server\n")); + isControlServer = 0; } else if(!strcasecmp(argv[i],"-devel")){ - cprintf(BLUE,"Detected developer mode\n"); + FILE_LOG(logINFO, ("Detected developer mode\n")); debugflag = 1; } #ifdef JUNGFRAUD else if(!strcasecmp(argv[i],"-update")){ - cprintf(BLUE,"Detected update mode\n"); + FILE_LOG(logINFO, ("Detected update mode\n")); debugflag = PROGRAMMING_MODE; } #endif else if(strchr(argv[i],'-') != NULL) { - cprintf(RED,"cannot scan program argument %s\n", argv[1]); + FILE_LOG(logERROR, ("cannot scan program argument %s\n", argv[1])); return -1; } } @@ -59,79 +62,60 @@ int main(int argc, char *argv[]){ char cmd[100]; memset(cmd, 0, 100); #endif - if (controlserver) { + if (isControlServer) { portno = DEFAULT_PORTNO; - cprintf(BLUE, - "********************************************************\n" + FILE_LOG(logINFOBLUE, + ("***************************************************\n" "********* opening control server on port %d **********\n" "********************************************************\n\n" - , portno); + , portno)); #ifdef STOP_SERVER { int i; for (i = 0; i < argc; ++i) sprintf(cmd, "%s %s", cmd, argv[i]); sprintf(cmd,"%s -stopserver&", cmd); - cprintf(BLUE,"cmd:%s\n", cmd); + FILE_LOG(logINFO, ("Command to start stop server:%s\n", cmd)); system(cmd); } #endif } else { - portno = DEFAULT_PORTNO+1; - cprintf(BLUE, - "********************************************************\n" + portno = DEFAULT_PORTNO + 1; + FILE_LOG(logINFOBLUE, + ("***************************************************\n" "*********** opening stop server on port %d ***********\n" "********************************************************\n\n" - , portno); + , portno)); } - setModeFlag(debugflag); //defined in slsDetectorServer_funcs - init_detector(controlserver); //defined in slsDetectorServer_funcs + init_detector(); - sd=bindSocket(portno); //defined in communication_funcs - sockfd=sd; - if (getServerError(sd)) { //defined in communication_funcs - printf("server error!\n"); - return -1; + { // bind socket + sockfd = bindSocket(portno); + if (ret == FAIL) + return -1; } - /* assign function table */ - function_table(); //defined in slsDetectorServer_funcs -#ifdef VERBOSE - printf("function table assigned \n"); -#endif + // assign function table + function_table(); - if (controlserver) - printf("\nControl Server Ready...\n\n"); - else - printf("\nStop Server Ready...\n\n"); + if (isControlServer) { + FILE_LOG(logINFO, ("Control Server Ready...\n\n")); + } else { + FILE_LOG(logINFO, ("Stop Server Ready...\n\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 slsDetectorServer_funcs -#ifdef VERY_VERBOSE - printf("function executed\n"); -#endif - closeConnection(fd); //defined in communication_funcs -#ifdef VERY_VERBOSE - printf("connection closed\n"); -#endif + // waits for connection + while(retval != GOODBYE) { + fd = acceptConnection(sockfd); + if (fd > 0) { + retval = decode_function(fd); + closeConnection(fd); } } - exitServer(sockfd); //defined in communication_funcs - printf("Goodbye!\n"); + exitServer(sockfd); + FILE_LOG(logINFO,("Goodbye!\n")); return 0; } diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index e0e0f9d8f..704b56990 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -1,21 +1,12 @@ - -#include "sls_detector_defs.h" #include "slsDetectorServer_funcs.h" #include "slsDetectorFunctionList.h" #include "communication_funcs.h" -#include "slsDetectorServer_defs.h" +#include "logger.h" #include #include #include - -// Global variables -extern int lockStatus; -extern char lastClientIP[INET_ADDRSTRLEN]; -extern char thisClientIP[INET_ADDRSTRLEN]; -extern int differentClients; - //defined in the detector specific Makefile #ifdef GOTTHARDD const enum detectorType myDetectorType=GOTTHARD; @@ -29,53 +20,58 @@ const enum detectorType myDetectorType=MYTHEN3; const enum detectorType myDetectorType=GENERIC; #endif -int sockfd; // (updated in slsDetectorServer) as extern -int (*flist[NUM_DET_FUNCTIONS])(int); -char mess[MAX_STR_LENGTH]; -int dataBytes = 10; -int isControlServer = 0; +// Global variables from communication_funcs +extern int lockStatus; +extern char lastClientIP[INET_ADDRSTRLEN]; +extern char thisClientIP[INET_ADDRSTRLEN]; +extern int differentClients; +extern int isControlServer; +extern int ret; +extern int fnum; +extern char mess[MAX_STR_LENGTH]; + +// Variables that will be exported +int sockfd = 0; int debugflag = 0; + +// Local variables +int (*flist[NUM_DET_FUNCTIONS])(int); +int dataBytes = 10; #ifdef EIGERD uint32_t dhcpipad = 0; #endif + + + /* initialization functions */ int printSocketReadError() { - cprintf(BG_RED, "Error reading from socket. Possible socket crash\n"); + FILE_LOG(logERROR, ("Error reading from socket. Possible socket crash.\n")); return FAIL; } -void setModeFlag(int flag) { - debugflag = flag; -} void basictests() { -#ifdef SLS_DETECTOR_FUNCTION_LIST - checkFirmwareCompatibility(debugflag); -#endif + checkFirmwareCompatibility(); } -void init_detector(int controlserver) { +void init_detector() { #ifdef VIRTUAL - printf("This is a VIRTUAL detector\n"); + FILE_LOG(logINFO, ("This is a VIRTUAL detector\n")); #endif - -#ifdef SLS_DETECTOR_FUNCTION_LIST - if (controlserver) { - isControlServer = 1; + if (isControlServer) { basictests(); #ifdef JUNGFRAUD - if (debugflag != PROGRAMMING_MODE) + if (debugflag == PROGRAMMING_MODE) #endif - initControlServer(); + initControlServer(); #ifdef EIGERD - dhcpipad = getDetectorIP(); + dhcpipad = getDetectorIP(); #endif } else initStopServer(); -#endif strcpy(mess,"dummy message"); strcpy(lastClientIP,"none"); strcpy(thisClientIP,"none1"); @@ -84,48 +80,40 @@ void init_detector(int controlserver) { int decode_function(int file_des) { - int fnum,n; - int ret=FAIL; -#ifdef VERBOSE - printf( "\nreceive data\n"); -#endif - n = receiveData(file_des,&fnum,sizeof(fnum),INT32); - if (n <= 0) { -#ifdef VERBOSE - printf("ERROR reading from socket %d, %d %d (%s)\n", - n, fnum, file_des, getFunctionName((enum detFuncs)fnum)); -#endif - return FAIL; - } -#ifdef VERBOSE - else - printf("size of data received %d\n",n); -#endif + ret = FAIL; + int n = receiveData(file_des,&fnum,sizeof(fnum),INT32); + if (n <= 0) { + FILE_LOG(logDEBUG5, ("ERROR reading from socket n=%d, fnum=%d, file_des=%d, fname=%s\n", + n, fnum, file_des, getFunctionName((enum detFuncs)fnum))); + return FAIL; + } else + FILE_LOG(logDEBUG5, ("Received %d bytes\n", n )); + + // jungfrau in programming mode #ifdef JUNGFRAUD - if ((debugflag == PROGRAMMING_MODE) && ( + if ((debugflag == PROGRAMMING_MODE) && (fnum != F_PROGRAM_FPGA) && (fnum != F_GET_DETECTOR_TYPE) && (fnum != F_RESET_FPGA) && (fnum != F_UPDATE_CLIENT) && - (fnum != F_CHECK_VERSION))) { - sprintf(mess,"This Function %s cannot be executed. ", - getFunctionName((enum detFuncs)fnum)); - ret=(M_nofuncMode)(file_des); - } else + (fnum != F_CHECK_VERSION)) { + ret = (M_nofuncMode)(file_des); + } + else #endif - if (fnum<0 || fnum>=NUM_DET_FUNCTIONS) { - cprintf(BG_RED,"Unknown function enum %d\n", fnum); + if (fnum < 0 || fnum >= NUM_DET_FUNCTIONS) { + FILE_LOG(logERROR, ("Unknown function enum %d\n", fnum)); ret=(M_nofunc)(file_des); - }else { -#ifdef VERBOSE - printf(" calling function fnum=%d, (%s) located at 0x%x\n", - fnum, getFunctionName((enum detFuncs)fnum), (unsigned int)flist[fnum]); -#endif + } else { + FILE_LOG(logDEBUG5, (" calling function fnum=%d, (%s)\n", + fnum, getFunctionName((enum detFuncs)fnum))); ret=(*flist[fnum])(file_des); - if (ret == FAIL) - cprintf(RED, "Error executing the function = %d (%s)\n", - fnum, getFunctionName((enum detFuncs)fnum)); + + if (ret == FAIL) { + FILE_LOG(logDEBUG5, ("Error executing the function = %d (%s)\n", + fnum, getFunctionName((enum detFuncs)fnum))); + } } return ret; } @@ -253,105 +241,105 @@ void function_table() { flist[F_THRESHOLD_TEMP] = &threshold_temp; flist[F_TEMP_CONTROL] = &temp_control; flist[F_TEMP_EVENT] = &temp_event; - flist[F_AUTO_COMP_DISABLE] = &auto_comp_disable; - flist[F_STORAGE_CELL_START] = &storage_cell_start; - flist[F_CHECK_VERSION] = &check_version; - flist[F_SOFTWARE_TRIGGER] = &software_trigger; + flist[F_AUTO_COMP_DISABLE] = &auto_comp_disable; + flist[F_STORAGE_CELL_START] = &storage_cell_start; + flist[F_CHECK_VERSION] = &check_version; + flist[F_SOFTWARE_TRIGGER] = &software_trigger; // check if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) { - cprintf(BG_RED,"The last detector function enum has reached its limit\nGoodbye!\n"); + FILE_LOG(logERROR, ("The last detector function enum has reached its limit\nGoodbye!\n")); exit(EXIT_FAILURE); } -#ifdef VERYVERBOSE - { - int i=0; - for (i = 0; i < NUM_DET_FUNCTIONS ; i++) { - printf("function fnum=%d, (%s) located at 0x%x\n", i, - getFunctionName((enum detFuncs)i), (unsigned int)flist[i]); - } + int iloop = 0; + for (iloop = 0; iloop < NUM_DET_FUNCTIONS ; ++iloop) { + FILE_LOG(logDEBUG5, ("function fnum=%d, (%s) located at 0x%x\n", iloop, + getFunctionName((enum detFuncs)iloop), (unsigned int)flist[iloop])); } -#endif +} + +void functionNotImplemented() { + ret = FAIL; + sprintf(mess, "Function (%s) is not implemented for this detector\n", + getFunctionName((enum detFuncs)fnum)); + FILE_LOG(logERROR, (mess)); } int M_nofunc(int file_des){ - int ret=FAIL,ret1=FAIL; - int n=0; + ret = FAIL; + memset(mess, 0, sizeof(mess)); - //to receive any arguments + // to receive any arguments + int n = 0; while (n > 0) n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - sprintf(mess,"Unrecognized Function. Please do not proceed.\n"); - cprintf(BG_RED,"Error: %s",mess); - n = sendData(file_des,&ret1,sizeof(ret1),INT32); - n = sendData(file_des,mess,sizeof(mess),OTHER); + strcpy(mess,"Unrecognized Function. Please do not proceed.\n"); + FILE_LOG(logERROR, (mess)); - // return ok / fail + Server_SendResult(file_des, OTHER, 0, NULL, 0); return ret; } // Jungfrau program mode int M_nofuncMode(int file_des){ - int ret=FAIL,ret1=FAIL; - int n=0; - //to receive any arguments + ret = FAIL; + memset(mess, 0, sizeof(mess)); + + // to receive any arguments + int n = 0; while (n > 0) n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - strcat(mess, "On-board detector server in update mode. Restart detector server in normal mode (without any arguments) to continue.\n"); - cprintf(BG_RED,"Error: %s",mess); - n = sendData(file_des,&ret1,sizeof(ret1),INT32); - n = sendData(file_des,mess,sizeof(mess),OTHER); // mess is defined at function call + sprintf(mess,"This Function %s cannot be executed as the " + "On-board detector server in update mode.\n" + "Restart detector server in normal mode (without any arguments) to continue.\n", + getFunctionName((enum detFuncs)fnum)); + FILE_LOG(logERROR, (mess)); - // return ok / fail + Server_SendResult(file_des, OTHER, 0, NULL, 0); return ret; } -/* functions called by client */ - - int exec_command(int file_des) { - int ret=OK,ret1=OK; - int n=0; - char cmd[MAX_STR_LENGTH]=""; - int sysret=0; + ret = OK; + memset(mess, 0, sizeof(mess)); + char cmd[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; - // receive arguments - n = receiveData(file_des,cmd,MAX_STR_LENGTH,OTHER); - if (n < 0) return printSocketReadError(); + if (receiveData(file_des, cmd, MAX_STR_LENGTH, OTHER) < 0) + return printSocketReadError(); - // execute action if the arguments correctly arrived -#ifdef VERBOSE - printf("executing command %s\n", cmd); -#endif - if (differentClients && lockStatus) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } else { - sysret=system(cmd); - //should be replaced by popen - if (sysret==0) { - sprintf(mess,"Succeeded\n"); - } else { - ret = FAIL; - sprintf(mess,"Executing Command failed\n"); - cprintf(RED, "Warning: %s", mess); + if (Server_VerifyLock() != FAIL) { + + FILE_LOG(logINFO, ("Executing command (%s)\n", cmd)); + FILE* sysFile = popen(cmd, "r"); + const size_t tempsize = 256; + char temp[tempsize]; + memset(temp, 0, tempsize); + while(fgets(temp, tempsize, sysFile) != NULL) { + // size left excludes terminating character + size_t sizeleft = MAX_STR_LENGTH - strlen(retval) - 1; + // more than the command + if (tempsize > sizeleft) { + strncat(retval, temp, sizeleft); + break; + } + strncat(retval, temp, tempsize); + memset(temp, 0, tempsize); } + pclose(sysFile); + FILE_LOG(logINFO, ("Result of cmd (%s):\n%s\n", cmd, retval)); } - ret1=ret; - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); + Server_SendResult(file_des, OTHER, 0, retval, sizeof(retval)); - // return ok / fail return ret; } @@ -359,28 +347,13 @@ int exec_command(int file_des) { int get_detector_type(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum detectorType retval=-1; + ret = OK; + enum detectorType retval = myDetectorType; + FILE_LOG(logDEBUG5,("Returning detector type %d\n", retval)); - // execute action - retval=myDetectorType; -#ifdef VERBOSE - printf("Returning detector type %d\n",retval); -#endif + Server_SendResult(file_des, INT32, 1, &retval, sizeof(retval)); - if (differentClients) - ret=FORCE_UPDATE; - - // send ok / fail - n += sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - n += sendData(file_des,&retval,sizeof(retval),INT32); - - // return ok / fail return ret; - - } @@ -388,136 +361,79 @@ int get_detector_type(int file_des) { int set_external_signal_flag(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum externalSignalFlag retval=GET_EXTERNAL_SIGNAL_FLAG; - sprintf(mess,"set external signal flag failed\n"); + ret = OK; + memset(mess, 0, sizeof(mess)); + int arg[2] = {-1,-1}; + enum externalSignalFlag retval= GET_EXTERNAL_SIGNAL_FLAG; + + if (receiveData(file_des, arg, sizeof(arg), INT32) < 0) + return printSocketReadError(); #ifndef GOTTHARDD - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Set External Signal Flag) is not implemented for this detector\n"); - cprintf(RED, "%s", mess); + functionNotImplemented(); #else + int signalindex = arg[0]; + enum externalSignalFlag flag = arg[1]; - // receive arguments - int arg[2]={-1,-1}; - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - int signalindex=arg[0]; - enum externalSignalFlag flag=arg[1]; - - // execute action - if (lockStatus && differentClients && flag!=GET_EXTERNAL_SIGNAL_FLAG) { + // set + if ((flag != GET_EXTERNAL_SIGNAL_FLAG) && (Server_VerifyLock() != FAIL)) { + FILE_LOG(logDEBUG5, ("Setting external signal %d to flag %d\n", signalindex, flag)); + setExtSignal(signalindex, flag); + } + // get + retval = getExtSignal(signalindex); + if (flag != GET_EXTERNAL_SIGNAL_FLAG && retval != flag) { ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); + sprintf(mess,"External signal %d flag should be 0x%04x but is 0x%04x\n", + signalindex, flag, retval); + FILE_LOG(logERROR,(mess)); } - -#ifdef SLS_DETECTOR_FUNCTION_LIST - else{ -#ifdef VERBOSE - printf("Setting external signal %d to flag %d\n",signalindex,flag); -#endif - switch (flag) { - case GET_EXTERNAL_SIGNAL_FLAG: - retval=getExtSignal(signalindex); - break; - default: - retval=setExtSignal(signalindex,flag); - if (retval!=flag) { - ret=FAIL; - sprintf(mess,"External signal %d flag should be 0x%04x but is 0x%04x\n", signalindex, flag, retval); - cprintf(RED, "%s", mess); - } - break; - } -#ifdef VERBOSE - printf("Set to flag %d\n",retval); -#endif - } -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; + FILE_LOG(logDEBUG5, ("External Signal Flag: %d\n", retval)); #endif - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } + Server_SendResult(file_des, INT32, 1, &retval, sizeof(retval)); - // return ok / fail return ret; - } + + int set_external_communication_mode(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum externalCommunicationMode arg=GET_EXTERNAL_COMMUNICATION_MODE; - enum externalCommunicationMode retval=GET_EXTERNAL_COMMUNICATION_MODE; - sprintf(mess,"set external communication mode failed\n"); + ret = OK; + memset(mess, 0, sizeof(mess)); + enum externalCommunicationMode arg = GET_EXTERNAL_COMMUNICATION_MODE; + enum externalCommunicationMode retval = GET_EXTERNAL_COMMUNICATION_MODE; - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); + if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) + return printSocketReadError(); - // execute action -#ifdef VERBOSE - printf("Setting external communication mode to %d\n", arg); -#endif -#ifdef SLS_DETECTOR_FUNCTION_LIST - switch(arg){ + // set + if ((arg != GET_EXTERNAL_COMMUNICATION_MODE) && (Server_VerifyLock() != FAIL)) { + switch (arg) { + case AUTO_TIMING: + case TRIGGER_EXPOSURE: #ifdef EIGERD - case GET_EXTERNAL_COMMUNICATION_MODE: - case AUTO_TIMING: - case TRIGGER_EXPOSURE: - case GATE_FIX_NUMBER: - case BURST_TRIGGER: -#elif JUNGFRAUD - case GET_EXTERNAL_COMMUNICATION_MODE: - case AUTO_TIMING: - case TRIGGER_EXPOSURE: + case GATE_FIX_NUMBER: + case BURST_TRIGGER: #endif - retval=setTiming(arg); - break; - default: - ret = FAIL; - sprintf(mess,"Timing mode (%d) is not implemented for this detector\n",(int)arg); - cprintf(RED, "Warning: %s", mess); - break; - } -#ifdef VERBOSE - if(ret==OK) - printf("retval:%d\n",retval); -#endif - if (ret==OK && differentClients==1) - ret=FORCE_UPDATE; - -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); + FILE_LOG(logDEBUG5,("Setting external communication mode to %d\n", arg)); + setTiming(arg); + break; + default: + ret = FAIL; + sprintf(mess, "Timing mode (%d) is not implemented for this detector\n", (int)arg); + FILE_LOG(logWARNING,(mess)); + break; + } } - // return ok / fail + // get + retval = getTiming(); + FILE_LOG(logDEBUG5, ("Timing Mode: %d\n",retval)); + + Server_SendResult(file_des, INT32, 1, &retval, sizeof(retval)); + return ret; } @@ -525,58 +441,34 @@ int set_external_communication_mode(int file_des) { int get_id(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum idMode arg=0; - int64_t retval=-1; - sprintf(mess,"get id failed\n"); + ret = OK; + memset(mess, 0, sizeof(mess)); + enum idMode arg = 0; + int64_t retval = -1; - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); + if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) + return printSocketReadError(); - // execute action -#ifdef VERBOSE - printf("Getting id %d\n", arg); -#endif - -#ifdef SLS_DETECTOR_FUNCTION_LIST + // get switch (arg) { -#ifdef EIGERD +#if defined(EIGERD) || defined(JUNGFRAUD) case SOFTWARE_FIRMWARE_API_VERSION: #endif case DETECTOR_SERIAL_NUMBER: case DETECTOR_FIRMWARE_VERSION: case DETECTOR_SOFTWARE_VERSION: - retval=getDetectorId(arg); + retval = getDetectorId(arg); + FILE_LOG(logDEBUG5, ("Id(%d): %lld\n", retval)); break; default: ret = FAIL; sprintf(mess,"ID Index (%d) is not implemented for this detector\n", (int) arg); - cprintf(RED, "Warning: %s", mess); + FILE_LOG(logWARNING,(mess)); break; } -#endif -#ifdef VERBOSE - printf("ret is %d\n",ret); - printf("Id is %llx\n", retval); -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; + Server_SendResult(file_des, INT64, 1, &retval, sizeof(retval)); - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT64); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail return ret; } @@ -620,7 +512,6 @@ int digital_test(int file_des) { #ifdef VERBOSE printf("Digital test mode %d\n",arg ); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST switch (arg) { #ifdef GOTTHARD @@ -640,7 +531,6 @@ int digital_test(int file_des) { cprintf(RED, "Warning: %s", mess); break; } -#endif } #ifdef VERBOSE printf("digital test result is 0x%x\n", retval); @@ -885,7 +775,6 @@ int set_dac(int file_des) { #ifdef VERBOSE printf("Setting DAC %d to %d \n", idac, val); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST int temp; if (ret==OK) { if (differentClients && lockStatus && val!=-1) { @@ -1010,7 +899,6 @@ int set_dac(int file_des) { } } } -#endif #ifdef VERBOSE printf("DAC set to %d in dac units and %d mV\n", retval[0],retval[1]); #endif @@ -1106,10 +994,8 @@ int get_adc(int file_des) { #ifdef VERBOSE printf("Getting ADC %d\n", iadc); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) retval=getADC(iadc); -#endif #ifdef VERBOSE printf("ADC is %f\n", retval); #endif @@ -1156,7 +1042,6 @@ int write_register(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("writing to register 0x%x data 0x%x\n", addr, val); @@ -1168,7 +1053,6 @@ int write_register(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif #ifdef VERBOSE printf("Data set to 0x%x\n", retval); #endif @@ -1211,9 +1095,7 @@ int read_register(int file_des) { #ifdef VERBOSE printf("reading register 0x%x\n", addr); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=readRegister(addr); -#endif #ifdef VERBOSE printf("Returned value 0x%x\n", retval); #endif @@ -1261,7 +1143,6 @@ int set_module(int file_des) { #else -#ifdef SLS_DETECTOR_FUNCTION_LIST int *myDac=NULL; int *myAdc=NULL; int *myChip = NULL; @@ -1430,7 +1311,6 @@ int set_module(int file_des) { } if (ret==OK && differentClients) ret=FORCE_UPDATE; -#endif #endif // ret could be swapped during sendData @@ -1471,7 +1351,6 @@ int get_module(int file_des) { #else // execute action -#ifdef SLS_DETECTOR_FUNCTION_LIST int *myDac=NULL; int *myAdc=NULL; int *myChip = NULL; @@ -1529,7 +1408,6 @@ int get_module(int file_des) { #endif } } -#endif #endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -1551,12 +1429,10 @@ int get_module(int file_des) { n += sendData(file_des,mess,sizeof(mess),OTHER); } -#ifdef SLS_DETECTOR_FUNCTION_LIST if(myChip != NULL) free(myChip); if(myChan != NULL) free(myChan); if(myDac != NULL) free(myDac); if(myAdc != NULL) free(myAdc); -#endif // return ok / fail return ret; @@ -1596,7 +1472,6 @@ int set_settings(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST switch(isett) { case GET_SETTINGS: @@ -1659,7 +1534,6 @@ int set_settings(int file_des) { } } #endif -#endif #endif if (ret==OK && differentClients) @@ -1702,11 +1576,9 @@ int get_threshold_energy(int file_des) { #ifdef VERBOSE printf("Getting threshold energy \n"); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=getThresholdEnergy(); #ifdef VERBOSE printf("Threshold is %d eV\n", retval); -#endif #endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -1742,14 +1614,12 @@ int start_acquisition(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { printf("Starting acquisition\n"); ret=startStateMachine(); if (ret==FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -1779,14 +1649,12 @@ int stop_acquisition(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { printf("Stopping acquisition\n"); ret=stopStateMachine(); if (ret==FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -1827,14 +1695,12 @@ int start_readout(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { printf("Starting readout\n"); ret=startReadOut(); if (ret==FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -1865,9 +1731,7 @@ int get_run_status(int file_des) { #ifdef VERBOSE printf("Getting status\n"); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST s= getRunStatus(); -#endif if (differentClients) ret=FORCE_UPDATE; @@ -1904,10 +1768,8 @@ int start_and_read_all(int file_des) { // return fail return dataret; } -#ifdef SLS_DETECTOR_FUNCTION_LIST startStateMachine(); read_all(file_des); -#endif return OK; } @@ -1933,9 +1795,7 @@ int read_all(int file_des) { // return fail return dataret; } -#ifdef SLS_DETECTOR_FUNCTION_LIST readFrame(&dataret, mess); -#endif if(dataret == FAIL) cprintf(RED,"%s\n",mess); else @@ -1982,7 +1842,6 @@ int set_timer(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("setting timer %d to %lld ns\n",ind,tns); @@ -2045,7 +1904,6 @@ int set_timer(int file_des) { } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -2086,7 +1944,6 @@ int get_time_left(int file_des) { #ifdef VERBOSE printf("getting time left on timer %d \n",ind); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST #ifdef JUNGFRAUD if (ind == DELAY_AFTER_TRIGGER) { @@ -2137,7 +1994,6 @@ int get_time_left(int file_des) { } // end of if (ind == DELAY_AFTER_TRIGGER) #endif -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -2179,7 +2035,6 @@ int set_dynamic_range(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { switch(dr){ case -1: @@ -2223,7 +2078,6 @@ int set_dynamic_range(int file_des) { #endif if (dr>=0) dataBytes=calculateDataBytes(); } -#endif if ((ret == OK) && dr>=0 && retval!=dr) { ret = FAIL; cprintf(RED,"%s",mess); @@ -2286,7 +2140,6 @@ int set_readout_flags(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("setting readout flags to %d\n",arg); @@ -2310,7 +2163,6 @@ int set_readout_flags(int file_des) { cprintf(RED, "Warning: %s", mess); break; } -#endif if (ret==OK && ((retval == -1) || ((arg!=-1) && ((retval&arg)!=arg)))){ ret = FAIL; sprintf(mess,"Could not change readout flag: should be 0x%x but is 0x%x\n", arg, retval); @@ -2392,7 +2244,6 @@ int set_roi(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Setting ROI to:"); @@ -2405,7 +2256,6 @@ int set_roi(int file_des) { cprintf(RED, "%s",mess); } } -#endif if(ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -2462,7 +2312,6 @@ int set_speed(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("setting speed variable %d to %d\n",arg,val); @@ -2500,7 +2349,6 @@ int set_speed(int file_des) { break; } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -2595,16 +2443,13 @@ int get_last_client_ip(int file_des) { int set_port(int file_des) { - int ret=OK,ret1=OK; + ret = OK; + memset(mess, 0, sizeof(mess)); int n=0; - enum portType p_type=0; int p_number=-1; sprintf(mess,"set port failed\n"); - // receive arguments - n = receiveData(file_des,&p_type,sizeof(p_type),INT32); - if (n < 0) return printSocketReadError(); - + // receive argumets n = receiveData(file_des,&p_number,sizeof(p_number),INT32); if (n < 0) return printSocketReadError(); @@ -2616,42 +2461,26 @@ int set_port(int file_des) { cprintf(RED, "Warning: %s", mess); } else { - if (p_number<1024) { + if (p_number < 1024) { ret = FAIL; - sprintf(mess,"Port Number (%d) too low\n", p_number); - cprintf(RED, "Warning: %s", mess); + sprintf(mess,"%s port Number (%d) too low\n", + (isControlServer ? "control":"stop"), p_number); + FILE_LOG(logWARNING, (mess)); + } else { + FILE_LOG(logINFO, ("Setting %s port to %d\n", + (isControlServer ? "control":"stop"), p_number)); + sd=bindSocket(p_number); } - printf("set port %d to %d\n",p_type, p_number); - sd=bindSocket(p_number); - if (sd<0) { - ret = FAIL; - sprintf(mess,"Could not bind port %d\n", p_number); - cprintf(RED, "Warning: %s", mess); - if (sd==-10) { - ret = FAIL; - sprintf(mess,"Port %d already set\n", p_number); - cprintf(RED, "Warning: %s", mess); - } - } - if (ret==OK && differentClients) - ret=FORCE_UPDATE; } - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n = sendData(file_des,mess,sizeof(mess),OTHER); - } else { - n = sendData(file_des,&p_number,sizeof(p_number),INT32); + Server_SendResult(file_des, INT32, 1, &p_number, sizeof(p_number)); + + if (ret!=FAIL) { closeConnection(file_des); exitServer(sockfd); sockfd=sd; } - // return ok / fail return ret; } @@ -2677,97 +2506,62 @@ int send_update(int file_des) { if (n < 0) return printSocketReadError(); -#ifdef SLS_DETECTOR_FUNCTION_LIST nm=setDynamicRange(GET_FLAG); -#endif n = sendData(file_des,&nm,sizeof(nm),INT32); if (n < 0) return printSocketReadError(); - -#ifdef SLS_DETECTOR_FUNCTION_LIST dataBytes=calculateDataBytes(); -#endif n = sendData(file_des,&dataBytes,sizeof(dataBytes),INT32); if (n < 0) return printSocketReadError(); - -#ifdef SLS_DETECTOR_FUNCTION_LIST t=setSettings(GET_SETTINGS); -#endif n = sendData(file_des,&t,sizeof(t),INT32); if (n < 0) return printSocketReadError(); - #ifdef EIGERD -#ifdef SLS_DETECTOR_FUNCTION_LIST nm=getThresholdEnergy(GET_FLAG); -#endif n = sendData(file_des,&nm,sizeof(nm),INT32); if (n < 0) return printSocketReadError(); #endif - -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(FRAME_NUMBER,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); - -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(ACQUISITION_TIME,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); - #ifdef EIGERD -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(SUBFRAME_ACQUISITION_TIME,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(SUBFRAME_DEADTIME,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); #endif - -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(FRAME_PERIOD,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); - #ifndef EIGERD -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(DELAY_AFTER_TRIGGER,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); #endif - #if !defined(EIGERD) && !defined(JUNGFRAUD) -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(GATES_NUMBER,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); #endif - -#ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(CYCLES_NUMBER,GET_FLAG); -#endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); - if (lockStatus==0) { strcpy(lastClientIP,thisClientIP); } @@ -2788,7 +2582,7 @@ int configure_mac(int file_des) { // receive arguments char arg[6][50]; - memset(arg,0,sizeof(arg)); + memset(arg, 0, sizeof(arg)); n = receiveData(file_des,arg,sizeof(arg),OTHER); #if defined(JUNGFRAUD) || defined(EIGERD) int pos[3]={0,0,0}; @@ -2822,7 +2616,6 @@ int configure_mac(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE int i; @@ -2903,7 +2696,6 @@ int configure_mac(int file_des) { } } -#endif if (differentClients) ret=FORCE_UPDATE; @@ -2919,7 +2711,7 @@ int configure_mac(int file_des) { n += sendData(file_des,&retval,sizeof(retval),INT32); #ifdef EIGERD char arg[2][50]; - memset(arg,0,sizeof(arg)); + memset(arg, 0, sizeof(arg)); sprintf(arg[0],"%llx",(long long unsigned int)idetectormacadd); sprintf(arg[1],"%x",detipad); n += sendData(file_des,arg,sizeof(arg),OTHER); @@ -2950,8 +2742,7 @@ int load_image(int file_des) { // receive arguments enum imageType index=0; - char ImageVals[dataBytes]; - memset(ImageVals,0,dataBytes); + char ImageVals[dataBytes] = {0}; n = receiveData(file_des,&index,sizeof(index),INT32); if (n < 0) return printSocketReadError(); @@ -2964,7 +2755,6 @@ int load_image(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { switch (index) { case DARK_IMAGE : @@ -2988,7 +2778,6 @@ int load_image(int file_des) { break; } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3016,7 +2805,7 @@ int read_counter_block(int file_des) { int ret=OK,ret1=OK; int n=0; char CounterVals[dataBytes]; - memset(CounterVals,0,dataBytes); + memset(CounterVals, 0, dataBytes); sprintf(mess,"Read counter block failed\n"); #ifndef GOTTHARDD @@ -3039,7 +2828,6 @@ int read_counter_block(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=readCounterBlock(startACQ,CounterVals); if (ret == FAIL) @@ -3050,7 +2838,6 @@ int read_counter_block(int file_des) { printf("%d:%d\t",i,CounterVals[i]); #endif } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3098,13 +2885,11 @@ int reset_counter_block(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=resetCounterBlock(startACQ); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3155,13 +2940,11 @@ int calibrate_pedestal(int file_des){ sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=calibratePedestal(frames); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if(ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3214,7 +2997,6 @@ int enable_ten_giga(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Enabling/Disabling 10Gbe :%d \n",arg); @@ -3227,7 +3009,6 @@ int enable_ten_giga(int file_des) { else if (differentClients) ret=FORCE_UPDATE; } -#endif #endif // ret could be swapped during sendData @@ -3274,7 +3055,6 @@ int set_all_trimbits(int file_des){ sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("setting all trimbits to %d\n",arg); @@ -3298,7 +3078,6 @@ int set_all_trimbits(int file_des){ } } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3583,7 +3362,6 @@ int set_counter_bit(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Getting/Setting/Resetting counter bit :%d \n",arg); @@ -3596,7 +3374,6 @@ int set_counter_bit(int file_des) { if (ret==OK && differentClients) ret=FORCE_UPDATE; } -#endif #endif // ret could be swapped during sendData @@ -3641,13 +3418,11 @@ int pulse_pixel(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=pulsePixel(arg[0],arg[1],arg[2]); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3693,13 +3468,11 @@ int pulse_pixel_and_move(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=pulsePixelNMove(arg[0],arg[1],arg[2]); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if(ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3747,13 +3520,11 @@ int pulse_chip(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret=pulseChip(arg); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if(ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3800,7 +3571,6 @@ int set_rate_correct(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { printf("Setting rate correction to %lld ns\n",(long long int)tau_ns); //set rate @@ -3827,7 +3597,6 @@ int set_rate_correct(int file_des) { } } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3864,13 +3633,11 @@ int get_rate_correct(int file_des) { cprintf(RED, "Warning: %s", mess); #else -#ifdef SLS_DETECTOR_FUNCTION_LIST // execute action retval = getCurrentTau(); printf("Getting rate correction %lld\n",(long long int)retval); -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -3925,7 +3692,6 @@ int set_network_parameter(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("setting network parameter mode %d to %d\n",(int)mode,value); @@ -3968,7 +3734,6 @@ int set_network_parameter(int file_des) { } } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4037,7 +3802,6 @@ int program_fpga(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { //opening file pointer to flash and telling FPGA to not touch flash if(startWritingFPGAprogram(&fp) != OK) { @@ -4125,7 +3889,6 @@ int program_fpga(int file_des) { initControlServer(); } } -#endif if (ret==OK) ret=FORCE_UPDATE; } @@ -4167,7 +3930,6 @@ int reset_fpga(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { if (isControlServer) { basictests(debugflag); // mapping of control server at lease @@ -4179,7 +3941,6 @@ int reset_fpga(int file_des) { else initStopServer(); //remapping of stop server ret = FORCE_UPDATE; } -#endif #endif // ret could be swapped during sendData @@ -4223,7 +3984,6 @@ int power_chip(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Power chip to %d\n", arg); @@ -4244,7 +4004,6 @@ int power_chip(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4292,7 +4051,6 @@ int set_activate(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Setting activate mode of detector to %d\n",arg); @@ -4304,7 +4062,6 @@ int set_activate(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4346,13 +4103,11 @@ int prepare_acquisition(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { ret = prepareAcquisition(); if (ret == FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if(ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4403,14 +4158,12 @@ int threshold_temp(int file_des) { } -#ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { #ifdef VERBOSE printf("Setting Threshold Temperature to %d\n", val); #endif retval=setThresholdTemperature(val); } -#endif #ifdef VERBOSE printf("Threshold temperature is %d\n", retval); #endif @@ -4458,14 +4211,12 @@ int temp_control(int file_des) { if (n < 0) return printSocketReadError(); val=arg; -#ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { #ifdef VERBOSE printf("Setting Temperature control to %d\n", val); #endif retval=setTemperatureControl(val); } -#endif #ifdef VERBOSE printf("Temperature control is %d\n", retval); #endif @@ -4513,14 +4264,12 @@ int temp_event(int file_des) { if (n < 0) return printSocketReadError(); val=arg; -#ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { #ifdef VERBOSE printf("Setting Temperature Event to %d\n", val); #endif retval=setTemperatureEvent(val); } -#endif #ifdef VERBOSE printf("Temperature Event is %d\n", retval); #endif @@ -4581,7 +4330,6 @@ int auto_comp_disable(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { #ifdef VERBOSE printf("Auto Comp Disable to %d\n", arg); @@ -4599,7 +4347,6 @@ int auto_comp_disable(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4648,7 +4395,6 @@ int storage_cell_start(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else if (arg > MAX_STORAGE_CELL_VAL) { ret=FAIL; strcpy(mess,"Max Storage cell number should not exceed 15\n"); @@ -4669,7 +4415,6 @@ int storage_cell_start(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif @@ -4711,7 +4456,6 @@ int check_version(int file_des) { if (n < 0) return printSocketReadError(); // execute action -#ifdef SLS_DETECTOR_FUNCTION_LIST // check software- firmware compatibility and basic tests if (isControlServer) { @@ -4767,7 +4511,6 @@ int check_version(int file_des) { cprintf(RED, "Warning: %s", mess); } } -#endif #endif // ret could be swapped during sendData @@ -4806,14 +4549,12 @@ int software_trigger(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); cprintf(RED, "Warning: %s", mess); } -#ifdef SLS_DETECTOR_FUNCTION_LIST else { printf("Software Trigger\n"); ret=softwareTrigger(); if (ret==FAIL) cprintf(RED, "Warning: %s", mess); } -#endif if (ret==OK && differentClients) ret=FORCE_UPDATE; #endif diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h index 6b3b6057d..adcd6d787 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h @@ -6,12 +6,12 @@ // initialization functions int printSocketReadError(); -void setModeFlag(int); void basictests(); -void init_detector(int); +void init_detector(); int decode_function(int); const char* getFunctionName(enum detFuncs func); void function_table(); +void functionNotImplemented(); int M_nofunc(int); int M_nofuncMode(int); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 07a994a58..66fec09ce 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -27,6 +27,8 @@ slsDetector::slsDetector(detectorType type, int multiId, int id, bool verify) : detId(id), sharedMemory(0), thisDetector(0), + thisDetectorControl(0), + thisDetectorStop(0), thisReceiver(0), controlSocket(0), stopSocket(0), @@ -55,10 +57,13 @@ slsDetector::slsDetector(detectorType type, int multiId, int id, bool verify) initializeDetectorStructurePointers(); } + slsDetector::slsDetector(int multiId, int id, bool verify) : detId(id), sharedMemory(0), thisDetector(0), + thisDetectorControl(0), + thisDetectorStop(0), thisReceiver(0), controlSocket(0), stopSocket(0), @@ -85,6 +90,10 @@ slsDetector::~slsDetector() { sharedMemory->UnmapSharedMemory(thisDetector); delete sharedMemory; } + if(thisDetectorControl) + delete thisDetectorControl; + if(thisDetectorStop) + delete thisDetectorStop; if(thisReceiver) delete thisReceiver; if(controlSocket) @@ -107,8 +116,7 @@ int slsDetector::checkVersionCompatibility(portType t) { if (t == DATA_PORT) fnum = F_RECEIVER_CHECK_VERSION; int ret = FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); + char mess[MAX_STR_LENGTH] = {0}; int64_t arg = 0; // detector @@ -205,57 +213,56 @@ int slsDetector::checkVersionCompatibility(portType t) { int64_t slsDetector::getId( idMode mode) { + int fnum = F_GET_ID; + int ret = FAIL; + int arg = (int)mode; + int64_t retval = -1; - int64_t retval=-1; - int fnum=F_GET_ID,fnum2 = F_GET_RECEIVER_ID; - int ret=FAIL; - char mess[MAX_STR_LENGTH]=""; + FILE_LOG(logDEBUG5) << "Getting id type " << mode; -#ifdef VERBOSE - std::cout<< std::endl << "Getting id type "<< mode << std::endl; -#endif - if (mode==THIS_SOFTWARE_VERSION) { - ret=OK; - retval=GITDATE; - } else if (mode==RECEIVER_VERSION) { + // client version + if (mode == THIS_SOFTWARE_VERSION) { + ret = OK; + retval = GITDATE; + } + + // receiver version + else if (mode==RECEIVER_VERSION) { + fnum = F_GET_RECEIVER_ID; if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum2, NULL, 0, &retval, sizeof(retval)); + ret=thisReceiver->Client_Send(fnum, NULL, 0, &retval, sizeof(retval)); disconnectData(); } - if(ret==FORCE_UPDATE) - ret=updateReceiver(); + // handle ret + if (ret == FAIL) + setErrorMask((getErrorMask())|(OTHER_ERROR_CODE)); + else if(ret == FORCE_UPDATE) + ret = updateReceiver(); } - } else { + } + + // detector versions + else { if (thisDetector->onlineFlag==ONLINE_FLAG) { - if (connectControl() != OK) - ret = FAIL; - else{ - controlSocket->SendDataOnly(&fnum,sizeof(fnum)); - controlSocket->SendDataOnly(&mode,sizeof(mode)); - 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; - } + if (connectControl() == OK){ + ret = thisDetectorControl->Client_Send(fnum, + &arg, sizeof(arg), &retval, sizeof(retval)); disconnectControl(); - if (ret==FORCE_UPDATE) + // handle ret + if (ret == FAIL) + setErrorMask((getErrorMask())|(OTHER_ERROR_CODE)); + else if (ret == FORCE_UPDATE) updateDetector(); } } } - if (ret==FAIL) { - std::cout<< "Get id failed " << std::endl; - return ret; - } else { -#ifdef VERBOSE - std::cout<< "Id "<< mode <<" is " << hex <chanoff); gain = (int*)(goff + thisDetector->gainoff); offset = (int*)(goff + thisDetector->offsetoff); + if (thisDetectorControl) { + delete thisDetectorControl; + thisDetectorControl = 0; + } + if (thisDetectorStop) { + delete thisDetectorStop; + thisDetectorStop = 0; + } if (thisReceiver) { delete thisReceiver; thisReceiver = 0; } + thisDetectorControl = new ClientInterface(controlSocket, detId, "Detector (Control server)"); + thisDetectorStop = new ClientInterface(stopSocket, detId, "Detector (Stop server)"); thisReceiver = new ClientInterface(dataSocket, detId, "Receiver"); } @@ -853,43 +870,32 @@ slsDetectorDefs::detectorType slsDetector::getDetectorTypeFromShm(int multiId, b return type; } - +// static function slsDetectorDefs::detectorType slsDetector::getDetectorType(const char *name, int cport) { - int fnum=F_GET_DETECTOR_TYPE; - int retval = FAIL; - detectorType t = GENERIC; + int fnum = F_GET_DETECTOR_TYPE; + detectorType retval = GENERIC; MySocketTCP* mySocket = 0; try { mySocket = new MySocketTCP(name, cport); } catch(...) { - std::cout << "Cannot create socket to server " << name << " over port " << cport << std::endl; - return t; + FILE_LOG(logERROR) << "Cannot create socket to control server " << name << " over port " << cport; + return retval; } - -#ifdef VERBOSE - std::cout << "Getting detector type " << std::endl; -#endif + FILE_LOG(logINFO) << "Getting detector type "; if (mySocket->Connect() >= 0) { mySocket->SendDataOnly(&fnum,sizeof(fnum)); + int ret = FAIL; // not needed but is in protocol from server + mySocket->ReceiveDataOnly(&ret,sizeof(ret)); mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - if (retval!=FAIL) { - mySocket->ReceiveDataOnly(&t,sizeof(t)); -#ifdef VERBOSE - std::cout << "Detector type is "<< t << std::endl; -#endif - } else { - char mess[MAX_STR_LENGTH]; - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - std::cout<< "Detector returned error: " << mess << std::endl; - } + FILE_LOG(logDEBUG5) << "Detector type is " << retval; mySocket->Disconnect(); } else { - std::cout << "Cannot connect to server " << name << " over port " << cport << std::endl; + FILE_LOG(logERROR) << "Cannot connect to server " << name << " over port " << cport; } delete mySocket; - return t; + return retval; } @@ -897,8 +903,6 @@ int slsDetector::setDetectorType(detectorType const type) { int ret=FAIL; int fnum=F_GET_DETECTOR_TYPE,fnum2=F_GET_RECEIVER_TYPE; detectorType retval = type; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); if (type != GET_DETECTOR_TYPE) { #ifdef VERBOSE @@ -1217,7 +1221,8 @@ int slsDetector::setTCPSocket(std::string const name, int const control_port, in if (retval!=FAIL) { checkOnline(); - + thisDetectorControl->SetSocket(controlSocket); + thisDetectorStop->SetSocket(stopSocket); // check for version compatibility switch (thisDetector->myDetectorType) { case EIGER: @@ -1352,16 +1357,15 @@ int slsDetector::setPort(portType index, int num) { if(s==dataSocket) fnum = fnum2; s->SendDataOnly(&fnum,sizeof(fnum)); - s->SendDataOnly(&index,sizeof(index)); s->SendDataOnly(&num,sizeof(num)); s->ReceiveDataOnly(&ret,sizeof(ret)); if (ret==FAIL) { char mess[MAX_STR_LENGTH]=""; s->ReceiveDataOnly(mess,sizeof(mess)); std::cout<< "Detector returned error: " << mess << std::endl; - } else { - s->ReceiveDataOnly(&retval,sizeof(retval)); } + s->ReceiveDataOnly(&retval,sizeof(retval)); + s->Disconnect(); }else{ if (index == CONTROL_PORT){ @@ -1539,24 +1543,23 @@ int slsDetector::exitServer() { int slsDetector::execCommand(std::string cmd) { + int fnum = F_EXEC_COMMAND; + int ret = FAIL; + char arg[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; - char arg[MAX_STR_LENGTH]="", retval[MAX_STR_LENGTH]=""; - int fnum=F_EXEC_COMMAND; - int ret=FAIL; strcpy(arg,cmd.c_str()); + FILE_LOG(logDEBUG5) << "Sending command to detector " << arg; -#ifdef VERBOSE - std::cout<< std::endl; - std::cout<< "Sending command " << arg << std::endl; -#endif if (thisDetector->onlineFlag==ONLINE_FLAG) { if (connectControl() == OK){ - controlSocket->SendDataOnly(&fnum,sizeof(fnum)); - controlSocket->SendDataOnly(arg,MAX_STR_LENGTH); - controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); - controlSocket->ReceiveDataOnly(retval,MAX_STR_LENGTH); - std::cout << "Detector returned:" << retval << std::endl; + ret = thisDetectorControl->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); disconnectControl(); + // handle ret + if (ret == FAIL) + setErrorMask((getErrorMask())|(OTHER_ERROR_CODE)); + else + FILE_LOG(logINFO) << "Detector " << detId << " returned:\n" << retval; } } return ret; @@ -1840,8 +1843,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise slsDetectorDefs::detectorSettings slsDetector::sendSettingsOnly(detectorSettings isettings) { int fnum = F_SET_SETTINGS; int ret = FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); + char mess[MAX_STR_LENGTH] = {0}; int retval = -1; int arg = isettings; #ifdef VERBOSE @@ -2417,7 +2419,7 @@ int slsDetector::configureMAC() { int ret=FAIL; int fnum=F_CONFIGURE_MAC; char mess[MAX_STR_LENGTH]=""; - char arg[6][50];memset(arg,0,sizeof(char)*6*50); + char arg[6][50] = {0}; int retval=-1; // to send 3d positions to detector @@ -2572,8 +2574,7 @@ int slsDetector::configureMAC() { controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); if (thisDetector->myDetectorType == EIGER) { //rewrite detectormac, detector ip - char arg[2][50]; - memset(arg,0,sizeof(arg)); + char arg[2][50] = {0}; uint64_t idetectormac = 0; uint32_t idetectorip = 0; controlSocket->ReceiveDataOnly(arg,sizeof(arg)); @@ -3058,41 +3059,23 @@ int slsDetector::getADC(dacIndex index) { slsDetectorDefs::externalCommunicationMode slsDetector::setExternalCommunicationMode( externalCommunicationMode pol) { + int fnum = F_SET_EXTERNAL_COMMUNICATION_MODE; + int ret = FAIL; int arg = pol; externalCommunicationMode retval = GET_EXTERNAL_COMMUNICATION_MODE;; - int fnum=F_SET_EXTERNAL_COMMUNICATION_MODE; - int ret=FAIL; + FILE_LOG(logDEBUG5) << "Setting communication to mode "<< pol; -#ifdef VERBOSE - std::cout<< std::endl; - std::cout<< "Setting communication to mode " << pol << std::endl; -#endif if (thisDetector->onlineFlag==ONLINE_FLAG) { if (connectControl() == OK){ - controlSocket->SendDataOnly(&fnum,sizeof(fnum)); - controlSocket->SendDataOnly(&arg,sizeof(arg)); - controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret!=FAIL) - controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); - else { - char mess[MAX_STR_LENGTH]=""; - controlSocket->ReceiveDataOnly(mess,sizeof(mess)); - std::cout<< "Detector returned error: " << mess << std::endl; - } + ret = thisDetectorControl->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectControl(); - if (ret==FORCE_UPDATE) + // handle ret + if (ret == FAIL) + setErrorMask((getErrorMask())|(OTHER_ERROR_CODE)); + else if (ret == FORCE_UPDATE) updateDetector(); } - } else { - retval=GET_EXTERNAL_COMMUNICATION_MODE; - ret=FAIL; - } -#ifdef VERBOSE - std::cout<< "Communication mode "<< " set to" << retval << std::endl; -#endif - if (ret==FAIL) { - std::cout<< "Setting communication mode failed" << std::endl; } return retval; } @@ -3101,57 +3084,25 @@ slsDetectorDefs::externalCommunicationMode slsDetector::setExternalCommunication slsDetectorDefs::externalSignalFlag slsDetector::setExternalSignalFlags( externalSignalFlag pol, int signalindex) { + int fnum = F_SET_EXTERNAL_SIGNAL_FLAG; + int ret = FAIL; + int arg[2] = {signalindex, pol}; + externalSignalFlag retval = GET_EXTERNAL_SIGNAL_FLAG; + FILE_LOG(logDEBUG5) << "Setting signal "<< signalindex << " to flag" << pol; - - - int arg[2]; - externalSignalFlag retval; - int ret=FAIL; - int fnum=F_SET_EXTERNAL_SIGNAL_FLAG; - char mess[MAX_STR_LENGTH]=""; - - arg[0]=signalindex; - arg[1]=pol; - - retval=GET_EXTERNAL_SIGNAL_FLAG; - -#ifdef VERBOSE - std::cout<< std::endl; - std::cout<< "Setting signal "<< signalindex << " to flag" << pol << std::endl; -#endif if (thisDetector->onlineFlag==ONLINE_FLAG) { if (connectControl() == OK){ - 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; - } + ret = thisDetectorControl->Client_Send(fnum, arg, sizeof(arg), &retval, sizeof(retval)); disconnectControl(); - if (ret==FORCE_UPDATE) + // handle ret + if (ret == FAIL) + setErrorMask((getErrorMask())|(OTHER_ERROR_CODE)); + else if (ret == FORCE_UPDATE) updateDetector(); } - } else { - retval=GET_EXTERNAL_SIGNAL_FLAG; - ret=FAIL; } -#ifdef VERBOSE - std::cout<< "Signal "<< signalindex << " flag set to" << retval << std::endl; - if (ret==FAIL) { - std::cout<< "Set signal flag failed " << std::endl; - } -#endif return retval; - - - - - - } @@ -3833,10 +3784,8 @@ std::string slsDetector::setReceiverStreamingIP(std::string sourceIP) { int fnum=F_RECEIVER_STREAMING_SRC_IP; int ret = FAIL; - char arg[MAX_STR_LENGTH]; - memset(arg,0,sizeof(arg)); - char retval[MAX_STR_LENGTH]; - memset(retval,0, sizeof(retval)); + char arg[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; // if empty, give rx_hostname if (sourceIP.empty()) { @@ -3861,7 +3810,7 @@ std::string slsDetector::setReceiverStreamingIP(std::string sourceIP) { } // on success put IP as std::string into arg else { - dataSocket->ConvertInternetAddresstoIpString(result, arg, MAX_STR_LENGTH); + dataSocket->ConvertInternetAddresstoIpString(result, arg, sizeof(arg)); } } @@ -3881,7 +3830,7 @@ std::string slsDetector::setReceiverStreamingIP(std::string sourceIP) { std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); + ret=thisReceiver->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) { @@ -3901,10 +3850,8 @@ std::string slsDetector::setAdditionalJsonHeader(std::string jsonheader) { int fnum=F_ADDITIONAL_JSON_HEADER; int ret = FAIL; - char arg[MAX_STR_LENGTH]; - memset(arg,0,sizeof(arg)); - char retval[MAX_STR_LENGTH]; - memset(retval,0, sizeof(retval)); + char arg[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; strcpy(arg, jsonheader.c_str()); @@ -3913,7 +3860,7 @@ std::string slsDetector::setAdditionalJsonHeader(std::string jsonheader) { std::cout << "Sending additional json header " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); + ret=thisReceiver->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) { @@ -4003,10 +3950,8 @@ int slsDetector::setUDPConnection() { int ret = FAIL; int fnum = F_SETUP_RECEIVER_UDP; - char args[3][MAX_STR_LENGTH]; - memset(args,0,sizeof(args)); - char retval[MAX_STR_LENGTH]; - memset(retval,0,sizeof(retval)); + char args[3][MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; //called before set up if(!strcmp(thisDetector->receiver_hostname,"none")){ @@ -4961,8 +4906,7 @@ int slsDetector::setTemperatureEvent(int val) { int slsDetector::setStoragecellStart(int pos) { int ret=FAIL; int fnum=F_STORAGE_CELL_START; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); + char mess[MAX_STR_LENGTH] = {0}; int retval=-1; #ifdef VERBOSE @@ -5929,24 +5873,22 @@ int slsDetector::exitReceiver() { } int slsDetector::execReceiverCommand(std::string cmd) { - - int fnum=F_EXEC_RECEIVER_COMMAND; - int ret=FAIL; - char arg[MAX_STR_LENGTH]; - memset(arg,0,sizeof(arg)); - char retval[MAX_STR_LENGTH]; - memset(retval,0, sizeof(retval)); + int fnum = F_EXEC_RECEIVER_COMMAND; + int ret = FAIL; + char arg[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; strcpy(arg,cmd.c_str()); + FILE_LOG(logDEBUG5) << "Sending command to receiver " << arg; if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { -#ifdef VERBOSE - std::cout << "Sending to receiver the command: " << arg << std::endl; -#endif if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); + ret=thisReceiver->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); disconnectData(); } + if (ret != FAIL) { + FILE_LOG(logINFO) << "Receiver " << detId << " returned:\n" << retval; + } } return ret; } @@ -6157,26 +6099,27 @@ std::string slsDetector::setFilePath(std::string s) { char retval[MAX_STR_LENGTH] = ""; strcpy(arg,s.c_str()); + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Sending file path to receiver " << arg << std::endl; + std::cout << "Sending file path to receiver " << arg << std::endl; #endif - if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); - disconnectData(); + if (connectData() == OK){ + ret=thisReceiver->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); + disconnectData(); + } + if(ret!=FAIL){ + strcpy(thisDetector->receiver_filePath,retval); + } + else { + if(!s.empty()){ + std::cout << "file path does not exist" << std::endl; + setErrorMask((getErrorMask())|(FILE_PATH_DOES_NOT_EXIST)); + } else + setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET)); + } + if(ret==FORCE_UPDATE) + updateReceiver(); } - if(ret!=FAIL){ - strcpy(thisDetector->receiver_filePath,retval); - } - else { - if(!s.empty()){ - std::cout << "file path does not exist" << std::endl; - setErrorMask((getErrorMask())|(FILE_PATH_DOES_NOT_EXIST)); - } else - setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET)); - } - if(ret==FORCE_UPDATE) - updateReceiver(); - return getFilePath(); } @@ -6202,7 +6145,7 @@ std::string slsDetector::setFileName(std::string s) { std::cout << "Sending file name to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); + ret=thisReceiver->Client_Send(fnum, arg, sizeof(arg), retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6309,20 +6252,21 @@ slsDetectorDefs::fileFormat slsDetector::setFileFormat(fileFormat f) { int ret = FAIL; int arg = f; int retval = -1; + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Sending file format to receiver " << arg << std::endl; + std::cout << "Sending file format to receiver " << arg << std::endl; #endif - if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - disconnectData(); + if (connectData() == OK){ + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); + disconnectData(); + } + if (ret == FAIL) + setErrorMask((getErrorMask())|(RECEIVER_FILE_FORMAT)); + else + thisDetector->receiver_fileFormatType = (fileFormat)retval; + if(ret==FORCE_UPDATE) + updateReceiver(); } - if (ret == FAIL) - setErrorMask((getErrorMask())|(RECEIVER_FILE_FORMAT)); - else - thisDetector->receiver_fileFormatType = (fileFormat)retval; - if(ret==FORCE_UPDATE) - updateReceiver(); - return getFileFormat(); } @@ -6346,21 +6290,21 @@ int slsDetector::setFileIndex(int i) { int retval=-1; int arg = i; - + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG) { #ifdef VERBOSE - std::cout << "Sending file index to receiver " << arg << std::endl; + std::cout << "Sending file index to receiver " << arg << std::endl; #endif - if (connectData() == OK){ - ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - disconnectData(); + if (connectData() == OK){ + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); + disconnectData(); + } + if (ret == FAIL) + setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET)); + else + thisDetector->receiver_fileIndex = retval; + if(ret==FORCE_UPDATE) + updateReceiver(); } - if (ret == FAIL) - setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET)); - else - thisDetector->receiver_fileIndex = retval; - if(ret==FORCE_UPDATE) - updateReceiver(); - return getFileIndex(); } @@ -7055,110 +6999,6 @@ int slsDetector::setCTBPatWaitTime(int level, uint64_t t) { -int slsDetector::readCalibrationFile(std::string fname, double &gain, double &offset) { - - std::string str; - std::ifstream infile; -#ifdef VERBOSE - std::cout<< "Opening file "<< fname << std::endl; -#endif - infile.open(fname.c_str(), std::ios_base::in); - if (infile.is_open()) { - getline(infile,str); -#ifdef VERBOSE - std::cout<< str << std::endl; -#endif - std::istringstream ssstr(str); - ssstr >> offset >> gain; - infile.close(); - std::cout << "Calibration file loaded: " << fname << std::endl; - } else { - std::cout<< "Could not open calibration file "<< fname << std::endl; - gain=0.; - offset=0.; - return FAIL; - } - return OK; -} - - - -int slsDetector::writeCalibrationFile(std::string fname, double gain, double offset) { - - std::ofstream outfile; - outfile.open (fname.c_str()); - - if (outfile.is_open()) { - outfile << offset << " " << gain << std::endl; - } else { - std::cout<< "Could not open calibration file "<< fname << " for writing" << std::endl; - - return FAIL; - } - - outfile.close(); - return OK; -} - - -int slsDetector::readCalibrationFile(std::string fname, int *gain, int *offset) { - - std::string str; - std::ifstream infile; - double o,g; - int ig=0; -#ifdef VERBOSE - std::cout<< "Opening file "<< fname << std::endl; -#endif - infile.open(fname.c_str(), std::ios_base::in); - if (infile.is_open()) { - //get gain and offset - for (ig=0; ig<4; ig++) { - //while ( (getline(infile,str)) > -1) { - getline(infile,str); -#ifdef VERBOSE - std::cout<< str << std::endl; -#endif - std::istringstream ssstr(str); - ssstr >> o >> g; - offset[ig]=(int)(o*1000); - gain[ig]=(int)(g*1000); - // ig++; - if (ig>=4) - break; - } - infile.close(); - std::cout << "Calibration file loaded: " << fname << std::endl; - } else { - std::cout << "Could not open calibration file: "<< fname << std::endl; - gain[0]=0; - offset[0]=0; - return FAIL; - } - - return OK; -} - - -int slsDetector::writeCalibrationFile(std::string fname, int *gain, int *offset){ - - std::ofstream outfile; - outfile.open (fname.c_str()); - - if (outfile.is_open()) { - for (int ig=0; ig<4; ig++) - outfile << ((double)offset[ig]/1000) << " " << ((double)gain[ig]/1000) << std::endl; - } else { - std::cout<< "Could not open calibration file "<< fname << " for writing" << std::endl; - return FAIL; - } - - outfile.close(); - return OK; -} - - - slsDetectorDefs::sls_detector_module* slsDetector::interpolateTrim( sls_detector_module* a, sls_detector_module* b, const int energy, const int e1, const int e2, int tb) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 13f7ef752..35c24d620 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -1796,42 +1796,6 @@ private: */ int setUDPConnection(); - /** - * reads a calibration file - * @param fname file to be read - * @param gain reference to the gain variable - * @param offset reference to the offset variable - * @returns OK if successful, else FAIL or -1 - */ - static int readCalibrationFile(std::string fname, double &gain, double &offset); - - /** - * writes a calibration file - * @param fname file to be written - * @param gain - * @param offset - * @returns OK if successful, else FAIL or -1 - */ - static int writeCalibrationFile(std::string fname, double gain, double offset); - - /** - * reads a calibration file - * @param fname file to be read - * @param gain reference to the gain variable - * @param offset reference to the offset variable - * @returns OK if successful, else FAIL or -1 - */ - static int readCalibrationFile(std::string fname, int *gain, int *offset); - - /** - * writes a calibration file - * @param fname file to be written - * @param gain reference to the gain variable - * @param offset reference to the offset variable - * @returns OK if successful, else FAIL or -1 - */ - static int writeCalibrationFile(std::string fname, int *gain, int *offset); - /* * Template function to do linear interpolation between two points (Eiger only) */ @@ -1893,6 +1857,12 @@ private: /** Shared memory structure */ sharedSlsDetector *thisDetector; + /** control socket interface */ + ClientInterface *thisDetectorControl; + + /** stop socket interface */ + ClientInterface *thisDetectorStop; + /** receiver interface */ ClientInterface *thisReceiver; diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index 8d70e8602..c5257028b 100644 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -396,33 +396,6 @@ private: }; -class PropixData : public GeneralData { - - private: - - /**bytes per pixel for calculating image size */ - const static uint32_t bytesPerPixel = 2; - - public: - - /** Constructor */ - PropixData(){ - myDetectorType = slsDetectorDefs::PROPIX; - nPixelsX = 22; - nPixelsY = 22; - headerSizeinPacket = 4; - dataSize = 1280; - packetSize = 1286; - packetsPerFrame = 2; //not really - imageSize = nPixelsX*nPixelsY*bytesPerPixel; - frameIndexMask = 0xFFFFFFFE; - frameIndexOffset = 1; - packetIndexMask = 1; - maxFramesPerFile = MAX_FRAMES_PER_FILE; - fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header); - defaultFifoDepth = 50000; - }; -}; class Moench02Data : public GeneralData { diff --git a/slsReceiverSoftware/src/slsReceiverImplementation.cpp b/slsReceiverSoftware/src/slsReceiverImplementation.cpp index 0b428937f..ff317a452 100644 --- a/slsReceiverSoftware/src/slsReceiverImplementation.cpp +++ b/slsReceiverSoftware/src/slsReceiverImplementation.cpp @@ -897,8 +897,6 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) { myDetectorType = d; switch(myDetectorType) { case GOTTHARD: - case PROPIX: - case MOENCH: case EIGER: case JUNGFRAUCTB: case JUNGFRAU: @@ -913,8 +911,6 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) { //set detector specific variables switch(myDetectorType) { case GOTTHARD: generalData = new GotthardData(); break; - case PROPIX: generalData = new PropixData(); break; - case MOENCH: generalData = new Moench02Data(); break; case EIGER: generalData = new EigerData(); break; case JUNGFRAUCTB: generalData = new JCTBData(); break; case JUNGFRAU: generalData = new JungfrauData(); break; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 0a395408b..d7af5d8d2 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -20,8 +20,8 @@ #include #include #include - - +#include +#include //unique_ptr slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { stop(); @@ -241,31 +241,28 @@ int slsReceiverTCPIPInterface::function_table(){ int slsReceiverTCPIPInterface::decode_function(){ ret = FAIL; - - FILE_LOG(logDEBUG1) << "waiting to receive data"; int n = mySock->ReceiveDataOnly(&fnum,sizeof(fnum)); if (n <= 0) { - FILE_LOG(logDEBUG1) << "ERROR reading from socket. " + FILE_LOG(logDEBUG5) << "Could not read socket. " "Received " << n << " bytes," << "fnum:" << fnum << " " "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; return FAIL; } else - FILE_LOG(logDEBUG1) << "Received " << n << " bytes"; - + FILE_LOG(logDEBUG5) << "Received " << n << " bytes"; if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) { FILE_LOG(logERROR) << "Unknown function enum " << fnum; ret = (this->M_nofunc)(); } else{ - FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " " + FILE_LOG(logDEBUG5) << "calling function fnum: "<< fnum << " " "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") " "located at " << flist[fnum]; ret = (this->*flist[fnum])(); if (ret == FAIL) { - FILE_LOG(logERROR) << "Failed to execute function = " << fnum << " (" + FILE_LOG(logDEBUG5) << "Failed to execute function = " << fnum << " (" << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; } } @@ -281,7 +278,7 @@ void slsReceiverTCPIPInterface::functionNotImplemented() { } -int slsReceiverTCPIPInterface::M_nofunc(){printf("111 \n"); +int slsReceiverTCPIPInterface::M_nofunc(){ ret = FAIL; memset(mess, 0, sizeof(mess)); int n = 0; @@ -302,9 +299,10 @@ int slsReceiverTCPIPInterface::M_nofunc(){printf("111 \n"); int slsReceiverTCPIPInterface::exec_command() { + ret = FAIL; memset(mess, 0, sizeof(mess)); - char cmd[MAX_STR_LENGTH]; - memset(cmd,0,sizeof(cmd)); + char cmd[MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed if (interface->Server_ReceiveArg(ret, mess, cmd, MAX_STR_LENGTH) == FAIL) @@ -312,14 +310,26 @@ int slsReceiverTCPIPInterface::exec_command() { // verify if receiver is unlocked if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { - ret = (system(cmd) == 0) ? OK : FAIL; - if(ret == FAIL) { + + const size_t tempsize = 256; + std::array temp; + std::string sresult; + std::shared_ptr pipe(popen(cmd, "r"), pclose); + if (!pipe) { + ret = FAIL; strcpy(mess, "Executing Command failed\n"); FILE_LOG(logERROR) << mess; + } else { + while (!feof(pipe.get())) { + if (fgets(temp.data(), tempsize, pipe.get()) != NULL) + sresult += temp.data(); + } + strncpy(retval, sresult.c_str(), MAX_STR_LENGTH); + ret = OK; } } - interface->Server_SendResult(false, ret, NULL, 0, mess); + interface->Server_SendResult(false, ret, retval, MAX_STR_LENGTH, mess); return ret; } @@ -378,17 +388,13 @@ int slsReceiverTCPIPInterface::get_last_client_ip() { int slsReceiverTCPIPInterface::set_port() { ret = OK; memset(mess, 0, sizeof(mess)); - int p_type = 0; int p_number = -1; MySocketTCP* mySocket = 0; - char oldLastClientIP[INET_ADDRSTRLEN]; - memset(oldLastClientIP, 0, sizeof(oldLastClientIP)); + char oldLastClientIP[INET_ADDRSTRLEN] = {0}; - // receive arguments - if (mySock->ReceiveDataOnly(&p_type,sizeof(p_type)) < 0 ) - return interface->Server_SocketCrash(); - if (mySock->ReceiveDataOnly(&p_number,sizeof(p_number)) < 0 ) - return interface->Server_SocketCrash(); + // get args, return if socket crashed + if (interface->Server_ReceiveArg(ret, mess, &p_number, sizeof(p_number)) == FAIL) + return FAIL; // verify if receiver is unlocked if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { @@ -450,8 +456,7 @@ int slsReceiverTCPIPInterface::update_client() { int slsReceiverTCPIPInterface::send_update() { int ind = -1; - char defaultVal[MAX_STR_LENGTH]; - memset(defaultVal, 0, sizeof(defaultVal)); + char defaultVal[MAX_STR_LENGTH] = {0}; char* path = NULL; int n = 0; @@ -581,8 +586,6 @@ int slsReceiverTCPIPInterface::set_detector_type(){ if (ret == OK) { switch(dr) { case GOTTHARD: - case PROPIX: - case MOENCH: case EIGER: case JUNGFRAUCTB: case JUNGFRAU: @@ -628,8 +631,7 @@ int slsReceiverTCPIPInterface::set_detector_type(){ int slsReceiverTCPIPInterface::set_detector_hostname() { memset(mess, 0, sizeof(mess)); - char hostname[MAX_STR_LENGTH]; - memset(hostname, 0, sizeof(hostname)); + char hostname[MAX_STR_LENGTH] = {0}; char* retval = NULL; // get args, return if socket crashed, ret is fail if receiver is not null @@ -706,10 +708,8 @@ int slsReceiverTCPIPInterface::set_roi() { int slsReceiverTCPIPInterface::setup_udp(){ - char args[3][MAX_STR_LENGTH]; - memset(args,0,sizeof(args)); - char retval[MAX_STR_LENGTH]; - memset(retval,0,sizeof(retval)); + char args[3][MAX_STR_LENGTH] = {0}; + char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null if (interface->Server_ReceiveArg(ret, mess, args, sizeof(args), true, receiver) == FAIL) @@ -1062,8 +1062,7 @@ int slsReceiverTCPIPInterface::stop_receiver(){ int slsReceiverTCPIPInterface::set_file_dir() { memset(mess, 0, sizeof(mess)); - char fPath[MAX_STR_LENGTH]; - memset(fPath, 0, sizeof(fPath)); + char fPath[MAX_STR_LENGTH] = {0}; char* retval=NULL; // get args, return if socket crashed, ret is fail if receiver is not null @@ -1100,8 +1099,7 @@ int slsReceiverTCPIPInterface::set_file_dir() { int slsReceiverTCPIPInterface::set_file_name() { memset(mess, 0, sizeof(mess)); - char fName[MAX_STR_LENGTH]; - memset(fName, 0, sizeof(fName)); + char fName[MAX_STR_LENGTH] = {0}; char* retval = NULL; // get args, return if socket crashed, ret is fail if receiver is not null @@ -1672,8 +1670,7 @@ int slsReceiverTCPIPInterface::set_streaming_port() { int slsReceiverTCPIPInterface::set_streaming_source_ip() { memset(mess, 0, sizeof(mess)); - char arg[MAX_STR_LENGTH]; - memset(arg, 0, sizeof(arg)); + char arg[MAX_STR_LENGTH] = {0}; char* retval=NULL; // get args, return if socket crashed, ret is fail if receiver is not null @@ -1813,8 +1810,7 @@ int slsReceiverTCPIPInterface::restream_stop(){ int slsReceiverTCPIPInterface::set_additional_json_header() { memset(mess, 0, sizeof(mess)); - char arg[MAX_STR_LENGTH]; - memset(arg, 0, sizeof(arg)); + char arg[MAX_STR_LENGTH] = {0}; char* retval=NULL; // get args, return if socket crashed, ret is fail if receiver is not null diff --git a/slsSupportLib/include/ClientInterface.cpp b/slsSupportLib/include/ClientInterface.cpp index e18ec5c7b..78bd1bbbd 100644 --- a/slsSupportLib/include/ClientInterface.cpp +++ b/slsSupportLib/include/ClientInterface.cpp @@ -1,16 +1,6 @@ #include "ClientInterface.h" -#include -#include -#include -#include -#include -#include -#include - - - ClientInterface::ClientInterface(MySocketTCP *socket, int n, std::string t): mySocket(socket), index(n), @@ -55,29 +45,7 @@ int ClientInterface::Client_Send(int fnum, mySocket->ReceiveDataOnly(&ret,sizeof(ret)); if (ret == FAIL) { if (Client_GetMesage(mess) == FAIL) - return FAIL; - } - mySocket->ReceiveDataOnly(retval, sizeOfRetval); - - return ret; -} - - -int ClientInterface::Client_Send(int fnum, - void* args, int sizeOfArgs, - void* args2, int sizeOfArgs2, - void* retval, int sizeOfRetval, - char* mess) { - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(args, sizeOfArgs); - mySocket->SendDataOnly(args2, sizeOfArgs2); - - int ret = FAIL; - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret == FAIL) { - if (Client_GetMesage(mess) == FAIL) - return FAIL; + return FAIL; } mySocket->ReceiveDataOnly(retval, sizeOfRetval); @@ -89,7 +57,7 @@ void ClientInterface::Server_SendResult(bool update, int ret, void* retval, int retvalSize, char* mess) { // update if different clients - if (update && mySocket->differentClients) + if (update && ret == OK && mySocket->differentClients) ret = FORCE_UPDATE; // send success of operation @@ -143,7 +111,6 @@ int ClientInterface::Server_VerifyLockAndIdle(int& ret, char* mess, int lockstat void ClientInterface::Server_NullObjectError(int& ret, char* mess) { - // only for receiver ret=FAIL; strcpy(mess,"Receiver not set up. Please use rx_hostname first.\n"); FILE_LOG(logERROR) << mess; @@ -158,7 +125,7 @@ int ClientInterface::Server_SocketCrash() { int ClientInterface::Server_LockedError(int& ret, char* mess) { ret = FAIL; - sprintf(mess,"%s locked by %s\n",type.c_str(), mySocket->lastClientIP); + sprintf(mess,"Receiver locked by %s\n", mySocket->lastClientIP); FILE_LOG(logERROR) << mess; return ret; } @@ -166,8 +133,8 @@ int ClientInterface::Server_LockedError(int& ret, char* mess) { int ClientInterface::Server_NotIdleError(int& ret, char* mess, int fnum) { ret = FAIL; - sprintf(mess,"Can not execute %s when %s is not idle\n", - getFunctionNameFromEnum((enum detFuncs)fnum), type.c_str()); + sprintf(mess,"Can not execute %s when receiver is not idle\n", + getFunctionNameFromEnum((enum detFuncs)fnum)); FILE_LOG(logERROR) << mess; return ret; } diff --git a/slsSupportLib/include/ClientInterface.h b/slsSupportLib/include/ClientInterface.h index a53badb92..536c8c984 100644 --- a/slsSupportLib/include/ClientInterface.h +++ b/slsSupportLib/include/ClientInterface.h @@ -57,24 +57,8 @@ public: void* retval, int sizeOfRetval, char* mess = 0); - /** - * Send Arguments (second set) to server and get result back - * @param fnum function enum to determine what parameter - * @param args pointer to arguments - * @param sizeOfArgs argument size - * @param args2 pointer to arguments 2 - * @param sizeOfArgs2 argument size 2 - * @param retval pointer to return value - * @param sizeOfRetval return value size - * @param mess pointer to message if message required externally - */ - int Client_Send(int fnum, - void* args, int sizeOfArgs, - void* args2, int sizeOfArgs2, - void* retval, int sizeOfRetval, - char* mess = 0); - /** + /** only Receiver * Server sends result to client (also set ret to force_update if different clients) * @param update true if one must update if different clients, else false * @param ret success of operation @@ -84,7 +68,7 @@ public: */ void Server_SendResult(bool update, int ret, void* retval, int retvalSize, char* mess = 0); - /** + /** only Receiver * Server receives arguments and checks if base object is null (if checkbase is true) * checking base object is null (for reciever only when it has not been configured yet) * @param ret pointer to success of operation @@ -97,8 +81,9 @@ public: */ int Server_ReceiveArg(int& ret, char* mess, void* arg, int sizeofArg,bool checkbase=false, void* base=NULL); - /** - * Server verifies if it is locked, sets and prints appropriate message if it is + /** only Receiver + * Server verifies if it is unlocked, + * sets and prints appropriate message if it is locked and different clients * @param ret pointer to sucess * @param mess message * @param lockstatus status of lock @@ -106,8 +91,9 @@ public: */ int Server_VerifyLock(int& ret, char* mess, int lockstatus); - /** - * Server verifies if it is locked and idle, sets and prints appropriate message if it is + /** only Receiver + * Server verifies if it is unlocked and idle, + * sets and prints appropriate message if it is locked and different clients * @param ret pointer to sucess * @param mess message * @param lockstatus status of lock @@ -117,20 +103,20 @@ public: */ int Server_VerifyLockAndIdle(int& ret, char* mess, int lockstatus, slsDetectorDefs::runStatus status, int fnum); - /** + /** only Receiver * Server sets and prints error message for null object error (receiver only) * @param ret pointer to sucess that will be set to FAIL * @param mess message */ void Server_NullObjectError(int& ret, char* mess); - /** + /** only Receiver * Servers prints error message for socket crash when reading * @returns always FAIL */ int Server_SocketCrash(); - /** + /** only Receiver * Servers sets and prints error message for locked server * @param ret pointer to sucess that will be set to FAIL * @param mess message @@ -138,7 +124,7 @@ public: */ int Server_LockedError(int& ret, char* mess); - /** + /** only Receiver * Servers sets and prints error message for server not being idle * @param ret pointer to sucess that will be set to FAIL * @param mess message @@ -154,7 +140,7 @@ private: */ MySocketTCP *mySocket; - /** index for debugging purposes */ + /** index for client debugging purposes */ int index; /** string for type to differentiate between Detector & Receiver in printouts */ diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 1f936c570..07cb8b2ec 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -81,11 +81,10 @@ public: GENERIC, /**< generic sls detector */ EIGER, /**< eiger */ GOTTHARD, /**< gotthard */ - MOENCH, /**< moench */ JUNGFRAU, /**< jungfrau */ JUNGFRAUCTB, /**< jungfrauCTBversion */ - PROPIX, /**< propix */ - MYTHEN3 /**< mythen 3 */ + MYTHEN3, /**< mythen 3 */ + MOENCH /**< moench */ };