diff --git a/slsDetectorSoftware/eigerDetectorServer/9mhvserial_bf.c b/slsDetectorSoftware/eigerDetectorServer/9mhvserial_bf.c index 4e4ee0ac6..fbedbeefa 100644 --- a/slsDetectorSoftware/eigerDetectorServer/9mhvserial_bf.c +++ b/slsDetectorSoftware/eigerDetectorServer/9mhvserial_bf.c @@ -8,6 +8,7 @@ #include // read, close #include // memset #include // I2C_SLAVE, __u8 reg +#include #define PORTNAME "/dev/ttyBF1" #define GOODBYE 200 @@ -89,37 +90,40 @@ int i2c_write(unsigned int value){ int main(int argc, char* argv[]) { - int fd = open(PORTNAME, O_RDWR | O_NOCTTY); + int fd = open(PORTNAME, O_RDWR | O_NOCTTY | O_SYNC); if(fd < 0){ cprintf(RED,"Warning: Unable to open port %s\n", PORTNAME); return -1; } struct termios serial_conf; - // Get the current options for the port - tcgetattr(fd, &serial_conf); // reset structure memset(&serial_conf,0,sizeof(serial_conf)); // control options serial_conf.c_cflag = B2400 | CS8 | CREAD | CLOCAL; // input options - serial_conf.c_iflag = IGNPAR; + serial_conf.c_iflag = 0;//IGNPAR; (stuck because it was in ignore parity) // output options serial_conf.c_oflag = 0; // line options serial_conf.c_lflag = ICANON; // flush input - tcflush(fd, TCIFLUSH); + if(tcflush(fd, TCIFLUSH) < 0){ + cprintf(RED,"Warning: error form tcflush %d\n", errno); + return 0; + } // set new options for the port, TCSANOW:changes occur immediately without waiting for data to complete - tcsetattr(fd, TCSANOW, &serial_conf); - - + if(tcsetattr(fd, TCSANOW, &serial_conf) < 0){ + cprintf(RED,"Warning: error form tcsetattr %d\n", errno); + return 0; + } int ret = 0; int n = 0; int ival= 0; char buffer[BUFFERSIZE]; + memset(buffer,0,BUFFERSIZE); buffer[BUFFERSIZE-2] = '\0'; buffer[BUFFERSIZE-1] = '\n'; cprintf(GREEN,"Ready...\n"); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index de207f7f3..25bc2b44b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -13,6 +13,7 @@ #include #include #include // POSIX terminal control definitions(CS8, CREAD, CLOCAL..) +#include #include "FebRegisterDefs.h" #include "FebControl.h" @@ -225,31 +226,35 @@ int Feb_Control_Init(int master, int top, int normal, int module_num){ int Feb_Control_OpenSerialCommunication(){ cprintf(BG_BLUE,"opening serial communication of hv\n"); - if(Feb_Control_hv_fd != -1) + //if(Feb_Control_hv_fd != -1) close(Feb_Control_hv_fd); - Feb_Control_hv_fd = open(SPECIAL9M_HIGHVOLTAGE_PORT, O_RDWR | O_NOCTTY); + Feb_Control_hv_fd = open(SPECIAL9M_HIGHVOLTAGE_PORT, O_RDWR | O_NOCTTY | O_SYNC); if(Feb_Control_hv_fd < 0){ cprintf(RED,"Warning: Unable to open port %s to set up high voltage serial communciation to the blackfin\n", SPECIAL9M_HIGHVOLTAGE_PORT); return 0; } struct termios serial_conf; - // Get the current options for the port - tcgetattr(Feb_Control_hv_fd, &serial_conf); // reset structure - memset(&serial_conf,0,sizeof(serial_conf)); + memset (&serial_conf, 0, sizeof(serial_conf)); // control options serial_conf.c_cflag = B2400 | CS8 | CREAD | CLOCAL;//57600 too high // input options - serial_conf.c_iflag = IGNPAR; + serial_conf.c_iflag = 0;//IGNPAR; (stuck because it was in ignore parity) // output options serial_conf.c_oflag = 0; // line options serial_conf.c_lflag = ICANON; // flush input - tcflush(Feb_Control_hv_fd, TCIFLUSH); + if(tcflush(Feb_Control_hv_fd, TCIFLUSH) < 0){ + cprintf(RED,"Warning: error form tcflush %d\n", errno); + return 0; + } // set new options for the port, TCSANOW:changes occur immediately without waiting for data to complete - tcsetattr(Feb_Control_hv_fd, TCSANOW, &serial_conf); + if(tcsetattr(Feb_Control_hv_fd, TCSANOW, &serial_conf) < 0){ + cprintf(RED,"Warning: error form tcsetattr %d\n", errno); + return 0; + } return 1; } @@ -605,6 +610,7 @@ int Feb_Control_SendHighVoltage(int dacvalue){ } char buffer[SPECIAL9M_HIGHVOLTAGE_BUFFERSIZE]; + memset(buffer,0,SPECIAL9M_HIGHVOLTAGE_BUFFERSIZE); buffer[SPECIAL9M_HIGHVOLTAGE_BUFFERSIZE-2]='\0'; buffer[SPECIAL9M_HIGHVOLTAGE_BUFFERSIZE-1]='\n'; int n; diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.1 similarity index 57% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.0 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.1 index d7836a000..fa32ba4bd 100755 Binary files a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.0 and b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.1 differ diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index b403b62b9..8436a9742 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git/eigerDetectorServer Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git -Repsitory UUID: 6d38c0622a2936f70345e7d53aaf1c9e2de4cbd6 -Revision: 285 +Repsitory UUID: a5b59b47430913bb461b50da05b553874b33f39a +Revision: 287 Branch: developer Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 1401 -Last Changed Date: 2017-06-12 18:53:18 +0200 +Last Changed Rev: 1418 +Last Changed Date: 2017-06-22 14:32:24 +0200 diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index 1539e7f79..5ee503281 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git/eigerDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "6d38c0622a2936f70345e7d53aaf1c9e2de4cbd6" -//#define SVNREV 0x1401 +#define SVNREPUUID "a5b59b47430913bb461b50da05b553874b33f39a" +//#define SVNREV 0x1418 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x1401 -#define SVNDATE 0x20170612 +#define SVNREV 0x1418 +#define SVNDATE 0x20170622 // diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index 0629fd22f..d50018da7 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware URL: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git -Repsitory UUID: 49f4f7295411e3dbcf00fd93ca821eb95e13771c -Revision: 1411 +Repsitory UUID: a5b59b47430913bb461b50da05b553874b33f39a +Revision: 1418 Branch: developer Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 1411 -Last Changed Date: 2017-06-14 11:40:35 +0200 +Last Changed Rev: 1418 +Last Changed Date: 2017-06-22 14:32:24 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c index 615427959..8366f8eb4 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c @@ -14,6 +14,7 @@ #include + //for memory mapping u_int64_t CSP0BASE; @@ -171,8 +172,8 @@ int mapCSP0(void) { return FAIL; } #endif - printf("CSPObase is 0x%x \n",CSP0BASE); - printf("CSPOBASE=from %08x to %x\n",CSP0BASE,CSP0BASE+MEM_SIZE); + printf("CSPObase is 0x%llx \n",CSP0BASE); + printf("CSPOBASE=from %llx to %llx\n",CSP0BASE,CSP0BASE+MEM_SIZE); u_int32_t address; address = FIFO_DATA_REG_OFF; @@ -827,7 +828,7 @@ u_int32_t testRAM(void) { int i=0; allocateRAM(); // while(i<100000) { - memcpy(ram_values, values, dataBytes); + memcpy((char*)ram_values, (char*)values, dataBytes); printf ("Testing RAM:\t%d: copied fifo %x to memory %x size %d\n",i++, (unsigned int)(values), (unsigned int)(ram_values), dataBytes); // } return result; @@ -970,7 +971,7 @@ int64_t getActualTime(){ int64_t getMeasurementTime(){ int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG); - int64_t mask=0x8000000000000000; + u_int64_t mask=0x8000000000000000; if (v & mask ) { #ifdef VERBOSE printf("no measurement time left\n"); @@ -1000,7 +1001,7 @@ int loadImage(int index, short int ImageVals[]){ for(i=0;i<6;i++) printf("%d:%d\t",i,ImageVals[i]); #endif - memcpy(ptr,ImageVals ,dataBytes); + memcpy((char*)ptr,(char*)ImageVals ,dataBytes); #ifdef VERBOSE printf("\nLoaded x%08x address with image of index %d\n",(unsigned int)(ptr),index); #endif @@ -1816,7 +1817,7 @@ int allocateRAM() { int prepareADC(){ printf("Preparing ADC\n"); u_int32_t valw,codata,csmask; - int i,j,cdx,ddx,value; + int i,j,cdx,ddx; cdx=0; ddx=1; csmask=0x7c; // 1111100 @@ -2208,7 +2209,7 @@ int readCounterBlock(int startACQ, short int CounterVals[]){ printf("Value of multipurpose reg:%d\n",bus_r(MULTI_PURPOSE_REG)); #endif - memcpy(CounterVals,ptr,dataBytes); + memcpy((char*)CounterVals,(char*)ptr,dataBytes); #ifdef VERBOSE int i; printf("Copied counter memory block with size of %d bytes..\n",dataBytes); @@ -2278,7 +2279,7 @@ int resetCounterBlock(int startACQ){ #endif - memcpy(counterVals,ptr,dataBytes); + memcpy((char*)counterVals,(char*)ptr,dataBytes); #ifdef VERBOSE int i; printf("Copied counter memory block with size of %d bytes..\n",(int)sizeof(counterVals)); @@ -2350,7 +2351,7 @@ int calibratePedestal(int frames){ int a; for (a=0;a<1280; a++){ - unsigned short v = (frame[a] << 8) + (frame[a] >> 8); + //unsigned short v = (frame[a] << 8) + (frame[a] >> 8); // printf("%i: %i %i\n",a, frame[a],v); avg[a] += ((double)frame[a])/(double)frames; //if(frame[a] == 8191) @@ -2377,7 +2378,7 @@ int calibratePedestal(int frames){ - double nf = (double)numberFrames; + //double nf = (double)numberFrames; for(i =0; i < 1280; i++){ adc = i / 256; adcCh = (i - adc * 256) / 32; diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h index 975342e92..9904bc1f7 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h @@ -72,6 +72,7 @@ int getAdcConfigured(); u_int64_t getDetectorNumber(); u_int32_t getFirmwareVersion(); +u_int32_t getFirmwareSVNVersion(); int testFifos(void); u_int32_t testFpga(void); u_int32_t testRAM(void); diff --git a/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv2.0.3 b/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv2.0.3 deleted file mode 100755 index d6d9b460e..000000000 Binary files a/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv2.0.3 and /dev/null differ diff --git a/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.0 b/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.0 new file mode 100755 index 000000000..ca32eb110 Binary files /dev/null and b/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.0 differ diff --git a/slsDetectorSoftware/gotthardDetectorServer/server.c b/slsDetectorSoftware/gotthardDetectorServer/server.c index 2a61aeac6..2c571d748 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/server.c +++ b/slsDetectorSoftware/gotthardDetectorServer/server.c @@ -6,6 +6,7 @@ #include "communication_funcs.h" #include "server_funcs.h" #include +#include extern int sockfd; diff --git a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c index b7ee31dd6..28a9d7e67 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c @@ -2376,7 +2376,6 @@ int set_speed(int file_des) { int set_readout_flags(int file_des) { enum readOutFlags arg; - int n; int ret=FAIL; diff --git a/slsDetectorSoftware/gotthardDetectorServer/trimming_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/trimming_funcs.c index 9a28b9b4a..6f0d726e8 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/trimming_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/trimming_funcs.c @@ -164,8 +164,8 @@ int choose_vthresh_and_vtrim(int countlim, int nsigma, int im) { double vthreshmean, vthreshSTDev; int *thrmi, *thrma; double c; - double b=BVTRIM; - double a=AVTRIM; + //double b=BVTRIM; + //double a=AVTRIM; int *trim; int ich, imod, ichan; int nvalid=0; @@ -236,7 +236,7 @@ int choose_vthresh_and_vtrim(int countlim, int nsigma, int im) { while (runBusy()) { } usleep(500); - fifodata=fifo_read_event(); + fifodata=(int*)fifo_read_event(); scan=decode_data(fifodata); for (imod=modmi; imodmaxNumberOfChannelsPerDetector[X]; int maxChanY = thisMultiDetector->maxNumberOfChannelsPerDetector[Y]; @@ -432,7 +434,9 @@ void multiSlsDetector::updateOffsets(){ for (int i=0; inumberOfDetectors; i++) { if (detectors[i]) { +#ifdef VERBOSE cout<<"offsetX:"<getTotalNumberOfChannels(Y) <<" maxChanY:"<getTotalNumberOfChannels(Y); maxX += detectors[i]->getMaxNumberOfChannels(X); maxY += detectors[i]->getMaxNumberOfChannels(Y); +#ifdef VERBOSE cout<<"incrementing in both direction"<getTotalNumberOfChannels(Y); numY += detectors[i]->getTotalNumberOfChannels(Y); maxY += detectors[i]->getMaxNumberOfChannels(Y); +#ifdef VERBOSE cout<<"incrementing in y direction"<getTotalNumberOfChannels(X); numX += detectors[i]->getTotalNumberOfChannels(X); maxX += detectors[i]->getMaxNumberOfChannels(X); +#ifdef VERBOSE cout<<"incrementing in x direction"<offsetX[i] = offsetX; thisMultiDetector->offsetY[i] = offsetY; +#ifdef VERBOSE cout << "Detector[" << i << "] has offsets (" << thisMultiDetector->offsetX[i] << ", " << thisMultiDetector->offsetY[i] << ")" << endl; - +#endif //offsetY has been reset sometimes and offsetX the first time, but remember the highest values if(numX > thisMultiDetector->numberOfChannel[X]) thisMultiDetector->numberOfChannel[X] = numX; @@ -490,9 +501,10 @@ void multiSlsDetector::updateOffsets(){ thisMultiDetector->maxNumberOfChannel[Y] = maxY; } } - +#ifdef VERBOSE cout << "Number of Channels in X direction:" << thisMultiDetector->numberOfChannel[X] << endl; cout << "Number of Channels in Y direction:" << thisMultiDetector->numberOfChannel[Y] << endl << endl; +#endif } string multiSlsDetector::setHostname(const char* name, int pos){ @@ -560,7 +572,6 @@ string multiSlsDetector::ssetDetectorsType(string name, int pos) { } string multiSlsDetector::getHostname(int pos) { - string s=string(""); #ifdef VERBOSE cout << "returning hostname" << pos << endl; @@ -577,8 +588,8 @@ string multiSlsDetector::getHostname(int pos) { s+=detectors[ip]->getHostname(); s+=string("+"); } - cout << s <(*iret[idet]+200)) ret=-1; + delete iret[idet]; }else ret=-1; if(detectors[idet]->getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<numberOfDetectors; - - if (decodeNMod(imod, id, im)>=0) { - dmi=id; - dma=dma+1; - } + dacs_t ret = -100; + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return -1; + }else{ + int id=-1, im=-1; + int posmin=0, posmax=thisMultiDetector->numberOfDetectors; + if (decodeNMod(imod, id, im)>=0) { + posmin=id; + posmax=id+1; + } - for (int idet=dmi; idetsetDAC(val, idac, mV, im); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<(&slsDetector::setDAC, + detectors[idet],val, idac, mV, im, iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=posmin; idetgetErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; - - if (decodeNMod(imod, id, im)>=0) { - dmi=id; - dma=dma+1; - } - - for (int idet=dmi; idetgetADC(idac, im); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors; + if (decodeNMod(imod, id, im)>=0) { + posmin=id; + posmax=id+1; + } + //return storage values + dacs_t* iret[posmax-posmin]; + for(int idet=posmin; idet(&slsDetector::getADC, + detectors[idet],idac, im, iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=posmin; idetgetErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; idet++) { if (detectors[idet]) { @@ -3348,9 +3392,11 @@ char* multiSlsDetector::getNetworkParameter(networkParameter p) { } } if (s1=="bad") - strcpy(ans,s0.c_str()); + ans=s0; + // strcpy(ans,s0.c_str()); else - strcpy(ans,s1.c_str()); + ans=s1; + // strcpy(ans,s1.c_str()); return ans; } @@ -3359,7 +3405,7 @@ char* multiSlsDetector::getNetworkParameter(networkParameter p) { sets the location of the calibration files \sa sharedSlsDetector */ -char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){ +string multiSlsDetector::setNetworkParameter(networkParameter p, string s){ if (s.find('+')==string::npos) { @@ -3371,7 +3417,7 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){ for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ sret[idet]=new string("error"); - Task* task = new Task(new func2_t (&slsDetector::setNetworkParameter, + Task* task = new Task(new func2_t (&slsDetector::setNetworkParameter, detectors[idet],p,s,sret[idet])); threadpool->add_task(task); } @@ -3380,6 +3426,8 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){ threadpool->wait_for_tasks_to_complete(); for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ + if(sret[idet]!= NULL) + delete sret[idet]; //doing nothing with the return values if(detectors[idet]->getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getReceiver(), portnum); + zmqSocket[i] = new ZmqSocket(detectors[i/numSocketsPerDetector]->getReceiver().c_str(), portnum); if (zmqSocket[i]->IsError()) { cprintf(RED, "Error: Could not create Zmq socket on port %d\n", portnum); createReceivingDataSockets(true); @@ -5244,6 +5297,7 @@ void multiSlsDetector::readFrameFromReceiver(){ slsmaxX = detectors[0]->getTotalNumberOfChannels(X); slsmaxY = detectors[0]->getTotalNumberOfChannels(Y); } + //getting multi values nx = getTotalNumberOfChannels(slsDetectorDefs::X); ny = getTotalNumberOfChannels(slsDetectorDefs::Y); @@ -5273,7 +5327,8 @@ void multiSlsDetector::readFrameFromReceiver(){ int* multiframe=new int[nel](); int nch; - volatile uint64_t dataThreadMask = 0x0; + bool runningList[numSockets]; + int numRunning = 0; //wait for real time acquisition to start bool running = true; @@ -5282,21 +5337,23 @@ void multiSlsDetector::readFrameFromReceiver(){ running = false; for(int i = 0; i < numSockets; ++i) - dataThreadMask|=(1<numberOfDetectors); //reset frame memory + memset(((char*)multiframe),0xFF,slsdatabytes*thisMultiDetector->numberOfDetectors); //reset frame memory //get each frame for(int isocket=0; isocketnumberOfDetectors; idet++) { - if (detectors[idet]) { - ret1=detectors[idet]->enableDataStreamingFromReceiver(enable); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(-1); + Task* task = new Task(new func1_t (&slsDetector::enableDataStreamingFromReceiver, + detectors[idet],enable,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + if(iret[idet] != NULL){ + if (ret==-100) + ret=*iret[idet]; + else if (ret!=*iret[idet]) + ret=-1; + delete iret[idet]; + }else ret=-1; + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<getErrorMask()) setErrorMask(getErrorMask()|(1<receiverUDPPort2=DEFAULT_UDP_PORTNO+1; /** set receiver ip address/hostname */ + memset(thisDetector->receiver_hostname,0,MAX_STR_LENGTH); strcpy(thisDetector->receiver_hostname,"none"); /** set receiver udp ip address */ + memset(thisDetector->receiverUDPIP,0,MAX_STR_LENGTH); strcpy(thisDetector->receiverUDPIP,"none"); /** set receiver udp mac address */ + memset(thisDetector->receiverUDPMAC,0,MAX_STR_LENGTH); strcpy(thisDetector->receiverUDPMAC,"none"); /** set detector mac address */ + memset(thisDetector->detectorMAC,0,MAX_STR_LENGTH); strcpy(thisDetector->detectorMAC,DEFAULT_DET_MAC); /** set detector ip address */ + memset(thisDetector->detectorIP,0,MAX_STR_LENGTH); strcpy(thisDetector->detectorIP,DEFAULT_DET_IP); /** sets onlineFlag to OFFLINE_FLAG */ @@ -5814,7 +5825,7 @@ int slsDetector::exitServer(){ }; -char* slsDetector::setNetworkParameter(networkParameter index, string value) { +string slsDetector::setNetworkParameter(networkParameter index, string value) { int i; switch (index) { @@ -5855,7 +5866,7 @@ char* slsDetector::setNetworkParameter(networkParameter index, string value) { -char* slsDetector::getNetworkParameter(networkParameter index) { +string slsDetector::getNetworkParameter(networkParameter index) { switch (index) { case DETECTOR_MAC: @@ -5890,13 +5901,17 @@ char* slsDetector::getNetworkParameter(networkParameter index) { } -char* slsDetector::setDetectorMAC(string detectorMAC){ +string slsDetector::setDetectorMAC(string detectorMAC){ if(detectorMAC.length()==17){ if((detectorMAC[2]==':')&&(detectorMAC[5]==':')&&(detectorMAC[8]==':')&& (detectorMAC[11]==':')&&(detectorMAC[14]==':')){ strcpy(thisDetector->detectorMAC,detectorMAC.c_str()); if(!strcmp(thisDetector->receiver_hostname,"none")) +#ifdef VERBOSE std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif else if(setUDPConnection()==FAIL) std::cout<< "Warning: UDP connection set up failed" << std::endl; }else{ @@ -5909,12 +5924,12 @@ char* slsDetector::setDetectorMAC(string detectorMAC){ std::cout << "Warning: server MAC Address should be in xx:xx:xx:xx:xx:xx format" << std::endl; } - return thisDetector->detectorMAC; + return string(thisDetector->detectorMAC); }; -char* slsDetector::setDetectorIP(string detectorIP){ +string slsDetector::setDetectorIP(string detectorIP){ struct sockaddr_in sa; //taking function arguments into consideration if(detectorIP.length()){ @@ -5923,7 +5938,11 @@ char* slsDetector::setDetectorIP(string detectorIP){ if(result!=0){ strcpy(thisDetector->detectorIP,detectorIP.c_str()); if(!strcmp(thisDetector->receiver_hostname,"none")) +#ifdef VERBOSE std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif else if(setUDPConnection()==FAIL) std::cout<< "Warning: UDP connection set up failed" << std::endl; }else{ @@ -5932,12 +5951,12 @@ char* slsDetector::setDetectorIP(string detectorIP){ } } } - return thisDetector->detectorIP; + return string(thisDetector->detectorIP); } -char* slsDetector::setReceiver(string receiverIP){ +string slsDetector::setReceiver(string receiverIP){ if(getRunStatus()==RUNNING){ cprintf(RED,"Acquisition already running, Stopping it.\n"); stopAcquisition(); @@ -6003,16 +6022,18 @@ char* slsDetector::setReceiver(string receiverIP){ setUDPConnection(); if(thisDetector->myDetectorType == EIGER) enableTenGigabitEthernet(thisDetector->tenGigaEnable); + //datastreamenable + //fifodepth } } - return thisDetector->receiver_hostname; + return string(thisDetector->receiver_hostname); } -char* slsDetector::setReceiverUDPIP(string udpip){ +string slsDetector::setReceiverUDPIP(string udpip){ struct sockaddr_in sa; //taking function arguments into consideration if(udpip.length()){ @@ -6023,21 +6044,26 @@ char* slsDetector::setReceiverUDPIP(string udpip){ std::cout << "Warning: Receiver UDP IP Address should be VALID and in xxx.xxx.xxx.xxx format" << std::endl; }else{ strcpy(thisDetector->receiverUDPIP,udpip.c_str()); - if(!strcmp(thisDetector->receiver_hostname,"none")) + if(!strcmp(thisDetector->receiver_hostname,"none")) { +#ifdef VERBOSE std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif + } else if(setUDPConnection()==FAIL){ std::cout<< "Warning: UDP connection set up failed" << std::endl; } } } } - return thisDetector->receiverUDPIP; + return string(thisDetector->receiverUDPIP); } -char* slsDetector::setReceiverUDPMAC(string udpmac){ +string slsDetector::setReceiverUDPMAC(string udpmac){ if(udpmac.length()!=17){ setErrorMask((getErrorMask())|(COULDNOT_SET_NETWORK_PARAMETER)); std::cout << "Warning: receiver udp mac address should be in xx:xx:xx:xx:xx:xx format" << std::endl; @@ -6047,7 +6073,11 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){ (udpmac[11]==':')&&(udpmac[14]==':')){ strcpy(thisDetector->receiverUDPMAC,udpmac.c_str()); if(!strcmp(thisDetector->receiver_hostname,"none")) +#ifdef VERBOSE std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif else if(setUDPConnection()==FAIL){ std::cout<< "Warning: UDP connection set up failed" << std::endl; } @@ -6058,7 +6088,7 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){ } - return thisDetector->receiverUDPMAC; + return string(thisDetector->receiverUDPMAC); } @@ -6066,7 +6096,11 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){ int slsDetector::setReceiverUDPPort(int udpport){ thisDetector->receiverUDPPort = udpport; if(!strcmp(thisDetector->receiver_hostname,"none")) - std::cout << "Warning: Receiver hostname not set yet." << endl; +#ifdef VERBOSE + std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif else if(setUDPConnection()==FAIL){ std::cout<< "Warning: UDP connection set up failed" << std::endl; } @@ -6076,7 +6110,11 @@ int slsDetector::setReceiverUDPPort(int udpport){ int slsDetector::setReceiverUDPPort2(int udpport){ thisDetector->receiverUDPPort2 = udpport; if(!strcmp(thisDetector->receiver_hostname,"none")) - std::cout << "Warning: Receiver hostname not set yet." << endl; +#ifdef VERBOSE + std::cout << "Warning: Receiver hostname not set yet." << endl; +#else + ; +#endif else if(setUDPConnection()==FAIL){ std::cout<< "Warning: UDP connection set up failed" << std::endl; } @@ -6084,9 +6122,8 @@ int slsDetector::setReceiverUDPPort2(int udpport){ } -char* slsDetector::setDetectorNetworkParameter(networkParameter index, int delay){ +string slsDetector::setDetectorNetworkParameter(networkParameter index, int delay){ int fnum = F_SET_NETWORK_PARAMETER; - char* cretval = new char[MAX_STR_LENGTH]; int ret = FAIL; int retval = -1; char mess[MAX_STR_LENGTH]=""; @@ -6115,9 +6152,10 @@ char* slsDetector::setDetectorNetworkParameter(networkParameter index, int delay std::cout<< "Speed set to "<< retval << std::endl; #endif - - sprintf(cretval,"%d",retval); - return cretval; + ostringstream ss; + ss << retval; + string s = ss.str(); + return s; } @@ -6130,7 +6168,9 @@ int slsDetector::setUDPConnection(){ //called before set up if(!strcmp(thisDetector->receiver_hostname,"none")){ - std::cout << "Warning: Receiver hostname not set yet." << endl; +#ifdef VERBOSE + std::cout << "Warning: Receiver hostname not set yet." << endl; +#endif return FAIL; } @@ -6188,9 +6228,9 @@ int slsDetector::setUDPConnection(){ } }else ret=FAIL; - +#ifdef VERBOSE printReceiverConfiguration(); - +#endif return ret; } @@ -6610,12 +6650,10 @@ int slsDetector::printReceiverConfiguration(){ std::cout << "Receiver Hostname:\t" << getNetworkParameter(RECEIVER_HOSTNAME) << std::endl; std::cout << "Receiver UDP IP:\t" << getNetworkParameter(RECEIVER_UDP_IP) << std::endl; std::cout << "Receiver UDP MAC:\t" << getNetworkParameter(RECEIVER_UDP_MAC) << std::endl; - - std::cout << "Receiver UDP Port:\t" << getNetworkParameter(RECEIVER_UDP_PORT) << std::endl; - if(thisDetector->myDetectorType == EIGER) - std::cout << "Receiver UDP Port2:\t" << getNetworkParameter(RECEIVER_UDP_PORT2) << std::endl; + if(thisDetector->myDetectorType == EIGER) + std::cout << "Receiver UDP Port2:\t" << getNetworkParameter(RECEIVER_UDP_PORT2) << std::endl; std::cout << std::endl; return OK; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 951a70eb4..eca4863b5 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -444,7 +444,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion { \returns parameter */ - char* setNetworkParameter(networkParameter index, string value); + string setNetworkParameter(networkParameter index, string value); /** gets the network parameters @@ -452,7 +452,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion { \returns parameter */ - char* getNetworkParameter(networkParameter index); + string getNetworkParameter(networkParameter index); /* I/O */ @@ -1704,36 +1704,36 @@ class slsDetector : public slsDetectorUtils, public energyConversion { /** returns the detector MAC address\sa sharedSlsDetector */ - char* getDetectorMAC() {return thisDetector->detectorMAC;}; + string getDetectorMAC() {return string(thisDetector->detectorMAC);}; /** returns the detector IP address\sa sharedSlsDetector */ - char* getDetectorIP() {return thisDetector->detectorIP;}; + string getDetectorIP() {return string(thisDetector->detectorIP);}; /** returns the receiver IP address \sa sharedSlsDetector */ - char* getReceiver() {return thisDetector->receiver_hostname;}; + string getReceiver() {return string(thisDetector->receiver_hostname);}; /** returns the receiver UDP IP address \sa sharedSlsDetector */ - char* getReceiverUDPIP() {return thisDetector->receiverUDPIP;}; + string getReceiverUDPIP() {return string(thisDetector->receiverUDPIP);}; /** returns the receiver UDP MAC address \sa sharedSlsDetector */ - char* getReceiverUDPMAC() {return thisDetector->receiverUDPMAC;}; + string getReceiverUDPMAC() {return string(thisDetector->receiverUDPMAC);}; /** returns the receiver UDP IP address \sa sharedSlsDetector */ - char* getReceiverUDPPort() {char *c= new char[MAX_STR_LENGTH];sprintf(c,"%d",thisDetector->receiverUDPPort); return c;}; + string getReceiverUDPPort() {ostringstream ss; ss << thisDetector->receiverUDPPort; string s = ss.str(); return s;}; /** returns the receiver UDP2 for Eiger IP address \sa sharedSlsDetector */ - char* getReceiverUDPPort2() {char *c= new char[MAX_STR_LENGTH];sprintf(c,"%d",thisDetector->receiverUDPPort2); return c;}; + string getReceiverUDPPort2() {ostringstream ss; ss << thisDetector->receiverUDPPort2; string s = ss.str(); return s;}; /** validates the format of detector MAC address and sets it \sa sharedSlsDetector */ - char* setDetectorMAC(string detectorMAC); + string setDetectorMAC(string detectorMAC); /** validates the format of detector IP address and sets it \sa sharedSlsDetector */ - char* setDetectorIP(string detectorIP); + string setDetectorIP(string detectorIP); /** validates and sets the receiver IP address/hostname \sa sharedSlsDetector */ - char* setReceiver(string receiver); + string setReceiver(string receiver); /** validates the format of receiver udp ip and sets it \sa sharedSlsDetector */ - char* setReceiverUDPIP(string udpip); + string setReceiverUDPIP(string udpip); /** validates the format of receiver udp mac and sets it \sa sharedSlsDetector */ - char* setReceiverUDPMAC(string udpmac); + string setReceiverUDPMAC(string udpmac); /** sets the receiver udp port \sa sharedSlsDetector */ int setReceiverUDPPort(int udpport); /** sets the receiver udp port2 for Eiger \sa sharedSlsDetector */ int setReceiverUDPPort2(int udpport); /** sets the transmission delay for left or right port or for an entire frame*/ - char* setDetectorNetworkParameter(networkParameter index, int delay); + string setDetectorNetworkParameter(networkParameter index, int delay); /** Sets the read receiver frequency if data required from receiver randomly readRxrFrequency=0, diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index f0299ad1c..230666be6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -1319,7 +1319,15 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); - myDet->setReceiverOnline(ONLINE_FLAG); + if (myDet->setReceiverOnline(ONLINE_FLAG) == ONLINE_FLAG) { + //if it was not off + if (myDet->enableDataStreamingFromReceiver(-1) != 0){ + //switch it off, if error + if (myDet->enableDataStreamingFromReceiver(0) != 0) { + return string("could not disable data streaming in receiver\n"); + } + } + } if(myDet->acquire() == FAIL) return string("acquire unsuccessful"); @@ -2930,7 +2938,6 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio myDet->setNetworkParameter(t, args[1]); return myDet->getNetworkParameter(t); - } string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int action) { @@ -4831,12 +4838,23 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); - myDet->setReceiverOnline(ONLINE_FLAG); + int receivers = myDet->setReceiverOnline(ONLINE_FLAG); if(cmd=="receiver"){ if (action==PUT_ACTION) { - if(!strcasecmp(args[1],"start")) + if(!strcasecmp(args[1],"start")) { + //to ensure data streaming enable is the same across client and receiver + if (receivers == ONLINE_FLAG) { + //if it was not off + if (myDet->enableDataStreamingFromReceiver(-1) != 0){ + //switch it off, if error + if (myDet->enableDataStreamingFromReceiver(0) != 0) { + return string("could not disable data streaming in receiver\n"); + } + } + } myDet->startReceiver(); + } else if(!strcasecmp(args[1],"stop")){ //myDet->stopReceiver(); // myDet->startReceiverReadout(); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index 2da38b73d..c47b43980 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -62,18 +62,6 @@ int slsDetectorUtils::acquire(int delflag){ bool receiver = (setReceiverOnline()==ONLINE_FLAG); if(!receiver){ setDetectorIndex(-1); - }else{ - //put receiver read frequency to random if no gui - int ret = setReadReceiverFrequency(0); - if(ret>0 && (dataReady == NULL)){ - ret = setReadReceiverFrequency(1,0); - std::cout << "No Data call back and hence receiver read frequency reset to " << ret <<" (Random)" << std::endl; - } - - //start/stop data streaming threads if threads in client enabled/disabled - ret = enableDataStreamingFromReceiver(-1); - // cout<<"getting datastream:"<* t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func1_t * t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: int, Param: string,int */ - Task(func2_t * t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func2_t * t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: string, Param: string */ - Task(func1_t * t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func1_t * t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: char*, Param: char* */ - Task(func1_t * t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func1_t * t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: detectorSettings, Param: int */ - Task(func1_t * t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func1_t * t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: detectorSettings, Param: detectorSettings,int */ - Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: int, Param: int,int */ - Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: int, Param: int,int,int */ - Task(func3_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0),m10(0),m11(0),m12(0),m13(0){}; + Task(func3_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: int, Param: trimMode,int,int,int */ - Task(func4_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t),m10(0),m11(0),m12(0),m13(0){}; + Task(func4_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t),m10(0),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: int, Param: none */ - Task(func0_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(t),m11(0),m12(0),m13(0){}; + Task(func0_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(t),m11(0),m12(0),m13(0),m14(0),m15(0){}; /* Return: char*, Param: networkParameter,string */ - Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(t),m12(0),m13(0){}; + Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(t),m12(0),m13(0),m14(0),m15(0){}; /* Return: void, Param: none */ - Task(func00_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(t),m13(0){}; + Task(func00_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(t),m13(0),m14(0),m15(0){}; /* Return: int, Param: int,int,detectorSettings */ - Task(func3_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(t){}; + Task(func3_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(t),m14(0),m15(0){}; + /* Return: dacs_t, Param: dacs_t, dacIndex, int, int */ + Task(func4_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(t),m15(0){}; + /* Return: dacs_t, Param: dacIndex, int */ + Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(0),m14(0),m15(t){}; + @@ -150,6 +155,9 @@ public: else if(m11) (*m11)(); else if(m12) (*m12)(); else if(m13) (*m13)(); + else if(m14) (*m14)(); + else if(m15) (*m15)(); + } private: @@ -174,11 +182,16 @@ private: /* Return: int, Param: int */ func0_t * m10; /* Return: char*, Param: networkParameter,string */ - func2_t * m11; + func2_t * m11; /* Return: void, Param: none */ func00_t * m12; /* Return: int, Param: int,int,detectorSettings */ func3_t * m13; + /* Return: dacs_t, Param: dacs_t, dacIndex, int, int */ + func4_t * m14; + /* Return: dacs_t, Param: dacIndex, int */ + func2_t * m15; + };