From bbf26927dd8415eacbc6e5dbdb470f88a842b70f Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Tue, 14 Oct 2014 15:38:45 +0200 Subject: [PATCH] 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 zcmb__4Omsh_V=DSa0CS0BHy0}P(VdJ_!TND8s6aJS zs;;9;zB*LwO#_QN8;VMMD@vN8QnMo4ybZf1**r{IoAoP`#n5exMNyh0JP`08zzq^k z1Ka~}orE(12LY~;a5i91z?BltwHN}fT1ph9TsGvP;T#BT5-tFI3UHx>mjZqtuvNk~ zzy|WN$9zKos;K;C2peMZo4Osu+3Lhv`;E%dk9sft3t?t);KV)`bF zwe*=8@J*qG{(3Q0aX5e~vM6*m%jw&XOkrhx2h(qCtgi2bu3+z-6B zvVwjI^qVSH(eEj8oJE@d8t_fEEk;pS#!o0J_AnG#=#??7GA^FYde@sZm=j40Yx*>T zbxR2hs~0P}zPF}*gIP(=A8t~WAwBQd%+gar!VXF7ehlb_O}oYlfn6i9huUMuc(6)f z^CY&uJ$CGF)&Q)B#Co;IPFT93e{lH3n-VKD?l$h^24)8O?kf@<+8#YsW!C;7VObI@ z*3Yf;{nuDIuvHQ}ust@uMDzRzpvGYAxE3mZ^o7o;)aFm$_goF*0*qrv*!bp|{ ztaIGF_SogA%m!?u>|59#yRwee09zrkMQ&I!r03(SSQD`M5^HOZeKMV?16?wgwa1oK zv2`B?TvOShJvj$+(C3bgv?2g6_gIppXZIAq0 z5i`!Lpz*fp(8{7A_H?g`wAtZ^N9&{J|rh%CTKNL2@ zR-%Na#wcFGMN%sjkJLJaOmKX2mKEL+Ouu=b9U43>YytQn(tXoXY!H5Q@qGcqX|I7r zAWOevEV&N4IQF+YCX$P+W??Y>){CjBZ;>EzCNkFa0))l@D1*W;4^!h_Er`C5kFMxt|U3YO5lQ2cv&m$kJa+W936v zgq;C}FDQH^g;-`m;l*q_7aG4Uv(WQ<+2&!xVxKFvMidF6QQMX7ngrIwEJ19xeX|u* z3)q!m1A-1ho@5c9%Apqxt9)C{(#HkU^HD52Z7ey*wx%V<9~Ps6)Ff1>F|)-Lx>VS> zt-OTweR3S@H+*1Nl#3=Y3p6U!Y?$C^^kn4+#qNLe(z(*iK|a~R7P;r`c>r?Ir#6=BXo=A1w0(|pby@5W~g=)KC> zsL5f*(_&dvmNhnxp5DkVq{qZA6AjRR(geq+!g3A8UWOu@S6s0^k$+EN$)ifhDb_GL zkkyUqM254p(J^F;fW1;}B1_qb)-(f6!L%Yp1A4IB(RaYwbt;jtp7CZi=(rb6A;c3z z(e$(B%%EC9a|!#?Z7ES z%fN1owm%0(Bj|}U8mAMO|F{@<%6r*Kq$Q;(^Rc*Cg-kv0u+^jS=4>!St=O@`jpt8NAs1|z0o8@QD zk@HJ9{hZT~wRwt&utN#7D9gNs)5Dcb7G*uwV`2%SRoTQuD5+**Z}Kv0oH&!7^I&O{ z;>mnwofJYAIOkkGX$9%Qd?!!FzqykW$t_Lty8DCaade*i06muku^(cInce8|iOya% zSucTi_LMux0k(Nc0zHSUIz?!t34rdc6h>#ddnWymFx%aU~o)CJ@ z#?tQ5M7qaaq^1;;9+ol*tZKLLFZ*{1?xZl~d zvbqz>>O^N*{hf_C0#bO5 zS~dFt+M=)vvnLBp=|w>0@<-Ue=J=9{?DU*olm0M02=wlBDQvx1GtFh`k;Cm*w?*xs zmO%82Wm$iTKrkuzOL#y_lI-jYS;6!Oq_fAfxBe1J_OO$GNhGUT(}G^~z;rl!1p9Dp z8Y{``L|Za7t38(&jBqT?Ot{8Vb0c(9i=*!lc5Lolv?ZUZ55$mB%#42##ve$a`@Gwn z;O}SQX*taL4O_$-n6AvGV2E&NgdeUl&%&>Yxl6og0Z8b zV7|g6G_g@TMWSL9V_WpG-LXy#wxLiBm1g(uo~#PfHx;uykq%+yZu} zFoB-O=4;tJHeqoDJ#WI}BkZfio$2{BR=6aOWi5%O=X3BlZ}``e(?E-|*vZw5=ZmsE z)uJr%l+S5c#U$u4Uth()_hEq#KOi$y-@RwCo&$%JD1}2tDoI$T^!D}O-XQcY)aI>Z z4`Ou>PbQ0*x-^lDW2sAfr$mV{ptnf5UXl8G)%3v~MqbkccX)A)Rv6V4d$+HUN}zk*h%_kp_>tdyM7Ey@CI6(K>IMJc!{+o9h!nhdF5?fAj9F?bPS@aebnO+S3V`jl3ycWjPO?Qa}uY5G5tJwAA3$`NUTa+o6*s(`Pgr65%3N5$D zOb{qCfrY+$oS9aPMY_mbnLxK8Sgq(y-iMb@W8I2F$w8+eYO2U?^A@n$;^>6$ss*n< zZbf#Nigw+UCS77Tizkb!7JRq*fo}+Vc4Z*>8qseNigagjv3y0>B&c3w-DKQDEy~=* zEcC_b{(s0Zu(DlG>tXhMwG6X?qJXr0B~GEdmdQa;Ap@o&66Ptg`e4GKQH}B~Tv4Oi#|FKUhVk+3>`8 zXG!^@AG4K4(;td7?oCgO6x-)jLI#bzLMEm_c5Rh5uz7WecTauX@lh;mbuj$_o7~s3 zSncYOBD?$+TTPoU*Jn6)e<)=yW|k7B#t*3DHBy)czkJRMJtu-d2Z5L=U{dy}~= z@|k|IgZ_KJ=U1|VXLiva17!`}h28&bpsSv=y}6iOe>T`f?_#_s3h=#NRvRvtWeXrU2W4eWM zX>vbii>?&x%xgy?qZY2!HkE5*MA}??H~q1oP3C*n1)^kkCiiu3$|515VgVE@w&ber zdt*KUYAqHnRQYBeA~|9$N;ruJ4VdtgCwIH(*zw6bli|IB&tuAQmSVZaaeu9)H{!$Ts%_cjd?ZERAWKC6+)( zpJQcg1pToEUQ>+lGkyrORP?2*y|oSMDuj}X7}$ak@xmHS#Kjwf-GXP^o|&#AtZ>tv zeYErfgGX3&?inuZhR}h3jAd(4Q6r{aILVTD49es59V2Mzb#35M>>1I9{V`ucFZyD6 zaD=#7?1JUeG;DqYW@+0Z^k>@=!rt4`joRSVc>H;b2!S5Y52Y8ov-IcVL030FST1Dv zGd+bFo0W^1Vj(r#LH%W+&!n*0=M#(Cn5{>8rbg?{8J zTk}G1VK?}98*9eDNab4>(u;-6w)J6@qE6d^y|3IBjM`r|sHrPh;`Te8KKbNDwrYEP zP*0f)BVFpcxJI+qC$~X6A?(NPz3Ih6EObXAifN&tN3jnEaE9&P5rgE>IxZ0<-2nfK zH!XB^tnQ*enQ)Zwa1XK7QnlGye@e5^RU3uv{OPgZPnkgbv9z5rJ;d(I*{RS%pE&!U zJ3(ttOl4Pg#uGo0PJ(}`8g6QL?tpaiL=Tqv;%G7H@)tv(w%sp|9km!kh{M24DeX}V zVRi+e(lhSue>9uN;l?k;QEiel*xr|-qJL`YFfgj!(zYWG*7QUo>sA$t!=dD=M9)5A zf~ZL2*rQdM^rxFL)`zf&mjiJMAv4Up0+lk`JTaxIQ8>7PZj8>kJG&kI63Odl> zz1HxJtbAAWq(7_{68vL(L|3!&vvw$eXKizWc9}DNPPPd>w7n%-c~zrt`Z<-|+%>^_ zr|fNIS+9fyl_EMSBK2XZg`-h()6WI0_?4M-r5~%@9evl&tH3Sa#jW_P>|aqjl2}V; zkv!p|D|<{RT6xz!sH2L-R<|QZR-y@R7P=w@8*Cg$zG_0?zw&CLNT+`jam(_zUui2gz^}~<8xEuV52qrpv9R_3 z5$m>Jd*mQf_l!jt&DoPc3lJps^hUC+-h(l+@q%GK^LryWOdLf2`8aNzmY!!#Z;Zup zK~l{CL_OP{UNrwYINgbZ)E=z$K_hJ~M1YyartJ-MZQb1%EZGTB`mwK8htPS*wtpAd z*7Rf!YyG=FZC$fr--FJr_hJ-%`}Cl@_&L_FI)TpJrd3mOm$^FZM%u{}#R?2lYxdm@ge zMeX^TJy4`NJ2*7!N2~+bj#@8mah#Q=c&XxkWc3uP6U)IxA|V{q_TTsy2dDp-NiTV5 zk)?d7IA#u_vx1z7K%O&Kz7>M-UHeuXy%fnB--;*4Hyn!a#0h%xab`L+nqEprT8yUo z7qzILdsxehxf`{!=iFt8`zdVr;eaV$i*P2CGobEL1I!vZ+_R_itg__2U)=m>-U3~T zmu?Ebf^lMBGjFPW0F9m2Jp0c?Vf}-TkC=Q&$qg3`e?`9EM;7yE-MUZrJnI5B{lG z6!lfK(GG1J(T2hyC@9q$laBWZpz}GUw*~v*uITR=LZ;(+laBWQANrF1>^WP|Sd{qd zGEhY71sZ$(h##4~@6eHdk#T#a8;e&ch{lSqKJVFk5v63_yPR#I)=NW1D!#hDE?b?U z1N2^cc(5+t*YMsvQX;y^H!+vA{mIGq*T!Ae3Sg`%&K+l# zVq1nF_0vHyTWyBQz2jKccM)vI2Tw&`-YN|Mq%#gf3NN8I?Vwy4|B*&E>%$KNF7LNR zyH6Aj*xxFj!h%*6w^N+r}?G(s{R>I2+scgb(irnwms8_v%vcC;g_$t#>iPM z#?ZwWM4pM*IJA$i=MweQn$ycRH!tdwB9chx!6Xg%q*$*M(=Vsn>uU0;(vkY>W4S@iF7_s$>AHJp2Fp72 zw*N2AaD-er=^~5#Y*Y9ZxAZw_95`yQMVYgg)ql2-u797UeV*WRWgt2rVE*MSEBO4y z@GDxmpy%Aoi>^+2U$dmszlL9N`Ui@`2_m`cp0CW=$WqVj*YZn>a;1{pJTt+2iZ&Sm zWqmQh`<7;kwky@F>Wde=r?)|t|9PS0fCed7>ZP@V`8Zj1Txo>=X1UB}9MQO%uC$=N z*41t~FWax6T{}3@Jds*H(c7;oXkX<;G1gaNBGr z3rLcz&DnZ2*+R!IV@+q@^FAf8k;*8A*NrAI?B_jUEG@b-`}xZf|EuX1I_7K03#;)+ zW!9!ZR{m9h@hZN07_*1%{;IF>Dk9jJ<*d>9IEJZB|DfN^XXdXH*)L6ao#naD{5AEA z{#7fH^>91lfTl4-Z#_Rvdmk}wQ^2q3(kKvSM-Z_NtTHl@#e6@E<_u@K-&6aiO2sT=pzU3h@f!F@Dv zFafd?;r%AyRc!gC&inq|>S^>cTg`P795-I(HKin!HGSNPe>j?i@*T^dk8gf`4#zr$ zzl9rr#kBjZXXU?58lQdu833y>YNE)z7A0(ko=G!~>-RfXi@QF%F(M<&=dlxY_5Zrn zLX&S{HOH~mZ@Y7|N<3KBwGo4Vtwh^FNplo5rJ}C}+XPPa6pJCu6Li{sa6sL!O{~xn zPJipkny!VADO?R9P}=p$BYwT&a)RE2MBM|m>l@nb((0_gUbE0%XN0a%2buJNe?wsD zy^K{~A0Pai8NO89eoxfPkNMt+HvWca(%YMvZv@ld(wXH(@8K^?Gc(|vMQ5e_mMNE1 z4AV!`4ej-^7-m4-Zv}$47TRdf>#XL+0CJW!-xxajw{lmfo*QK+KPR!SjNf2)Juf-! zI(<7S93nj_CH=P+X8k>W_(qAPZsItTEX3&kfAR?NIjYtwehHJj=Zu${SP?On;duP&j6Zygd?iOz!Qw zf|;mYPzCf5W`>V$daSl6d>pI2J=%B;OOz11!4ZA;wG5YQ^$_1;rU?&(5Npy&6&k&UanX0j3w=j; z@TI6f=};v)glYAdTZaYu9OKUlD^J+?IGIg)Y-}cPke7KeC5dDYucD-X@K4JH$CB;Z z$5>0DpU?@8p9b*@g5(n(XdnZ~Hg2UPoc?q`bW8}osGY;fAfGCGjNuK0L^j3di#ar8lN_G#ddZ2BNWwLDym8H(6WbX=B9I! zhju_N<#diW#7zeAniR9WFr)afh$8LT;J9#(hkB5{;n#g7GOWEIrrCC@2cg9Ox-$aj zTWHJ_Ug$~gA!o5G3FVERWDfo2Fi$s<7_yODjWEXVZt)_3<950YUxN|U3639DyR~iA zre?b?76Q2QqeM9*pEpV|MV~0%WF$EB;$|;0m_{w;=1wGGM9bH1tk!6(DzDe+-CNwc zw`eO-^3sn*B}ZY9+J|USeFU#N$SJ`p`YvUw9JMW{Lh)siXHuIP`t!a8J@9M^gyogeZh5wW9WcY^4t2LkI23%aG~Q7&Q}zXnl!Zdi5Kj|k%? zAK1i=LSExTB4#+<$-R4#g@zx{yN7=S(?2aFwkQF3FGi2KNm!w?3~#e5NSN;?p+3YE z?G-5|;66kZh8Qk~nCcp$LYs{~oN*k66R%I53aOLBMadbY^XkqdVvOdj9oRQmXxKrW zeb^^pe^O`J2k$pYy&KC5I?J$^+q0bVCpx_emZKy~akd~?_QSCO$#${)Jyf#n)5a3Z z6h0#4%pZCFo@Ak+dLcqXzjpC7Peo8~?5N1_!6Bu8!UNmF(8ao3p-+QHi*9Pp6W-r* zc)c%)7&jXzxsI>w5p0HxRN77yvHwQl7&Kk77nU|qSZIpr_dGE*S9uZwuks_kf`hNR zXnz-bL@x^s>B$TI$Rnhbrw5V*a#P6-R?(d8I!Y5Tu1y&HA@0IYOoZb-#<06HdSOhr zEJR0HjGaN(OS~a~^!LA+BilmJwwJ5j5DgnIaZ5Ky)rS{$BM%tQp2t$2=Fp%^kv&A!5I7=w7P@{NO2sF|-pC1bZi^aS(kj(SM3pzuR&Y^Ko8;8EM@oNF} z;{L(J%l~G*OBDZYyn8T7pl2@f%wX`DE=1|Yw+E9n`o%fk7)<)pFCeZM|CV-op>L`D z7VG1mIV}32|5d%?2O*;45!vxM+0j|3Kycr2yeO2s-RssWA%ul?7Vq-4@30ZJBgLYb zm0O!#0(PFwtzjfM_||^6w&A+L-D==#!bor8&1=I*FIuvbH-|wdB`djCxVTT}$+(A? z4073@Gwj_~EY#;9&n+Rn`H5)c!q>u)1Izhje-g%W(Kii(Je5HVO+}mBbErNsxztDD6AuLHh_jv0% zuZbWJ-nZcsjb0xcyMyP0+Vfkd*|8kg*EQ~zi|y&2X&V>vV~4ZqII9T@;&Cpay1$jd%J+AN5hpD zi&V=@x59g!I;=^r<%74poyRE7%NqJvw3y`xf8|Q<^E)l~o=Lop*Y+ZO5YmM;Y7ZPEf>$#dlb{X-~iQN2%A4-B{ z7rGZ6aq(;N@1r(ZVWPKsk|7T$ zn=Rz`iDDJYV@%jfo6NQnlU9LEaC~;qO|PMXm)WXRgFZ@Mb+3Ah;;Z?EbToO=sx(>1 z4d;nHJl)I6xAr1KOBQJ!FVl1~Qa5t1_f+Q?!WvSo-OBKWpog;!>nX=23V6!u)XSvH zE8aPGs>Pb>fBJ%>BfL471fImLf4VL=3AIckH&S%LJ2in2rsj3VjnFv|bbZ5H($&g= z5N15ZS5Vq}6&!9j1wi=ptg~15CO#zGL+m09IHT4ezOV4C(3V;A&qonD_5PGX5LU*1lvYf42`w z(}|M)6Q@W28y-yV3;*4U`2~s(QS_5P?R)N+^ldlNxY~~d&%7btoyh6ES(+yG3~@)~#Qb}Ikjsa8Z9ftnek}vK z@shf6Zk@0l`fV$3?MM0=FP*~a<0rhknLI-d^Eb>SWXR!*B6YY__O|x6xuj00K`T+E zDi4$PbceaaOsoh7))X>6e9k$i#BQFj)IwVK@}nuF1SMcbf6_Z_{-01)Sjf*8d0Brl zlm2v$xAYfNszKXqy-pZ8fb=eTE6mvu&X?*^L>gGq~pToiw+B^an8N(g~A4Z_ZO0Z$!7hV}V_=}d6kbRS)MHw^?MPkZGc z@(dkJonaGE_y_HS2(y(I;aU8Bt{6#{aCEmTTAx2>x26&!G18+Ja()Oe7()6R4d8m7 z@G3lyH{@GL%W-tpY{nVvG{aR4$6SnB#%OI;4-DS2MGhF~*0!3PhLXp9JaR1LdvOrE znHLU$dOjRVx*0vNy5GOgn}(A9eLb38Ouz4;Gw|#V{POlpwYIrDeHd9{^t4*YcNcl> zFj$4>Av_=9&D!%dJa6P`8c7H@T3md;BRXH>8sMk$tTZy(XgrN)KfW2X#!emz?LP2QXtUa%?kmj$&L`QSu2%^$Xl{{+%cInMQ z+&luQs#Ajwe|uJB$H9F22$CJwsdczXH4Nz)*Hk)A@hI(y>H+Dmtp+3CrU+s)&lpJ_ zpkBVbdL%e~qvcmKzc~_1k1bSLI(d|OC2@~YWN@#q#TS>@VR>oa09%xe$J;7A_ZRM@ z>1&=hirh!P`iR$!A|Li?tHGSfYl7qFmz_T4a#^o33;F62ht&<@+x&=c2|PfEjMkOd zX3FO;w}_tN=v)f3U)x@iua=AUwjCn*s;k5|OmJKs(;oMw_We$Z$?F1WoZGr9PA|5Q zFHecSmH~C%9upkDckR$wKi5~hO~e1Ie!pBVn3xssOkK5K&gZS`@gibTSXb_wLDm|* zi!qWXugoB$6TCND$l1ei*Q?OYY%!pWA<`qg>ww?Jy~e>S;!aX>~&+wefTdJgxMp zZ^H}wW1NpoAf2_jOOvN|3MHhNd@6X>LK0kZ zs#Log$di|J z#+`lL7@u^*f5L3%%=iY`gEf@-@V`$a$@JvQylEnNke(dEGbfP|wDaA3%_I_@@Nayn zN*1^+p08HDk&~Wc470Vf$wK~phSyKRUh2~=y!&LbDY!Eh=hJf{UQ3z`z&LoGOx~uS zY~3#)3tWT-f~(l#@oxhf{6A8=ChkP`jN zg%p!-GH8n0y;>qChLoW#`wnC-m~lL+J1;>bB-RG7`I<4nAeW}dg;ea6G+do;DzCho zjOhQdvu4I$0y_6AzFGRLDI)WUG1{>fIdNF)SLs{8)qBWL`tfz1c@K$>_ASF?8-)UF zJE&DVNG2b@FZ&GVW%rN|=trk`RyG+C{E-$QbeFqTfq}8_ z$!K@DU@Bfc_%>c<-2{v+!2(;_pO_uKVJ(uqMevPrxamd zdo7Y;@*fC0P+dlOM*6B-&$rGdlP1-TlE!LC-_|yEZu_z82K~v{D9byJ{mxuDHpZz-vFFVpcX=8U zVIcpQ$ZO`27mfai<9N==Cv*J$oth7|kb^7vv3wHk@9)&SXq&>Xj7ME{DKQX3GSVSVYi^&)Y(^zjPr7#z}>)0uQ{gSwIqc?eF0{ zG_jBaq;#bAr~D52r~EQMbvX_CW!$y^uF<7Q%M*0pSzfb{#M_@;NS^SddoFTyDKx2S zB@ApGlY8Bpr!6IehipNRM6ZoC7mz@eNfA;HD~xbjQm#NKaHaKKgzd2tWs z;^a{ac$?kJMn)6=fCi`F7E*bUTOYxBa$zZ17#wg74M$wPy1}t4_wp;H$V@w)vzs4B z#xQn+$lIsdvsRG@48h$@kSo-+I?u11;J7@Fw?0Gu!JjN6>9kuqzwj(9bIWx5g)(xP z1avEC--AyT)Hi6iGM#V}-UF;5+iABtUbBXT`)`~s?89vBR%0O>KjNp?kk^B|i4&oL zVpO=3{&6R%c$IH`j!gP<+?Y*k$!C=9;iuPPA=xONv5ve*H$?H4bujD=EA3w8nTN?jZ~EC$`=JlWyWQw}9^Cc?xr_FBl^^?p{1DfthmD{z@iOd6jaAf1 zHU*{liy5lYCs`$D192U*pZp(kFDdC?;J7`&xBb;WO^5p@J8t)Hl+U^CY5vfs7_?h) zt@-bC9r~60Vek$F|6lR_FLV^Hq+N-4 zl2l?3Z6d!K!k1J!Za-Yq;i>_Aj3+gdT_ukMI&MGGgv(3b#q97&lVjxV zN0PxP6;}qXEL^#`@^LN2Wy7@w*JfN*xFGl=P{bq0aGiAAE;8BIoFhh$l2>vZw_kxo z?XHe(9pV2QeMkI%hCAs4=h#DkASaFXo2{gn@UqLKpTCm#@X}d@iTUDzL3YtJW-rm6`WOeAhYafLV_$cRcvE|ggV;KI%$YmK zWH)!F&l^iNMmii7W?U5x2W!;t8*Of|z~K^Y0>9DMbyXa7IJR7II5s!w*OsM#i{-Tj zcPA{KMLXc<(_Pn=dPj-l^=gNsy4B&>1LU4s{r-Bg3l=zWX>Gv2UgUPIayaaTxK#bB zZE-kiA*gm?&^A~+i+14O%y(V2))Eq77zPd2;0kiw`ZXQ*V-ClfOx!Ws^{u#L@Qq1| zLLk(pK-@6{j%JdL8QsLa%;DI9{$#7eQK{ly<8bWE!X4Uq5q!vLhvRRJc$uU)9DfI% zS{#mj$++h_9Q#v1Krw@VfHAFiINq(r{ffi!UUx+?c;ViRd!)m0v=Vo-!}0!RUet}o z^}1RJ2|%O$z*K>7&*tN!@k%_4pD3IlX!$jMv>P4P^9sNVq8&d$UXE3*$Gt@~;Ah5F zg?U!-q(C}gN&z_S*AP1S1&3q1FJP;yjbJ+4b1=Phx3)m2VijPhMf*WQk_5FB@ajOC zNKW#Tfpl!oI5EHDxm624AW$f4W_$0Z8Fhd|3LgVCj&EZ zt-^JbcQ;Y|$0AdCwu$~@#HFPwxm1L!7?%y#DqLl_%5iPRRf($#S2eEvxDMeuit8Az zdV6Lpok~h}U_?bo;`~LzC=?HW4-Hny4x#ehP9*LczSC1qd}S`$$~xjZ_iDp81LxF` zAk+H$zbEk}M3|*#B@oV^M$q+1CxczBu(C8K5_b(BIMj*%TQb@%bi@buapGSK1+Jwd zKGdY+OH@(~oWTvR4-o!uCxbVDYco7SrwI`Cyc54)XviuM@~7crQk?h$u!lB-6eJqn z^n-@SX#sgN8;v(*=Qe`4^-czMXvk|#M|_WRC;pvAMd_5<5#RGuC;merKx9XJ?+XHt z|Kz7ij+y_Apl_QE9M6OX>N_&%-`zRD38>hssv~|-PbdEKL%rO{1;n=TM2~xY50-h9*P(k0yGxm zRw0q%rV)(Z?qqOQNYw@3a<@Y4eSmTaN;TiTv6KGe11o--%be?es{H!w9e!C|% z0-*uirw^UyQ<)1yGxYeO{jmi4Cgmw+I?brJ^0j9Aq_MJDg)`X0Q)r|?0z7RXUF@?n zOC`b!I?v)eX3|Lh}pks@HPL9Zc;?1LW*5i z1cs-i(#!F$M5^SK?$CCN;8jR^L6=p~aE8(ah%{Uo{H`I?9KSnHCA)2igu_5+94rXw z%OGTeaJLQDX1-+z9cO$sQzfq!@RlJo&F60rP584qm&c~jz5J`8w6jrfw6_jLFgLyy zDjb?erO`V1Z2vY*AgZy-ZzxcWzc;pu@wN4PqfE4F>$fjoJZkG#lO_nX^?RdLJZkIr zhPLe5`t5BNwA%W;akDFgw&EHQpe>1*6$B59P`W`4UbsL@`GwJRvvEHx_CO$i=1%%A z=kxs;^odUU8!?6EK)yDYMsvd$8frWcC;}Ic9Ro`Fe0dCA7=NGw!x=Wi0xG&JTQW-_ zcz2{^DoR4X0I*KNW#&)ZMW^_@nXM8L*}|U`S{ca~jiH_ReIw{YeBD^As*dKBW9dBl z<}vP#&rXeR!e-tq;Jqw#iqQ_Ic&Cw9ID6A0JQm8sC8`J`Cix2^jdDCh=^a zmPsRsu@0tJmt-%RNNvP;bf8L(*7Mtw=-WOYLRBKf#{DF$b|jCvo32vFqb!DIdI$yr zZQqhbhZCP;W|fF=+dZ$1cCArwwC}r{jv>b5FwzsD{PsN<|2ULzBGi5=Ta16a99=8< zuT$we#(E52pT^(1m(DcSXW%)L$4sL?`<#G`A{r<46H0%Ve~|-K>y7pwb7&a3?~|ig zKV5w%uHaEu--&wBs;TePR`IB*?-MUUpsBCHCLT5QHKd70%?$rtBxp7DHLT$?@1qBN zK0l;~`{arI<6Qa?|KWZ}pf~d0@2AI&r(q+fTlhb7X`}PGdImjjJl&#_GgbVBnV7eH zUNQ^qXR1{4#a8=lE4_m_f$g(tI5B>)RRnhX+j9g)0>A%-dJ|(~F?RW?-Dj={-#Wl! z^AWz!szB89wfVH4Q9lac@8#1wjc0SwzLopVr~Qp*j|m!k#(X+1hVIC;uPdYVlp-6< zc$PL$is;{OE&V4Rn)&bL^gKmO|86}UXrQ~U@VYHD)tG3Dx@6((wk`Sj=gRS z)_(_dSd^{+M=#xP!jv99ZKR)G;f41YqK#jsDg>o$ z#XW{NpD%OpoTDg%t9hNk1$ij=Pp$K2;EX}Fc&@ekW*c5GkOsbcnjzk^1|AZ?8>SgP z>kl^gp@2hdMrP31Xt19KgN?WY?=Rt6`{^7*UrIxBx!3)M=zz2J0)e8pGj7db5Xn>T zH_VLlSqj(#P6|fkuPXH^a)WJvi|w`d8%ijt<*73bBjUyYtrQ|&fRAB=@N4vo44@kP zysCWI#5d10MAOFx^4gh(m{BHhZ;<3asLC}=UrE+s4}(fpH3QC(Fhay}#7fU&Iy;Xj zE#rpHg7{D6gKnv$v#2Cj<>-=>nsLjhlq`28whZ8dZaNN7Q0xokvk`#g{Dwi;qcFDvqF*IlRc3RcO$48Ut7d8V5}u(dSH-G0 z`#-EIzn+HJQa9eus6@IUI`}GzH!{&A6FOKVgBMk0RX#e1#0oR=u2D(AZtj(5m`s-P zoIJy%(TlQy_R`Tli=5j|-P(PYtID26$k!ypS<{A3lz3U20Fjbe=kEzOu9PmFR`&X)DK@s>%kN10BB|VQ~ z$ucDV16BEFGU%le{Tfu|^dat*50lk5$~s?v*xYst2GavJqUcifRpEEZVcscJbTU4ca zAYkb-UG}SF3|tQZSTngUpQ*~FD&VEwy8PnY^y%`d$Q%oV{^h*YE~+x9g2s73z{6tlkBW2U@9>_#CKvE6;h*&~J+1CRbbCfNo~MNs?@bs?3Hov`WIT zh86HQQYPX3sxr9&t0ZTmex#B|Ed2C?u<-H4;3K8%8m%hlQn}YdhLK&ZU>B-)@48SW zaYa1mAw%@t`qo*WWY?XlvOX7VizMAXQ9g>jyToGy(JI82O6m$DEUbiB*^>Snl}uLn zG4PGM8%F2UN+x=&`T5Trl`uhMZBc|Qm*lE zDY09UO8yEurCIOS4X*RA(>!SbJQ`uZP%E47QqZBPcO)Y$|gS3H>xSgu8&O;s+I zVVDYuU#BX(nddJwOpe{`nnd7F$hf<~R>p%Myw|o>@Y4&CzAy==PJ&>k6K{h1Nu65| z67k(vc<3VJtwx@@2%#+vQDG76NgPTj1^S8vwWwrPCf~dWfw_ve2(;Lud9BgW!Sj&b z19@m6xLo0>g@|br>(E=8OYlEoE-)`eE<`YV?no=>v{~Z6ff*0l_;2=B8@ZbZKUE=fU_n28PyOk!k`B>UZL3J|EQ8j z#gfQ)751B2LgtA12I?KcG5^RbfTiH!(W)UXA06OCj!W2`ivt|(2YUR%aq{qG0Upw2 zf8-YrAz+q-=c>wk8GtJ!{0QQ54q&-@;T0tqKrD!qFdVhPibe<^y)xXclI4ZKUyuw= zsARwez&R5B38B;ju+&KSbyeA)jQ&e?d_*Ue`0aN2QG}R~5I~Fm`1Is(ca%ST0Fqj;gGzg8(Nre2EgdKcN zU?AgkB#iD`AyBFu@N<5QTV@o=s)zwFA9^@e}Kh_a}-WG z!`DCqaz;@|d{>HrkTwv7s4-gfut@=0A;3+*(rBZ-RWh*^uw1g}I3!NdUkV&8Uf*dy zU4ZB*NKqbWum)g!RKU@*aG;0=dQ)G5=zNt#V+Ky6iC%>qmVpjVhUL(hn1xe-S5-1d z47f@cF#0$&b`r3RE750FQg8vVoM7~is`8^3#p{LNx*48eMT`uRON$4G*n1D4w>#*1^BdtXMkTiU?;yN2vm`P^GhVbvno-` z+&a9XD%Y(j4x9`>QkAv!khomZ|Bp&G2%C{{A?Aik)zaluKg5<}NTF z^hb38O;4)IR2Z#uZ)#8uIQPl;E9j+=v4`F;NC5jz~ z4wY^laKQXY9^eAmVTnqL%n(4v`q)QRGW-f)X>_q0Ri)r4;6h2i9YzP0JB=>(HI)GUGt}Q5>24TjQw_;bnTMjQIPOVw z)_zieO{y~91O4TU<8~vv9RopkIp7iJ+dRqdgsMaybxkM^XZ$7NXuhpOE3zAA;LK+6 zUP#Acz#5%lJPuqYEQO7fN%#%~F5v~)63$SS&xFQ&C7i7i&roQ<+5aJxEXe?VtHeK| z#Xm6u8t{w9$xxqU5Y$Qn)Z|Zy88%6{QWYzKA7Fge5f3Yl7Xr&Ai2pnOVhtKoR9$27 z$AB+%!;5p2D!@*GzYPQd254jO8`5c(ee()KF$o&1{B^|%GbH@3xpQXSxoF|iC5sAXjeB_X 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");*/ }