From aef462da32b09791dd0a1367aced8943e584f9fe Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 8 Sep 2017 09:31:26 +0200 Subject: [PATCH] merge error fixed --- .../jctbDetectorServer/gitInfoMoench.h | 12 +- .../jungfrauDetectorServerTest | Bin 115572 -> 118796 bytes .../jctbDetectorServer/server_funcs.c | 222 ++++++++++-------- .../jctbDetectorServer/server_funcs.h | 5 +- .../multiSlsDetector/multiSlsDetector.cpp | 39 +-- .../slsDetector/slsDetector.cpp | 16 +- .../threadFiles/ThreadPool.cpp | 10 +- 7 files changed, 148 insertions(+), 156 deletions(-) diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h index 270653967..004265b6b 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" +#define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" -//#define SVNREV 0x14 +#define SVNREPUUID "a45cc31a576153e251cfe904b3b459c7a2a9abdb" +//#define SVNREV 0x1553 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x14 -#define SVNDATE 0x20140603 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x1553 +#define SVNDATE 0x20170907 // diff --git a/slsDetectorSoftware/jctbDetectorServer/jungfrauDetectorServerTest b/slsDetectorSoftware/jctbDetectorServer/jungfrauDetectorServerTest index d9e295c0d0c3c0d8e67ac3c5c84591e17746638f..ea64c10b9d94873da957e5ac0ab1d501598fbf8c 100755 GIT binary patch delta 48446 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 Ue*1aSM*DOm^yd`v*`MqFAKfCUqyPW_ diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c index 675dc2b4b..1621dcaf1 100755 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c @@ -154,19 +154,100 @@ int decode_function(int file_des) { else printf("size of data received %d\n",n); #endif - + printf("calling function=%d (%s)\n", fnum, getFunctionName((enum detFuncs)fnum)); #ifdef VERBOSE printf( "calling function fnum = %d %x %x %x\n",fnum,(unsigned int)(flist[fnum]), (unsigned int)(flist[F_READ_REGISTER]),(unsigned int)(&read_register)); #endif if (fnum<0 || fnum>255) fnum=255; retval=(*flist[fnum])(file_des); + printf(" function=%d (%s) returned: %d\n", fnum, getFunctionName((enum detFuncs)fnum), retval); if (retval==FAIL) printf( "Error executing the function = %d \n",fnum); return retval; } +const char* getFunctionName(enum detFuncs func) { + switch (func) { + case F_EXEC_COMMAND: return "F_EXEC_COMMAND"; + case F_GET_ERROR: return "F_GET_ERROR"; + case F_GET_DETECTOR_TYPE: return "F_GET_DETECTOR_TYPE"; + case F_SET_NUMBER_OF_MODULES: return "F_SET_NUMBER_OF_MODULES"; + case F_GET_MAX_NUMBER_OF_MODULES: return "F_GET_MAX_NUMBER_OF_MODULES"; + case F_SET_EXTERNAL_SIGNAL_FLAG: return "F_SET_EXTERNAL_SIGNAL_FLAG"; + case F_SET_EXTERNAL_COMMUNICATION_MODE: return "F_SET_EXTERNAL_COMMUNICATION_MODE"; + case F_GET_ID: return "F_GET_ID"; + case F_DIGITAL_TEST: return "F_DIGITAL_TEST"; + case F_ANALOG_TEST: return "F_ANALOG_TEST"; + case F_ENABLE_ANALOG_OUT: return "F_ENABLE_ANALOG_OUT"; + case F_CALIBRATION_PULSE: return "F_CALIBRATION_PULSE"; + case F_SET_DAC: return "F_SET_DAC"; + case F_GET_ADC: return "F_GET_ADC"; + case F_WRITE_REGISTER: return "F_WRITE_REGISTER"; + case F_READ_REGISTER: return "F_READ_REGISTER"; + case F_WRITE_MEMORY: return "F_WRITE_MEMORY"; + case F_READ_MEMORY: return "F_READ_MEMORY"; + case F_SET_CHANNEL: return "F_SET_CHANNEL"; + case F_GET_CHANNEL: return "F_GET_CHANNEL"; + case F_SET_ALL_CHANNELS: return "F_SET_ALL_CHANNELS"; + case F_SET_CHIP: return "F_SET_CHIP"; + case F_GET_CHIP: return "F_GET_CHIP"; + case F_SET_ALL_CHIPS: return "F_SET_ALL_CHIPS"; + case F_SET_MODULE: return "F_SET_MODULE"; + case F_GET_MODULE: return "F_GET_MODULE"; + case F_SET_ALL_MODULES: return "F_SET_ALL_MODULES"; + case F_SET_SETTINGS: return "F_SET_SETTINGS"; + case F_GET_THRESHOLD_ENERGY: return "F_GET_THRESHOLD_ENERGY"; + case F_SET_THRESHOLD_ENERGY: return "F_SET_THRESHOLD_ENERGY"; + case F_START_ACQUISITION: return "F_START_ACQUISITION"; + case F_STOP_ACQUISITION: return "F_STOP_ACQUISITION"; + case F_START_READOUT: return "F_START_READOUT"; + case F_GET_RUN_STATUS: return "F_GET_RUN_STATUS"; + case F_START_AND_READ_ALL: return "F_START_AND_READ_ALL"; + case F_READ_FRAME: return "F_READ_FRAME"; + case F_READ_ALL: return "F_READ_ALL"; + case F_SET_TIMER: return "F_SET_TIMER"; + case F_GET_TIME_LEFT: return "F_GET_TIME_LEFT"; + case F_SET_DYNAMIC_RANGE: return "F_SET_DYNAMIC_RANGE"; + case F_SET_READOUT_FLAGS: return "F_SET_READOUT_FLAGS"; + case F_SET_ROI: return "F_SET_ROI"; + case F_SET_SPEED: return "F_SET_SPEED"; + case F_EXECUTE_TRIMMING: return "F_EXECUTE_TRIMMING"; + case F_EXIT_SERVER: return "F_EXIT_SERVER"; + case F_LOCK_SERVER: return "F_LOCK_SERVER"; + case F_GET_LAST_CLIENT_IP: return "F_GET_LAST_CLIENT_IP"; + case F_SET_PORT: return "F_SET_PORT"; + case F_UPDATE_CLIENT: return "F_UPDATE_CLIENT"; + case F_CONFIGURE_MAC: return "F_CONFIGURE_MAC"; + case F_LOAD_IMAGE: return "F_LOAD_IMAGE"; + case F_SET_MASTER: return "F_SET_MASTER"; + case F_SET_SYNCHRONIZATION_MODE: return "F_SET_SYNCHRONIZATION_MODE"; + case F_READ_COUNTER_BLOCK: return "F_READ_COUNTER_BLOCK"; + case F_RESET_COUNTER_BLOCK: return "F_RESET_COUNTER_BLOCK"; + case F_CALIBRATE_PEDESTAL: return "F_CALIBRATE_PEDESTAL"; + case F_ENABLE_TEN_GIGA: return "F_ENABLE_TEN_GIGA"; + case F_SET_ALL_TRIMBITS: return "F_SET_ALL_TRIMBITS"; + case F_SET_CTB_PATTERN: return "F_SET_CTB_PATTERN"; + case F_WRITE_ADC_REG: return "F_WRITE_ADC_REG"; + case F_SET_COUNTER_BIT: return "F_SET_COUNTER_BIT"; + case F_PULSE_PIXEL: return "F_PULSE_PIXEL"; + case F_PULSE_PIXEL_AND_MOVE: return "F_PULSE_PIXEL_AND_MOVE"; + case F_PULSE_CHIP: return "F_PULSE_CHIP"; + case F_SET_RATE_CORRECT: return "F_SET_RATE_CORRECT"; + case F_GET_RATE_CORRECT: return "F_GET_RATE_CORRECT"; + case F_SET_NETWORK_PARAMETER: return "F_SET_NETWORK_PARAMETER"; + case F_PROGRAM_FPGA: return "F_PROGRAM_FPGA"; + case F_RESET_FPGA: return "F_RESET_FPGA"; + case F_POWER_CHIP: return "F_POWER_CHIP"; + case F_ACTIVATE: return "F_ACTIVATE"; + case F_PREPARE_ACQUISITION: return "F_PREPARE_ACQUISITION"; + case F_CLEANUP_ACQUISITION: return "F_CLEANUP_ACQUISITION"; + default: return "Unknown Function"; + } +} + + int function_table() { int i; for (i=0;i<256;i++){ @@ -218,8 +299,6 @@ int function_table() { flist[F_SET_SYNCHRONIZATION_MODE]=&set_synchronization; flist[F_READ_COUNTER_BLOCK]=&read_counter_block; flist[F_RESET_COUNTER_BLOCK]=&reset_counter_block; - flist[F_START_RECEIVER]=&start_receiver; - flist[F_STOP_RECEIVER]=&stop_receiver; flist[F_CALIBRATE_PEDESTAL]=&calibrate_pedestal; flist[F_SET_CTB_PATTERN]=&set_ctb_pattern; flist[F_WRITE_ADC_REG]=&write_adc_register; @@ -3078,80 +3157,6 @@ int reset_counter_block(int file_des) { - - - - -int start_receiver(int file_des) { - int ret=OK; - int n=0; - strcpy(mess,"Could not start receiver\n"); - - /* execute action if the arguments correctly arrived*/ - //#ifdef MCB_FUNCS - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Detector locked by %s\n", lastClientIP); - ret=FAIL; - } - else - ret = startReceiver(1); - - //#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - - -int stop_receiver(int file_des) { - int ret=OK; - int n=0; - - strcpy(mess,"Could not stop receiver\n"); - - /* execute action if the arguments correctly arrived*/ - //#ifdef MCB_FUNCS - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Detector locked by %s\n", lastClientIP); - ret=FAIL; - } - else - ret=startReceiver(0); - - //#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - int calibrate_pedestal(int file_des){ int ret=OK; @@ -3653,20 +3658,29 @@ int activate(int file_des) { } int prepare_acquisition(int file_des) { + int ret = OK; + int n=0; + strcpy(mess,"prepare acquisition failed\n"); - int retval=-1; - int ret=OK; - int arg=-1; - int n; - - sprintf(mess,"Can't activate detector\n"); - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); + + ret = FAIL; + strcpy(mess,"Not implemented for this detector\n"); + cprintf(RED, "Warning: %s", mess); + /* + //lock + if (ret==OK && differentClients && lockStatus) { ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + cprintf(RED, "Warning: %s", mess); } - - if (ret==OK && differentClients==1) + else { + ret = startReceiver(1); + if (ret == FAIL) + cprintf(RED, "Warning: %s", mess); + } +*/ + + if(ret==OK && differentClients) ret=FORCE_UPDATE; /* send answer */ @@ -3678,20 +3692,30 @@ int prepare_acquisition(int file_des) { } int cleanup_acquisition(int file_des) { + int ret = OK; + int n=0; - int retval=-1; - int ret=OK; - int arg=-1; - int n; - - sprintf(mess,"Can't activate detector\n"); - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); + + //to receive any arguments + while (n > 0) + n = receiveDataOnly(file_des,mess,MAX_STR_LENGTH); + + ret = FAIL; + strcpy(mess,"Not implemented for this detector\n"); + cprintf(RED, "Warning: %s", mess); + /* + if (lockStatus && differentClients){//necessary??? + sprintf(mess,"Detector locked by %s\n", lastClientIP); + cprintf(RED, "Warning: %s", mess); ret=FAIL; } - - if (ret==OK && differentClients==1) + else { + ret=startReceiver(0); + if (ret == FAIL) + cprintf(RED, "Warning: %s", mess); + } + */ + if(ret==OK && differentClients) ret=FORCE_UPDATE; /* send answer */ diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.h b/slsDetectorSoftware/jctbDetectorServer/server_funcs.h index dfa0cd4fd..40da3b75a 100755 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.h +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.h @@ -23,6 +23,7 @@ int sockfd; int function_table(); int decode_function(int); +const char* getFunctionName(enum detFuncs func); int init_detector(int,int); int M_nofunc(int); @@ -85,10 +86,6 @@ int load_image(int); int read_counter_block(int); int reset_counter_block(int); -int start_receiver(int); -int stop_receiver(int); - - int calibrate_pedestal(int); int set_roi(int); diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 546065db0..8c03ed563 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1466,7 +1466,6 @@ int multiSlsDetector::cleanupAcquisition(){ /* change these funcs accepting also ok/fail */ int multiSlsDetector::startAcquisition(){ - if (getDetectorsType() == EIGER) { if (prepareAcquisition() == FAIL) return FAIL; @@ -1780,7 +1779,7 @@ int* multiSlsDetector::startAndReadAll(){ int i=0; if (thisMultiDetector->onlineFlag==ONLINE_FLAG) { - if(getDetectorsType() == EIGER) { + if (getDetectorsType() == EIGER) { if (prepareAcquisition() == FAIL) return NULL; } @@ -3126,37 +3125,11 @@ dacs_t multiSlsDetector::setDAC(dacs_t val, dacIndex idac, int mV, int imod) { { int id=-1, im=-1; if (decodeNMod(imod, id, im)>=0) { - - posmin=id; - posmax=id+1; - } - // cout <(&slsDetector::setDAC,detectors[idet],val, idac, mV, im, iret[idet])); - threadpool->add_task(task); - } - } - // cout << "Start" << endl; - threadpool->startExecuting(); - threadpool->wait_for_tasks_to_complete(); - for(int idet=posmin; idetgetErrorMask()) - setErrorMask(getErrorMask()|(1<setDAC(val, idac, mV, im); + if(detectors[id]->getErrorMask()) + setErrorMask(getErrorMask()|(1<ReceiveDataOnly(&ret,sizeof(ret)); if (ret==FAIL) { controlSocket->ReceiveDataOnly(mess,sizeof(mess)); - std::cout<< "Detector returned activate error: " << mess << std::endl; + std::cout<< "Detector returned error: " << mess << std::endl; setErrorMask((getErrorMask())|(DETECTOR_ACTIVATE)); } else { controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); @@ -1736,7 +1736,7 @@ int slsDetector::getTotalNumberOfChannels() { } thisDetector->nChans=thisDetector->nChan[X]; thisDetector->dataBytes=thisDetector->nChans*thisDetector->nChips*thisDetector->nMods*2*thisDetector->timerValue[SAMPLES_JCTB]; - cout << "Total number of channels is "<< thisDetector->nChans*thisDetector->nChips*thisDetector->nMods << " data bytes is " << thisDetector->dataBytes << endl; + // cout << "Total number of channels is "<< thisDetector->nChans*thisDetector->nChips*thisDetector->nMods << " data bytes is " << thisDetector->dataBytes << endl; } else { #ifdef VERBOSE cout << "det type is "<< thisDetector->myDetectorType << endl; @@ -7922,12 +7922,10 @@ int slsDetector::startReceiver(){ } - //let detector prepare anyway even if receiver didnt work (for those not using the receiver) - if((thisDetector->myDetectorType != JUNGFRAU) ) { - int ret1 = detectorSendToReceiver(true); - if (ret != FAIL) - ret = ret1; - } + // tell detector to send to receiver (if start receiver failed, this is not executed) + if(((thisDetector->myDetectorType == GOTTHARD || thisDetector->myDetectorType == PROPIX) && ret!= FAIL)) + return prepareAcquisition(); // send data to receiver for these detectors + return ret; } @@ -7940,7 +7938,7 @@ int slsDetector::stopReceiver(){ int ret = FAIL; char mess[MAX_STR_LENGTH] = ""; - if(thisDetector->myDetectorType != EIGER && thisDetector->myDetectorType != JUNGFRAU) + if(thisDetector->myDetectorType == GOTTHARD || thisDetector->myDetectorType == PROPIX) cleanupAcquisition(); // reset (send data to receiver) for these detectors, so back to CPU (dont care about ok/fail at this point) if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { diff --git a/slsDetectorSoftware/threadFiles/ThreadPool.cpp b/slsDetectorSoftware/threadFiles/ThreadPool.cpp index b4ffd425a..cb2a00faf 100644 --- a/slsDetectorSoftware/threadFiles/ThreadPool.cpp +++ b/slsDetectorSoftware/threadFiles/ThreadPool.cpp @@ -49,9 +49,9 @@ int ThreadPool::initialize_threadpool(){ m_threads.push_back(tid); while(!thread_started); } - #ifdef VERBOSE +#ifdef VERBOSE cout << m_pool_size << " threads created by the thread pool" << endl; - #endif +#endif return m_pool_size; } @@ -87,11 +87,11 @@ int ThreadPool::destroy_threadpool(){ void* ThreadPool::execute_thread(){ //for debugging seting ithread value - //int ithread = current_thread_number; +// int ithread = current_thread_number; thread_started = true; Task* task = NULL; m_tasks_loaded = false; - //cout << "Starting thread " << pthread_self() << endl; + /*cout << "Starting thread " << pthread_self() << endl;*/ while(true) { // Try to pick a task /*cout << "Locking: " << pthread_self() << endl;*/ @@ -122,7 +122,7 @@ void* ThreadPool::execute_thread(){ //cout<<"***"<run(arg); /*cout << ithread <<" Done executing thread " << pthread_self() << endl;*/