From 3d40fb2d2c36b8727e2aa392b1552abb933ef4e7 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 18 Apr 2019 17:18:01 +0200 Subject: [PATCH] ctb address check, integration test added for ctb pattern --- integrationTests/config.h | 6 +- .../test-integrationDectector.cpp | 83 +++++++++++++++++- .../bin/ctbDetectorServer_developer | Bin 165760 -> 165552 bytes .../slsDetectorFunctionList.c | 69 +++++++-------- .../slsDetectorServer_funcs.c | 10 +-- slsSupportLib/include/versionAPI.h | 2 +- 6 files changed, 121 insertions(+), 49 deletions(-) diff --git a/integrationTests/config.h b/integrationTests/config.h index 32fd25ea9..cb8357b40 100644 --- a/integrationTests/config.h +++ b/integrationTests/config.h @@ -2,8 +2,8 @@ #include struct SingleDetectorConfig { slsDetectorDefs::detectorType type_enum = - slsDetectorDefs::detectorType::EIGER; - const std::string hostname = "beb031+beb032+"; - const std::string type_string = "Eiger"; + slsDetectorDefs::detectorType::CHIPTESTBOARD; + const std::string hostname = "bchip173"; + const std::string type_string = "Chiptestboard"; const std::string my_ip = "129.129.205.171"; }; diff --git a/integrationTests/test-integrationDectector.cpp b/integrationTests/test-integrationDectector.cpp index 0e138f384..6d4805752 100755 --- a/integrationTests/test-integrationDectector.cpp +++ b/integrationTests/test-integrationDectector.cpp @@ -224,7 +224,7 @@ TEST_CASE("Excersise all possible set timer functions", "[.integration]") { // d.freeSharedMemory(); // } -TEST_CASE("Eiger Dynamic Range with effect on rate correction and clock divider", "[.integration]") { +TEST_CASE("Eiger Dynamic Range with effect on rate correction and clock divider", "[.eigerintegration]") { SingleDetectorConfig c; int ratecorr = 125; @@ -276,3 +276,84 @@ TEST_CASE("Eiger Dynamic Range with effect on rate correction and clock divider" CHECK_THROWS_AS(m.setDynamicRange(4), sls::NonCriticalError); CHECK(m.getRateCorrection()==0); } + + +TEST_CASE("Chiptestboard Loading Patterns", "[.ctbintegration]") { + SingleDetectorConfig c; + + // pick up multi detector from shm id 0 + multiSlsDetector m(0); + + // ensure ctb detector type, hostname and online + REQUIRE(m.getDetectorTypeAsEnum()==c.type_enum); + REQUIRE(m.getHostname()==c.hostname); + REQUIRE(m.setOnline(true)==slsDetectorDefs::ONLINE_FLAG); + + uint64_t word = 0; + int addr = 0; + int level = 0; + const int MAX_ADDR = 0x7fff; + + word = 0xc000000000f47ff; + CHECK(m.setPatternIOControl(word) == word); + CHECK(m.setPatternIOControl(-1) == word); + CHECK(m.setPatternIOControl(0) == 0); + + CHECK(m.setPatternClockControl(word) == word); + CHECK(m.setPatternClockControl(-1) == word); + CHECK(m.setPatternClockControl(0) == 0); + + // testing pattern word will execute the pattern as well + addr = 0; + m.setPatternWord(addr, word); + CHECK(m.setPatternWord(addr, -1) == word); + addr = MAX_ADDR - 1; + m.setPatternWord(addr, word); + CHECK(m.setPatternWord(addr, -1) == word); + addr = 0x2FF; + m.setPatternWord(addr, word); + CHECK(m.setPatternWord(addr, -1) == word); + addr = MAX_ADDR; + CHECK_THROWS_AS(m.setPatternWord(addr, word), sls::NonCriticalError); + CHECK_THROWS_WITH(m.setPatternWord(addr, word), Catch::Matchers::Contains( "be between 0 and" )); + addr = -1; + CHECK_THROWS_AS(m.setPatternWord(addr, word), sls::NonCriticalError); + CHECK_THROWS_WITH(m.setPatternWord(addr, word), Catch::Matchers::Contains( "be between 0 and" )); + + addr = 0x2FF; + for (level = 0; level < 3; ++level) { + CHECK(m.setPatternWaitAddr(level, addr) == addr); + CHECK(m.setPatternWaitAddr(level, -1) == addr); + } + CHECK_THROWS_WITH(m.setPatternWaitAddr(-1, addr), Catch::Matchers::Contains( "be between 0 and" )); + CHECK_THROWS_WITH(m.setPatternWaitAddr(0, MAX_ADDR), Catch::Matchers::Contains( "be between 0 and" )); + + for (level = 0; level < 3; ++level) { + CHECK(m.setPatternWaitTime(level, word) == word); + CHECK(m.setPatternWaitTime(level, -1) == word); + } + CHECK_THROWS_WITH(m.setPatternWaitTime(-1, word), Catch::Matchers::Contains( "be between 0 and" )); + + { + int startaddr = addr; + int stopaddr = addr + 5; + int nloops = 2; + for (level = 0; level < 3; ++level) { + m.setPatternLoops(level, startaddr, stopaddr, nloops); + auto r = m.getPatternLoops(level); + CHECK(r[0] == startaddr); + CHECK(r[1] == stopaddr); + CHECK(r[2] == nloops); + } + m.setPatternLoops(-1, startaddr, stopaddr, nloops); + auto r = m.getPatternLoops(-1); + CHECK(r[0] == startaddr); + CHECK(r[1] == stopaddr); + CHECK(r[2] == -1); + + CHECK_THROWS_WITH(m.setPatternLoops(-1, startaddr, MAX_ADDR, nloops), + Catch::Matchers::Contains("be less than")); + CHECK_THROWS_WITH(m.setPatternLoops(-1, MAX_ADDR, stopaddr, nloops), + Catch::Matchers::Contains("be less than")); + } +} \ No newline at end of file diff --git a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer index 9d67955714fd61b37d3cadc8adcd9272c910d68b..90e50f437fbab8c0a8ee1601cb0bb53f053340a5 100755 GIT binary patch delta 64028 zcmb5X3tW`N_dotDH&;V_6jTt@MJ+FRSrruT3wR|=G|Wp@tD=%wVOn8PyPB1i7jXO} z^|5b@S|2Y|kXE~_)oN6xsH>u)qVD5^NQSr=)~e|K-sgGt*OhVQ?Zu}Ewtk@q z!0QLRerehXLP;z?xjFvk?&=e=52^e5XBOClh0MD2k^;41)vH*T&OxCK`?GrQP4Vyn`jb* zm4FZc#ebS0WDijxBnmlO0}z~rDs40E1v4jp^N|ke90l=lRgN{+!s$8jHC2wm!imp+ zIWC6RH`NCqDeViR)o3w>{xe%=Beu>)Z0%rc_prSNwy*iIjZ&Gc`4U^5$^@{HG|oBdh9?d!lyMJfmef(l>v8KcP6Qzb-gX@ae(@ zpHStpHTa_LTgb!NvbPcAu=6b6l;u@9$>iPb1w8vD8DAQ83HN49j_A_26G6k zdtfg^!(bJn{6tkM-@kS4GK))}kfzqJ)GdEJ0qK;t{O2&El*@c%)al+hQk@{~j5S(# z7Vm3yq{~*p!7A=<{pf8f0YS?fq$+m>h@j=I3fb1VRQX;=@3qZYXtZdHRN7XknT~T< z1xq|?HkWe%p7uq5&E3Qm)6z6jr{|A>f4)T#%;*Yy@nS;4SRi;BJO&7*O_L#X>p@MvfC_Zbrp8;C-Mkh6gBC?1Il# zYn!Gg0zUwO(>n`$3VH4gGx~o=x~J~icY~wYVdg@wM>@>L&>=i0zP*9(&*#SI)#?Ee z_h{Y$lIzem>cd(vlpRjHTuz)P5#YpLu%eRfDg>4j(mp!$b4v_3HUB1()7y%-#n{Z< zA4MO7oo5ebKZkS;@kE^=5lXa0la5c1-eE7cL$m>{?jejMi>{F@Iz9T>gXYV)Z6uhc{6A!U3n?xDPc5p)34xhEe0*>9`7E|x= zR`dbATYTvb53|fDP{-(mamXEq+=M$CYmAgT?~Vq!(+h5(;Zl*CiroHpv{v#EZgJ`z zEpn3!E+bcuTs?BT+|gMRq}*|LbQ#DVT5ty08OY8+cKDrC>m(_A@SRlT_9`evZYFXw zksEwRZ=EIO_PnDEJ^{QE z@Je8p-!$o*i)Kuu4<1QSoz#=!6^dj=pF zVfZ|Zea==pj4nbecb-(A?>%C^zwed3Y^z+mxk-td^Y$)gGpo~W-rmMqH|xp2zus)} z@qnjKX%-P8dvms+S?9;+tp6uFb~N&t4l7*2=Wqp|3l_KNXrOv_hZcgRdb+m%olERL zj~TA{igTy&fa}`~fx5%3k9YQYV1K}1#tN;4@S@%Raju|iB%BVy86ljJ^=r|_Fk%}9 z32Tl9Eg$;$T@-+~6?j|K+DV`QYXh`Wf^>oz6wIHmvrIw-8*VB_5Oa%+AbeYnMV+2w z&9RKvtDAPamnV`szuwx!;5UiULog@EIzOKUqDOBkw)59bvYpFYNzh>$HEf}HM;{HR z&w<®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

|xE%Bk@I1rgp$A$7d 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 delta 64830 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�aadi4R_bnqtt0Z0qoOPU&MaZ!W@bH z9EtrLtA1o+68hcbgGqh zOqB+1I7z+>kv@3R0@AZ`@R{3jPE*EnqK-{BL^lwyCAhpNCq|B8D-7W&e$TiB!*i4~ za67yZJx~aF&U#uIEFN*zNo6X1_oM>^+T@x!&m(dt6?4=6qzl|yjehi49EUrt@j4P<5;P5t$B3+b^@OZ_Ep-$W%70P+VYL1@ZnX`(%3G2bhCR?CSKx+7TEfW?(Vzqs_TF zClnmZPY@36tE_T{?g8wFWij2%n20i9D1-dk`RWgs>YrfG%zV)9*MWtyzdy5Cup21c zOqdxuc;zc}tQHKH#(9+Xnn-P)N|OEkFb6D(15VI!h0%-0iP2YHk^OzGqmH0;us*Z; zJb>vr3z_rf7VOhm&056+Up(+V@5A?zgs;mhY}c#@tyJ1AWX)#xiNKQ#LK^CKJgzu| zBacI`M1f76-7Zlzg6u!JP)&7ork0J;*(hDdM=e&OW?x)l+iwfkMeF=!*P!eg_S@{l z2Xx`bEP77g2n$MDfVJS5!o!YZ#KQzOe@?r>_Tja8s6goolz#b`B0=*pl3>sK@KAR@ zJ`mW?j?B?NK$@WoSnRV=Y~)idqULK2P(`zyPT`fa#v~zXe;ovt^Hdw-wwFC(<0G7A z2>jG&!DEy^tn}LyzkiXsKS)U3|AkG9Qhq1BVwQg>SClJ5StT_$|K(O%#rw4m*V{+i z_4o);7W`5)Wa)lShPbU0r zrZ)`N;;%ZK_iFu=!#h601D+lMV(C#X8C)ZXj4!95bMd7m zTAf$gA-vWb>*zDE{hX3;u@l|3C6z2*R}R0EN6$bIstBK;sq`X4aWywFMI2kHpr2WU;KlzZ5jXKRan z1UGWrwQ?ey1-53$2|HK^A#h!0pqs>EOnD#zvC>v`vmGW24tm z>Yts9qNTBc>m9?$qtOf8A>8vk1c&U1QR$P1j?#$uZqY*6tHDCdp&$ggSLnnv<@7L} z6C*_%u%%x2kil;7`OMkD$tv!AC>QU$v2?$&vgSGRiw*Yql7F0I&trX`ZD}mrC-=dJ zM|Ac#?`uU84%HD74t*tWU`g9;9+4eUHe{?vNO+GfqF$+s^_ko^c?UU7`v0SEvWB*myjU40g2+OXOdW((xG1@cTeqKNakBP7nCMH_9~ZGKDS zL^?)u*Nkx31q=ht zVQkzT-fugDVQ}!U(mMBHYTdipRGua-%ExzmC>wKFYMnNqc{m6^rL2~e4U!{lRA%!B z>}_X0OL~GcFR%~~wDE^M;8@Iq0Rx-IiT9xC)A0DNvM}!#LbQXp?ZdM zViT`Wb5SSPE7S-dw~t8N?tihiP|YZ7zMoJxp1fD6QU4*-AD;0G)e5v$uzlc=BGkVR zkx<`xkrOu!_Y2j5at@UH`H<50xDtSJFTD6qp&r@~p~gx=<<2(@SV7;<5@a&tf|mVq z_sD9x;E>tg0jAG^Z3ZX$+y%0(!vgvh{pln9i9}il$u4I57PQvAwV&2C-V37V>;DJE zw$G5`*R7A2WXz!wTs0J+IAKTNRvz()-F$@7B|_(3z)lUDx-hg`(*6=KrVwiIAB0Y^ z0a=koSDDsc%PthmZfkL(x4v{MQla(0Oj7 zbpE;3fBq>>_A-=m(19;QNcg!BelCPR&d0<{5)+NU#Dsq^G1uX+I|2mp;68tX6YI_+ zohMs1N>?zOmkweFW4;adG7@r-v_Q6B`Cug!~-sRKJqlS#sfLP-Rya$ezC2wzn87p13W%1)7#Q8y7{BndO128W4k+;l@B2v zKVU+o3t7W-hFRE%X^ne>wVYICV#a3nQEX-(or~?79dngbkEl677nR7B>VCisOxv@h zLG&;t)a(L!8xHH!eSz!w&%-%!L2I?45LX=H*}fMeyH5sNlaEdXTPOA_8zbBS3y`s_ zX;|9Oo!;yMkGNx(Ea^=wGJD``?*;@@#;ii^x4nVX=yG%}@aG=&h$dJQTuA{(-|sI0 z_TgE*wTU)7t1t$x{mxGM$5Qef=2pJoKY z_~d>kFkV}z!(T`1Ox&gd3j8OYrzFHFL-(Yg1m2Y4@pT*e2SKOBh6UdD1B3twRvjc< zN24L&di!Z05Rth3E@1g(p@L;hUMo8~-xWsG?og!=u39`V#3df*~(r<=Z1AJT>s_qD5|#l_Bc3VGV>ReDmfzQ^`>M`OGH zoMT>iN}6Nd`CZnKY=<((#DKdPaQC{8yF!V(0pRW}miTh0Zsnf9Ip)EJ4U0aR&`>X- zUOqwzAd~2vzf>|KAXP?rS*Y{Chz5#;!kIME^ zu~#&*1-5l@=mVB|izPZHFP&F?bk=~*8qj&$M`wdXClPd(--pg8|3N2SqLb>S)89v@ z1awM3XNZr^T#3$|`FK$2K6EA!od@i?RL>?gOHz9Y{k2ySTqOuqf{@Bb=wXSF4TOU4 zAw*|z&HsatMIvO}zEkd@?|g*R$8c%o7_N}-ReI>mUh1LeL1^od+C4;s_V4yfatXVJtRUqBPL(aXv+dpUcf=)fU83x`*6U@H!6E!eBa@*ua0lObV_R?tr zS?{@f(}4O;rq6ar*Bvp4?6e1hhb1G`nkZNu{|;AEI6U%2Do$K9TZwzb$i2$FV*OqN za2~9M)1>92Z9P!69IY!y>+0@RR=yqgI#7HI+h`p0n4gUQ8VP?qMBtAvu)S_G*$VKK z=6oDGxGeNh5GVdT$<%x)Bnxx^nu8$k7L1l+#^0NVW-}FS;F2p6Yj>q z!wLz-PCvcNYp4IyKUUA8oo8dz4q2@m?6KGfOCM~gPe83tU|dM@Ad3AZdF*-4;oVhe zu}j&Nj?~jMj%6?E#GuZtGG!=eB`!BUC+|x4I#EaHCAp8v4p+)yY4K#N<#W~DRolmJ z{2;#%Zr`UfX@p=4#dp+5hnlj7y9A7H_)TuynzBs$4DAvdlTP#T)%Xb=ux@xg|0^{EZd(w#ouNk*2n$@xoia2FnQ&7CY%yl@Sx((vDA-wgl zqFW`m$+4TdYPy#&-U+C{W&esLHX`x9L?ZmFLkbVE$c(KRtQ!oUxz7xuADefmmsXJo zKGS>7VOI*Lp>SHo0SVKS5+;7(J(!p|H)`+`NF=GJNiVYP4Al$sDsWS(0v{>tRy@c_ zyGa$UJfq+)0`4L&m#rn-eR~{&T|>q4iq|07rn_kjkzd$nH)+T3s7gexZ_(nLGP=$i zA-VEce7%8vLrFjHrxHI;htPoaHrP3}i*RazvyO!G!)LU3T+3@J;9b(=awWi2Lhn^e z58BbLe`oBosdVu_z@5fjk<#ArU-K*JyTs@jCAg&!4Q@(OZ0+!0c!Q=PxMbQHmrOg; zYf9_zK=O7}*)F}9M-SflAaUm$1tO+t%THwpLZ{4Td2dD=AD^xe<3HFoxRWpsN4|%UNmx(H&nln7%y3G1AO?$2@Zdg4;$JnMUen@{&z~aLG@f45iUS-c!Ar-} zYg&51dI`=MPp@gE15TIV?D6!P)*QfdBsgs+ahkp>H@_{lyTpcFd?!`_bLd(aEWZv2mH zR-$1BUZ**Y*J)0Zrph-TF8W^GY9hV5_36{p9C~R>QLn8~ukC2e_S3j?goiA*<7(Bu zyAJytdC6OSmlXT;fL8fAAB{JzlomBB;KUYl+;q)&cJsducJ_3%{wBa$s zdg&hyE2%kGMFcCs$>BjNOK@OpZH0ga2Ro2^wwhkB_euclDYDpQqvv517PW#tI1%U-MpgC6kjoG?Kw&O% zOtHPLHX5aiu|bQQU*>S#>oalx3=Q1Ur&h_dfd_1LV4hkE0hn}L(b6=ZDZ-JhXK6*ck3;YVxzyy{hh^=4VIruyp ze4d?H-qRZkUD4ee8==HD8dpTCj8ehgP4mW>@eu#xoaPG{opNYdIkfE7E!v?YEz{mM zVYGdV{ebhxJMWAZf_QqvT{nh)av>hB3_Nz^RHK&jmSU=cZnP%q-uu@IDpldA%wi6&pcag31ri7G6=2O{DT2(X+_&C1dRr!~ z1!A08i(lMQcGpU8k&iT9BAo)OBG+i1_c)B294CEhVlaL+s(+fIQiFwf0SDlMe1Wx* zbVci>TgoQeXSc}Wbe%)q#O}Ma5oZ8d1IW&~r8qsyZ;{gzHHWSiWg|Bmxf5tjV+9?ay?&{K^v9(ux1j?oRtMt4Zv zWUP2z_VE;8B&>2=!paurj~=}WZCNGQ3SKIJw_l^Q=ffImPy1O4#umUW<7$qWjETm9 z%w03YWZpva&avoETC%tgniVO&(%IrcJ70N6{8U74Bf-_h<*N|oso{lx7nbw(R zqg3bx6w;!Q7KN_6Nja%d%Nh#`{colPx`-=ayygi7}3htb9cGdFJ_o2NG9 z*yn2(eV$#Q!p`!$DYUcP?{l{V<)#GgE_Y0(JX?WW@`YM?>-Ci9#uPfYR{D^Ebje5l zxKhN4@g#4qCB%l!Z84L5yt4H$V-nX$6OLht0qwE`8RX(o0aZ7T*t~&fn>WyxT45p% z;zW;l=5J~-t-k9?E&h;sR<;i5CF1BzWNlZ)4$XuKuL~8g+eaP}YQ)ujG$ z5q~jWHP=A(jQgeqNn1q8#YTfo|7dWS~f>SN|dd_3Cs||9T_n z{9Z5oFo+XoeS#&b&^$g!IQV@Xod$E&+QD=Zi~$B5ZZ_qkmh~r2r^{;eu8Q%ahg$QM z7*v%ubAMpXmGG0ZxlY0#&+H$Kn3;+asVLzQ$4KwUkaS-Bi_|z|`c@lFnu-$=!s&%f zl+LX5hzSxdG6Yj4T&`()As>19l{DnL_%Hz{FbV9bk9!)U&_PjNeb6GV_3A?m;xS%* zh($css}FIA$9eTZhq$hfTQZ%!5bxC|{&O;^@rcLw$ws`k8I@^~@Z}hkroGsqhO|Z| zE!$3+v>ca7GyR%2yi9>QOvcZiT@&X`q`vbee!XUBR~b9$jEt5{s*IFs%P6Ue+!og6 zlO8etDi0`_^-0$dxy`Kblm6a1q*XE*YS_KCS;(i${(l93__S-VqY|&KvJ0O^H{hqH zK(r)Y7WP@!2<|Ly9-Z}wy{c)5Qx8w5ranB+CVkekbvSav&)zhXzG$kIP0sGs4wNWi z>pvUcSBDZh)Ia2VY@|kdY-Fi{rrQMMCLs5>8;SwBc!RJnV*Sh=Mj6hk1Ou?g7tk7n zXqay(G=955G}7VU=HRISh2^GsR`XJID<90~@w%I{u^a@Q#q3*i^Prvvw!<8!2-9sI z+_w;Ug=f{eJn05+5uhRo!kQ3q>scF~ErNlUIHb`sQsVF=n_n=@Sb-81;J@a&BAqr; z?l7UuRaiRU?6a%Hqq3Kk% z(k~9gCH*8FYN;6zAr^VD=UC>K zEhZg!A_Wp4DG&iUMg(TnB9H_E{=5u{Kn9RxfWV(FWy#R$ngs;bfxtZE&11rsEsd*z zUzRN4mt%y#3vi_Q8qfgv{do^b_*VhPD&XJZQmldCB5RNd{6)wsLf!_K;@%&0IgvLF z)MR}iYKY-80(b}5IKH9Qg&SmP9lD_uqMQrJfjs-oFt*AZtB) z^Q+V-g=?pe>kdBZ?8;Z+;YtH+m3KWJv57ykO<~)?Zb-xpiF_};4MJ1Gap`T4rzT^y zcpj_8^EUHMwEWAfio|wZC5cU#oFZg{#q2(8Nnt`_42s5_ClNh=Rq@O}x{9`l9eo8u z^U}?Fp%r|cGkwU{iTWc*h)a@3(MaYgj0oP}7b`~AdR@zBGJr4RJUsNPiU)7FN?LJs zQg&sv2e)by<-v6W*lNs#?dkeK!ZNJ!CC{lZ<@z08IdxDkJRg&oT~+N_1RO6R=!K=A zvy>IA3vFzdFsBGPXjD!gwryQ(a49lN+0}K;$FWIdu6vo}8xeFkq!-i|a9VW%zm9c9 z85mctSis^dljxqKM;vz7gfSk4Qc)N3FzI}Mg#<$`;PERYn5Wo;uRC^)M}9o8I($-&w9n0nt954JNkzHT3(WF$SpA-pu)+aoV0*r9*}B~%v*N{ZnbI}jmUz4n zEklW=Otn7L*bwE{09pewBd#c)gFSmi2Qqgi(v2C9xbu!G4rH4?IBixBs z^eA^>qQm-{;PI&OESFwzpqvBP+Fntn5Or&txgmRe^U1-x)kGg(4Y}+QFTmrDIyG%<| z>ZZMy%_#MR7h8uwY*9e>!DXf2H($1(;0Umk0VEl$pr~bhzlrpj8jsJ^mf+`O)M_F}4i5&iZJ&2}`NymHNPk*29!HF#g@j$a3XtrN$3N(qA zm374|>1CEbCt&jkx#bs|*%o0{)crCITbfuOzw82mvux@&k;Yu;c&^u*S&H~luQ#&{ z@nzmQ)`YmpJICfDp6{JwS0TR2JIAg;e9b-H4E>M?_Xp<4KX8}wl0sc0QU7>C3g|W% zjXz|#Wj4sfb#sxYBa$OKOWhD<3Y5>dI$vP)H)fuF9*3^e=~27a$qzoenGQk7A#>l@k{(wtq}8fJ>u>6fj^0`?N|sQ*5l`==%0E4YGaEE^4upUB z4`r&ZcT;-s|8d=(z5%sjQutpS3*XvkPs5);C{y9PuGI~)%1{(?loXjccT+#Oz<K-dM$F4mfjEMA8gUci2;wos zw;;ad5^gzOR0PFIa(Zuk3a}Dp`YMRlQx24LpyZB=%GCSEMM%UbzT`W!qJ2e}MHEC3 zzs~S3=OI!`kGhPx=Q1uU1f-LwlaZc$8M}89Vw&@RA;jXy@%SZ3xCm!FTA}_xx~CI4 z(Tnl?5Y$UYz4XgQyum5)PICF;q7xN+jPE44?X3>Y}naKIkIZ_r2`BjS zE3hF~@H3bf$hgxAvF$|*N)3y3gANPpo?<%ztg{7dk^a`#UByKLk_FfU`D*gWOGT>Pj zfalE%q=VGT^%tBSL9D-*g=S#Eg2EQCmvuoIkgG3{mc%~JDmH~bQ-D7R7r~NLZtr-@Mi>RpSLd{1mC=Su|3ni#|eH=Z0))S<| zuVN?Ss=puYZ0h%+#$h8ID3zMnNvK56D`)d~MPoKecGvJc8$MS-&G@UBJfxNpS6weS zQR}C1CQvVngd>F#sVLz-uQaQ*)U2X${=uV|wL~HND!xv-D(zaZ8{fAaZyG1>V9>26 zPV6v3t;0ji>QJ<*1b9oXlGV8PRiGEfk=x%C?W#tZYS1p0XcKow&XY)IvZ+5bH*Uh{ z-vqm&3^@*3zqtqp%2;s@*VB%e1tl#067cu9^YpB}oGzdE$yg|^)Kuk3_(LzcG<*~m!UYTAf->u&%zA99pC=cK6y=5UP+u_^r`Ix3 z`4J15D8)aB#>pp6FiLu}nP(W6q0F?g3~W*`uR8oajUPxL%)s%)Hxc=WLVaovjBO|bk5e) zrp8%YNH~2SMzIb7!svA!d)?PJLl(`zs@w#K>>Q~pvH03KQdhqD{dv^dbd84V>!IFI zVczu+ERdhDweHbukRMYE=`kb1G(dXHXxG^LHnzytwW)%r?u`(k?u{T@D4S}Fn7ro^ zKeGK*${7BuiZuO=`y!*RX%3NK8H(T$f2dNl|3npO;9S&_g~tq=V}sYA*c!HcbIV>y zV@Y{&O&fnpl!XSq%Ej&l%A5zP7piDULDK!WN(WS(#t(NvzoQCM|HS42JB(;h0|O_FBp(vsK&=XRmxdWMwJ=W&ao%#^ncRzsEo6U%w9Q5GSiIVeFA9=fn=j( z_MaXxSt3a7eM%zeW&?hj5WExwm$KDAwN`CrKmOD%coRx*VyAy1;rokQyWg%800+W5lHbyddeL+Me9_^QR8epRnv)v86F_AkGE{4~L7m*>T`SLKXS3w&ko*$t`0B7|94=9HAq(>zQ?UbPk zszRVD{A;`}NJ_V{@3(d^zB0xmo~)v~f7o9F`$d1@2KyQ6SsIWb(u+VJj8cQZ&C&iD zp(*;e5~V9qde<4noLoI)0rRiog(fR3v$cx(0SzFJ|8hY(5P`LPDUG{1T?;RjOxzv)y2%wh*Tj5<#SM8a1zIoDhSexsUJK>{>w;I z@b#qhL%Kdl%*EXZ8IonFFwKc7Uk=IHS3}ahO(3`l1lKtgv$NMp1LX;cUJHpqBPkV~ z&E7`g+bGPOiV3nhNn*pK*7!GoxbwlBA_aQ2AGamAB|FqhQqW1%QG8yh-j@%S6!|$J zzc47P0>cG!!v*W&hV}N5G)g2JKjt45A)I`|AZrJU-5Fz)l?F}>9wx`LKG?Q&;O3S5 zYb7=KHSY`1W?6w~&ZZLD84he|^a8zJZh8o%nU7#!iQtY@htJH?>LmjuGr-v0(~2zG zN#(vv)e4`o-8*|mWT8YBN*wW(xOJMO^$u%U+BYH>xw**Q;LANIOQ)o+LGBvl zE;#MnELh2iuRQI<*44wQIOy;Vh!dE=icqo$C7(FW*;Uf?w&XMiDouSQS+n2c+HG;; z=QZ5d@n*I%A$31ZPdO3l$4_ff0edpPzZ_hKa%D{Ty|oGl?!WhL?-!&(m~==<#non% zKhGxYdPs#U3A;Lb1y9PNslm2w4OVHV=(`4@^TjCx==6A0sZT#<4*>}Dcc-AF`tcJM z9kA$tWzs3-9j2U9nZVKnSpI1xc--XE;76r!>4CyYsISZ_>%Tk7D3`}`LO7H6#?clf z)s08Ru$1}S}aQt@Apo-{#9vr49I6k%G&tkO}~tRoe1za13admR2-^BC(YndoiY?^oQd2_M>R@!5~Sv1;=b6_bo4J)jc-c-60E2o-}s_~}o_oX_J z+ALh@oouu%8*STNq1aegg%d0oM<~SUj9IO2Hr7`qA64?HL!~F3XdXCPLAGPo2+UHq z)S3poj9fwBs?`tuzagd2C1dC$Gt*wJG43X&x|{y1(wl&O6VN|jK|TaceIHd=fWG61 z8gu^w@;drAF`!qnD>)gNr!z77##U@q(?u31TKB_at@TX(Y$_H_#xj@;ol z*{*$s5%Un8hk|QPkS(CD+gbBHAhBKEVD!3HcrL5`x=Ek7mdYjJvKW&-~gkZX`QGh(x&8dLnPms81 z!TiJt64#|+Q*BzDtI+`Ff-tpWcH7d8X9nBwk@9((Z@aDooMPd;9XP>ZeOzore zpj7u3XT+aGkg9V+aTsDxki>r+mX49^M?v=y{3t?ko=ynjZlRy0`uGGE4g|5PK0!UP za#*ig^&{b?`0Eo3t0Wc%qyj~%gksxqQddH8?zj^uUKkci0~Pt1w@4b_9ar4dqsLvy zpT(ve7!f@A4!#p*-yDbxEw&y_0gm%N|C#tl50)+DfPG)hBs-G?*?&x$;|0 z@!k(E2pv}zX)hkv182xErac%I??MsREkc3|?Z@e~hkEeI<7p^zd8oCZ279m{bfG(H ziZhC7UEC7K^yN{Z^&bvA+zEOZcM93Z2P4B??Rsy8}{Ol z+?H8Acubks+{X;y*c&f zEzV8BW_&v*v;IykPF`=%iBGfDhgyeK#Ral%LWM>$>l15L5To&_xR>>8Fp}+Mee5x1 zh-4qj0VDN>Hogz*`KXcaWxf9~W!OwPWbs_@kDm|9W?>-NsF)QiAKks|eSW%h8Fn@Q?JR%l7;Eow=9J8EoKq+YJ9 zlTMdgNa}3Vk=DT#C{e-YA8Gl>=ph*rhPYZ7s*zvq#gJQ0V~I3wUAY4o;?a1;m1R4Q z#EeqBTDqVtv#h}=(A<#~Wt{X>7FB<#+==S-htS6$u_zIHhYrVvlq=(CZn+EjHLTy! zeiPhxv2k%%G1-Qx^QXe{pP*Nhu#u0traMz@3ov3djNNe+t6nVN^v&!51S zUgvuiWf>b(-g^A8c7ej4rsc%Von+ir;I?{kA2_P?`rk*X*WXMo)oQ192krsD-T5E5 z#}IDgXSHz00(XuVcR6sEdvUKis&wQ}N2w!IlUHc+8`!50I$Dcsisd00@sDbHsaojrTGd*hh0kIg9vybBV;~(eoQ-8V zlWJ8+2c3ifIwk+8b}p9K3+q*@+D~|3p?OC(^n?Mo;;;{LcE3FY0+8>-IiSq39t;G} zP4j-+HOp2g^bOx*Na06Z5b;;+|y$fu!c_$wwm#4 z@3hyzrc^Y4G_WY2M~}bY3wWomjCVhx8Lo^a3I-1@26~iBflGW$e07+Z=)-=g7#JpR zSU^I!&kP3;>o8qk#-EG{@kaZfY&%?zHqBGluZv05DeYO(S3mycDt&9HU<%x1r)!7x z{CL-%d}N3N+celVsl=0NnkM0R1_M?7Y0=m@QL7tD-lvk@>})7^(H^0tpC0k1u@0vO zMCL+DxgMJttFS|gk5+n!RCqjlTH~t+rLthnNWgA5zk*L^T$@;08T64)KOc)X0f=TB3H7^*y~PGK_=E z#}%WuZy!|DKU%_SVY^Rv3|@@<#jNIZ$H-K~QaR%LS6|8htL$vxqN?(Tf6jQp0S6rw z5DjfIGE&qD2?5cN(9q09qt;w=QBlcAiO9&zL3~3&7aeubTo+$5^Y06yIiRi~qL`VX zQL!!=qvV?F8tdO&B$DTQW*D`0d-i$!e13lKIrqH$&hNaRd*^cHb5$j8S_juX=26D| zGV3dKk3EpjRlYOivb!PoI71Gx?y1{l`FUfAa6XNzAx@1mPT=RtDr%uU^mApEswW$# zq#c@K`ekD=u5?-5pB;^_q!hBWuqXAvk7UlN<&vHhOrNV^e$SKYWGn5^P}W`4+1R@k z>GLZUsm^~ANHRh4{Q8{REKSaj^elC%6G*jY@lea%#`|8J`oMl-?3e0+PwqMQf~4qN z5(+$N-F5L1kJD0Z=)b!7h^5Pu-gyl#eiZyxG(f4`29?|J z?GESXWmNXX&d7Ae z)`nPvz8!AK;&v9dO=sO3fnjHr=GB8s3r&s~ArtuQ`^CaT&zVXKc@9kI?S%Gne(OhR z($D#=pFa;SDXf{wYkY(pV&Vxq;i?GtLzQZSDqOd-sttZHn91;b;h_*xGx0|?hw2m9 zjS#rO`p<7WPqjKT4QN)G4klP9XQoDtTGd)EopgSuMH%-WRShIIcW~pB`@fW?zHY8Y zoc@?Bgg7CZ>SVi|v6NZPIb%(-zI^$KPOhU_*Uv0m*VdxT!7s-XEuO4icIvGnt*BCZ zcOOj47yNCY&(#Zzu4~)pk5SSI#F#*ggetf7->6c3MQe>wsA7zC#hCZGnkX}fkzpPB zH$QoG-*5lcMtbDok!St=6~6($i@rCiCh-W;U#dwks+b4RgxN|qD?Y2^^i1t2_kE^L z&tk3bU+FVwcxcHc^=20UH8XDbi|gUygZ;n$MQ}}#u>eHFu6vEYvdaCnL3G6mVfaxLE(6<{k#62 zfgU~gE;y1plNw@jj{jrByqS!ln@}R~ua!b?}R%d72>$apb`NaR; z`t08acMT#$kSCuuJEK-!s+m1;hJJae!n)<}4|R>_ZajDYm+xS>_P7COinz=4`}YUB zrgArxyMN)kK}Vf&?|fRu-R0Jf*B?2V0C=&_wf3NG@fUvvoI6dne+_vpSb%$ z(Tx;6v%_4?nGdsXy^wd7_%g2{_N9pmNtS%#X;UjEp9eIEzdLDYWl&{HG=>dUNrQN-F6=Tu~O(e z>x(~h_jDDfLh5 zUa97OHJsK~s#gDs_4&rf2Zng_#XE0l&Ub!M&5R4d#mgqdi|}qLT*=6>;BGG4ow;!M z)%d$d-Ej+l7Ps(F6*1mDr9R-FNE(UOCvW?yGr8Mix~AYxK^NWK^d5Dl#}s|LuSY(2 z^R559-C0_#9!-2B2={hEmz{8z@!J!sj2YIan)-IF=5952|9C=`ON~3_Cset{SeG_E z;G;ePuKxZ?1ECtMdz-rUGY?Q7wK1Bz@&SD7p=X%{!rJjvrk$Ffra5y^Y2-R{=r+LG z*c2|St^I%O;xVCJ8;+iy`LVm?*I++B`KUYTOrmEJy(eF@=6lD--A(1e6RN4~wtn`b zpT}Y19=3i*+*Q`L&HcMJ5T~JC%cXJaTz`)}v!|m3TvyQ7K ztD60L$5oRJvmR@n^mH;|k_}4v*t-s1@z7k;w zaV}t+c%RGlm1@@xghS_*%ECskz}EYnRw_RxR39c(AHFWx`ZaNt%jgQVcIaSXr$e1f+pxJZ^4Bsvj2%lO4bcJ5m^zhubEMR{w6h^7 zAkJiRShfp(k>l7QTuEf{4tm0&ED~Ws{+l$uu55DbbcWddD;GFBfeq>NLnEiL^mwcM|D-d}diePXibSP}P! znCD_4#(-<1-!HJL8GR+~e|sW2%vN zGB@qyK^>pj&yLYq_-a8y>HNf~T^&~@m3B2R;E%}Y&1t1FG4=(uMaVj#{$F=O4LM02 zI2rBm5bh_Axt9&&k5!T6cl`&MRJcVaRBA&LRpPNRIx&;@y&_s3p0Rs=??{TB~XlWzA z_lbR>DhQ8_PH#H_Z;w;~);isLl$*!iETnCFbn=ldpC5OhSF{o8xd&f=V6VDO-R#oA zQ@T1}Pltx*hqjJwq@N|n9mDwr&&DY&mp0uLhK@#t$a3}EUH#ZE-o%RT>!YzeTNuf+ zg^?|nT8_my_>l|3UmQBBY@ych{!UxG*RSQ$B?mvD(ea#}k`6{m6DxwDFSy)YDY^20 zT>1BL9BE;5>h$nAZX%Ihc+>VAv^@uB3P)8FQ1y4^sI97v>^6Nn*={G>oz84kjI&2o z6(sd@rP5rXH+!)|QCXa?F!4;5S5Y5#xv#5x>hVAKPFJY7-{NyGx9q#Qy>A<%Nx$Eh zky#m;%{=OUxNSX}MrJ+xsmLEyBvIQgRn_yB-yLey@xDmmPf0U`7t8R3%z3o9;PUc23H>%6rwRXEq znJ=fW8gOpvm<_=CIE7 z#TNCOGWE5VDc=02Mp^Zz7%Kq{}sYF zkEJl|e}EovRP{91FTK=vJM>OVsQy!C`_WVO*VX;a7SdLRk1}>@>o9gwzsGm2@?C$0 z^qVfK)R#X}m7omV&RGfTLpqt7cB;37_?=NFerME)iuy=ZLI7cIe`MR;Rt8vl9Alzw zj;Gh;2*$2*SC{_>O7J=Ny~cz#^<($WM;ykv~zly^7v#0z} zdy^j)d&5~EHQ2AWy`rbNx!<5DdrEbK-T^AFVsaIehbF4)e5W2ClpFc$1dWr_aHo71 zmGi4$=UZaNmBFE9_)IPjw%zkHQhBZStyR1vplV;eG*texmxg{9P-G$M+hjMwS?KZ3 z%wAV+XQ9X5E%fUYy3gH0`>!-PW(#&n<-8M>>$)DtwQ+$y>FD#S=Z>NLg_OUr(+@=h zTg$KhOxSlv+%s1Dk5rGb{ISnnO(}`Vk;#LIIVAl|d9d~6qI>sZ?kkb1&t2-H%6xwF z{`aQXEAsNPs*g@gKXn}IxmvyYI^n%1#r&xnr}Cn_add;Nt+$Nq>Nu(fxmp@jEe&ek z5%=7+#rC4Ne8A7QGpD4TRo|L+SN&YuQg7Ma=zbN=t*GsQw`4Etd`HZ7o@>)0(pJAq zRj-1!&OIouj=^2M%O229o|K+JoxL1Eo$Z$mGTY#pj3c?TeP&mA+0%0?j;)>T<4y8R zCy)Bh-i~^E-vRO=U2H=n!(ya6&1)XPp{jwuy4l0v=Nn;udg{|=UM-nU(Whrk_vU}* z=;>X|lgZgUy{(y(|LL~;CuHy8=IODHoBdTd6+*|gx*IcnvWRi|n~80n&K|J8iknQc zOCG3RK{8rL5vr}(E6D)YhD-B(Nx70y3I2LgDI}HBnv}|3C8a{!W{1nDt|x;%9f;{! z$Ejc+43rVxDn_dsy(45raQr~tKp%L|mM$yCv=-|= zTlz=J-j*bCNgDY4%C;sUX6#HTY`G+UdUfS6!|g6}cCmVACa4bPb>rYzM_urZ!|W=9 z`GHNa4i_Kt_GgvOWPG&Ctk7Yzlx>H#+BR8a(fIz_+}5X8z>6Foo4KR(_(RbQ{@Aih z!!G8Lhetk0Bv&!-DK=TWSjz95or>8nM9O*6VlWpJ7VNFr8?blWUOqEpHm)339Iz%O zen{Y(=EdqIGG~iW8hASMQI)CcIN8}Ep5?v|qFTgMVKKLDjZxcQ=cuLaD9u#J+Wzz> zLX33OP;E85GZ|3)EUC2hGCybaO7h{-RzFDg@-&)#97eOv7%ih-sQ2ajKfdKjs#%MR zkLiWD=An`rim&=Hmg}xcn6Jd^RReY2fvtBgbQOS$!cvO_O*lMPU)%l>n&&!eE$NVAU2^r?gmnVpu;MXy3ggGZkdU*u$+If7#biL;YM;u|} z{2nU4Jaw0 zsoXqFD!wqB=#pYPG)(sOPxEW%Nb`Hed^~x$Bgapqc!YUE`<-FZEE8*J7B&4n^}&Ju zq0c)9t0DhSgVki=$vf#oWrW$o(BAiHMuU45VatA6n*UqnRXr{J@2fmp!_zYO#s7PS zPZmEM_TZQBiR7%)MVLJeUcbnBvY6Q3 zFT19#EME4s+$)AVu@6b?rgORC8h6zAta@YC-4Xidy;1c<)gx73yE{G`hEw_OAy)W2 z8Q@NfuG5-MZGZZy@s}Od_Sy(J7_EeJDDg^CqkamnsXGU2-U4&y&^TRv{Pq57m@Jej z_M`nJW+QhuR0ero?->xperuRvnXk^IB@LrA9*AG4#k}P1h@-|CWvjO4$rk5Oqk6FF zzp8-A_ZN=IM-3%v3{kVjRN)uu8n$Yk3AhF#HG#PXAr;p(2tBvb72Y$cZ)gmIbif*O zd{iJGqM~xtKxj1h@E7f#o@#Je%Vlv}$w(Q|?OqVCz@L}f?){9+_h@fs0%p_-l}w1{ zP}}wd84;Ws+18O7sYb32=2eq;skybixIT+1M69DQl7}LZHvJeD4vF1;9Esg+A!B5? z=W0LcSnX#^86yw2-|DAQ4&Xb`{Pxq&W*#d8{kGCSxB4v`pHS#&@=9hT48}^fNn_QD2d7P2}f^e)Jy_wG|}E@X`0u>0jT%YXVB4Z)d64&pOlU zf=Wk(o}xQ5k7VZijn~TgUOv8VC7sh-tD?5RNwRlj9ZJ`k)w{^8S1e{b_&!StK1lDC zv1V^&k4ssiL+Ff^VSDOp*@{uQTr%tBT=6kjWyq-CLvFw?eU1PLXTc2ZsijON&Fz!J%GirrKzg0ru=< z*-bK%#ySK=zBf#XP}hJLY4Z2&^FujYp`GQ^$n!&O71N~2ub$iW&h&JFD*Y?Cuh?!+ zlaUWxb9O&($2CkK4BhyolheussIxsgU3T#dB$vQw+l=Wl@ZlP~Ya$!Bs36WXB1^b_ zD6~^(@6dQhZKNJ0KA0{a92-F40z&mG8HiZlso#8<@G*rxZ`H4Si;n(?fzPVp6Bz0| zC1SwRnVu)n`pC>JN>!uv8I*5_sKPi4GAc!O3-G`oKB1Guf4UpkKjjHV;U{7Z9u(3T z>iU^X&I~?(Fynqd1J&TPm)({kzmgs|*(uz#zdl3eYWkc&V+qf^0&SkN95Pp|7~Ut&0yip_T^yOA-!r<85y#|GdR?FJ>(79+ay$wsH zk+{5(j&Wlc`b^w4b+?)4$Z;{|?qz!zfVy`L%^n}|x6fPFeB06zZ+OhegvIb4)BP#- z!IgLTvj%~Wtqb5q{dR%MXY(Dp4k^ZTx1XFte{z@k%G>uGHvKy?+89qN@!dVx7(K() zGu>^8??{v9v&4P2yM4|(GD&(k*I4#%=1D)DMROTLaJjpv z@>dhB@?pU|d%o=1x0$HTk-_wu_KaMOy@xu)V>|=xEg>(WpAWY3FgPHNFq)&;c6`3< zZ_@WsTN8aBP9$24p|OUG4|aKXsKe0bC9Co`^s)J7OOxK%Ck~gfk1ZOP!O-XH!xM{I z@26z*N68I+hPpx*X3L=aEBs8h?9slFKH3<`s1hX*TT`|SwA?G2dy({OMSB)?CkuDM z)So}~{EJ8mrfV9b)FQ_i^`DnDi!`J7iA7mkrUmy>%4JM)oQ}8Kd<7Q59SB0vQ-}udu2fRlcqr{-8Z`w;bN1CP!Cos+v?ass==3 zlq#BS>_Qpc!*#7j!#2L^`|3Ym&DeG>ltC7kk&P?WL$Br1yqCY6Iz4SKLwuC_yDK`# z6U-LZnTGmXD3_dPe2`6z>+p?I3r8Ka(Jz&5o@_s3SUdANT$JhqF01)QDXWEGwU8*j zS+AxNADOF8f-SMiMV{Ig&s@n*3*LIC32y&8LA}@rwG$r%<^<8~=ZqADs&PB{x_BCOZg_4 zZ@a8RYBi^drdD!x@1?R)I+uCMLTbtFDw{9Xah<9Bn&tfHR--~QzfEmXb~D;sv0E)R zHdlt-r=HthO2xM3|D>MVKF{+>AJ@WPLuY&aK_1{-R%3c^Gb5Xv*qWp zopu>d<>nq%e!V{V7T# zXk>)eC+n@XdcDzIl;>AI?{nore$(zuFM;&7klurVLmlIsKI8CNkB@)gK$9^vgjSZ8 zpm(HoNobli!gx<^2kXozvHu{D>zw#xYzdz_< zilYx`h;8i(e(UL45~`ZESFMoaG##J&R)=UdG)BlAbz*nssW4NnAst_vVWI;o{G=_ty))ZP} ztFgls*A`%vFPPow1Q^=-nn*{T^zq}btHPwlO%Jw3u7!2a)`hj5g>|uHwOv}=RNQdL zUFNqTmJnt z#Fn#82K~3y-l=sm`@TxGy|7*mX^rDLz5MsQZN=;5IO4>(58iy=m04|AGPX@>m(&j1 z**9*K4Z4sdSI1(vP2IM3u8dP^nPQ;ZrM7mvROcPr!A-Kvy~@nm%sHfM#cAKUS+4T% zT!_gRhT7t`%c#!2A^iOv_h+_9oNi@bxm}(K_KO~DGG{)L=`9i_Wn@fEpK1E-tn_5t z*(%xDZapiX*4f@TCp+02K9@JW`(9ik#0^B3BSa^pClZRpB4d%sNIH^@tg?6fMqcvo z8h(T)1;|7sy;TyG+wOBqcF+cgekR0;GeXQpdT@OMZbX8)K7|}WmLb(h8L}3+fNVx~ z+Fxvv|Eqg^<~bqGBQ>8R)r9>Le&M3J{-wm(-}yHWlVj4W(dOf;Eh`Go~ zMBP&opv3OiB7ZA89{dJ9kQ2yhIjJpK_ZY)B;>>6x-DKq`Cg+6|w!eAnA|Je4Z$c$C zcIu?$pGO+gPS^PXbxYM}@TBDA^e9!&kGVClInGLd+mGJ5M?76g*;e2o``X%_mEG4G zbec_P&<(~t#Gnh&MGv<1Yp?6>a(1zOV9-70|8I(#emm*q4BMm*I$v9}L1)lAbN`u_ zzYtGNnmKb;hUxXG8TXZNq>nDjw(6|xl-k#sh$->qSErhSQ>V_Jni};;a)>D-3aceQ z=B>&@iobsUKO`UQw&bW;v(iFL_Y$?;@zM1d-On@>6cpePZY)hlt%KDSRJx$<3Zpcyq0!fNQr~T`NE3K6RfQu)o+@S1B#p zV>%?ss0e^srkROD!B*S;% zLbx6lz;&<)7QhO~Kl`8jbbsvH#c0-v1SB7EUqf5cf<^ea-&gWBlRzJpiZPl zAd2^iNZ zfKIPVc+fU-fUdXB9Auk4K-WvB^|5Unpz9&CY=0g=Vo>(dWPwG z>LU8thKK2T%M{ydVY){>lHQYItxEF&k0Q+3X!~;*aq8@jFx@nrB}d4VJWWntDCG1U zO-?fkIn7s-G24ZV*{R7VRtfn;A;kT}Zg?JEhE4E}Cc_hi44(|sV1_0KRtq`sBD@J3 zdDT2X$Ve0H2gBeAcp6@X4SZi|&;}s~?a<_)!>|mVfwh{9E)g=C4=@d85ivLoX2N-z zd^$zQr)R@?a3MSg>);i5U6b(ujtD8d=#3W2UlxyLAa0$;@}H# zBBUx7kimkJuu78)De*$?FPsReibZB27e&Ld@C8jS=_TY6+)GA5($CQgnd1+Gp(TWi zD_k^daw#{K8Z?=UiE=SfE+)#wl)2krF{JKt(L66n$h=gDh4QF^JS>w}53x)hmdTG7 zG9L@(r$EB3DiU(lVNF^MLRyV52$Ju*X+m1o(P-Aq6>?oRJPpsoi|~pj*Y6i{eK|Y@ zDd`hyX>=PP_n&B>(fQNpdcbjT8pLAZSZpAs9e7of5ivqWP^FQ9G`3*46Yhs~5QPVA z6&5*&k_~F4vFT`JXfzm&2NQ5G0iRB#QKiEINH2Jrl0IEaWAdaiwTIC#7Se{|XG1I$ ze~!kbqfL3k-Y^25fz^eB4{H+H2LOfA>Smy`5Cm4Y)xj@3z>b5HZg=YF$(6ue2D269HDJ=qHT18 zSY+X7SPrSmMHUiVL>(`pl`pEHkNZwv=tOyio&^+ zFqabMQrEd@a5p>%DM&88B@h2RER(klGJfRYpNFC=E(^JW?m9d_fkrZs#*zhdsQVez zJqfMb2)Ds1_$6(Cs#uSu)|Ws^^e!2{iwRRUFn|@>wP@Y3HXiGR$lYi^{iJSy7XzDk zIZqQWvmAZ-ye4KW7GlOScm-b5#49mEyb=cs;0AaaR>8~gswPqyqEj`v46cAIPg83( z@oG;YUhM^^!5NTrUnSj{!9vUofeT@dCM+{gaB&Kc>+psqX7T&ZSy`|M?uWIoP7`Ud zLZl6cGvG|v0B>sIwICs03x)|W5gvdC;RSe66X__Bjsoe;LcA_C@p>N2*F*;KGJ-XW z$RMK(GI}FQh&P77&2XD0W{0x)4~N^}4tNVTY2wW=A>NFDgnN^4nZ(N^Uglc39%8vn zEccdKh_}Mv5Eu(b!qJfQ-Xgs@i9*a7XW@bp&Y^^F6Yy;UzFh_@G%+`x75^w$1*8bv>h!Q%`b=QOdzB*c;+xE=0<_3#S32^%$m zt|A8oa(rO`41&RsD#@Wra^he-#I!l%U@}aB888zrggJ0EEFj%#{)X_98ayyzP6cd$ zH#MMa2W|ML*Zp8oJ$FFDdBQoA(jVd;tzC(KcvANmc&&%c6ucO54$#^{(uYUoKhgfJm7FvH5Uf0CCos%>ts!A z5<+a!aMSPqIuo}6w-Khn3{7l~WzRhvUWAu5v4twwLKSSugZY}+iUqe~!S_(?JrsMd zC+r1j-0#h$|G!6Lc&`8tO7I>f*hau@1l&dmw^73P8-;kkSrgl-xAB=;W;Wk(WtKlu!q=_9-LhKjNP|MyTPe{T=BwRETro%c|uZg{3LhOxzG{(I&#=W%iy|nVZ zB)pe|_ZGsfa3?H+U&8b7ju6Ez(kl1XG2QzaWF=RgK=;+q(lc%@E{5vq%IFql?R)JI3zT2Xa<}KE8s~@9QGIDa5spB z4r8IiMQ}f~oaf?#CjLB1h(9O5Rd6k&3jRzL90?ZUNC>8j#dO1AF+70j%P@Tfya^jM zaWqtjqv6mO2Ed7MGQ=`RvCPpk@SG-&?HA%$i6$ym3sF%(|3984#PJMG94Fv$0-m7c zCn))eXcz-`!(vTT;;zJ9Nu#Nx%~WFJ%7dCX>B*TGRd{k9%!b?HPKd=$HfiG1UP64@ zTN59X;m2fn%E0-Z5t7cS8T9{CnD7)P{Df9|npS%HAUpzVU@Zw?+D|dMcZ7KR5vj?rPj$;Qj*l7r4K`{bi64Us{5>c!7)Ya6c@8U&8YwoJ7LOn)qtC5MPaiWcU>s z*7V~TlkQeSNopub4JNO_fDLdcdCi%s!YC z>JUi%I%p>jO6{Q37f15e>u9(Pu7Ftm;z{cN;uS8gY2s1fsMD`xVT7We401%U}g;f_F6W9bNLf;qW9p4e|dD|Ep#p zu7<$_kREcC0$!zne<%Fk3IF%GFbftz%YH7da&cV~*MfN`I0TM|6Cv&48tvhFx)9fA zLlnJ^qSwjjIvIVB>A%PH->-%R5L17TslRW4H00~PgbUEbKd%Y#&jwB0q(C<*(5+%2 zZXM9XjVS8>#t<&HalXC-lEDo!xQS_RV%nRBVHs?M&6@aOvJgK^)5O1K3-PZx@Dw}) zvE09~T;mYVZDL^+tcEDqh=Pq&VIx)8I1WyLH{dNz+@8qze|s_))X{C~==Mc;SrbiI zq6tehCBqa*37aTk(;Xpx)M?_!6qpJ(z(RN(-q1udZKpX2*1|eX{6t;2<(8QhLjQ@8q$(@7nh$dS6g=k>|D%cqdPdExDz(Tkca&{n^G$}bvk>QZ- zo@5&+SuaZVjgoDj^nW!Df4{|>2VOUuk>KS>cN85lZ~&ZFN}q3kUiPLd$JR6n=NG9 z#gOoA39m;{J&JlQ6w-_RtM@b^y=QQ+<-MAV0!{h|A$>GWb|s^(WMpE?Zpzf;fOsJX zuvL$q!P&!1NCMH^k7nZ=&Biyn4qnmZ&;lWca_I5oWFeoNrpaM!<%ju0GYo?qk_=a!}2)T8pf7;*bY1}(J)LjY$i;HC*c`Q#$lm2EHqp%}W^{$5O)QwhH;&c9;w);rQ)Bj^C-tSv`cD6{N{@ES8SN((_MTmcr`o^FL0iuah}wkbE9m|jq)`)g*G(>|41wtxf(aeLQ^i{CVnL8P9dIU z3K_>_aEeM@$J9gWa_n48nZ>cqDUNMuObf1XJky}bS4j(w=IY5Hj9P#s}ePSZz0r*A0+93`%b?D9vMx zn3rl#`kn5RHkJ%dS28(O>Bgx_4_FOrI7MNcd4+K%HJVeC7+3*Ma$3S%^D1-AtGHjq zJu{8Nkqiz)!Z{3y;_xGo!w(Z=YDi;hcrBm9j@6n-$3GqabVlNIM&j3FIP8dHmGycJ z7qy&vkWdB*WiVo9G;-K6m&1-MSP!po$dSb%$3hM_OdM_mLBhXD_)H^*8on?Dnqe8N zfal=_4mEmG=w6UQzs11#Ru0UAm*G`r**PRIhXm#nzzrO7kipwz@HPs(jRJEu4mtEN z59V{o;maXM0Nelzv1Tu<*&FVJMerJIpk&_6A?;xdjDuLjf<>~hM3xEW!_{by|b*1>uXIT-pEF!V3V;*esYttLq~z(P$fq9${=mBX#222KNvkXl?y zEiN4m$3mu+r4t}YEhVXCg`5s-<#a&D>3}B;fvAuh1&46lfzFH3dGQLk3VsP$Z!MuU zETJ{z6p`P4%CeN|UrO~a3njsDmpHWeYS(>8hmuULsX1I+Aqll0|gmFZez_fCc*`(1{ zHd*(8rI@C9fKiD)JCHsbpTnUuqf$77LO6rWplduqVNi)KVglI@8(}kt*P}VS9?Kzg z9*5C{AIVrSl8Iy_6VAxZnw-}p_MW)FvHVqd3q^D&#NZQ-?%}DBQE*Tp2{JwpDuERwyq<)~cmxF*!C*9k z@qEN^(u*OzIG6y5KZsFn&@$YIahEZ(J!2H|8DA1$*o*F`$#D$)W{+v&RcLd!i=i>V%x@$wbwYiK-XFG?rMN2va8SsE6U=bKnc)(cNC-cF9>h}fvDAVnCX{$M7BWvP z*a;c`7gWI0JTHjmc>(tqqM&8rG)*oF6LL`uq){y*!jc(0FPN#xTms}y)?^;0&%^W+ z&NFjegf}1-$iX5x-Cz(j!)x%SCYNeLG6cz7Or1-?a?2qW%_DvujXIC`dBo2jCHlyG zOuyY%9lK!I0jKo(-XC~>SL&l56M;IZO z_>xcn0jCjg24rAb%D}XYA$A!+ZJT%U0f*9VDit*e{gkmBbfEVCJ zNJ(-jNuGglMwkT`!tHP;JO{r-0TiSOi{%sHWXK$`oH=6o33v)N3$a3IVg(AU2xs^B z2TJ${N|-M=Db^qvdTA9ot=4BS0%_k^?I9C!g<bR7T;rqu?sI7T$ojxQ_zslmfB1hr?#vf}`t1j;_bSGFSmm!84lJ zKoxDEivFk<;*SQn9&Y4ldnCKZjhOb`BmySG^Y8)@iivQ5fLjT;oq!~~Q6-$p{WN$P zUM1XN!j%!O6XE>fZdgqCiG-g_xJ<&$g(&_mif=eU_)~-nB%BGBuzUO?b+$2u2&n|b z67OP(4b;sBs^*WqxZfN9eEe7A9*=t>;YnyC2^Ge1)*cU0un+|ccfj3*-$3|6((xyq zZg4Do0e>vumRHAH__U+&?vXiC^r@0-k^!iobqS8-pb|G(c2j~;kX;w_YTE2iIy>9^7rw$c{1;=fh- z>!2r38EACx(dgbA1rs1u_a0TZ6^m@eBJb_TT>_85a!5MwsdUI^EBS0&fkLYwmfN4L`7 z1wD*{Ltq@F(e0TD(_to@OM)>Z7)QKo#B0Efg?3?~-7nxC57)x=_>aSX0`U^*|9i%9 zkwXG`+(_m|3OohRz&k|H5pgn{2DifP_|sN)(N^}*iuVNJM&Vs3yr(^Gs$egQ?M1P@ zw5`3gt>Vo*jo8LhgH=2=SPOCQQ|?Ck|2`VWej@HC;{JXx6r%BdG(M2P?3f6t;{(+3 z0jlNzRb!_Fc1ln}BP=<^;Xd7~lnnv8FeaTCjWjb*(aqG&ma9xo@O6R-+a!wc{tY=l_&gpTxC=y|hF^TuN3 zy@}V4{{KC7^*wd<{X&?-#w3`HNeCPb$HH_tn+VxNSj^Egt@y9B;=f*mmpOt)fm#%( z4S{AzBd#5(iLciS@%2Wy8x}*V>T5Fo`aHbAsj@Gp$^rC$2N^lY$bpF+nAm|O95gaV z9jqtg&16htsohV)C9oV)(pp-1Ev@`(68bs-(mTGUcYIA%d`(r97ZGnihr+loXc@PE9vS{~W zJLF}eaT#e`zQjkN@@CSjCq35G`bLP`i?z3x9n|o2~?3lH9JnW zHv=!j21vxn_MCThf`p4C94}e&y8_%vxRW6nL=rBXwRyOK4PF8pJl5_b*dC3z#)fV( z8#*=<;q$nkjXx{#5v;^V)bd)?2$t$&1P62)WFIu97e|lXIC`W+i9>`;jAP@6|F~fG zU02z6U1y)QjeXV*miy@}^=IRzyH2OOrWCWZXIGIF#|AE*eOmzgwm?Y6lgM}y-Fp(< zdlK7(Nf(G`Ng-k?7no)`rb%H}k%9u#eQ^gs5}Zzg)5k)#KTphL>zl608EnvIus@qm zxcP)zU=VTv+nR+~Y~f8!(pKeS3N*ij`-fp2tS20nSdap-g*z7u=8j}v zmCU}1_<8I|^Ku9`o^TVjr)4g6l}m&?N|Z;5RJpW#NUd4!Dt~1#=>!M z0_+DvVGNA3*JS9XXqGG?UPj}WY3VQ1(r5G%Vn%OBgPuWyp26rjgVFPq2u=;7;dnTa zQ^R;p4M#z`bShms^)kH5>0vic4|~997z4TgD)(p7m1okGXRd;4IaQ41RBt?lrV`?!ep2U=fZ2Sfm6floEqL>gPO+%HQ(Mi zNB5M@GMwp}appi4TnMSo161dMGFZVhPHF8X7!6}IQGyjputLcW$oN&NXBIcWa2N%t zrc$b@l=!8@Ki-K+(Vub8%(xc@nSwrH3i>1sW>C0Ki0}y!PE)$mlj`S%NcL-=>++7f|uxxFELCkhs)s#y7>wX(rZ^R&g65D zls|{lj+vZxq~lNLT0!SpF%8auc`%>*^wOMB^iGC>+#39g@ZYbOJ8mM47XEA2%l{FG zhUgIkVnlqA03;AG>E+G@BwjCfmB9%}7%~@Gh-BdpcNHQhaVJ9J?26$!0*OY{bsRDZ z8HXexe#!iof}|p8NCuK=+iB4adZ>)c3Ph!M8mU66ks72Hsau<+dr}73VzP7tEhM&! zw04o!F4EdXTDwSVS0;jzyRwiRBoE0)RwD(-24pL;9odN#A^VXME)`|#U`-#+~I z;kOUP_9=f9+lONNs`S#bubPV*q*gCKOhm>Z6A%>p5XC-3u@6z~!!#rV$wcNNC}uB2 zP{NK9c9gJ_p`8rvWN0TtI~m%^&`ySSGPIMSo&4AE6B2|3BO!lOw5UXjO0=j%i%PVpM2kwas6>lOw5UXjO0=j%i%PVpM2kwas6>m(EMy^) zgXAIk-@OsM`S-D_>q7giTja=9|`-B ziQg5Z0cq6h`~{*%j7R`tA`KWCh;ZGX4EqzeKXLn$PJc2qn;}Y=(-6`#6W(mfYebm diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c index 4df427af2..1880a0c6a 100755 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c @@ -1833,33 +1833,33 @@ int getAdcOffsetRegister(int adc) { uint64_t writePatternIOControl(uint64_t word) { if (word != -1) { - FILE_LOG(logINFO, ("Setting Pattern - I/O Control: 0x%llx\n", (long long int) word)); + FILE_LOG(logINFO, ("Setting Pattern I/O Control: 0x%llx\n", (long long int) word)); set64BitReg(word, PATTERN_IO_CNTRL_LSB_REG, PATTERN_IO_CNTRL_MSB_REG); } uint64_t retval = get64BitReg(PATTERN_IO_CNTRL_LSB_REG, PATTERN_IO_CNTRL_MSB_REG); - FILE_LOG(logDEBUG1, (" I/O Control: 0x%llx\n", (long long int) retval)); + FILE_LOG(logDEBUG1, (" I/O Control retval: 0x%llx\n", (long long int) retval)); return retval; } uint64_t writePatternClkControl(uint64_t word) { if (word != -1) { - FILE_LOG(logINFO, ("Setting Pattern - Clock Control: 0x%llx\n", (long long int) word)); + FILE_LOG(logINFO, ("Setting Pattern Clock Control: 0x%llx\n", (long long int) word)); set64BitReg(word, PATTERN_IO_CLK_CNTRL_LSB_REG, PATTERN_IO_CLK_CNTRL_MSB_REG); } uint64_t retval = get64BitReg(PATTERN_IO_CLK_CNTRL_LSB_REG, PATTERN_IO_CLK_CNTRL_MSB_REG); - FILE_LOG(logDEBUG1, (" Clock Control: 0x%llx\n", (long long int) retval)); + FILE_LOG(logDEBUG1, (" Clock Control retval: 0x%llx\n", (long long int) retval)); return retval; } uint64_t readPatternWord(int addr) { // error (handled in tcp) - if (addr < 0 || addr > MAX_PATTERN_LENGTH) { + if (addr < 0 || addr >= MAX_PATTERN_LENGTH) { FILE_LOG(logERROR, ("Cannot get Pattern - Word. Invalid addr 0x%x. " - "Should be <= 0x%x\n", addr, MAX_PATTERN_LENGTH)); + "Should be between 0 and 0x%x\n", addr, MAX_PATTERN_LENGTH)); return -1; } - FILE_LOG(logDEBUG1, (" Reading Pattern - Word (addr:0x%x)\n", addr)); + FILE_LOG(logINFORED, (" Reading (Executing) Pattern Word (addr:0x%x)\n", addr)); uint32_t reg = PATTERN_CNTRL_REG; // overwrite with only addr @@ -1874,7 +1874,7 @@ uint64_t readPatternWord(int addr) { // read value uint64_t retval = get64BitReg(PATTERN_OUT_LSB_REG, PATTERN_OUT_MSB_REG); - FILE_LOG(logDEBUG1, (" Word(addr:0x%x): 0x%llx\n", addr, (long long int) retval)); + FILE_LOG(logDEBUG1, (" Word(addr:0x%x) retval: 0x%llx\n", addr, (long long int) retval)); return retval; } @@ -1885,13 +1885,13 @@ uint64_t writePatternWord(int addr, uint64_t word) { return readPatternWord(addr); // error (handled in tcp) - if (addr < 0 || addr > MAX_PATTERN_LENGTH) { + if (addr < 0 || addr >= MAX_PATTERN_LENGTH) { FILE_LOG(logERROR, ("Cannot set Pattern - Word. Invalid addr 0x%x. " - "Should be <= 0x%x\n", addr, MAX_PATTERN_LENGTH)); + "Should be between 0 and 0x%x\n", addr, MAX_PATTERN_LENGTH)); return -1; } - FILE_LOG(logINFO, ("Setting Pattern - Word (addr:0x%x, word:0x%llx)\n", addr, (long long int) word)); + FILE_LOG(logINFO, ("Setting Pattern Word (addr:0x%x, word:0x%llx)\n", addr, (long long int) word)); uint32_t reg = PATTERN_CNTRL_REG; // write word @@ -1914,9 +1914,9 @@ uint64_t writePatternWord(int addr, uint64_t word) { int setPatternWaitAddress(int level, int addr) { // error (handled in tcp) - if (addr > MAX_PATTERN_LENGTH) { - FILE_LOG(logERROR, ("Cannot set Pattern - Wait Address. Invalid addr 0x%x. " - "Should be <= 0x%x\n", addr, MAX_PATTERN_LENGTH)); + if (addr >= MAX_PATTERN_LENGTH) { + FILE_LOG(logERROR, ("Cannot set Pattern Wait Address. Invalid addr 0x%x. " + "Should be between 0 and 0x%x\n", addr, MAX_PATTERN_LENGTH)); return -1; } @@ -1941,20 +1941,20 @@ int setPatternWaitAddress(int level, int addr) { mask = PATTERN_WAIT_2_ADDR_MSK; break; default: - FILE_LOG(logERROR, ("Cannot set Pattern - Wait Address. Invalid level 0x%x. " + FILE_LOG(logERROR, ("Cannot set Pattern Wait Address. Invalid level 0x%x. " "Should be between 0 and 2.\n", level)); return -1; } // set if (addr >= 0) { - FILE_LOG(logINFO, ("Setting Pattern - Wait Address (level:%d, addr:0x%x)\n", level, addr)); + FILE_LOG(logINFO, ("Setting Pattern Wait Address (level:%d, addr:0x%x)\n", level, addr)); bus_w(reg, ((addr << offset) & mask)); } // get uint32_t regval = bus_r((reg & mask) >> offset); - FILE_LOG(logDEBUG1, (" Wait Address (level:%d, addr:0x%x)\n", level, regval)); + FILE_LOG(logDEBUG1, (" Wait Address retval (level:%d, addr:0x%x)\n", level, regval)); return regval; } @@ -1976,38 +1976,29 @@ uint64_t setPatternWaitTime(int level, uint64_t t) { regm = PATTERN_WAIT_TIMER_2_MSB_REG; break; default: - FILE_LOG(logERROR, ("Cannot set Pattern - Wait Time. Invalid level %d. " + FILE_LOG(logERROR, ("Cannot set Pattern Wait Time. Invalid level %d. " "Should be between 0 and 2.\n", level)); return -1; } // set if (t >= 0) { - FILE_LOG(logINFO, ("Setting Pattern - Wait Time (level:%d, t:%lld)\n", level, (long long int)t)); + FILE_LOG(logINFO, ("Setting Pattern Wait Time (level:%d, t:%lld)\n", level, (long long int)t)); set64BitReg(t, regl, regm); } // get uint64_t regval = get64BitReg(regl, regm); - FILE_LOG(logDEBUG1, (" Wait Time (level:%d, t:%lld)\n", level, (long long int)regval)); + FILE_LOG(logDEBUG1, (" Wait Time retval (level:%d, t:%lld)\n", level, (long long int)regval)); return regval; } void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop) { - // level 0-2, addr upto patternlength + 1 (checked at tcp) - if ((level != -1) && - (*startAddr > MAX_PATTERN_LENGTH || *stopAddr > MAX_PATTERN_LENGTH)) { - FILE_LOG(logERROR, ("Cannot set Pattern (Pattern Loop, level:%d, startaddr:0x%x, stopaddr:0x%x). " - "Addr must be <= 0x%x\n", - level, *startAddr, *stopAddr, MAX_PATTERN_LENGTH)); - } - - //level -1, addr upto patternlength (checked at tcp) - else if ((level == -1) && - (*startAddr > MAX_PATTERN_LENGTH || *stopAddr > MAX_PATTERN_LENGTH)) { - FILE_LOG(logERROR, ("Cannot set Pattern (Pattern Loop, complete pattern, startaddr:0x%x, stopaddr:0x%x). " - "Addr must be <= 0x%x\n", + // (checked at tcp) + if (*startAddr >= MAX_PATTERN_LENGTH || *stopAddr >= MAX_PATTERN_LENGTH) { + FILE_LOG(logERROR, ("Cannot set Pattern Loop, Address (startaddr:0x%x, stopaddr:0x%x) must be " + "less than 0x%x\n", *startAddr, *stopAddr, MAX_PATTERN_LENGTH)); } @@ -2054,7 +2045,7 @@ void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop) { break; default: // already checked at tcp interface - FILE_LOG(logERROR, ("Cannot set Pattern - Pattern loop. Invalid level %d. " + FILE_LOG(logERROR, ("Cannot set Pattern loop. Invalid level %d. " "Should be between -1 and 2.\n", level)); *startAddr = 0; *stopAddr = 0; @@ -2065,7 +2056,7 @@ void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop) { if (level >= 0) { // set iteration if (*nLoop >= 0) { - FILE_LOG(logINFO, ("Setting Pattern - Pattern Loop (level:%d, nLoop:%d)\n", + FILE_LOG(logINFO, ("Setting Pattern Loop (level:%d, nLoop:%d)\n", level, *nLoop)); bus_w(nLoopReg, *nLoop); } @@ -2073,9 +2064,9 @@ void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop) { } // set - if (*startAddr != -1 && *stopAddr != -1) { + if (*startAddr >= 0 && *stopAddr >= 0) { // writing start and stop addr - FILE_LOG(logINFO, ("Setting Pattern - Pattern Loop (level:%d, startaddr:0x%x, stopaddr:0x%x)\n", + FILE_LOG(logINFO, ("Setting Pattern Loop (level:%d, startaddr:0x%x, stopaddr:0x%x)\n", level, *startAddr, *stopAddr)); bus_w(addr, ((*startAddr << startOffset) & startMask) | ((*stopAddr << stopOffset) & stopMask)); FILE_LOG(logDEBUG1, ("Addr:0x%x, val:0x%x\n", addr, bus_r(addr))); @@ -2084,11 +2075,11 @@ void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop) { // get else { *startAddr = ((bus_r(addr) & startMask) >> startOffset); - FILE_LOG(logDEBUG1, ("Getting Pattern - Pattern Loop Start Address (level:%d, Read startAddr:0x%x)\n", + FILE_LOG(logDEBUG1, ("Getting Pattern Loop Start Address (level:%d, Read startAddr:0x%x)\n", level, *startAddr)); *stopAddr = ((bus_r(addr) & stopMask) >> stopOffset); - FILE_LOG(logDEBUG1, ("Getting Pattern - Pattern Loop Stop Address (level:%d, Read stopAddr:0x%x)\n", + FILE_LOG(logDEBUG1, ("Getting Pattern Loop Stop Address (level:%d, Read stopAddr:0x%x)\n", level, *stopAddr)); } } diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 58c15c5da..2a6599a70 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -2753,9 +2753,9 @@ int set_pattern_word(int file_des) { FILE_LOG(logDEBUG1, ("Setting Pattern Word (addr:0x%x, word:0x%llx\n", addr, (long long int)word)); if (Server_VerifyLock() == OK) { // valid address - if (addr > MAX_PATTERN_LENGTH) { + if (addr < 0 || addr >= MAX_PATTERN_LENGTH) { ret = FAIL; - sprintf(mess, "Cannot set Pattern (Word, addr:0x%x). Addr must be <= 0x%x\n", + sprintf(mess, "Cannot set Pattern (Word, addr:0x%x). Addr must be between 0 and 0x%x\n", addr, MAX_PATTERN_LENGTH); FILE_LOG(logERROR, (mess)); } else { @@ -2797,7 +2797,7 @@ int set_pattern_loop(int file_des) { FILE_LOG(logERROR, (mess)); } // valid addr for loop level 0-2 - else if (startAddr > MAX_PATTERN_LENGTH || stopAddr > MAX_PATTERN_LENGTH ) { + else if (startAddr >= MAX_PATTERN_LENGTH || stopAddr >= MAX_PATTERN_LENGTH ) { ret = FAIL; sprintf(mess, "Cannot set Pattern loops. Address (start addr:0x%x and stop addr:0x%x) " "should be less than 0x%x\n", startAddr, stopAddr, MAX_PATTERN_LENGTH); @@ -2846,9 +2846,9 @@ int set_pattern_wait_addr(int file_des) { FILE_LOG(logERROR, (mess)); } // valid addr - else if (addr > MAX_PATTERN_LENGTH) { + else if (addr >= MAX_PATTERN_LENGTH) { ret = FAIL; - sprintf(mess, "Cannot set Pattern wait address. Address (0x%x) should be less than 0x%x\n", addr, MAX_PATTERN_LENGTH); + sprintf(mess, "Cannot set Pattern wait address. Address (0x%x) should be between 0 and 0x%x\n", addr, MAX_PATTERN_LENGTH); FILE_LOG(logERROR, (mess)); } else { diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index b087d5a56..02a42a3f0 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -6,5 +6,5 @@ #define APILIB 0x190405 #define APIRECEIVER 0x190405 #define APIGUI 0x190405 -#define APICTB 0x190418 #define APIEIGER 0x190418 +#define APICTB 0x190418