From 0979d0469302d9a8165471058fbc5a761ba77462 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 4 Oct 2016 07:35:52 +0200 Subject: [PATCH] works for deactivated server and receiver --- slsDetectorSoftware/commonFiles/error_defs.h | 4 +- .../commonFiles/sls_detector_funcs.h | 1 - slsDetectorSoftware/eigerDetectorServer/Beb.c | 115 ++-- slsDetectorSoftware/eigerDetectorServer/Beb.h | 1 - .../eigerDetectorServer/FebControl.c | 590 ++++-------------- .../eigerDetectorServer/FebControl.h | 3 +- ....0.14.0 => eigerDetectorServerv2.1.1.14.0} | Bin 277482 -> 273954 bytes .../slsDetectorFunctionList.c | 4 +- .../slsDetector/slsDetector.cpp | 37 +- 9 files changed, 223 insertions(+), 532 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv2.1.0.14.0 => eigerDetectorServerv2.1.1.14.0} (52%) diff --git a/slsDetectorSoftware/commonFiles/error_defs.h b/slsDetectorSoftware/commonFiles/error_defs.h index 89798faef..fbf80d73e 100644 --- a/slsDetectorSoftware/commonFiles/error_defs.h +++ b/slsDetectorSoftware/commonFiles/error_defs.h @@ -61,6 +61,7 @@ using namespace std; #define DETECTOR_NETWORK_PARAMETER 0x0000000000400000ULL #define RATE_CORRECTION_NOT_32BIT 0x0000000000800000ULL #define RATE_CORRECTION_NO_TAU_PROVIDED 0x0000000001000000ULL +#define RECEIVER_ACTIVATE 0x0000000002000000ULL // 0x00000000FFFFFFFFULL /** @short class returning all error messages for error mask */ @@ -198,7 +199,8 @@ public: if(slsErrorMask&RATE_CORRECTION_NO_TAU_PROVIDED) retval.append("Rate correction Deactivated. No default tau provided in file\n"); - + if(slsErrorMask&RECEIVER_ACTIVATE) + retval.append("Could not activate/deactivate receiver\n"); diff --git a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h index 047f0c10b..c4fa4cb66 100644 --- a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h @@ -103,7 +103,6 @@ enum { F_SET_RATE_CORRECT, /** < set/reset rate correction tau */ F_GET_RATE_CORRECT, /** < get rate correction tau */ - F_ACTIVATE, /** < activate/deactivate readout */ F_SET_NETWORK_PARAMETER /**< set network parameters such as transmission delay, flow control */ /* Always append functions hereafter!!! */ diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index d1bbcb947..bdd47a461 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -46,6 +46,8 @@ short Beb_bit_mode; int BEB_MMAP_SIZE = 0x1000; + int Beb_activated = 1; + void BebInfo_BebInfo(struct BebInfo* bebInfo, unsigned int beb_num){ @@ -172,6 +174,10 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ /* do not work at the moment */ int Beb_SetMasterViaSoftware(){ + + if(!Beb_activated) + return 0; + //mapping new memory u_int32_t* csp0base=0; u_int32_t value = 0, ret = 1; @@ -200,6 +206,10 @@ int Beb_SetMasterViaSoftware(){ /* do not work at the moment */ int Beb_SetSlaveViaSoftware(){ + + if(!Beb_activated) + return 0; + //mapping new memory u_int32_t* csp0base=0; u_int32_t value = 0, ret = 1; @@ -268,11 +278,18 @@ int Beb_Activate(int enable){ if(fd > 0) Beb_close(fd,csp0base); + Beb_activated = ret; + return ret; } int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ + + if(!Beb_activated) + return val; + + //mapping new memory u_int32_t* csp0base=0; u_int32_t valueread = 0; @@ -325,6 +342,10 @@ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ int Beb_ResetToHardwareSettings(){ + + if(!Beb_activated) + return 1; + //mapping new memory u_int32_t* csp0base=0; u_int32_t value = 0, ret = 1; @@ -396,6 +417,10 @@ u_int32_t Beb_GetFirmwareSoftwareAPIVersion(){ } void Beb_ResetFrameNumber(){ + + if(!Beb_activated) + return; + //mapping new memory to read master top module configuration u_int32_t* csp0base=0; //open file pointer @@ -446,7 +471,6 @@ int Beb_InitBebInfos(){//file name at some point bebInfoSize++; - //if(!Beb_ReadSetUpFromFile("/home/root/executables/setup_beb.txt")) return 0; /* //loop through file to fill vector. BebInfo* b = new BebInfo(26); @@ -477,52 +501,6 @@ int Beb_SetBebSrcHeaderInfos(unsigned int beb_number, int ten_gig, char* src_mac } -int Beb_ReadSetUpFromFile(char* file_name){ - char line[100]; - char str[100]; - - int i0,i1; - char mac0[50],mac1[50],ip0[50],ip1[0]; - FILE* fp = fopen(file_name, "r"); - if( fp == NULL ){ - perror("Error while opening the beb setup file.\n"); - return 0; - } - - printf("Setting up beb side of detector:\n"); - while ( fgets (line , 255 , fp) != NULL ){ - if(strlen(line)<=1) - continue; - sscanf (line, "%s", str); - if (str[0]=='#') - continue; - - if(!strcmp(str,"add_beb")){ - if( sscanf (line,"%s %d %d %s %s %s %s",str,&i0,&i1,mac0,ip0,mac1,ip1) < 7){ - printf("Error adding beb from %s.\n",file_name); - exit(0); - } - - printf ("Read: %s %d %d %s %s %s %s\n", str,i0,i1,mac0,ip0,mac1,ip1); - - if(Beb_GetBebInfoIndex(i0)){ - printf("Error adding beb from %s, beb number %d already added.\n",file_name,i0); - exit(0); - } - - struct BebInfo b0; - BebInfo_BebInfo(&b0,i0); - BebInfo_SetSerialAddress(&b0,i1); - BebInfo_SetHeaderInfo(&b0,0,mac0,ip0,42000+i0); - BebInfo_SetHeaderInfo(&b0,1,mac1,ip1,52000+i0); - beb_infos[bebInfoSize] = b0; - bebInfoSize++; - } - } - fclose(fp); - return 1; -} - int Beb_CheckSourceStuffBebInfo(){ @@ -552,6 +530,10 @@ unsigned int Beb_GetBebInfoIndex(unsigned int beb_numb){ int Beb_WriteTo(unsigned int index){ + + if(!Beb_activated) + return 1; + if(index>=bebInfoSize){ printf("WriteTo index error.\n"); return 0; @@ -575,35 +557,15 @@ void Beb_SwapDataFun(int little_endian, unsigned int n, unsigned int *d){ int Beb_SetByteOrder(){ -/* - Beb_send_data_raw[0] = 0x8fff0000; - if(Local_Write(ll_beb,4,Beb_send_data_raw)!=4) return 0; - - while((Local_Read(ll_beb,Beb_recv_buffer_size*4,Beb_recv_data_raw)/4)>0) printf("\t) Cleanning buffer ...\n"); - - if(bebInfoSize<2) return 0; - - Beb_send_ndata = 3; - Beb_send_data[0] = 0x000c0000; - Beb_send_data[1] = 0; - Beb_send_data[2] = 0; - Beb_WriteTo(0); - - //using little endian for data, big endian not fully tested, swap on 16 bit boundary. - Beb_send_ndata = 3; - Beb_send_data[0] = 0x000c0000; - Beb_send_data[1] = 1; - Beb_send_data[2] = 0; - Beb_SwapDataFun(0,2,&(Beb_send_data[1])); - Beb_WriteTo(0); - - printf("\tSetting Byte Order .............. ok\n"); -*/ return 1; } int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ + + if(!Beb_activated) + return 1; + u_int32_t bram_phy_addr; u_int32_t* csp0base=0; /*u_int32_t* bram_ptr = NULL;*/ @@ -809,7 +771,9 @@ int Beb_SendMultiReadRequest(unsigned int beb_number, unsigned int left_right, i cprintf(GREEN, "Beb_send_data[1] Swapped:%X\n",Beb_send_data[1]); #endif - if(!Beb_WriteTo(i)) return 0; + if(Beb_activated){ + if(!Beb_WriteTo(i)) return 0; + } return 1; } @@ -828,6 +792,9 @@ int Beb_SetUpTransferParameters(short the_bit_mode){ int Beb_StopAcquisition() { + if(!Beb_activated) + return 1; + u_int32_t* csp0base=0; volatile u_int32_t valuel,valuer; //open file pointer @@ -854,6 +821,10 @@ int Beb_StopAcquisition() } int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait){ + + if(!Beb_activated) + return 1; + if(dst_number>64) return 0; unsigned int header_size = 4; //4*64 bits diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index b11e11815..535b0e382 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -41,7 +41,6 @@ struct BebInfo{ void Beb_ClearBebInfos(); int Beb_InitBebInfos(); - int Beb_ReadSetUpFromFile(char* file_name); int Beb_CheckSourceStuffBebInfo(); unsigned int Beb_GetBebInfoIndex(unsigned int beb_numb); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index a07d6b2fb..f88a2f990 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -65,6 +65,8 @@ int Feb_control_master = 0; unsigned int Feb_Control_rate_correction_table[1024]; double Feb_Control_rate_meas[16384]; +int Feb_Control_activated = 1; + void Module_Module(struct Module* mod,unsigned int number, unsigned int address_top){ unsigned int i; @@ -152,6 +154,10 @@ int Module_GetBottomDACValue(struct Module* mod,unsigned int i) +void Feb_Control_activate(int activate){ + Feb_Control_activated = activate; +} + int Feb_Control_IsBottomModule(){ if(Module_BottomAddressIsValid(&modules[Feb_Control_current_index])) return 1; @@ -186,40 +192,10 @@ int Feb_Control_Init(int master, int top, int module_num){ Feb_Control_module_number = (module_num & 0xFF); int serial = !top; - - /* - //for Gemmas modules: if master, serial 0, else 1 - int serial = 1; - if(master) - serial = 0; - switch(Feb_Control_module_number){ - case 34: serial = 0; break; //martin half - case 26: serial = 0; break; //leo - - case 31: serial = 0; break; //martin - case 32: serial = 1; break; - case 24: serial = 2; break; - case 25: serial = 3; break; - - case 15: serial = 0; break; //dhanya - case 16: serial = 1; break; - case 30: serial = 2; break; - case 38: serial = 3; break; - - case 49: serial = 0; break; // Gemma - case 48: serial = 1; break; // Gemma - }*/ printf("serial: %d\n",serial); Feb_Control_current_index = 1; - /*for(i=1;i0) - sprintf(str,"%s",str); /*sprintf(str,"mod%d::%s",module_num,str);*/ - if(!Feb_Control_SetDAC(str,f0,1)) - cprintf(RED,"Error in string: %s",str); - - } - } - fclose(fp); - printf("Done reading set up file\n"); - return 1; -} int Feb_Control_CheckSetup(int master){ @@ -675,12 +466,14 @@ int Feb_Control_SendIDelays(unsigned int dst_num, int chip_lr, unsigned int chan printf(", tracks 0x%x to: %d, %d clks and %d units.\n",channels,(((15-delay_data_valid_nclks)<<6)|ndelay_units),delay_data_valid_nclks,ndelay_units); - if(!Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG2, 1<<31 | delay_data_valid_nclks<<16 | ndelay_units,0,0) || //the 1<<31 time enables the setting of the data valid delays - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG3,set_left_delay_channels,0,0) || - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG4,set_right_delay_channels,0,0) || - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG_CTRL,CHIP_DATA_OUT_DELAY_SET,1,1)){ - cprintf(RED,"Warning: could not SetChipDataInputDelays(...).\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG2, 1<<31 | delay_data_valid_nclks<<16 | ndelay_units,0,0) || //the 1<<31 time enables the setting of the data valid delays + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG3,set_left_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG4,set_right_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG_CTRL,CHIP_DATA_OUT_DELAY_SET,1,1)){ + cprintf(RED,"Warning: could not SetChipDataInputDelays(...).\n"); + return 0; + } } return 1; @@ -738,9 +531,11 @@ int Feb_Control_SendHighVoltage(unsigned int dst_num,float* value){ } unsigned int r = 0x20000000 | (b&0xff); - if(!Feb_Interface_WriteRegister(dst_num,0,r,0,0)){ - cprintf(RED,"Warning: trouble setting high voltage for dst_num %d.\n",dst_num); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(dst_num,0,r,0,0)){ + cprintf(RED,"Warning: trouble setting high voltage for dst_num %d.\n",dst_num); + return 0; + } } *value = Feb_Control_DACToVoltage(b,nsteps,vmin,vmax); @@ -752,43 +547,15 @@ int Feb_Control_SendHighVoltage(unsigned int dst_num,float* value){ int Feb_Control_DecodeDACString(char* dac_str, unsigned int* module_index, int* top, int* bottom, unsigned int* dac_ch){ char* local_s = dac_str; - //char temp[50]; *module_index = Feb_Control_current_index; - - /* - char* p1 = strstr(local_s,"mod");//size_t p1 = local_s.find("mod"); - char* p2 = strstr(local_s,"::");//size_t p2 =local_s.find("::"); - if(p1!=NULL&&p2!=NULL&&(p1+3)15){ cprintf(RED,"Warning invalid ch for SetDAC.\n"); return 0; @@ -918,9 +650,11 @@ int Feb_Control_SendDACValue(unsigned int dst_num, unsigned int ch, unsigned int unsigned int r = dac_ic<<30 | 3<<16 | dac_ch<<12 | *value; //3 write and power up - if(!Feb_Interface_WriteRegister(dst_num,0,r,1,0)){ - cprintf(RED,"Warning: trouble setting dac %d voltage.\n",ch); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(dst_num,0,r,1,0)){ + cprintf(RED,"Warning: trouble setting dac %d voltage.\n",ch); + return 0; + } } float voltage=Feb_Control_DACToVoltage(*value,4096,0,2048); @@ -929,14 +663,7 @@ int Feb_Control_SendDACValue(unsigned int dst_num, unsigned int ch, unsigned int return 1; } -/* -float GetDAC(string s){ - static unsigned int n; - if(!GetDACNumber(s,n)) return 0; - return dac[n]; -} - */ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ printf("Setting Trimbits\n"); @@ -959,12 +686,15 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ for(l_r=0;l_r<2;l_r++){ // l_r loop //printf("\nl_r:%d\t\t",l_r); unsigned int disable_chip_mask = l_r ? DAQ_CS_BAR_LEFT : DAQ_CS_BAR_RIGHT; - if(!(Feb_Interface_WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8,0,0) - &&Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) - &&Feb_Control_StartDAQOnlyNWaitForFinish(5000))){ - printf("Could not select chips\n"); - return 0; + if(Feb_Control_activated){ + if(!(Feb_Interface_WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8,0,0) + &&Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) + &&Feb_Control_StartDAQOnlyNWaitForFinish(5000))){ + printf("Could not select chips\n"); + return 0; + } } + int row_set; for(row_set=0;row_set<16;row_set++){ //16 rows at a time //printf("row_set:%d\t\t",row_set); @@ -1020,22 +750,26 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ } //end row loop if(Module_TopAddressIsValid(&modules[1])){ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| - //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| - // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - printf(" some errror!\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| + //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| + // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf(" some errror!\n"); + return 0; + } } }else{ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| - //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| - // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - printf(" some errror!\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| + //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| + // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf(" some errror!\n"); + return 0; + } } } @@ -1077,14 +811,20 @@ return Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[ } int Feb_Control_SetCommandRegister(unsigned int cmd){ - return Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CHIP_CMDS,cmd,0,0); + if(Feb_Control_activated) + return Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CHIP_CMDS,cmd,0,0); + else + return 1; } int Feb_Control_GetDAQStatusRegister(unsigned int dst_address, unsigned int* ret_status){ - if(!Feb_Interface_ReadRegister(dst_address,DAQ_REG_STATUS,ret_status)){ - cprintf(RED,"Error: reading status register.\n"); - return 0; + //if deactivated, should be handled earlier and should not get into this function + if(Feb_Control_activated){ + if(!Feb_Interface_ReadRegister(dst_address,DAQ_REG_STATUS,ret_status)){ + cprintf(RED,"Error: reading status register.\n"); + return 0; + } } *ret_status = (0x02FF0000 & *ret_status) >> 16; @@ -1093,11 +833,12 @@ int Feb_Control_GetDAQStatusRegister(unsigned int dst_address, unsigned int* ret int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us){ - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)||!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_START,0,0)){ - cprintf(RED,"Warning: could not start.\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)||!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_START,0,0)){ + cprintf(RED,"Warning: could not start.\n"); + return 0; + } } - return Feb_Control_WaitForFinishedFlag(sleep_time_us); } @@ -1105,6 +846,10 @@ int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us){ int Feb_Control_AcquisitionInProgress(){ unsigned int status_reg_r=0,status_reg_l=0; + //deactivated should return end of acquisition + if(!Feb_Control_activated) + return 0; + int ind = Feb_Control_current_index; if(Module_BottomAddressIsValid(&modules[ind])){ @@ -1132,6 +877,10 @@ int Feb_Control_AcquisitionInProgress(){ int Feb_Control_AcquisitionStartedBit(){ unsigned int status_reg_r=0,status_reg_l=0; + //deactivated should return acquisition started/ready + if(!Feb_Control_activated) + return 1; + int ind = Feb_Control_current_index; if(Module_BottomAddressIsValid(&modules[ind])){ @@ -1172,6 +921,11 @@ int Feb_Control_WaitForFinishedFlag(int sleep_time_us){ int Feb_Control_WaitForStartedFlag(int sleep_time_us, int prev_flag){ + + //deactivated dont wait (otherwise give a toggle value back) + if(!Feb_Control_activated) + return 1; + int value = prev_flag; while(value == prev_flag){ usleep(sleep_time_us); @@ -1186,10 +940,13 @@ int Feb_Control_WaitForStartedFlag(int sleep_time_us, int prev_flag){ } -int Feb_Control_Reset(){printf("Reset daq\n"); - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_RESET,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)){ - cprintf(RED,"Warning: Could not reset daq, no response.\n"); - return 0; +int Feb_Control_Reset(){ + printf("Reset daq\n"); + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_RESET,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)){ + cprintf(RED,"Warning: Could not reset daq, no response.\n"); + return 0; + } } return Feb_Control_WaitForFinishedFlag(5000); @@ -1199,10 +956,12 @@ int Feb_Control_Reset(){printf("Reset daq\n"); int Feb_Control_SetStaticBits(){ - //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_STATIC_BITS,Feb_Control_staticBits,0,0) || !Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(RED,"Warning: Could not set static bits\n"); - return 0; + if(Feb_Control_activated){ + //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_STATIC_BITS,Feb_Control_staticBits,0,0) || !Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(RED,"Warning: Could not set static bits\n"); + return 0; + } } return 1; @@ -1447,13 +1206,7 @@ void Feb_Control_PrintAcquisitionSetup(){ } int Feb_Control_SendBitModeToBebServer(){ - /* - static int first_pass = 1; - static char buffer[1024]; - if(first_pass&&!Feb_Control_SetupSendToSocket("localhost",43212)) return 0; - else first_pass=0; - */ unsigned int just_bit_mode = (DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8) & Feb_Control_staticBits; unsigned int bit_mode = 16; //default if(just_bit_mode == DAQ_STATIC_BIT_M4) bit_mode = 4; @@ -1466,60 +1219,9 @@ int Feb_Control_SendBitModeToBebServer(){ return 0; } - /* - bzero(buffer,1024); - sprintf(buffer,"setbitmode %d",bit_mode); - - if(Feb_Control_WriteNRead(buffer,strlen(buffer),1024)<1||strncmp(buffer,"0",1)){ - cprintf(RED,"Error: sending bit mode ...\n"); - return 0; - } - */ return 1; } -/* -int Feb_Control_SetupSendToSocket(const char* ip_address_hostname, unsigned short int port){ - - struct hostent *server; - if((server = gethostbyname(ip_address_hostname)) == NULL){ //or look into getaddrinfo(3) - fprintf(stderr,"ERROR, no such host\n"); - return 0; - } - - //struct sockaddr_in serv_addr; - bzero((char *) &Feb_Control_serv_addr, sizeof(Feb_Control_serv_addr)); - Feb_Control_serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr,(char *)&Feb_Control_serv_addr.sin_addr.s_addr,server->h_length); - Feb_Control_serv_addr.sin_port = htons(port); - - return 1; -} - -int Feb_Control_WriteNRead(char* message, int length, int max_length){ - - int sockfd = socket(AF_INET, SOCK_STREAM, 0); - if(sockfd <0){ - fprintf(stderr,"ERROR opening socket\n"); - return 0; - } - - if(connect(sockfd,(struct sockaddr *) &Feb_Control_serv_addr,sizeof(Feb_Control_serv_addr)) < 0){ - fprintf(stderr,"ERROR connecting\n"); - return 0; - } - - int n = write(sockfd,message,length); - if(n<0) cprintf(RED,"Error writing to socket"); - - length = read(sockfd,message,max_length); - if(length<0) cprintf(RED,"Error reading to socket"); - - close(sockfd); - - return length; -} - */ int Feb_Control_PrepareForAcquisition(){//return 1; static unsigned int reg_nums[20]; @@ -1567,30 +1269,13 @@ int Feb_Control_PrepareForAcquisition(){//return 1; reg_nums[5]=DAQ_REG_SUBFRAME_EXPOSURES; reg_vals[5]= Feb_Control_subframe_exposure_time_in_10nsec; //(1 means 10ns, 100 means 1000ns) // if(!Feb_Interface_WriteRegisters((Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1])),20,reg_nums,reg_vals,0,0)){ - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),6,reg_nums,reg_vals,0,0)){ - printf("Trouble starting acquisition....\n");; - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),6,reg_nums,reg_vals,0,0)){ + printf("Trouble starting acquisition....\n");; + return 0; + } } - -/* - reg_nums[0]=DAQ_REG_NEXPOSURES; - reg_vals[0]=Feb_Control_nimages; - reg_nums[1]=DAQ_REG_EXPOSURE_TIMER; - reg_vals[1]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_time_in_sec); - reg_nums[2]=DAQ_REG_EXPOSURE_REPEAT_TIMER; - reg_vals[2]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_period_in_sec); - reg_nums[3]=DAQ_REG_CHIP_CMDS; - reg_vals[3]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); - reg_nums[4]=DAQ_REG_SUBFRAME_EXPOSURES; - reg_vals[4]= Feb_Control_subframe_exposure_time_in_10nsec; //(1 means 10ns, 100 means 1000ns) - // if(!Feb_Interface_WriteRegisters((Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1])),20,reg_nums,reg_vals,0,0)){ - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),5,reg_nums,reg_vals,0,0)){ - printf("Trouble starting acquisition....\n");; - return 0; - } -*/ - return 1; } @@ -1611,22 +1296,13 @@ int Feb_Control_StartAcquisition(){ reg_nums[14]=DAQ_REG_CTRL; reg_vals[14]=ACQ_CTRL_START; - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),15,reg_nums,reg_vals,0,0)){ - cprintf(RED,"Trouble starting acquisition....\n");; - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),15,reg_nums,reg_vals,0,0)){ + cprintf(RED,"Trouble starting acquisition....\n");; + return 0; + } } -/* - reg_nums[0]=DAQ_REG_CTRL; - reg_vals[0]=0; - reg_nums[1]=DAQ_REG_CTRL; - reg_vals[1]=ACQ_CTRL_START; - - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),2,reg_nums,reg_vals,0,0)){ - printf("Trouble starting acquisition....\n");; - return 0; - } -*/ return 1; } @@ -1705,11 +1381,13 @@ int Feb_Control_PulsePixelNMove(int npulses, int inc_x_pos, int inc_y_pos){ c |= (inc_x_pos) ? DAQ_CLK_MAIN_CLK_TO_SELECT_NEXT_PIXEL : 0; c |= (inc_y_pos) ? DAQ_CLK_ROW_CLK_TO_SELECT_NEXT_ROW : 0; - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_SEND_N_TESTPULSES,npulses,0,0) || - !Feb_Control_SetCommandRegister(c) || - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(RED,"Warning: could not PulsePixelNMove(...).\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_SEND_N_TESTPULSES,npulses,0,0) || + !Feb_Control_SetCommandRegister(c) || + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(RED,"Warning: could not PulsePixelNMove(...).\n"); + return 0; + } } return 1; @@ -1717,11 +1395,13 @@ int Feb_Control_PulsePixelNMove(int npulses, int inc_x_pos, int inc_y_pos){ /**new*/ int Feb_Control_Shift32InSerialIn(unsigned int value_to_shift_in){ - if(!Feb_Control_SetCommandRegister(DAQ_SERIALIN_SHIFT_IN_32) || - !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_SHIFT_IN_32,value_to_shift_in,0,0) || - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(RED,"Warning: could not shift in 32.\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Control_SetCommandRegister(DAQ_SERIALIN_SHIFT_IN_32) || + !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_SHIFT_IN_32,value_to_shift_in,0,0) || + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(RED,"Warning: could not shift in 32.\n"); + return 0; + } } return 1; } @@ -1741,11 +1421,13 @@ int Feb_Control_ClockRowClock(unsigned int ntimes){ ntimes=1023; } - if(!Feb_Control_SetCommandRegister(DAQ_CLK_ROW_CLK_NTIMES) || - !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CLK_ROW_CLK_NTIMES,ntimes,0,0) || - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(RED,"Warning: could not clock row clock.\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Control_SetCommandRegister(DAQ_CLK_ROW_CLK_NTIMES) || + !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CLK_ROW_CLK_NTIMES,ntimes,0,0) || + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(RED,"Warning: could not clock row clock.\n"); + return 0; + } } return 1; @@ -1919,18 +1601,22 @@ int Feb_Control_SetRateCorrectionTable(unsigned int *table){ printf("daq reset completely\n"); if(Module_TopAddressIsValid(&modules[1])){ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(BG_RED,"Error in Top Writing to Memory ::Feb_Control_SetRateCorrectionTable\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(BG_RED,"Error in Top Writing to Memory ::Feb_Control_SetRateCorrectionTable\n"); + return 0; + } } }else{ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| - !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - cprintf(BG_RED,"Error in Bottom Writing to Memory ::Feb_Control_SetRateCorrectionTable\n"); - return 0; + if(Feb_Control_activated){ + if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),1,0,1024,Feb_Control_rate_correction_table)|| + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + cprintf(BG_RED,"Error in Bottom Writing to Memory ::Feb_Control_SetRateCorrectionTable\n"); + return 0; + } } } return 1; diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.h b/slsDetectorSoftware/eigerDetectorServer/FebControl.h index cb87558ad..453cdce14 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.h @@ -64,6 +64,7 @@ int Module_GetBottomDACValue(struct Module* mod,unsigned int i); +void Feb_Control_activate(int activate); int Feb_Control_IsBottomModule(); int Feb_Control_GetModuleNumber(); @@ -112,8 +113,6 @@ int Feb_Control_GetModuleNumber(); void Feb_Control_FebControl(); int Feb_Control_Init(int master, int top, int module_num); - int Feb_Control_ReadSetUpFileToAddModules(char* file_name); - int Feb_Control_ReadSetUpFile(unsigned int module_num, char* file_name); int Feb_Control_CheckSetup(); unsigned int Feb_Control_GetNModules(); diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.1.14.0 similarity index 52% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.0 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.1.14.0 index 2060a26d530118f4b6ffac9926d498b52b516cda..622ab39cb3b2896557c0fde24804be886085210b 100755 GIT binary patch delta 56629 zcmc${4}4U`)jxdaCWIu0uwV#b31JB#h7fQQfhL$hpnwbEPryI{`LkfafI))|7Hn`g z5-`x9fy?fI1`I7KDAZ8#0WD~-&_W9uTJ*sdG*)P#LK_qmEU>@tnLBs)?k4#3eSYuf zeZ%K+@0^)A=ggUN&Ybyk@BZUk%g@hPYP(03D~d8u2|Ja)K4sp}4f_=pm!h;&82(rA zKhl;k{ZbUQK~Xc#0p4EbtH?ixd~vNmJUIIK42!B?S~z>eH3((HaAo33!bN{}{pSBa z3Qs+7CE~gl*L}F?FCEuCxKb&Bzy7!e;_8mehO0NO0k|@78Gi|Qh{ctKD_l`JD^@(D z;i5kau6~?tQ}5OKspDJ%CjaY(d%Ot{iRYfUI^ybut23@-TzBI#{^Ib^7gu{+F}OP5 z>Vu2^QuLeoe+GW^KSHJ`la-5lQpb+xts&{(grpCLq?>}%%%v5E4Rbvg0(~STJuEn_ z><&(|nZar0t&sFbA?d#cr&U(1S;CW4#iuog_tYkaTQZA+ODK~pYTix2!aE6}u@{2# z*%GZbyl1CuOW0!V z_DRGhZCU%*wdBa0j<757uf6!6X=Rb!wKb8+onAtHONWIEAvw}-wo^M0+0*r=gm%Tf z9iRtIrC@z*r%V%%D$;~Sv4nZ>e-vpko=Ma_M7u3voG^FM;T)Q+8qX*jW<0}M!{xJ! zr+}`J0dtHno(IA@jOScMi8P)^g0S&C4t-=iLsMdm=b2Cr=Ng!;@w`z{;*94yMd@NZZ-@CC&$|?*tMR;7Q4);j1Bzlbo)5zf z8PCT-Kha2>f}b;<&%lQm&*$K?jOR=6DaP|v_!Z;%CVZNF-V_dBVm!yd2O7_D@QKEA zB3v6iyU>4|Qs9h?j0`wW<9Q%_p7ERuXK6f-ghMr+$H9>r&qZ*;#`8=#YvZ{XPTY7d zg@ZMo%N1qBeMX`J9$Gwa?B#2zh*V#xWlEfONQrcWtvTX4s=ne*@?F2ztti8{66|MJ z913gaP_x=;4R>WF_p60)5Nz-zBnIJ+;a?WrWz_f*n~l<=Vy zVPVSv@1Y&)uX4k`;HY!R*dlJO6musPO?w*Q8wn-=8 z9GdG0tM24b!s`5abxNTlZ1oYX&SFg;N{=s-cq*bG5{&ygKdav+nCmxRFRKU_=;vz9 zmI3OEM>R{Qv2>f+X)xV3c1m@vo(0k|Kp&%b0NX@uyRUI*i6d;)n%1~iZ3)J`dXy~h zM)~QYyyzZSk)QtRUdYQci`@<0k@tW1}$9m7Sd%h4I5kaGSW_&jzijmbfHY!kY0s!zD%bfy%cG?Oxuy3kF-su zvyq-+0l*>w`2dX4itbKMdNCXNVR3}5yhxo>p$sUiP}s&i=ugfeLsriRbKv zFQ)0rSTTkW*qtv5d$YS=gp4ZQBIO_jgdY>|9N3Js&vJ-|>>(U5#eiuIwb@!za`Kzc zCAuRc^3kzBUZutLnW6qTN-OL0jQT_mUK_5a@s?gJ@y+bi7s4Wj$2h_sJEWcNJ2+x^ z1|Cs79gl^09HSM|V;LShXf^5c)WvJGmh@-T(k)tfzu9W(%i5`a&!~^Stxd~Vq(1tV zb~xi1by;-WKLOXD;b-)P7q2yq;;`5O5kg&h{gVMV2z+l6JpZ zg=Y>({$ah$ZKvn{@RFWha4p*j`eBbO)`~LIlSf)4`0bElJ7uw6T771E>c}c8mhDzz z9bpR=h7_Hy7hP~tYss7tJxW0~TydR4b7T#U9!2Iwo;g9Q&Ps|NrK_IuVw%>F1$`~k zEMN83KFsN%CEPbdt+#9C_hoe+WrGwgfxatV!}EKx6fOT;q;~GU&hhnjvX&ynGK8F0 zp3S1<^v$W@&0Sb`moI;dPYwq4c0Fr|Q&(N#i@=Hjzdu95CC3JQXrYAf)mb;-`85*0 zKNvpTCgBHi6&JPDsNiUp8I8de#^g)*@nCpCm4r71!^azVNOw*6CmM{#_~9-gj7g^@ zA}M@>p$B(KxG?Gfqf?tCT=tGpetL|AQ)pl!{LnZFCueGc&$;T78TR0e`3B*E!SIqZ zvV3+h{LyI=E-WIz=;BQh?g%dbxWSNXTyVw`15r^h{E4Fy(X?QAd4q&IgW)R-Q5T!w zET`|vQdyot8A!q3hCjDM!reh|SKnH< z%%}>==)2w^TpbMGU?^8jFnr^6iKjLg?r})?#$fp7dV;&w_fs|nXVlqcg}PvP{Y(k3 z4~B17Bz$`?e1}nfM=<<#gV9}py9{ka7c>~=bU3)e-jR~P(O~#KL!_sI;qMrDP6xve zNVsZJQkMmU-%Zg8sQJMa-rFPzp9zK^IxXSN!SKUr5`Hci{yUq5w*bvx{DTY$zZnc~D%Rml35K64k?`htV z<_(A#)s)>c?51WPYS%X9Jr_Mn_9ghX5B;sF85@Qzh!`E|2%FwtD;<{P@;7Frz#bIK zP48qxDTw7#O!=zaJqq#cv@1qFIJQ>~(_=dl$of=InJABeInO3y#socXnwAI7GyJhr zKhez58G0df8D=@6qG;x{o%C#oMk{=xw>GD?tM*uaB6Vj?ei9A%yYlC$o^s7H98q+F zHgfpd(8i8)giW2IjU0jC!QYvX!hq3;5~u9+vqF@_e8=AjLL{<(%Qno4pEs(ZZ9b>0 zL8HnML?qtp4)YD)q6`Gz=$g?R36|%C03NM#1j4^52yv8XM_5sgi8>~(qjzbwKa5w4 zHfuY6h$ydIJM+WjtkI2aBPkLg7Kn&^Lq~wLlV%?opEdgQ9jYynyovlkwFi%B^>dOm z??@rry(33hjac!+%hU^%n3z=P)9wn*GHMFuSwIhKYbhunP&fqtSEC6P_V{ ziYGo1{eW&-6u~x6d@lZh;yfE!gs$xF_h@G57_U_o4v6==1as5NwWEbecWn9tCpS!j zs-$QG=~k|lOcHc2O|7v8INi`AM8$58!BL4 z56&UB8y^JQJN#|b#dweQQc=I4x^RdOO!=YSWB&P`zsKsQ44L=9QD|X`*#fA+?$6*O z#d67rk6<~vo#_tH@U8h~%OFQ+7Mfs8c!&`mEqCew;@(};Rr}YAU9}gcI;aKbralqv zPyzz@kyXv#tu>E=0DcrKfY+YTQl|~HI?}+Y#muQbRm(@mPZOeTp3qf$Z<>&gZ91?! z{qkw@4AcHHJy*$a1k|UkG5>~*#7`m_967PofycpInF@dwt#T54{B9&gziQ< zpNbwMJqUWT#<|FZdc)jb2Bk_g+q~q_V}b?{s2FCzgO`Iq0+yyShi_rDES69dWf>w{ z-`IMYYD}Y6J?|d_#*Cw)0lo$vlvP5_7Q^tMOs)Rm)KHHl6*0%3pipNbw^4Z?7u5W&a=vrUcG$Y#4fa)0YqgQd)cU_TCv zayQWOdodI(3$%Ld_13K(dtKY~$c(Hp<0xivzocLp%sxE0x5sYE3wBskX1A77GB|1M zDOoKBG6(g0KO&x`2heTu`4XY#EhUSh3-Lb!VFD7HB=of;@`*zn%<5cTY|bI}{)FTv9*^RJ!D8HFceKX-QUSoj&J9 z9kI#`77CvbHh1cYWVKH>t+^Zw&F`wsuI``>`*C-*PY-S8kB6FjsSPfAUu?z2j z1LetT?@VBw5IwHU-?o1r~Xx70c$d5O%$YW^!HL$FSfc{b#I5|Wpr}0AFnIYgv70Ot!dhZCEv;f|=TMHj z@6l>25UZ2I3vC;?B01gqHs)Gz)7Cw>W3k=36ZaI{x8aV3P3vadVRqK_ntR0z)w)GH zv%)&WS}A)JEA3kk2KT6SzRZh5p6L024q3-&_NT3?wZArwZk@D}r$hRFj`r=-=+5B& z|EUWgbEiW?{udpt#NsJj5_~AHm`i`*9yQLFV;6!z2sSk&G%ro)T_S%4Yi}vSL zVwQ1z)w^bqG_GDdWK0GjZfzBv789H-!J(8J&O*3%W6~z$*RI;T&kE#co()2-%jE}? zTge2YS;wVPpKnTcA16l^^g!&fHsqz-+(b&S%Et{E|7LO!@pl;RS|b#cY^Ai|k8 zJ>T4F5-GxDiykJ&uKHfFK3~#R+pt!&x?!z1dV=4awZfmxzO$zoai^#{<}7?3Jn@qs zVFe>nlBQv?RIU+FqQS^ice}VjU6H+G}b%foe>zy3> z$BvL}l)=W~LivgZUx2c82*H~j_d&rc4ONq~bp z#?n#f$>)=zCk8xu%kxw9W)IMwtQErFSi2~CVuqiP<@dST$n~9vOr+kA3xt#rpBTM~ zbrs#+IwxY4qJ1}igrTcexmLSgwBXG8wKM$l;!Q+AYCTPtsAH-KmSgkpw7HRn6Tedj zN08nbJ40@*aYL%L&XHXob^#leVFkX`w@f758?>n|4y~YKJy-)BdT&JZ9!{6~!Geo{3ITRu9VD0WpWuC}r@BEmg6phV4qd zEwsYtP?oH(SlC^di@vbv(VumFAi-D{t)l%fqnU2mbQ|1n0>KGQKya&ugG`~BEXtEB z%moZPa}!G)VPQuMe3ktqIi2+s?b1eT>YZ8>Mw0TkhC82Q12v~-LG;9cEjD?~GbOET z=cC#i-k=!L@>*HG)Hz|k!k>mIetpc}%4!Vma4y5>=wbnr?oQjt2j9_3l*`&VJ}-LW zjy#)OdMMn~Ell+t)Jiu!;hK03ir;#Ut@=K3D%h#l!*5zh5PpIDi(pXo^#ubEU!ldJ z`h>5}v=ye@0oOXe5y_E1+tmN?X#C;hA$_N}j42#!+fUWhIf zW+ogf&5(L*37R1VEduCTX7tIKEy;K46ZJc+j%`hvFe$S2Du9HUk7g)^bw=Nr0>FVm z0ib&0Wv%9o1g&oC>gd8IqqvswQn&8v_0L6Lg<3S=n)9U*B4~7xL%lYtZPZt{_*KG)lSn0KQu)_kkX$xw-x@vHZw_*E!=~NbKESN2g=0&! zx|eUKPM(=3?atJ9X~BJWWueyiN_>b~kG|4hXK=FEna8v6Y!3BGe>93_#pK1r&}PJ2 z(yYh}!ZasuLfPqB{;MOv^qW<$PG!-PcL+4FVy)gaMa$V4q|9YIz2+8JUVAz)DF5fW zeff&k{MumaWC};ya4eUx0QUNbA(O9Gx)h7-p~O5iF1rLhH1fe^E9Rq@QqfD0zC*n{ z=#IVd=huanUVnXc{DT7>>ZLB!>`dE()BJ73#7?`gD>?bWa)pDqzorhcNq zTIi5rCEv4Xs9rpwg};GSN}HDP#(=B`ZvwB~Kd7n~XoZIwF5s9acy_VmAqfPp9(c=xm8E$WQEV^hQHAAl66ljm^2^z`@$3Eh+iJHx z&`}ejvS38#F3U3CnaY%glsTrI{#EjTw)*(|A*yCqil))9h-Yb|=P~VmbE~yT#86@l zPd#T2S}^x|^GO=?rtQU1&lD|t|C7;0q?NjGTb_4lb#JxuC%ONH7&=88_h0E|I}KU? zp%L-(4qE+3{th&zc=Pt@YhwG>`bpONNfwTst95%j$RD&uZ2dG(>NLafZKKMDPWxBh zvfi-~`l5HTsD0J%JQZDZz)yuN()sJ4hP9@m{^eSL{Q=rj2ZWt(I`Bkv(P=*>%yJxp zzMLq)vI90Hw|pebj&kUuJ4D{-ta@s%kLsxX{E)!bc<7brDb#dbrOMua&a5?|{=-n>+Alwh35@yw@%VJ~*32fIAl7k9=@y<{V6&6M~c6+n@X>{L+N$e z-alcDE_hC@9`0|%tR|nKyH#`SNt>wiP6@HPPdyp^qihfnR=we))z%*sK~5IPNt|&B z$m#uU0msl)`|zWCDRli9waWt>e{59`trJ_Yzxp`HVuT_JRSglea1KVyqLuvjo#!}* z`fJ<&dvex~HW7PhUP4}eTVZ(P+ilwSu+t*wC_nvN^pB1k&BbQ@!`kDYn6-Ap+!8J3 z&t{#{3XeYC2ca?BMb*BS{nLNGGy4Y*YH@#g%=)8CV7-lr$-zNd-CyougS5kc89HHF zBHEaMf;Mv-v0fM%2xJfJ1Upc#P!%{pXN!Zoyzq?hQ*~#ac1>$^sK2INQ%jLz&(f#f zzaB%2>a-0Y8i?h)^=Y0ey^L+JEYl~b3|2F6puAcyQy(wOu%I$Jo|+(9F7=(WL4|Zg zwc^ba^_@dOc{+lP!Hm2k-e~YMtJmKYQf7G@c7Vh zvs|9jX!>pki-C$vtTZ}%y*Y2?Npw?q!yMK{TmD6Vm**5|3gNUXo+fG4Xb;HtNy9 zRB_Men)7dyXYc8gV*>;Ein4wfv#g)Pq%>v>46x9!nT|?gb|!XsBny}uHhc~iaNl!M zlvQR-%NfSRwv#wbsP0*!S^jQ~-!sd|CSM`5hHLqMw{YAJ;w=&BiFI%pU2d1JcHoFY~u1I)dl?^LP{>m~IaIe5z`(Ef%@k}LHJ<=@vh zW0x+^H!e~S8D)hP-AiVqHcWzW9moj0tDwGd%|IS#+8du}J1!(Azp)to;-GBEelMzy z3~uHx-+J@Xg>P8&jQzR`-aSRT^p64Rj8j_Tm#ONmTiQt6w8L8Imr1F+c7xAc9oIv& zCh)P_MOE zleE#7^P^vzMBLhyhibIi%VX7t>a{bMN2?F*)l&Y6+fl8QZfCT;bZgOW{_`={L;2vg z+Thmx9;4~|3*=r+<=eK0SK)G?%=&9NB~RFDlHbqh>l^74qDx^!4&kPSp?Nz*l zJj^3RLz3$mkh(*e)K`dUJ17})-OknP0j(YASn_H>aa)?Une5 z_0t{7`c>Y=ESFpQu}H1uO0>FuuIBt|9Jge!7?IZcBRyI5+`{b#{JjX4$Ulo`?X;M$ ztw}HUB|mh3Bk2JPcPL(Z88Wi=C31|sn>O<6bamwvt?cX6^qGmGZSTQteg^mHLre*6 za;V$agWGYCa~iZI0~kKi8o!PoGP6WTO5Hw}tiYjcU%2u!g<_zD3gvcLMGqQ;lw9Ot z@Y+t^9_BW42da0`ELYb3@CxIzj!#%e;OK>#eFcJu0Jz_pRr=5?Og-kOB*qK*_9I*gUxd>p( zx5@F_K9S;vYR(cJ=uo#E(OSOis%hWcuX^fGIV*OS9)sx>>-35=_0(OXGRv+vxBiBx zIOp33)LDhvj&GCF>zBh%p^+;2V^j+#BH?)|4e}|Yx zGLvFvP)ocyx$~?|SP|-D;&F%OzBwUw)?T3sFJbUfU!1R+0WIYvdYdd)R3xE}t?GFR0XVx3;h_gKPPMji=^R)`%er-QcXc53XbQ$~vr z)NRs^--f=_X_sz~P&ebmwQn`WEBk%_rOuA=l(7jaukKDvEKZ{?kt+GNMv_Om7KF(<|7DNakk>=?lALTui{5RCwk6NnKy~Igt5`;<|3XQ z&Qb?^bl-+J97pVq`{x3BI(x+rvF2~unaOS@cXFT|-x$u)qdmv-Z19r{f$L~EOB&%h zF4`<{QC?+V&%hPVf{$198}spszH+NqpJ%ixo6{F~(%P{_>CQazgXFcP+%P&2T_Z4@ z)8bG!d=401_P>(t%68se?NA;TVS=n69mAaKdZRb=6@pisVqisO^H#U$97LTCQO4-<$X3gKM_XG7&M{iP9lYXE2B?ZMGW?PY&HdqoucSTs*rJlD`6 zG-G=uU(ud*Nc9lU=0WT@2~nT3iRF~=OdAB=(4Gw);u%O~i7>tZAnM7fxlRN_sF9Da z2xNi0-~pP`f< zbSR5+C_COZs+E;1Uyb6CQ9$av#AimqC4BudAy=O}FOt@;m$a@@`Zh2Q;gNQQcE;K3I#yc=ZVZ2~k=vY%1W~Vbf zh(6j6)Uo`kiwO(4#c(t^fwT^5A-hmpOrY$}xrZI<&(M|gJp5b?+v=Ko6={4ILMenc z)BEI97jAhTIA41M@NB?U6FeXA&jF_h0;BdkXP{MUm*_z!E0=k-ro1VE7C$`P&+Fa# z4uqN61|Ap7vRw0afzWu#0GXM=*eSq`ebNvH)*O*hFZp2PJ*)&6ShEu_Go8JZmh*rH z=!w|m!Ci&Tr`*er#IixEXD`1Q%Z9{0Ec_h$6BCH)TgKbl7K&2CdA@}uY5(kI<$F7_ z_z@51N}8B9R?}g4J;+v^-TaN#C*;ISjO?KOCSLYa>}>a=emeHynGW??vF&+ZLF&tlZEFl*Ao=a9EXwALxgnP)dgd0HoyJVU_8P?`H0ixUfcA1@|OjL{f#?VApD z^+~{|V3fG2<0>u%-YzD*QRM8L%IB-l6EOtOREq2Q_D*bU^y<(3>FXj*OAvTPuXq<9 z*O|Q#t)G(;=@z72tK?aP;^P5HRc#YEY{h2~C>HtyMYT$_Ez?$f0r34M_!3$ED&XQ^ zqdx1dl4}9;6~L=Z<>{S*Wbkgu=23C1OX_^lExLtPb)m)~GZK>ke_&f#;5o`8yRhV> z&F4*Bcbp~*ATCs=G74p?;@IE`FO4^qStbPFoS*1WS3)Hf8*pR3#jQ;_AM}w~Ob~cs|5W`=8hGm<0BY8as$*AXMl7N?`Y^ z9Zv2;Vr;vl1vc5`u%qP%VH}Z^#uOJ*iU*H~Y2*PzwwRtD;0Kb}W1Sb|n`#L~)Z9tA znlmn(SM-E26y@>yo-97q(*@x9P7#V9}icTF6A+47+8Z~V|aEN!!l$(-<8G| z(LJFrNwk33_7$YCo-C;N6W3a!c;Z;wD14Jx%DxX%*}cIi%I3C4Q8p+P#XfMMhO3@) zJh4A}f!NyLpFKx+#{iw(0|WH*xO-Uv|JPcExBF&to66$2`|r$Z_1b#aL~s~xSGFS{ z!uNWh1O>kD7W3oxvazZ+B`_`K`F0lT@{-Yr*=A+G!1MZkUW(HVxc?dOI1}9ejDhfa z03LWod126bHYI#+-w64-zUQhaOT+qoQJ$-TzIsFihyK7`*RU2UoMZEURi@dS$;M9h zib-ey>=n~)_R(9utji}q7 zPs>4Axj;9-f0GQnv|ia~V&ZJR~5t<+b= ziy+2e3%+yQt~(c=ZgTM168Y8dK`zP%kk32&J!P*MxakD0ME*$l_f%L<6->x0b;-}Y z!kcaMEvROGdl76a~`+hxl68n*S?e z(?e>U!GDkMr*TEZ_^x37dkFqVnEAhQs5SprcK;8!*YWy1hTS*xM;=RdJ(8gF-m*=! z%fB%-hu$v~X96j})s^cJTIxhQuZYP~ps#1&kU09c!H?MRlI_os~=V z?RIZIhWVLSc*|H_@pAK-wX>%=f&Gej4eqmzS6t z(*WKq1-^d@^OTLL6GCx6(xT^G?o_b?N-4@+o-Z4SI+ri={NXG<{vnFVjTuC9o(%&) z-|co@Ivkzw&?=FK!2v4^;8T7!P#-Lsu{uqP16-H(n0TrY^y^DEF&`29>Mb+U0COiWZuCS=3EJQirU&TP=ut2$%L_cM_+WBm6q z!Ox9g_wqOHXWe-111!Q?ve%)`7;hM10JYb~8y;XuSpj1q_l>^jK}y}0>(%rB$-EAh zJj8QOcCpy;Z>u;|LHGe|9x(Fo*=|}O`@=P!ud(if@`X?uOAgvUw#V?kXtzLd&qV8&&d7g6LgZooi|yRp8C>9e&sMZaM#^#CVAPN3(Fkpk8bdm zF$j?1o-)QVYlNp6FNgc|1>z4?^m_%ML4(MJzWnr9Z0j_RWzoSImnmZaQ0VDT(= zp%DjRqBUhc<y&lE3a^C^Ou-P4J;CY?OmG7B!~y;icnP`rv?|3VeU-Yt$LOmCd}f zaQ-%*H%(;e{F`ws%^E-eRZGM)+E(EEdoM%^r+Dpn;mM59Hjw|f%l@&`J)Wh*+qEw9 z_s#w?yCy+2i%g3c53Z+94&wd1aPzu)hc(=p_wze--k+Rs2j2gNFZP9{-I@3Ei~W4v zk@vrK6J^pvBRSuG1fb=5XDk{S=#0soxO-wq_kYocHx-7$))VuS+mzS29^5$z>zr-L z@{5apo^@H)1ZWqYCs_t5*k7-;LAt*#x8zAIt!)}NzK8yiAo`sbH3jHT#FrBl#rq6Q zU`r~?;=L!c$EQB3FAAy?uAwKzcT_Q0)652|S&wD}Do^+bik3pXEghQ-Pak!d%Iu+f znYKrZ`Gv_)wh897AtPjNWC_{98Qn z$E+WD?gV~U5wo#Q%w4F#)Q_js%x`$4?d9?y}zuN(d8ZTKRqFYM4hhu<8ygHV9auTlGSY*o0R092`XXwUWeOh zJiDXa#W{177+x5Md4JtB#7m_#%}UfaLNHO*Q8L;#a5=V+EufYAiPIt_VrVgbM*wkn zB=CjPp*C!$87e!H6p6-XIwmA1&8YjbKa>hM{!%xQLASy2JLqFqM5Cw@dPURizgs$5_`JMO$*cT`$3Ttu zO%`VmEU>^iiof{~>m9_;$A`SLLj34|_vbM)vBZKfwE=nRpC|F!SqPQ==`MbMb#!LP z%>Uypt`Mk-=%JlUmJqGftD9@kE zy1Inp2=3p-XC!+FS%!&2U(m=3uqD2M=)OxgjBK|>q2o-sjiZzT-`A_Kl1OCK``nMw z>EcA#vOg4b?G*mPMr$W4kHIQvokVFqQL#3uw>YQZTKNT;K%(pAFPFJLQxaUi`x+j6 z*j$`X?82kwv7E;q8;SIMYE^Adn>`zs+hxlp*}yRgZzvlfN2153>5>>Kf1Dx5dWV~K4^t&|_1hvk_UcN>^6_GRdYYND>0VE7h1ZBR$w zFkmovef)Di*62`&(x;JOHj#TJRqX0TIv_UvyX5#(V761808ado6Y4uiyx{nB#r_89N9JbLsZ-?fPK%rq~bl!$6#mU+i&$N0@fkSZT!VnIqUY`p=41g;7R zI3I`O`9V9qL2O)WR+Z!b0jnoz5`i5UJDE7S>TG^+5$llU6+<#96XfupFu#YG@7Z6h zbIEFwcl9k3@3Qxa_rZO+<5AXg(q1xkyP|(1o1Rgf-P;V_uDZQd|N3S#w~cuHOoIPW)%2*orn@?C4{a9kB{qTQ64Zy z@}{5C3A_F*+TpKE>k*Nt)E<>!FVFdH5Sk&?{qdQ)y5Co+YX{EA!KU=_oIkagO%VLV z`canS%*PGh_+w_BQ9H^c0lRS)MDodU>+{7g80d##YP%U_O{B#{55GnsEe-EjfL$C0 z&*Axxu?a(UnkX-&&-Mm-#!I_zk)#3enhqiDplyf4dA#8pf~*{U0>k)_L?y1 zp=(5q ziGI8Ju5vaZ!i%L^UpMbkHag2|aYo5$iCE3`(r<21@GggRucaue{gVbew6};?CA!mj zUtlRx+GoqNk^hZ(|Cyz%^H6>BQFo&oZ?3Q@*&v{r5txwU8fNv z<@_fW+)>_EIM4v$VlaYP;6wF6pGHQxG3w{7uh=&dn}^1xso1e|wT;wGCIqCm{}oc; zERM1%rbZ-yQ5rtsBbS(>{Jve%1kkx;zeDXiSE`M4T1$-i6s7}dm%UHpWKF)xB1S+8 z_{|C$v!MwzYS@5Wj1F?^l=|v`DIdql^)cDV=jVRHCUo{(FNzAI_wuDwJlDB%_|Ub~oOi{V@}P;D|36Ag3; zCi2a2iL~CKrrrV*nf%OJh){7h6P+1`-JnFr)cd4ixW>V>kx5d0Bn>uIMhCu!Nx8V`?OmYo@cYj zqX9Jd!ilSI`8)auY)RfPu)svIGiN#UOj8EFg zlQOzW>B7r?%HkJMIkj~;=abuki*$FKiEbk3{@z4a$LV|$6R{NH(MEYDIT-oq?%tP$ zp5Y)*WFf48O2V|CydLP!-g&YQvk6P(Fq{|Cr70{v)AkeHasYGRBn*QkZ9>T|BSC>z~HXVe)jK$x@NDZD6VV zF?2LAcrJVohEg4a=Yo!**EWFx$xBbO1*zW1@2R>`5|7lY+K%bOBL#6Sw)qO$^|0)6k4gnXHZ)oEmo8Igq8=F?Si>}?-p?#&)=R>#%cIv(;RA24_>xXe`f36zR5F$oFTo_=U!a*eK6p2rSXm;g=@*EqsorP-? z?>AtN_l3iN$-%=9qjF)goTy9B2-DJt6xA{3NxX9KAa)|CknYXm5YPO2H*Z;ubCdpR zf@4{&okSI*qxK3n6z4)Mu^6KZ?D`g(#e@)-HAJISiN#{b0w*x98_)3BaVz?UiTYFy z>BNw9f{~Vu>xJX&`te)IW`ra_o(qkGqiuec#n1CMNx=1x%|B@*tY4Sq*g0Pa%F)>Cnxaqln&q|uMhH;_}DOwJK`yG=0ZFI1b~>idwI?oTJ(K+!hDBqBh5NI;jEW#I5^L$>`K9Ms_sq>Eu%vPJh5-xE zsE|&)Qzufk+-yiFA4n>Vl7TVf>?#9hs-3NKXxYL`pJx+Cp>HaR38V*{7KBz|KEIpN z<85RA0{koR=zsA`U+4eNH~6mSm^EwhD1%&pg)=W3FcS++Itv{S>eljMP9k^Jvcy3! znH7pd?MR0&^$rAu;ILLJ+qGWOd}MTwiP>su1Iek7~o>XD;#pv*U33o zV2ve~SSPPW?4Cw?Gi{0X<{dXMd=JB+2aK^Bm__vzQlg+s8*gbX*~8r%;2t)f<@Fn| z9k*nuOmE|7Ho&av4(XffDH<~C)={G8BxsWlc$5A;fe_7?6{0cexiaAt)@ADgm zoT$Gs8W-}~I`9sA*d^|T{Ae9}xEE~ZX{SRC>qesu_P34js+`m|Q+c|MkK4i~yHtz? zN^F7e17~LooFH`mG*m%*a{vGW&w6T~v3je|Qe~%@6!*qwt$IMI)4_ zFX)Y9^u;XHQ!WTP`d6|HAKmmH(4ItsBV5`1;#SrvLNL+S`x1-4<69V7W}vOkPYl5a z_&qVmfCc=#OZXXws*LCEm!Ri}*Bf7AqsP(;UcMsugk!~$Aq~jrd{+(1(pq$esSUI& z>29NJi-Y+-;)V5Wvas`dSTOYPcs-jJ?Y89EFkfGYboMru6UJ^&=jGejQ>wd!w`_yr z;U4pIye8)^S<_b!rZ@M~KlF^9!L6tqmeUtyM*f^#3}ZJv-2MyJ1rIB@;}@)NcXo3U zLW)S7-lYQ=fmsi`nX|9v7wkEf?4}H{CP6#*{!xQ{M*~?{rp;Z!%RXj^n%Q^DC8U;W zfO@2<^emaTUFMaV@`lSiIvHb7YBJ^blKIDF-65vDb~0~Jv&`HY$h>h;W?nTRK4r>3 zh94l#;PzMO{hK0`#Uf6)4ClSMl-3Q&n@gLl{?}vJ4H4W>o+zXD`#4kiage8f?gE_< zp>mGRnCp0FhR~Xp`%r+`v=Czbg@OkY%Qg|q4k2boUPPvCA1P&+U8zjuyWVBi3D+wf zO3Xo%V#mPqFbBKAL^)?=q=Q{Q0b>-uxJ-&mLhE5uP7^-6vM<9pIf6};N^#yL-3u6k zEtJ#WX7M!wXS9QT>p>k_5fc-$J^j26-uNn8G&^;;cwY?V$y?#HE*T5)=n&3;eG49y z8sIag{8bJmRYZ*#&}q&UW_MPW0zV!5qk2_T4+BvQV54~T4#e{J^w(NyGRTD*Zm?Jo z^KYCg=Xm%|SXiGvyzq4vpH#U?C;rWR5U0i@2yfzMPKVOxEO+iil+x!0uic3+B2@0x z%U;9jzXptQzuv{}Qd6Vw``QElXNm}&Cce(PCRH{|B(%;LLNH|yFMACHQ%*>N`pkx1 zJz*l4a+bHeh9NNdyl6r6Gif@)t9^Lc>v&tf_jnwf1Go^aHuUCK(3jClJSa>(BSgSwQn||=Sn=UQ=dKLnn86495@F{`CnXlCD=S0^ZTz0D{Q56hQu@k`l9_4;YZ+y{FpYtjUYU)f zyj=H53_3~2c>WtKK5FH0f}t#*^9JiZw&xPaF9y8Rf_4r03u>?a9k!m^NKToyDhp60 z7`_B?BvkNUyHQ@C7xGbh_T|UlK_@{FZ>R=+oKbZ!*~%gxJ7s4N%D*FN+RM zu96-4&-2KmoeqIC8!AaBroi{h+}*(9qpON^zW=$Kv?EnbI!GV+xS#)S59_KXp5)DY zpx;%(NF3~+^a}hyATx{$%OgG3@IsV{uG*y|x_p+G?ZKeZr*l;;3aqCBG&vB5>kPtoLNV zKQkkZ!61WQdXrfvhmA4evLPSFw`vD9N;j@AqeSG$zN`eVkvYSZ3x=}cm70^pe=zLw zWZMsM=eBNP9`R6u$?6`22*M_Uu z(Adw?vjPNwPz(gJ*Y&}zel?A{VfMz=&g|w1Hhih@A|LlQHj9JmiRBJik2)gE-n!lv zqcafk(dZm@U*qc1J2QJ}I+gdYFS85u>4!kW?hYC)FN?!^+=;gYNwebKVG9PE8T@iH ztuO)s7IiTy>Tj-*rIAYEfQS!Et%EMuiZq*S~*bti%_Ia41Rq ztfUyxD;G*S`cXnXU$G1kr$bFG9v5`NP3eAq-@pUxIJ?t0O>Vf^`!0r)&V7Zyi(Y++ zw8W*-(BmuNL_ZnQue>aO9`Re1$iP{9>7(g8V4tlUh;zBz|4w zi}3~Y(;Te%B=R$4ehRlA!rMyEZkP2lkWZ6_2)lD1)Gh3Ucvc|RvO}2Ydkgu-Lu_`m zmrn1{^g;E8t8v`&K3m}WOq`UVRUOoUX*_!v&d*{vL*fm&vtF^!9wv`0Mhx~@C!X>fwkY{i zae&Rl*ri~`K3&BdegnJzv>QME8#ZCW*<<85@VlX5@|-&{))LIv*|(%Uni#95VKRiV zGnaYEVZ6@%?4Q<{a*h_~@b$bhUPm;UwnZ2;>MP(0)?LB!%n=I#(_1%)w5tm)%2~2}Trx zU&f4VM_mhiBn1g)fVaOa;C$gR)?-Lym&##?JP^?pEBRtJji@eBcaiOH$UJPjM;BJb^M8-I5@b~S zdn^j#zT@{~f)0NC_iRyg^*AzF2m5&8zWhJnODFNwWzvS>WBx?nWKAgWefc)Ge1Nyh zs%uPnOZmVL*nsrvy?HhSAs4HU(mN*zoNkc}NK2rN39=2RfomzR`G7sztxp@-Hy!Mc zSGeUvwl>98ynvr^&o3;@S&DJB0mmOdhKJp~{t@Xo$=8EKFbT{zfHLW=- zabNx)*$XUUO^Jhj(2FWBSHL35<9*}s&5r=czDJ~*jM_4huo*&m>plpogX2(SgRoaJg@kOeW0$56l*-; zfQ;fzAG6;3p8c5pAWVHRjyHaSg|-*t^f?xzp@ZiAa<32hEuSEs#y#cFSnz%^j@Aj_ z92^00BG36}^aJiyxT6ek-G-Ekg325~eU#aE4tJ&=na^X+;PtY#MsNuc9$CV(&#=MC zM{@K)^6*Zw58;`%_-aTvcIVn$QLgq38=bs1U+OK!y~9VOFQ5~nq$CjJS|`7L28U1% zuLB-@puGK1;A$_zD<_W9vEPW_1(EQMfX4|M%GwfLkq%GcMQ2%Zv_IXKKB+UrQDEyc%R<9PmcHie(~3=0TeeB|geXpXncD1=zGil;PV z(FOOSX0|}}Vm;wId}mXZ(c{btX-XoVE%1HwHnc3x!5Wtko*WzA=hP+a=9bSf>kg`0 zB7Y#<2*xY;$j@2oWUmmu>{pCLd0rXY}VxsrNRE5GB zP$Iny%XF^YC^!H|mFeDMKJ%|M1u5nge}zH5*Nzu{ft@vPH922$yu<5!gq!SVyQrtr z5W|`7Gv7UA>MDcAeiMyyNuyk+@$Pg%!|HX1(ttf5cd&OW$u|y-_ZHK{w(=esJm?ZE z=cm44Bc`rxaM=?3d$^{apZ<~}0SZXkgm!890M+a$T zA)IKt+k30gi+BY`xg=mZKK%zRw}^$*uuSD=)PwTFnXpHC7S7sRO;M6ibJ|%U9!3Y~ zRo-)lvOMZM>k{kLZB1{Kn`fLS6%U3@JI~UG9O#3N9SEZ6*q@Q`4Mv31A)@XGuRCbw z#D0CHz;|;J);P1ZnH!>AdK>Yx_hMDs&{S$SU_v{Ax}g*<@+DZV#om|tFtZ3 z2gw9-!k0?_#(H)BS&MYuk(e991m3y98~(=PT{SStUsGTNhwVT6OvvH>@N6J}T^_Pwc28Q|yjI!xqIm@DyBBk!1=*X~_`uVWx{J2H3E!HHr04IfyQ zXM5fkI>kkU%S7Y#2IE_7e`o1KYYwA2E!Y{fnvrIr9Fz)EU~`?;?j`L4o0sa<`&24* zV897hcHVG-Twf_~zJSG6?=qfnk)>N}t{d`ou>I2oT@pV0src42FS|(LqML8L$VSAk z!)Uml6iYI@E)D4}{L)31YV|Iw)ICE!JcCUing8nsgl55acyoElKQNQ^I(hA79DKa} z50(%c%r&pQh422r-4uR_%`x09w^=g(?UyWxnWoO8+X3}S+`Rvy*tnRFV>oQH{$H#| z=XDNn?qBtFuss)f2{w4HyqA5&7Ia>>F_`Et5Ah3MkyL_+&gMV=nk5kB178#620>Zf zy^Tj+Wn0tNUC5!R70Lkb8~k&XY!}VMq3r7rk?+prO;_13TThx~O4o&?_v&eX=(CB^a)8_v9F4r* zsf{Q=A97r}%5M(|M;bzi)r1h!#~{7#{$OISz1#+|jV9(cnrT@uRM(m^%lNWy+1N$i zI_Y!FF;ATy^X#OB5p&E_PkkPUd3Ju@1_Rv_@Qqa?FlsIPXQ|gD|j^U9=?HHZ0|-9 zYPo{^*~Z{d>+B#s)OzJI)i;G&HBe>aG@{TXq7mX7_lJaD8_feyf$!6$LazMmcdXM; zuh0moZZ%>c2#&{ULgF#(Rw-$E?DYyh8c4C%OwmSNiE4skFaJt}(JAOGT5~aVoGv)P z5tDA`2mZ~nQoX_?Bu@a+`fgD3AKcZv|u1-Dm^X-DrdEMjLcD+Mv79hJA3OUZ!qc z$Iq$ibE)1<5aw-Yd5V}5)`>+b1h&tKWfnM{6bIYdiEj#15y=Eo)4gPa^pXu6UUJO7 zrQzzayVRKMefbtOww>BOV_#tx_0M;!Ul;Am=&L>!rCz+SuP#e{|8Di;H0~U&j#fVy z#dnNWSF0NiaQg%5yyO#yuyPfL1&dd*dnuL)ZpCH^?~-6q2G}iX?hcEZH*??K2h^#| z^`}VRtv~GuzW#VxPyg{K?#tx!_24q0b^erq{A^rl|3kT8TCP^aTOkgv@PAjnI+QtA z2w+o4`hP>*@jW=Eh2(V$A@IiwvOvi`{J^y}(i)fOyB&8m`0A43yWM3ZKQ&o>#g$O& zyWMT3?{-3!ey8XEudakT-vhT3c7XU^T#dMn<2sG&9Ih5zH^EFKt~gwHn#GX#Snk?RDbW`y3Cc5glS@ms`}?6}YN!)$E&DqW)eT@^Z27_A3>>+pjkJZtpxC zxON-}Je%Rh^Q+VLIUiLoh3~6aqT1Abxl7eeJ@y^Y)W5cOJyq@VEwA(Wp2Ea$xkJA{ zbt#ahJdqEW$X|v$nLarb?5~x3~m%5LyB_i}Cq>G81@AvKPCb(zn%DQ6QNYJ9%URG{AHdkKiun?B!; z6h#R`Yj@P*p6&DPEW~}B&-Ypk?oOZY^>ALaMNN+XX_T6*;0ji}U$bqA~bbz5WLrEDbOcP`(M4>+@ALB7IZBz#}V!fOhbPt!k?JoQ0p> zs*Xb0h3eBEl{?`3KW$wPd{xD<-raL^^FNvVPe?*8B!mzm1PKr@ zXcS(HLN!=wqvk1StU)7043=l{-Pp#OCsZQ>CunLTQjLn5+W2nNRHBU5si_^|P7vtiU; zyVYD8!{cYQak|~J)s$QMpC|0tM@+7z|J7knb_yqp?1gS&qkZEeW~{;2ZtM8zZ?>Q0 zXLO&vi=Q#u?T`5xyU~u_hG)V?don*$7uXA(XQzE5KhqA|>-d>IYCp-(yasz0KMOnU zkNG*V-;Vt?o<$?}WPVQBZZG8LtSb9P=hMzF1L5_b55!KF+VHFj(wD$ z+w94Ynxcp{xU$Wze$*^8b5GhYK57E77$#wa827}`)lZoJHFo>sW?`gM+n+pceiR8h z>61mFE1xiAdB|S%l({n!)gWyQef^Zl2FXQs;5P>UHzp@xdNm5a-Y1fa|7McyH@Zyh zV=KB1b2|+7>X50yN3(nEp^(`eslUo3{Z()1<{qV(0GfHP89|h%A)x|1|ZP-`@otdhB~&G8umV9+Zdi6@w|w zk32yp3UO}Efhhm&8ed(QUn`Y$wn}6I?h^adOXfm<)Chzr`{Es@!XMp7967B!OrMlP zm-U&6Iwod2A(WI#o`qkO%z5@}FPq!_Ze{4gSC}IfmP`Og$^&es9DC`Y**Yw!%!voRgdB$jfwj%N~cxYqGZ z@<}c_o=M!p431|Ko4M$CCed-I9qyFM7kw@~3tZPrJL`U>>(zz00h~Pb*47hYc{!#>CaDu2ve~ zd#goCP1&7{#=W@v?IXL)Vt?9U;`v%R2ro(5|E9U#q}SLh-!$3&G`K!p*{yGy#WCp! z(LBh^Irp?%^6mdVU?T0(y=JZb)NVM);UsR*2?I$r|vPoiOGW{3OkhweE(Y%y33!}$mG!P z_Tn#H{dtJGyx!1z`%IJe=MRu6SZdb}nV0;9FdH&c(c5OPltZW9Hgk2%#C}4m!fL&b z6v1>;wujF7GpjPGfXt*a zyXIZ9!#^3COx|OU+i$LlnLLa#I<)?iV=}|;*l&hnra-i)h%rdm1S6$Yvk|Hy_r^-W&ADn z@_>Ya#iBu9#pYX`b>A z&9O2<&4tzl8k0LTFwvT)F-b%5ldKe9OkSgvudlLh3$)k`XIW$Iis{y+p$E>g9x@#4 zb4sm7jra_8O|xndo1?%? zwPZdpUWe4qx8C}tZm`P_Sb5PySU_-FRrXSb*mv>XOTTWn9I(d5L>|R13b(q!?gBXi zyQrvYd+2~Q-p@O$sA2mg$}zm#;@ec(MF+u#Sc)yR7ag?nqZ?6dROakzd(A;>tREXa zZ1(K-gJ?DPD9RANxY8bA+Px*p+>7sQLG#~x80Euu>L|+CM4Amfc7;>!L%Gkcb;<)M z57_ISGURR;w7Z@1D9WSuelFkNtIYkqw(kR!H$lNo3cs?U?@gH~XJTMgcJ&A7ds7{7 zoxPT6*i@nn<`%n?XL@3JpW`j80GX%qv4tDD0$iVb0m%asGQysB(2c4se zw^ttr#rl|z6vc{8^%MnWMUe|*+nA2C2V3e=vbHS3Q-eMR&tc=`mdBo$W)?D5|X zToZ;jlcnOe*&`oWV=vg?3=j?3V%=mmbTcC`TlAH0D6-p4siy^Fahuy^SAJ|=6>Q=T zSOIuS-%6%wX&7z-t_{O?lf~yrhaZO3kCF8NheDM*0R0?re;EEf1~?Rk_kvy!hX1PU z+@sbs{`RNpsI^;Py2%MZNQ0ZK@fbx9xcR~;t?A#u-vM^q4*pcoFCkT03awgTdzjn0 zfmCm^-SCMu_R`I$S3dX%?zJ8w36Fpi9@gUs2ad-mp}#}=zc}8SMa~!QrbXu@8%Hh< zhM)WF5y%bxX#_T%@ACP|Ag2=TxF3X-?|jlvLN7HW^vg)?Z^s;r6MQY{kyg;F1!MP9 zgz-cSxc&HU=Z!w-M+M&r>$A5yARpHEZKf1`kUMA;0iC3O+iJJ|-5Q&GQ#B01`!*QD z_YtX81Nbo$^~c#ArEY!1cv3k&{J3e29p3`MTI575A^p?+;42Zn24}-ndJKl--J55K zh*r{fmIG%B-*(bVFhK3K+d=AJ1?2Gd5PC$sLuyYg^zjKkL^_aZcR+4%H9MMjl;HCh zlDZP}#Mdc!I_dg)&=(257~uE0HOd`I z2T^z%a}q9#5dNr442Ttw0Y%LvwebXSl`B6Ab9eL7GxT88m83R|KqHBzs2`EOAr%ZA z(%?>%oeLOO)Mip0HJHrXgpSzHW0!dfJxl6X4{(Ffcab_j0Df^<)DUR{3#b8y9#l~u zlG@b^1-u6TBE5)%PBe~o77kz);D1!~1m}T&0!|@%Hb%@H%7~*E0WTGdY!H0~f;dc} z=(VH}=PL3rD-Z<3eWbIy(LhWX{TS(5wt$Qp&4|QjQ&{we6kt>y}T3i3F)&& zfki;9k8~+U?sX8GjXW?23<13Hh#g0|y%KPN+hOc))p1z+$1;M@Sb}0hfxv9iZ2T(O*T`xkTPO6cJ)v z>{>APeee$h`+}&z$YL?#T|Q_WB?7-B9B07L>H0LzA{D}j%zl?1mkt57ECB5hWN`(g z<}3vs6nZJ?SKEM(3!X>%)&}5e!Pk>o35%GZB!akGKy)rJ;EKDG)NwF)7Kp=$oj=!T z5&=6fjp9I;SrhjrFBKSotd((ZlRDH0yh!*DvQ)lA{&5VTfaA{_0T$QBF3j%^w?TX~ z|4z#dFjp|b_*5+3=s;Cs#8?F5$CA1lE{W(7{zByXBGAPp@#m2`0E?-OLdV;jG?{ z4}c9Un4=mNJgwky>~jvI!xERC=qG)2BP>!S7}GYGa}o{20*P}m zkM{t33{|8XM$sT34Zbl=6W5ZptrQ*bYY?n{czLIvuK~YgzQlV--&6#75)+9}lX@F2 z@K(db7qR|t;ts{6iI~Taf$r?;SskQL{1fhlFX=D%3;3)8Sf(Mh;pou^0S(gN5oYE~8a(U1 z@Qvse1z#lHHy;X*2>))R?o6oYXw6Qesw#x0}2iZKd17p)AXQ9YDdN3 z=?azf2rx&v#6(gzsZU3MYehgm@&GF=c_3*Y6mAdW$DXma2e{wmPbShg@+|5TTugdu z6|iF=_&@nP0OtY&u4Ei%hM|D3NE%#6YBz$$h|iN7NO$dlMIa&YZlv$*w`7i(p(v$_Hj-|3ic?!qb}rCyr9J?9xIpZB`OoXL z#7JsC>BZGhXuin%qtgukNP8r%a&}p->(bQ!Bh`-fzM$mhv}pI$c+@tRAuSopDO*G= zkT#k0U==!)#FB=C$}a=J@F80;jra9Y;1`#qEhoJlKGvf`$Le|zgYtqp?HBx$3D#d- zDIIR12&7)D_HJrSLt?oe4NQ~>_zOBfgVP;g+x}@0u&2;*Qi&Lml01=afxi)0T#%kb zIvqGd) zblxU4eJy6q0C1Vm*O9ug68z$#bnGui8xemxRT#FBzB>vHBuLWn(q!`*U~dHPl0MXR zCg{>XCN)%t_A+bIPa+6ma&KB@;P-8wRNiu)F@|*KMqp7m1DW-If_qRQ9cI)Zvn>FY zeSStQsre)5pMwZK&S)TYQyV($7K{=0F2#ss02!O`-s3RZOH5_pEfHRhx&y#!n(;ga zgaLR1%Gm4fzfc2#xH1ls+Svesi=>0U!{j9(umvzHG8O4-_5=63^i1a+9k+DbXCg@V z7eK)dq4UwK4`i`m=7pp_ECpR$kXcPZb#^BhMx;R<=`S&jP7A=6skI5XQRw%PF06%u z8wGcea%QC@rp!(RVLkd=FZAb0rJR6#PobT#0EHOtvv9CESp+Dv zC<}+v?&H9cDT8D1nFnIy^jU8Vzd$Gh7N3uq0Ng7Wij0}X%zR-4xW-&a`gNX`OWhHT z`2n`oaDlhljaiA8g-mCKIJMwMuJlo)k@e2B4yrMC^6yKacZ+~c%*>Z`faCbDm%t^J zLdVHxIxM6m2*Xr!q=cLv=mxlSDU4l*I2r4Ai zX5+Lv7zZp-n*BYzO*;xK(<&PyoEnaK$I}hExFj1v+gSsJ+g$~+*CWPK!|2E}Ka7Gx zJYZh`vww#lTpRI5qRh>7*{^}wxxj!c8}CK`(0V4Qvfsx^sQ`p#>EJ6UPzNju0?|L2rL!$qj@1YATqwh34)l5-h4VC>QH-fsa$ z=&cPow~}643Hp$9um#I&09aPXoJX$8`lz8 z%-ccbeocBtFL02905LE&3qjR{ih99iq~Af1c)QlIm85$xVx1}Ug?LK_0p9vP_Iil{ zEa0a;g}iUPPZ*1LM(IAtYmoMBq-PIu{$C;$Pm}t9O(G*0ixK4nfENiJ>;I-9V2OdT zqrmIKFf!-Q>5M{ok)+?w0sW}kJ}-~-wH?6Xvb=M#2khhbUlJ5~SR7tLRC^}Q`yuJM z=+JbCfEDPlR60aVwD0@m)r9W zfMEd`BaOE((U8!eaz9kiBhtYOr2X~S^Q8*?_oOdl7kK^cr=b3E69g;}226`=9+B*b#%GXz za~p7#OCOK3+xcz4-Ga|Y;zD~*;qg_#RblulQm+Rf-)p~ubW(8S8;F;O!vyT)uinsKl{>=m`zT^ZJ9E0zZu}p)%$KzP$VI0yTsEc`3dn%- zgE2U-vrpPx1@aMOw+;YH(Bz+s5kX^bg!z~i?F1|%$j4#y=RD#bX^&Sfld6GbK>6Po zP(BWyzk*A>JQB?R6R8CwXs}cS9Kz>dZ5Z)McZB)JNMGE62CXi=0Q-f}O7Keu1=ufa z?go~aDVRojc`I>`1*brBF7(IwX9D4L%0VU_ zOenzndk(@8SD^{WRL9r_9fGmrdFlkP1mOfMCIbb)V!;XZP@o!EEHdE^l%0z^M1S{_ z-dYKZa^mClf5MZ3B~F1@$7qcptEFKKPv-4?e%*m}&-wg7}Y)prVS@?Fb@&jx@Lu3^gu;L%#t6e8BSV zxA1n-Pk`TBZVP`!Dytn>OpFi3^vnjBT=GQWPEylbkOz*7{9#h5ZBBdG9~LM)Ncv|{ z7@qz+i7-NfX|(8TjdUsMYVR0}`O|1XvR zOVCcd2`4R<*TnDtvHhL68UjaAAwHYf0?Z5^Zi7W~!f=RG7fk5=sx|Rd(vQ@mgTvC{ zK2qnxLf*cA;(KTh1y9Sv3yp{t;NYm+pa{$5TO$x4BP_xWXBABD{gPQ!OzP%p;0EEx zPqPD1zzf=T0-q3moGmwThccid97LYpj{dboZPCxMk6!}@37Vq& zP!xTt6V@A-JzdF|gK{o@6|<)Xl+q)z~Aa`7a5UOBs* z=ido8(M$@E)lmxh@&aN~AsRcEtH7k0q`o%-0b+qk3$Q_H1w(-dT*e=G0!!kWgpWFM zj)PwYIB5;mmfX1uao}l zWT=mPx9NN;O-E_j8ZMRDi<5oXbEcK6Ro7jA^@`Ou-7;lH`K;Lv zx^-DSqw>;lT6x*O(Po4mP4><4hrY=4eQm{GaNRXmFT1vJ`K`+uud5CHBgc1^u`iwJ zOAal{^9@+3-vN2v$`y^PR@R?p3#H`yI<3%~g}!S|==@2(>!WhMjjdMQ(zvQ|<&8Gw T`7%SVP4k`fg$~d3nTY=flH0um delta 60970 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 D*=goj diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 6dfd67b74..53089185b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -1312,7 +1312,9 @@ int getBebFPGATemp(){ int activate(int enable){ - return Beb_Activate(enable); + int ret = Beb_Activate(enable); + Feb_Control_activate(ret); + return ret; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 7565aeaf8..f9934f21a 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1270,6 +1270,13 @@ int slsDetector::activate(int const enable){ int arg = enable; char mess[MAX_STR_LENGTH]=""; int ret = OK; + + if(thisDetector->myDetectorType != EIGER){ + std::cout<< "Not implemented for this detector" << std::endl; + setErrorMask((getErrorMask())|(DETECTOR_ACTIVATE)); + return -1; + } + #ifdef VERBOSE if(!enable) std::cout<< "Deactivating Detector" << std::endl; @@ -1296,11 +1303,36 @@ int slsDetector::activate(int const enable){ } } #ifdef VERBOSE - if(retval) + if(retval==1) std::cout << "Detector Activated" << std::endl; - else + else if(retval==0) std::cout << "Detector Deactivated" << std::endl; + else + std::cout << "Detector Activation unknown:" << retval << std::endl; #endif + + if(ret!=FAIL){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ +#ifdef VERBOSE + std::cout << "Activating/Deactivating Receiver: " << retval << std::endl; +#endif + if (connectData() == OK) + ret=thisReceiver->sendInt(fnum,retval,retval); + disconnectData(); + if(ret==FAIL) + setErrorMask((getErrorMask())|(RECEIVER_ACTIVATE)); + } + } +#ifdef VERBOSE + if(retval==1) + std::cout << "Receiver Activated" << std::endl; + else if(retval==0) + std::cout << "Receiver Deactivated" << std::endl; + else + std::cout << "Receiver Activation unknown:" << retval << std::endl; +#endif + + return retval; } @@ -5535,6 +5567,7 @@ char* slsDetector::setReceiver(string receiverIP){ setTimer(FRAME_PERIOD,thisDetector->timerValue[FRAME_PERIOD]); setTimer(FRAME_NUMBER,thisDetector->timerValue[FRAME_NUMBER]); setDynamicRange(thisDetector->dynamicRange); + activate(-1); //set scan tag setUDPConnection(); if(thisDetector->myDetectorType == EIGER)