From 347a36b7c1f501e8cdc6459ed9c0d20975fdd86f Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Mon, 6 Oct 2014 11:01:51 +0200 Subject: [PATCH 1/2] module acquisition works, edit getrunstatus, added a small code for master incomplete, adjusted server to look for element in position 1 instead of zero --- .../eigerDetectorServer/FebControl.c | 38 ++++++++++++------ .../eigerDetectorServer/Makefile | 2 +- .../bin/eigerDetectorServer | Bin 237404 -> 237463 bytes .../slsDetectorFunctionList.c | 28 ++++++++++--- .../multiSlsDetector/multiSlsDetector.cpp | 26 ++++-------- .../slsDetectorServer_funcs.c | 11 +++-- 6 files changed, 60 insertions(+), 45 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index 69d7cfc0d..dd978d3ba 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -694,7 +694,7 @@ 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 = 0; + *module_index = 1; char* p1 = strstr(local_s,"mod");//size_t p1 = local_s.find("mod"); char* p2 = strstr(local_s,"::");//size_t p2 =local_s.find("::"); @@ -729,6 +729,15 @@ int Feb_Control_DecodeDACString(char* dac_str, unsigned int* module_index, int* strcpy(local_s,p1+8); *top=0; } +/* + if(Module_BottomAddressIsValid(&modules[*module_index])) + *top=0; + else + *bottom=0; +printf("*****************top %d bottom %d\n",*top,*bottom); +*/ + + *dac_ch = 0; if(!Feb_Control_GetDACNumber(local_s,dac_ch)){ printf("Error in dac_name: %s (%s)\n",dac_str,local_s); @@ -955,8 +964,8 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ } //end row loop - if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[0]),0,0,1024,trimbits_to_load_r)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[0]),0,0,1024,trimbits_to_load_l)|| + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[1]),0,0,1024,trimbits_to_load_r)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[1]),0,0,1024,trimbits_to_load_l)|| //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)){ @@ -982,11 +991,14 @@ unsigned int* Feb_Control_GetTrimbits(){ unsigned int Feb_Control_AddressToAll(){ if(moduleSize==0) return 0; - if(Module_BottomAddressIsValid(&modules[1])){//printf("************* bottom\n"); - return Module_GetBottomLeftAddress(&modules[1])|Module_GetBottomRightAddress(&modules[1]);} - //printf("************* top\n"); - return Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1]); + if(Module_BottomAddressIsValid(&modules[0])){ + //printf("************* bottom\n"); + return Module_GetBottomLeftAddress(&modules[0])|Module_GetBottomRightAddress(&modules[0]); + } + // printf("************* top\n"); + return Module_GetTopLeftAddress(&modules[0])|Module_GetTopRightAddress(&modules[0]); + } int Feb_Control_SetCommandRegister(unsigned int cmd){ @@ -1035,18 +1047,18 @@ int Feb_Control_AcquisitionInProgress(){ //printf("right:%d\n",Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[1]),&status_reg_r)); //printf("left:%d\n",Feb_Control_GetDAQStatusRegister(Module_GetTopLeftAddress(&modules[1]),&status_reg_l)); - if(Module_BottomAddressIsValid(&modules[0])){ + if(Module_BottomAddressIsValid(&modules[1])){ //printf("************* bottom1\n"); if(!(Feb_Control_GetDAQStatusRegister(Module_GetBottomRightAddress(&modules[1]),&status_reg_r))) - return 0; + {printf("**idle\n");return 0;} }else{ //printf("************* top1\n"); if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[1]),&status_reg_r))) - return 0; + {printf("**idle\n");return 0;} } - if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) return 1; + if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) {printf("******running\n");return 1;} /* if(!(GetDAQStatusRegister(modules[i]->Module_GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->Module_GetTopRightAddress(),status_reg_l))){ @@ -1057,7 +1069,7 @@ int Feb_Control_AcquisitionInProgress(){ } */ - return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; + printf("**idle\n");return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; } int Feb_Control_Reset(){ @@ -1370,7 +1382,7 @@ int Feb_Control_WriteNRead(char* message, int length, int max_length){ } */ -int Feb_Control_StartAcquisition(){ +int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* \n"); static unsigned int reg_nums[20]; static unsigned int reg_vals[20]; diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile index f11f09eb1..7920925cb 100755 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile @@ -1,6 +1,6 @@ CC = powerpc-4xx-softfloat-gcc CCX = powerpc-4xx-softfloat-g++ -CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT #-DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 54d45775dc1da4b3126d988c96924d661d39a2bf..2c2221578d7b7b7250d11e542627c95ad2e7e3d4 100755 GIT binary patch delta 39939 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 26b9a3046..2f6758ff3 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -53,7 +53,8 @@ int dst_requested[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 int default_dac_values[16] = {0,2000,2000,1250,700,1278,500,500,2000,500,500,550,550,100,1000,775}; - +enum masterFlags masterMode=NO_MASTER; +enum masterFlags trialMasterMode=NO_MASTER; int initDetector(){ int imod,i,n; @@ -128,9 +129,12 @@ int initDetector(){ setHighVolage(150,0); setIODelay(675,0); setTiming(AUTO_TIMING); + setMaster(GET_MASTER); int enable[2] = {0,1}; setExternalGating(enable);//disable external gating + if(getDetectorNumber() == 0xbeb031) + trialMasterMode = IS_MASTER; return 1; } @@ -453,8 +457,13 @@ enum detectorSettings setSettings(enum detectorSettings sett, int imod){ int startStateMachine(){ printf("Going to start acquisition\n"); - if(Feb_Control_StartAcquisition()){ + + if(trialMasterMode == IS_MASTER) + Feb_Control_StartAcquisition(); + + +printf("requesting images\n"); //RequestImages(); int ret_val = 0; dst_requested[0] = 1; @@ -471,15 +480,19 @@ int startStateMachine(){ return FAIL; else return OK; - } + return FAIL; } int stopStateMachine(){ printf("Going to stop acquisition\n"); - if(Feb_Control_StopAcquisition()) - return OK; + + if(trialMasterMode == IS_MASTER){ + if(Feb_Control_StopAcquisition()) + return OK; + }else return OK; + return FAIL; } @@ -885,7 +898,10 @@ void setExternalGating(int enable[]){ enum masterFlags setMaster(enum masterFlags arg){ - return NO_MASTER; + if(arg != GET_MASTER) + masterMode = arg; + + return arg; } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 55cb1102a..3d99d8e6a 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1198,15 +1198,6 @@ int multiSlsDetector::startAcquisition(){ int i=0; int ret=OK, ret1=OK; - if (detectors[0]) { - ret=detectors[0]->startAcquisition(); - if(detectors[0]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors; i++) { if (i!=thisMultiDetector->masterPosition) if (detectors[i]) { @@ -1226,7 +1217,7 @@ int multiSlsDetector::startAcquisition(){ if (ret!=OK) ret1=FAIL; } - }*/ + } return ret1; }; @@ -1474,7 +1465,7 @@ int* multiSlsDetector::startAndReadAll(){ if (detectors[id]) { detectors[id]->disconnectControl(); } - } + } } @@ -1515,6 +1506,7 @@ int multiSlsDetector::startAndReadAllNoWait(){ ret1=FAIL; } } + return ret1; } @@ -1536,20 +1528,16 @@ slsDetectorDefs::runStatus multiSlsDetector::getRunStatus() { return s; } - if (detectors[0]){ - s=detectors[0]->getRunStatus(); - if(detectors[0]->getErrorMask()) - setErrorMask(getErrorMask()|(1<<0)); - } - for (int i=1; inumberOfDetectors; i++) { s1=detectors[i]->getRunStatus(); if(detectors[i]->getErrorMask()) setErrorMask(getErrorMask()|(1< Date: Tue, 14 Oct 2014 15:38:45 +0200 Subject: [PATCH 2/2] full module server works now, slave and master yet to be done --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 4 +- .../eigerDetectorServer/FebControl.c | 92 ++++++++++-------- .../eigerDetectorServer/FebControl.h | 2 +- .../bin/eigerDetectorServer | Bin 237463 -> 237506 bytes .../slsDetectorFunctionList.c | 63 ++++++------ .../slsDetectorServer_funcs.c | 4 +- 6 files changed, 86 insertions(+), 79 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index ec8856772..4d77ac62d 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -330,7 +330,7 @@ int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header Beb_SwapDataFun(1,12,&(Beb_send_data[2])); if(!Beb_WriteTo(i)) return 0; - printf("dst_port:%d\n",dst_port); + printf("beb dst_port:%d\n",dst_port); return 1; } @@ -514,7 +514,7 @@ int Beb_RequestNImages(unsigned int beb_number, unsigned int left_right, int ten if(in_two_requests) npackets/=2; // printf("npackets:%d\n",npackets); //usleep needed after acquisition start, else you miss the single images - usleep(1000); + usleep(10000);//less than this and it starts sending half stuff sometimes //printf("beb no:%d left_right:%d ten_gig:%d dst_number:%d #images:%d header_size:%d test_just_send_out_packets_no_wait:%d\n",beb_number,left_right,ten_gig,dst_number,nimages, header_size,test_just_send_out_packets_no_wait); //printf("here: "<4095){ - printf("Waring: SetDac bad value, %d. The range is 0 to 4095.\n",v); + printf("Warning: SetDac bad value, %d. The range is 0 to 4095.\n",v); return 0; } @@ -949,28 +942,41 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ int i; for(i=0;i<8;i++){ // column loop i //printf("i:%d\t\t",i); - trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_l+i])<<((7-i)*4);//low - trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_l+i])>>3)<<((7-i)*4);//upper - trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_r+i])<<((7-i)*4);//low - trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_r+i])>>3)<<((7-i)*4);//upper -/* - trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])<<((7-i)*4);//low - trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])>>3)<<((7-i)*4);//upper - trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])<<((7-i)*4);//low - trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])>>3)<<((7-i)*4);//upper -*/ + + if(Module_TopAddressIsValid(&modules[0])){ + trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_l+i])<<((7-i)*4);//low + trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_l+i])>>3)<<((7-i)*4);//upper + trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_r+i])<<((7-i)*4);//low + trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_r+i])>>3)<<((7-i)*4);//upper + }else{ + trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])<<((7-i)*4);//low + trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])>>3)<<((7-i)*4);//upper + trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])<<((7-i)*4);//low + trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])>>3)<<((7-i)*4);//upper + + } } // end column loop i } //end supercolumn loop sc } //end row loop - - if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[1]),0,0,1024,trimbits_to_load_r)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[1]),0,0,1024,trimbits_to_load_l)|| - //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(Module_TopAddressIsValid(&modules[0])){ + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[1]),0,0,1024,trimbits_to_load_r)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[1]),0,0,1024,trimbits_to_load_l)|| + //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[1]),0,0,1024,trimbits_to_load_r)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[1]),0,0,1024,trimbits_to_load_l)|| + //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; + } } } //end row_set loop (groups of 16 rows) @@ -996,7 +1002,7 @@ unsigned int Feb_Control_AddressToAll(){ //printf("************* bottom\n"); return Module_GetBottomLeftAddress(&modules[0])|Module_GetBottomRightAddress(&modules[0]); } - // printf("************* top\n"); + //printf("************* top\n"); return Module_GetTopLeftAddress(&modules[0])|Module_GetTopRightAddress(&modules[0]); } @@ -1051,14 +1057,14 @@ int Feb_Control_AcquisitionInProgress(){ //printf("************* bottom1\n"); if(!(Feb_Control_GetDAQStatusRegister(Module_GetBottomRightAddress(&modules[1]),&status_reg_r))) - {printf("**idle\n");return 0;} + return 0; }else{ //printf("************* top1\n"); if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[1]),&status_reg_r))) - {printf("**idle\n");return 0;} + return 0; } - if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) {printf("******running\n");return 1;} + if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) return 1; /* if(!(GetDAQStatusRegister(modules[i]->Module_GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->Module_GetTopRightAddress(),status_reg_l))){ @@ -1069,7 +1075,7 @@ int Feb_Control_AcquisitionInProgress(){ } */ - printf("**idle\n");return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; + /*printf("**idle\n");*/return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; } int Feb_Control_Reset(){ diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.h b/slsDetectorSoftware/eigerDetectorServer/FebControl.h index 7132847c6..a945e9626 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.h @@ -65,7 +65,7 @@ int Module_GetBottomDACValue(struct Module* mod,unsigned int i); - +int Feb_Control_IsBottomModule(); void Feb_Control_ClearModules(); diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 2c2221578d7b7b7250d11e542627c95ad2e7e3d4..ac7f244c618968cacc83d9e273bec0c03d35dc26 100755 GIT binary patch delta 29141 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 XqNPh0Ett3{Z&|@y`;3i-p+5fyhc5AS delta 28937 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

LT0Jt{y5&SR9giSAH&d7FQJO9<;#`}3!VIb* zCI=l5G|p?-jdv2y;)f3Sg`wj6vKS9(I)gB5emsOi84@0+Djy+wlu`-fIO0-1U^!c1 z%fNpvV5wl(^F^w%yb%h>C=4rC$&*mX72RP-+{uZ6vm`@A|Dg!L(gI;{qP?l;pD*z^ zD)KF9i<@vUpe!jcSW&`Z82tx&{KAWHN^;`>o}~MQk5H9v@Q4m|I>YeEs`5-}n}Xq( zqD`1Gmq&%8fE9&O&Eb{@KG@(M|ShXN-heyZ3Y zL&18De~}U~TU9<4{G^E^a#WH~hX$9xl`2V#0|S|tBVJdPuffo@>O>q+$r2l2=>rj; zz)8gv?v(<+fm7xHb}4)VaEc4YiEmeIZ_**qVAeZyMbKTF0D}G!PQ{3uT^&G=?B!@` zQ>g0#)i6X%fpprgi^a3}p+A0IS86x>BjF9I5{4-uVn9VGsJmhzyj}ym^ntDpl?=}X zY?lh0f&wjoyFO`ET=580~SirUn(4F#0<&;`3CZ!UD>fBH4f<{-zbhfQ#Wfso}yQ1g)d%$~r*0xrBcKs7{909=%Yj1Z_O z<^)v<6%6Ev%@&oAOjsaW7hs;EDwab~P)>>2rYZr#s}D*1qpC8^429Dq{1|p!=noTX z7B>GGJ|yU+lbScGgcm@*YlP;v@L#QzU_>$u&2=hy805qy@VshB6#eZ`I1CD32Ezk@ z<%rE9tOQ=d(E+Mb2?0h`S0Fk@RR+Vys8lGrH|Q(G8y8oHiAWr!V2~?2phS5BPDkX3 zqGzjQhz+oGy68WtO72O(d6NEFIGu1R>2%R0DglW?DM!T^dPzg2<1 zsU#C7CN@cM8aV9-7{6%DaZDK=TnhiDk_YoapRUu#_^L`|9HwlSghLROy~u)19WL7Wt@ z!}az~@1xqenqqWJyOul4Nid|0_uY;A$O?HLA+^RhYA42}dAvr2wBP z;qIz(x)=)iNO%zbD?^|SuKpQF&DFrm#1@+kr1k?nez8l`B77SKf*Q#nUnTZD!1WSd zt%~%3A7F2EfEUNYgsv%w<@iG=SWHoMi^c8+9{pSK*g_l?PU=#)4tNhY{5cPmlpb(Y zEjJXBz<$b;ixw>IJ)pm(Kc40kh^GO3&Er@( diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 2f6758ff3..73284be26 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -129,7 +129,7 @@ int initDetector(){ setHighVolage(150,0); setIODelay(675,0); setTiming(AUTO_TIMING); - setMaster(GET_MASTER); + //setMaster(GET_MASTER); int enable[2] = {0,1}; setExternalGating(enable);//disable external gating @@ -456,39 +456,38 @@ enum detectorSettings setSettings(enum detectorSettings sett, int imod){ int startStateMachine(){ - printf("Going to start acquisition\n"); - - if(trialMasterMode == IS_MASTER) + if(trialMasterMode == IS_MASTER){ + printf("Going to start acquisition\n"); Feb_Control_StartAcquisition(); + } -printf("requesting images\n"); - //RequestImages(); - int ret_val = 0; - dst_requested[0] = 1; - while(dst_requested[on_dst]){ - //waits on data - if((ret_val = (!Beb_RequestNImages(0,1,send_to_ten_gig,on_dst,nimages_per_request,0)|| - !Beb_RequestNImages(0,2,send_to_ten_gig,0x20|on_dst,nimages_per_request,0)))) - break; - dst_requested[on_dst++]=0; - on_dst%=ndsts_in_use; - } + printf("requesting images\n"); + //RequestImages(); + int ret_val = 0; + dst_requested[0] = 1; + while(dst_requested[on_dst]){ + //waits on data + if((ret_val = (!Beb_RequestNImages(0,1,send_to_ten_gig,on_dst,nimages_per_request,0)|| + !Beb_RequestNImages(0,2,send_to_ten_gig,0x20|on_dst,nimages_per_request,0)))) + break; + dst_requested[on_dst++]=0; + on_dst%=ndsts_in_use; + } - if(ret_val) - return FAIL; - else - return OK; + if(ret_val) + return FAIL; + else + return OK; return FAIL; } int stopStateMachine(){ - printf("Going to stop acquisition\n"); - if(trialMasterMode == IS_MASTER){ + printf("Going to stop acquisition\n"); if(Feb_Control_StopAcquisition()) return OK; }else return OK; @@ -522,10 +521,10 @@ int startReadOut(){ enum runStatus getRunStatus(){ int i = Feb_Control_AcquisitionInProgress(); if(i== 0){ - printf("IDLE\n"); + /*printf("IDLE\n");*/ return IDLE; }else{ - printf("RUNNING\n"); + /*printf("RUNNING\n");*/ return RUNNING; } } @@ -689,7 +688,6 @@ int executeTrimming(enum trimMode mode, int par1, int par2, int imod){ int configureMAC(int ipad, long long int macad, long long int detectormacadd, int detipad, int udpport, int udpport2, int ival){ char src_mac[50], src_ip[50],dst_mac[50], dst_ip[50]; int src_port = 0xE185; - int dst_port = udpport; sprintf(src_ip,"%d.%d.%d.%d",(detipad>>24)&0xff,(detipad>>16)&0xff,(detipad>>8)&0xff,(detipad)&0xff); sprintf(dst_ip,"%d.%d.%d.%d",(ipad>>24)&0xff,(ipad>>16)&0xff,(ipad>>8)&0xff,(ipad)&0xff); sprintf(src_mac,"%02x:%02x:%02x:%02x:%02x:%02x",(unsigned int)((detectormacadd>>40)&0xFF), @@ -706,15 +704,17 @@ int configureMAC(int ipad, long long int macad, long long int detectormacadd, in (unsigned int)((macad>>0)&0xFF)); printf("src_port:%d\n",src_port); - printf("dst_port:%d\n",dst_port); printf("src_ip:%s\n",src_ip); printf("dst_ip:%s\n",dst_ip); printf("src_mac:%s\n",src_mac); - printf("dst_mac:%s\n\n",dst_mac); + printf("dst_mac:%s\n",dst_mac); int beb_num = 34; int header_number = 0; + int dst_port = udpport; + + printf("dst_port:%d\n\n",dst_port); int i=0; /* for(i=0;i<32;i++){/** modified for Aldo*/ @@ -726,11 +726,12 @@ int configureMAC(int ipad, long long int macad, long long int detectormacadd, in header_number = 32; dst_port = udpport2; + printf("dst_port:%d\n\n",dst_port); /*for(i=0;i<32;i++){*//** modified for Aldo*/ if(Beb_SetBebSrcHeaderInfos(beb_num,send_to_ten_gig,src_mac,src_ip,src_port) && Beb_SetUpUDPHeader(beb_num,send_to_ten_gig,header_number+i,dst_mac,dst_ip, dst_port)) - printf("set up right ok\n"); + printf("set up right ok\n\n"); else return -1; /*}*/ @@ -898,10 +899,10 @@ void setExternalGating(int enable[]){ enum masterFlags setMaster(enum masterFlags arg){ - if(arg != GET_MASTER) - masterMode = arg; + //if(arg != GET_MASTER) + // masterMode = arg; - return arg; + return NO_MASTER; } diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 0ef92c6bc..2dc6e1b98 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -54,8 +54,8 @@ int init_detector(int b) { #endif }else{ Feb_Interface_FebInterface(); - Feb_Control_FebControl(); - printf("FEb control constructor done\n"); + //Feb_Control_FebControl(); + // printf("FEb control constructor done\n"); /* Beb_Beb(-1); printf("BEB constructor done\n");*/ }