From 923a7e8936cbfe32a8781554de32c66be2f78035 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 8 Oct 2018 14:38:35 +0200 Subject: [PATCH] eiger and jungfrau server compiles, gotthard and receiver left to do --- .../slsDetector/slsDetector.cpp | 34 +- .../slsDetector/slsDetectorCommand.cpp | 23 +- .../eigerDetectorServer/Makefile | 2 +- .../eigerDetectorServer/Makefile.virtual | 2 +- .../eigerDetectorServer/ansi.h | 2 +- .../bin/eigerDetectorServer_developer | Bin 302494 -> 0 bytes .../bin/eigerDetectorServer_refactor | Bin 0 -> 288988 bytes .../eigerDetectorServer/communication_funcs.c | 2 +- .../eigerDetectorServer/communication_funcs.h | 2 +- .../eigerDetectorServer/gitInfo.txt | 14 +- .../eigerDetectorServer/gitInfoEiger.h | 10 +- .../slsDetectorFunctionList.c | 95 +- .../slsDetectorServer_defs.h | 3 - .../eigerDetectorServer/sls_detector_defs.h | 2 +- .../eigerDetectorServer/sls_detector_funcs.h | 2 +- .../eigerDetectorServer/sls_receiver_defs.h | 2 +- .../eigerDetectorServer/sls_receiver_funcs.h | 2 +- .../eigerDetectorServer/updateGitVersion.sh | 8 +- .../eigerDetectorServer/versionAPI.h | 2 +- .../gotthardDetectorServer/Makefile | 2 +- .../gotthardDetectorServer/Makefile.propix | 49 - .../gotthardDetectorServer/Makefile.virtual | 2 +- .../gotthardDetectorServer/ansi.h | 2 +- .../communication_funcs.c | 2 +- .../communication_funcs.h | 2 +- .../gotthardDetectorServer_developer | Bin 116056 -> 0 bytes .../gotthardDetectorServerv4.0.0.3 | Bin 116056 -> 0 bytes .../sls_detector_defs.h | 2 +- .../sls_detector_funcs.h | 2 +- .../sls_receiver_defs.h | 2 +- .../sls_receiver_funcs.h | 2 +- .../updateGitVersion.sh | 10 +- .../gotthardDetectorServer/versionAPI.h | 2 +- .../jungfrauDetectorServer/Makefile | 2 +- .../jungfrauDetectorServer/Makefile.virtual | 2 +- .../jungfrauDetectorServer/ansi.h | 2 +- .../bin/jungfrauDetectorServer_developer | Bin 116720 -> 0 bytes .../bin/jungfrauDetectorServer_refactor | Bin 0 -> 106952 bytes .../communication_funcs.c | 2 +- .../communication_funcs.h | 2 +- .../jungfrauDetectorServer/gitInfo.txt | 14 +- .../jungfrauDetectorServer/gitInfoJungfrau.h | 10 +- .../slsDetectorFunctionList.c | 66 +- .../slsDetectorServer_defs.h | 2 - .../sls_detector_defs.h | 2 +- .../sls_detector_funcs.h | 2 +- .../sls_receiver_defs.h | 2 +- .../sls_receiver_funcs.h | 2 +- .../updateGitVersion.sh | 8 +- .../jungfrauDetectorServer/versionAPI.h | 2 +- .../moenchDetectorServer/.target-makefrag | 1 - .../moenchDetectorServer/Makefile | 51 - .../moenchDetectorServer/Makefile.virtual | 30 - .../moenchDetectorServer/ansi.h | 1 - .../communication_funcs.c | 1 - .../communication_funcs.h | 1 - .../moenchDetectorServer/firmware_funcs.c | 2613 -------------- .../moenchDetectorServer/firmware_funcs.h | 179 - .../moenchDetectorServer/gitInfo.txt | 9 - .../moenchDetectorServer/gitInfoMoench.h | 6 - .../moenchDetectorServer/gitInfoMoenchTmp.h | 6 - .../moenchDetectorServer/mcb_funcs.c | 2528 -------------- .../moenchDetectorServer/mcb_funcs.h | 173 - .../moenchDetectorServer/moenchVirtualServer | Bin 107120 -> 0 bytes .../moenchDetectorServer/registers_m.h | 309 -- .../moenchDetectorServer/server.c | 112 - .../moenchDetectorServer/server_defs.h | 61 - .../moenchDetectorServer/server_funcs.c | 3083 ----------------- .../moenchDetectorServer/server_funcs.h | 97 - .../moenchDetectorServer/sharedmemory.c | 39 - .../moenchDetectorServer/sharedmemory.h | 48 - .../moenchDetectorServer/sls_detector_defs.h | 1 - .../moenchDetectorServer/sls_detector_funcs.h | 1 - .../moenchDetectorServer/sls_receiver_defs.h | 1 - .../moenchDetectorServer/sls_receiver_funcs.h | 1 - .../moenchDetectorServer/stop_server.c | 46 - .../moenchDetectorServer/trimming_funcs.c | 749 ---- .../moenchDetectorServer/trimming_funcs.h | 20 - .../moenchDetectorServer/updateGitVersion.sh | 31 - .../slsDetectorFunctionList.h | 69 +- .../slsDetectorServer_funcs.c | 1299 +------ .../slsDetectorServer_funcs.h | 21 - slsSupportLib/include/communication_funcs.c | 126 +- slsSupportLib/include/communication_funcs.h | 4 - slsSupportLib/include/sls_detector_defs.h | 5 +- slsSupportLib/include/sls_detector_funcs.h | 95 +- 86 files changed, 289 insertions(+), 11934 deletions(-) delete mode 100755 slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer create mode 100755 slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_refactor delete mode 100755 slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.propix delete mode 100755 slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServer_developer delete mode 100755 slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServerv4.0.0.3 delete mode 100755 slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer create mode 100755 slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_refactor delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/.target-makefrag delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile.virtual delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/ansi.h delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.c delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.h delete mode 100644 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfo.txt delete mode 100644 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h delete mode 100644 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoenchTmp.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/mcb_funcs.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/mcb_funcs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/moenchVirtualServer delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/registers_m.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_defs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.h delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_defs.h delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_funcs.h delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_defs.h delete mode 120000 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_funcs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/stop_server.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.c delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.h delete mode 100755 slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/updateGitVersion.sh diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 98073816d..d142fb218 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1974,38 +1974,8 @@ int slsDetector::setThresholdEnergy(int e_eV, detectorSettings isettings, int tb return thisDetector->currentThresholdEV; } - int fnum= F_SET_THRESHOLD_ENERGY; - int retval; - int ret=FAIL; - char mess[MAX_STR_LENGTH]=""; -#ifdef VERBOSE - std::cout<< "Setting threshold energy "<< std::endl; -#endif - if (thisDetector->onlineFlag==ONLINE_FLAG) { - if (connectControl() == OK){ - controlSocket->SendDataOnly(&fnum,sizeof(fnum)); - controlSocket->SendDataOnly(&e_eV,sizeof(e_eV)); - controlSocket->SendDataOnly(&isettings,sizeof(isettings)); - controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==FAIL) { - std::cout<< "Detector returned error: "<< std::endl; - controlSocket->ReceiveDataOnly(mess,sizeof(mess)); - std::cout<< mess << std::endl; - } else { -#ifdef VERBOSE - std::cout<< "Detector returned OK "<< std::endl; -#endif - controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); - thisDetector->currentThresholdEV=retval; - } - disconnectControl(); - if (ret==FORCE_UPDATE) - updateDetector(); - } - } else { - thisDetector->currentThresholdEV=e_eV; - } - return thisDetector->currentThresholdEV; + return -1; + } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index c23c417ca..57c357587 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -114,17 +114,18 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) { /* digital test and debugging */ + /*! \page test - - digitest [i] will perform test which will plot the unique channel identifier, instead of data. Only get! + - digibittest:[i] performs digital test of the module i. Returns 0 if succeeded, otherwise error mask. Gotthard only. Only put! */ - descrToFuncMap[i].m_pFuncName="digitest"; // /* find command! */ + descrToFuncMap[i].m_pFuncName="digibittest"; // descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDigiTest; ++i; /*! \page test - - digibittest:[i] performs digital test of the module i. Returns 0 if succeeded, otherwise error mask. Only put! + - bustest performs test of the bus interface between FPGA and embedded Linux system. Can last up to a few minutes. Cannot set! Jungfrau only. Only get! */ - descrToFuncMap[i].m_pFuncName="digibittest"; // + descrToFuncMap[i].m_pFuncName="bustest"; // descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDigiTest; ++i; @@ -3671,14 +3672,14 @@ string slsDetectorCommand::cmdDigiTest(int narg, char *args[], int action, int d myDet->setOnline(ONLINE_FLAG, detPos); - if (cmd=="digitest") { + if (cmd=="bustest"){ if (action==PUT_ACTION) return string("cannot set ")+cmd; - sprintf(answer,"0x%x",myDet->digitalTest(CHIP_TEST, -1, detPos)); + sprintf(answer,"0x%x",myDet->digitalTest(DETECTOR_BUS_TEST)); return string(answer); } - if (cmd=="digibittest") { + else if (cmd=="digibittest") { if (action==GET_ACTION) return string("cannot get ")+cmd; int ival=-1; @@ -3694,7 +3695,7 @@ string slsDetectorCommand::cmdDigiTest(int narg, char *args[], int action, int d } - return string("unknown digital test mode ")+cmd; + return string("unknown test mode ")+cmd; } @@ -3703,10 +3704,8 @@ string slsDetectorCommand::helpDigiTest(int action) { ostringstream os; if (action==GET_ACTION || action==HELP_ACTION) { - os << "digitaltest:i \t performs digital test of the module i. Returns 0 if succeeded, otherwise error mask."<< std::endl; - } - if (action==PUT_ACTION || action==HELP_ACTION) { - os << "digibittest i\t will perform test which will plot the unique channel identifier, instead of data."<< std::endl; + os << "digibittest:i \t performs digital test of the module i. Returns 0 if succeeded, otherwise error mask.Gotthard only."<< std::endl; + os << "bustest \t performs test of the bus interface between FPGA and embedded Linux system. Can last up to a few minutes. Jungfrau only."<< std::endl; } return os.str(); } diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile index 9942dd3ef..b4117a9cf 100755 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile @@ -1,6 +1,6 @@ CC = powerpc-4xx-softfloat-gcc BLACKFIN_CC = bfin-uclinux-gcc -CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE #-DVIRTUAL -DPCCOMPILE -DMARTIN +CFLAGS += -Wall -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE -DPCCOMPILE -DMARTIN LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile.virtual b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile.virtual index 1f4c400e5..ad079030a 100644 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile.virtual +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/Makefile.virtual @@ -1,5 +1,5 @@ CC = gcc -CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DPCCOMPILE -DSTOP_SERVER #-DVERBOSE +CFLAGS += -Wall -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DPCCOMPILE -DSTOP_SERVER #-DVERBOSE CFLAGS += -DVIRTUAL -DVIRTUAL_9M MASTERFLAG += -DVIRTUAL_MASTER LDLIBS += -lm -lstdc++ -pthread diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/ansi.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/ansi.h index a122db0ad..1f2dbc999 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/ansi.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/ansi.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/ansi.h \ No newline at end of file +../../../slsSupportLib/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer deleted file mode 100755 index dc163ece60a45f1896a18137dccf2bd0d53bb534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302494 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 W#&#ccI6BFIB;6q)HyTU;X8s?l9O9V( diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_refactor b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_refactor new file mode 100755 index 0000000000000000000000000000000000000000..2daff2e253bd5697ae40263c255b4ea7d27531e2 GIT binary patch literal 288988 zcmeFa0eqFkl{Y;1CScIeUc1qTHt3~|HIZnO8r&OANZ3Yu5!|8;ZD_G1B~c;)B7`=! ziMdxmL9tB)y3hs;TXglU?h9Mp#a3$w*n-tA?rIm`#R^+&an%+pcA-V@_y5nFx%YXV z``jc%yWf7l@5NudGxN-xIdjgLGv}O{d7kboXI>Qu22}E2P~{;V2&wT4@LR63$JOa) zWwclPQ^6m%>p!K&7%=#M za6pB!%pWSmRPd5Y)I39;2l2cF&-EY556BQ#Kl}Vz_@8WT`N}6-n=Va{fCLnL_-141ZVPuNr^+SB}3@{C$!c{EOhP27h7v72$6({wnbIm-w^)&PU>G z{7uCl@tcT0;`=H5{RRG};O}(*aZLO-&irU@oF!@U_=A#m{!k|PkF@v*{_>f@Kgfvs zs7{fuO3U2@$=jcEkto35$MKgdg%{yB2Y;Wy--qy5jK6d6$A2aGyHKZ;x^KhQvd6o=PNz=7usd@8mT(o5Iyk+f;OWWto zQ}eF=>b&ckZ){oC-n{hFtΠ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%0DoHv2vJDE}$3{On5UL!gsZ>^}Jqk2CTL}l} z9I-rj8|8%ghplNL6R~KbemCxRBy`6d4GpJx*cZ1`2E~!c>ihgRuvTom6s-7b>NL%& z-0BC2>)iVQ;PbFQlJyo^uE*sd3a@Z$Tf0?ws=#9uL_XMD#(lO++04d^X~}-}(o9Dr zx4jfc{PHsZ=yT-q@(9cfq$L>ivE`dWJQ-s>vYhulrA5hh@R~Z$c&68N{XjpmHq@@N`8H7Y)}a`KtrZ9o1ST)K|!dV&&QIBhU5M9?(dFX2U+@JO*5;DTZ_eCJ2 zNn2j99Qz-=GSF|FJy@$jsc;wOl{-iXI`2}nZ}OqapA>Bo@@CYgFpDUS zY|EPip!;BY#>;O_q$|zIkV@;cAzLigmSfJIH1GU$BCl<*l@hjVmzc}!cE@@wp`j3M<81n_OASd3p9CDxE;?+R(ge$ufT(>Qer zp){n_xwt^8Yh`IHFpI?z5BXCHgAGDh$B0s8llFE(F-*SW>3P4q{POcdi2BU&Vh@;< zJv8=Y+5uo0mx2ZHr7r`{b`nVhORt==b&i{{uD_qum_e02V?J$eu1^*rw-fzF4~!vl zbE;*DGP$Q5jjZQr(R%Z3Mpl(Uz~Kw8bKtQmDDRKRYhfGz;Ss0QNU+BG%iru8lP+F= z(GqCih?urnv6(xC|4SYzJUbnwW7{+cISFeruV6~ zxGsg`c+c~1n+=6d=QX>}*0j!DYJUq0;!T~<7jX}){j>;c{x;E zUjdg(x&jI4VJ*J9XtJ7w%R!7lCg9y_(*lG<$z@MMbf`=jckxAMQYVH%6;l^m;EMzPaI6$?P4w la=+MU-qNcPcpF#WBC(`?y2~UH-MnEMQ$SmGc4q@4{sI#N;*0nadc=NADC; (detectorModules)->nchip=NCHIP; (detectorModules)->nchan=NCHIP*NCHAN; - (detectorModules)->module=0; (detectorModules)->gain=0; (detectorModules)->offset=0; (detectorModules)->reg=0; @@ -448,7 +447,7 @@ void setupDetector() { int retval[2]={-1,-1}; const int defaultvals[NDAC] = DEFAULT_DAC_VALS; for(i = 0; i < NDAC; ++i) { - setDAC((enum DACINDEX)i,defaultvals[i],0,0,retval); + setDAC((enum DACINDEX)i,defaultvals[i],0,retval); if (retval[0] != defaultvals[i]) cprintf(RED, "Warning: Setting dac %d failed, wrote %d, read %d\n",i ,defaultvals[i], retval[0]); } @@ -467,7 +466,7 @@ void setupDetector() { setReadOutFlags(DEFAULT_READOUT_STOREINRAM_MODE); setReadOutFlags(DEFAULT_READOUT_OVERFLOW32_MODE); setSpeed(CLOCK_DIVIDER, DEFAULT_CLK_SPEED);//clk_devider,half speed - setIODelay(DEFAULT_IO_DELAY, DEFAULT_MOD_INDEX); + setIODelay(DEFAULT_IO_DELAY); setTiming(DEFAULT_TIMING_MODE); //SetPhotonEnergyCalibrationParameters(-5.8381e-5,1.838515,5.09948e-7,-4.32390e-11,1.32527e-15); setRateCorrection(DEFAULT_RATE_CORRECTION); @@ -503,16 +502,8 @@ uint32_t readRegister(uint32_t offset) { } -/* set parameters - nmod, dr, roi */ +/* set parameters - dr, roi */ -int setNMod(int nm, enum dimension dim){ - return NMOD; -} - - -int getNModBoard(enum dimension arg){ - return NMAXMOD; -} int setDynamicRange(int dr){ #ifdef VIRTUAL @@ -824,17 +815,17 @@ int setModule(sls_detector_module myMod, int delay){ return FAIL; // settings - setSettings( (enum detectorSettings)myMod.reg,-1); + setSettings( (enum detectorSettings)myMod.reg); // iodelay - if(setIODelay(delay, -1)!= delay){ + if(setIODelay(delay)!= delay){ cprintf(RED,"could not set iodelay %d\n",delay); return FAIL; } // dacs for(i=0;idacs)+i)); } @@ -911,7 +902,7 @@ int getModule(sls_detector_module *myMod){ -enum detectorSettings setSettings(enum detectorSettings sett, int imod){ +enum detectorSettings setSettings(enum detectorSettings sett){ if(sett == UNINITIALIZED){ return thisSettings; }if(sett != GET_SETTINGS) @@ -931,17 +922,17 @@ enum detectorSettings getSettings(){ /* parameters - threshold */ -int getThresholdEnergy(int imod){ +int getThresholdEnergy(){ printf(" Getting Threshold energy\n"); return eiger_photonenergy; } -int setThresholdEnergy(int ev, int imod){ +int setThresholdEnergy(int ev){ printf(" Setting threshold energy:%d\n",ev); if(ev >= 0) eiger_photonenergy = ev; - return getThresholdEnergy(imod); + return getThresholdEnergy(); } @@ -950,19 +941,19 @@ int setThresholdEnergy(int ev, int imod){ /* parameters - dac, adc, hv */ -void setDAC(enum DACINDEX ind, int val, int imod, int mV, int retval[]){ - printf("Going to set dac %d to %d of imod %d with mv mode %d \n", (int)ind, val, imod, mV); +void setDAC(enum DACINDEX ind, int val, int mV, int retval[]){ + printf("Going to set dac %d to %d with mv mode %d \n", (int)ind, val, mV); if(ind == VTHRESHOLD){ int ret[5]; - setDAC(VCMP_LL,val,imod,mV,retval); + setDAC(VCMP_LL,val,mV,retval); ret[0] = retval[mV]; - setDAC(VCMP_LR,val,imod,mV,retval); + setDAC(VCMP_LR,val,mV,retval); ret[1] = retval[mV]; - setDAC(VCMP_RL,val,imod,mV,retval); + setDAC(VCMP_RL,val,mV,retval); ret[2] = retval[mV]; - setDAC(VCMP_RR,val,imod,mV,retval); + setDAC(VCMP_RR,val,mV,retval); ret[3] = retval[mV]; - setDAC(VCP,val,imod,mV,retval); + setDAC(VCP,val,mV,retval); ret[4] = retval[mV]; @@ -1018,7 +1009,7 @@ void setDAC(enum DACINDEX ind, int val, int imod, int mV, int retval[]){ -int getADC(enum ADCINDEX ind, int imod){ +int getADC(enum ADCINDEX ind){ #ifdef VIRTUAL return 0; #else @@ -1224,7 +1215,7 @@ int setDetectorPosition(int pos[]) { /* eiger specific - iodelay, 10g, pulse, rate, temp, activate, delay nw parameter */ -int setIODelay(int val, int imod){ +int setIODelay(int val){ if(val!=-1){ printf(" Setting IO Delay: %d\n",val); #ifndef VIRTUAL @@ -1745,12 +1736,6 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod){ printf("Copying module %x to module %x\n",srcMod,destMod); #endif - if (srcMod->module>=0) { -#ifdef VERBOSE - printf("Copying module number %d to module number %d\n",srcMod->module,destMod->module); -#endif - destMod->module=srcMod->module; - } if (srcMod->serialnumber>=0){ destMod->serialnumber=srcMod->serialnumber; @@ -1829,37 +1814,21 @@ int calculateDataBytes(){ } -int getTotalNumberOfChannels(){return ((int)getNumberOfChannelsPerModule() * (int)getTotalNumberOfModules());} -int getTotalNumberOfChips(){return ((int)getNumberOfChipsPerModule() * (int)getTotalNumberOfModules());} -int getTotalNumberOfModules(){return NMOD;} -int getNumberOfChannelsPerModule(){return ((int)getNumberOfChannelsPerChip() * (int)getTotalNumberOfChips());} -int getNumberOfChipsPerModule(){return NCHIP;} -int getNumberOfDACsPerModule(){return NDAC;} -int getNumberOfADCsPerModule(){return NADC;} + + +int getTotalNumberOfChannels(){return ((int)getNumberOfChannelsPerChip() * (int)getNumberOfChips());} +int getNumberOfChips(){return NCHIP;} +int getNumberOfDACs(){return NDAC;} +int getNumberOfADCs(){return NADC;} int getNumberOfChannelsPerChip(){return NCHAN;} -int getNumberOfGainsPerModule(){return NGAIN;} -int getNumberOfOffsetsPerModule(){return NOFFSET;} +int getNumberOfGains(){return NGAIN;} +int getNumberOfOffsets(){return NOFFSET;} -/* sync */ - -enum masterFlags setMaster(enum masterFlags arg){ - return NO_MASTER; -} - - - -enum synchronizationMode setSynchronization(enum synchronizationMode arg){ - return NO_SYNCHRONIZATION; -} - - - - diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h index 5eae871d9..fec509799 100644 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h @@ -45,8 +45,6 @@ enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G}; /* Hardware Definitions */ -#define NMAXMOD (1) -#define NMOD (1) #define NCHAN (256 * 256) #define NCHIP (4) #define NADC (0) @@ -65,7 +63,6 @@ enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G}; #define SPECIAL9M_HIGHVOLTAGE_BUFFERSIZE (16) /** Default Parameters */ -#define DEFAULT_MOD_INDEX (0) #define DEFAULT_NUM_FRAMES (1) #define DEFAULT_NUM_CYCLES (1) #define DEFAULT_EXPTIME (1E9) //ns diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_defs.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_defs.h index c5062e03f..108fdd66a 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_defs.h @@ -1 +1 @@ -../commonFiles/sls_detector_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_funcs.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_funcs.h index 844b67129..a21957495 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_detector_funcs.h @@ -1 +1 @@ -../commonFiles/sls_detector_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_defs.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_defs.h index 1de31caf5..fbea73b31 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_defs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_funcs.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_funcs.h index c2ea4ded9..8f221c967 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/sls_receiver_funcs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/updateGitVersion.sh b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/updateGitVersion.sh index 509bffaf4..52fcd1d16 100755 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/updateGitVersion.sh +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/updateGitVersion.sh @@ -1,11 +1,11 @@ SERVER=eigerDetectorServer -MAINDIR=slsDetectorsPackage -SPECDIR=slsDetectorSoftware/$SERVER +MAINDIR=slsDetectorPackage +SPECDIR=slsDetectorSoftware/slsDetectorServers/$SERVER TMPFILE=gitInfoEigerTmp.h INCLFILE=gitInfoEiger.h #evaluate the variables -EVALFILE=../../evalVersionVariables.sh +EVALFILE=../../../evalVersionVariables.sh source $EVALFILE @@ -24,7 +24,7 @@ OLDDATE=$(more $INCLFILE | grep '#define GITDATE' | awk '{print $3}') #update INCLFILE if changes if [ "$OLDDATE" != "$NEWDATE" ]; then echo Path: ${MAINDIR}/${SPECDIR} $'\n'URL: ${GITREPO} $'\n'Repository Root: ${GITREPO} $'\n'Repsitory UUID: ${REPUID} $'\n'Revision: ${FOLDERREV} $'\n'Branch: ${BRANCH} $'\n'Last Changed Author: ${AUTH1}_${AUTH2} $'\n'Last Changed Rev: ${REV} $'\n'Last Changed Date: ${RDATE} > gitInfo.txt - cd ../../ + cd ../../../ ./genVersionHeader.sh $SPECDIR/gitInfo.txt $SPECDIR/$TMPFILE $SPECDIR/$INCLFILE cd $WD fi diff --git a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/versionAPI.h b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/versionAPI.h index d3bf8d6cf..5336e713b 120000 --- a/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/versionAPI.h +++ b/slsDetectorSoftware/slsDetectorServers/eigerDetectorServer/versionAPI.h @@ -1 +1 @@ -../commonFiles/versionAPI.h \ No newline at end of file +../../../slsSupportLib/include/versionAPI.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile index f6eacbd00..fc5720dfd 100755 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile @@ -6,7 +6,7 @@ CROSS = bfin-uclinux- CC = $(CROSS)gcc -CFLAGS += -Wall -DGOTTHARDD -DMCB_FUNCS -DDACS_INT -DDEBUG # -DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER +CFLAGS += -Wall -DGOTTHARDD -DMCB_FUNCS -DDEBUG # -DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER PROGS= gotthardDetectorServer diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.propix b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.propix deleted file mode 100755 index 7f40e78a3..000000000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.propix +++ /dev/null @@ -1,49 +0,0 @@ -# $Id: Makefile,v 1.1.1.1 2006/02/04 03:35:01 freza Exp $ -# first compile -# make cris-axis-linux-gnu - - -CROSS = bfin-uclinux- -CC = $(CROSS)gcc - -CFLAGS += -Wall -DGOTTHARDD -DPROPIXD -DMCB_FUNCS -DDACS_INT -DDEBUG # -DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER - - -PROGS= propixDetectorServer -INSTDIR= /tftpboot -INSTMODE= 0777 - - - -BINS = testlib_sharedlibc -SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c -OBJS = $(SRCS:%.c=%.o) - - - -all: clean $(PROGS) - -boot: $(OBJS) - -$(PROGS): $(OBJS) - echo $(OBJS) - @echo `tput setaf 6; ./updateGitVersion.sh; tput sgr0;` - $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) - - -install: $(PROGS) - $(INSTALL) -d $(INSTDIR) - $(INSTALL) -m $(INSTMODE) $(PROGS) $(INSTDIR) - - -romfs: - $(ROMFSINST) /bin/$(PROGS) - -clean: - rm -rf $(PROGS) *.o *.gdb - - - - - - diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.virtual b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.virtual index ca9bff23c..0a26d5378 100755 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.virtual +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/Makefile.virtual @@ -2,7 +2,7 @@ DESTDIR ?= ./ CC = gcc -CFLAGS += -Wall -DGOTTHARDD -DMCB_FUNCS -DDACS_INT -DDEBUG -DVIRTUAL +CFLAGS += -Wall -DGOTTHARDD -DMCB_FUNCS -DDEBUG -DVIRTUAL PROGS= $(DESTDIR)/gotthardDetectorServer_virtual diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/ansi.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/ansi.h index a122db0ad..1f2dbc999 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/ansi.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/ansi.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/ansi.h \ No newline at end of file +../../../slsSupportLib/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.c b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.c index 87a4f95d1..19b563862 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.c +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.c @@ -1 +1 @@ -../commonFiles/communication_funcs.c \ No newline at end of file +../../../slsSupportLib/include/communication_funcs.c \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.h index f220903b2..7f8c3d192 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/communication_funcs.h @@ -1 +1 @@ -../commonFiles/communication_funcs.h \ No newline at end of file +../../../slsSupportLib/include/communication_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServer_developer b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServer_developer deleted file mode 100755 index 940e9e73a33ee766c100934252a753ea979ad9eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116056 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 diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServerv4.0.0.3 b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/gotthardDetectorServerv4.0.0.3 deleted file mode 100755 index 7d609b90de0f3e50da7bd7c3bbbc8b91dccd8062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116056 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 diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_defs.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_defs.h index c5062e03f..108fdd66a 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_defs.h @@ -1 +1 @@ -../commonFiles/sls_detector_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_funcs.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_funcs.h index 844b67129..a21957495 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_detector_funcs.h @@ -1 +1 @@ -../commonFiles/sls_detector_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_defs.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_defs.h index 1de31caf5..fbea73b31 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_defs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_funcs.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_funcs.h index c2ea4ded9..8f221c967 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/sls_receiver_funcs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/updateGitVersion.sh b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/updateGitVersion.sh index 19d9acbcb..933604ab8 100755 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/updateGitVersion.sh +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/updateGitVersion.sh @@ -1,11 +1,11 @@ SERVER=gotthardDetectorServer -MAINDIR=slsDetectorsPackage -SPECDIR=slsDetectorSoftware/$SERVER +MAINDIR=slsDetectorPackage +SPECDIR=slsDetectorSoftware/slsDetectorServers/$SERVER TMPFILE=gitInfoGotthardTmp.h INCLFILE=gitInfoGotthard.h #evaluate the variables -EVALFILE=../../evalVersionVariables.sh +EVALFILE=../../../evalVersionVariables.sh source $EVALFILE @@ -24,7 +24,7 @@ OLDDATE=$(more $INCLFILE | grep '#define GITDATE' | awk '{print $3}') #update INCLFILE if changes if [ "$OLDDATE" != "$NEWDATE" ]; then echo Path: ${MAINDIR}/${SPECDIR} $'\n'URL: ${GITREPO} $'\n'Repository Root: ${GITREPO} $'\n'Repsitory UUID: ${REPUID} $'\n'Revision: ${FOLDERREV} $'\n'Branch: ${BRANCH} $'\n'Last Changed Author: ${AUTH1}_${AUTH2} $'\n'Last Changed Rev: ${REV} $'\n'Last Changed Date: ${RDATE} > gitInfo.txt - cd ../../ + cd ../../../ ./genVersionHeader.sh $SPECDIR/gitInfo.txt $SPECDIR/$TMPFILE $SPECDIR/$INCLFILE cd $WD -fi \ No newline at end of file +fi diff --git a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/versionAPI.h b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/versionAPI.h index d3bf8d6cf..5336e713b 120000 --- a/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/versionAPI.h +++ b/slsDetectorSoftware/slsDetectorServers/gotthardDetectorServer/versionAPI.h @@ -1 +1 @@ -../commonFiles/versionAPI.h \ No newline at end of file +../../../slsSupportLib/include/versionAPI.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile index a1c89973e..85dd50095 100755 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile @@ -1,6 +1,6 @@ CROSS = bfin-uclinux- CC = $(CROSS)gcc -CFLAGS += -Wall -DJUNGFRAUD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE +CFLAGS += -Wall -DJUNGFRAUD -DSLS_DETECTOR_FUNCTION_LIST -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE LDLIBS += -lm -lstdc++ PROGS = jungfrauDetectorServer diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual index 97b4812d6..3b7f1973b 100644 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual @@ -1,5 +1,5 @@ CC = gcc -CFLAGS += -Wall -DJUNGFRAUD -DVIRTUAL -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE +CFLAGS += -Wall -DJUNGFRAUD -DVIRTUAL -DSLS_DETECTOR_FUNCTION_LIST -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE LDLIBS += -lm -lstdc++ -pthread PROGS = jungfrauDetectorServer_virtual diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/ansi.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/ansi.h index a122db0ad..1f2dbc999 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/ansi.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/ansi.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/ansi.h \ No newline at end of file +../../../slsSupportLib/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer deleted file mode 100755 index d8de0a65dec1841a5cdb24cd765118b44d78e273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116720 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

+Ar%QD{Prrkcy3 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

1yu|wtypFPf_f_7z4|%PkKM; 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 NBqPMPbP=-d{{Xe{#N7Y@ diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_refactor b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_refactor new file mode 100755 index 0000000000000000000000000000000000000000..2066138882eb525a8e7e37237c1bdb095336164e GIT binary patch literal 106952 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±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 literal 0 HcmV?d00001 diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.c b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.c index 87a4f95d1..19b563862 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.c +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.c @@ -1 +1 @@ -../commonFiles/communication_funcs.c \ No newline at end of file +../../../slsSupportLib/include/communication_funcs.c \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.h index f220903b2..7f8c3d192 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/communication_funcs.h @@ -1 +1 @@ -../commonFiles/communication_funcs.h \ No newline at end of file +../../../slsSupportLib/include/communication_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt index 5fdddd6d8..e9a0c5f70 100644 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ -Path: slsDetectorsPackage/slsDetectorSoftware/jungfrauDetectorServer +Path: slsDetectorPackage/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: c52025dd7c4b44b93e64353a22997d971996ab18 -Revision: 163 -Branch: developer -Last Changed Author: Gemma_Tinti -Last Changed Rev: 3999 -Last Changed Date: 2018-09-28 14:11:53.000000002 +0200 ./RegisterDefs.h +Repsitory UUID: b9f97f42a6a369dfb5c484bffeaa7a417e9cbca1 +Revision: 1 +Branch: refactor +Last Changed Author: Dhanya_Thattil +Last Changed Rev: 4067 +Last Changed Date: 2018-10-08 13:53:39.000000002 +0200 ./Makefile.virtual diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h index 42a1e0ca6..3a8464eae 100644 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "c52025dd7c4b44b93e64353a22997d971996ab18" -#define GITAUTH "Gemma_Tinti" -#define GITREV 0x3999 -#define GITDATE 0x20180928 -#define GITBRANCH "developer" +#define GITREPUUID "b9f97f42a6a369dfb5c484bffeaa7a417e9cbca1" +#define GITAUTH "Dhanya_Thattil" +#define GITREV 0x4067 +#define GITDATE 0x20181008 +#define GITBRANCH "refactor" diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index f39c44890..c922d0ddc 100644 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -14,8 +14,8 @@ /* global variables */ //jungfrau doesnt require chips and chans (save memory) sls_detector_module *detectorModules=NULL; -dacs_t *detectorDacs=NULL; -dacs_t *detectorAdcs=NULL; +int *detectorDacs=NULL; +int *detectorAdcs=NULL; enum detectorSettings thisSettings; enum masterFlags masterMode = NO_MASTER; @@ -234,9 +234,6 @@ int testBus() { } -int moduleTest( enum digitalTestMode arg, int imod){ - return OK; -} int detectorTest( enum digitalTestMode arg){ #ifdef VIRTUAL @@ -402,8 +399,8 @@ void allocateDetectorStructureMemory(){ if (detectorDacs!=NULL) free(detectorDacs); if (detectorAdcs!=NULL) free(detectorAdcs); detectorModules=malloc(sizeof(sls_detector_module)); - detectorDacs=malloc(NDAC*sizeof(dacs_t)); - detectorAdcs=malloc(NADC*sizeof(dacs_t)); + detectorDacs=malloc(NDAC*sizeof(int)); + detectorAdcs=malloc(NADC*sizeof(int)); #ifdef VERBOSE printf("modules from 0x%x to 0x%x\n",detectorModules, detectorModules+n); printf("dacs from 0x%x to 0x%x\n",detectorDacs, detectorDacs+n*NDAC); @@ -415,7 +412,6 @@ void allocateDetectorStructureMemory(){ (detectorModules)->nadc=NADC; (detectorModules)->nchip=NCHIP; (detectorModules)->nchan=NCHIP*NCHAN; - (detectorModules)->module=0; (detectorModules)->gain=0; (detectorModules)->offset=0; (detectorModules)->reg=0; @@ -460,7 +456,7 @@ void setupDetector() { bus_w(ADC_PORT_INVERT_REG, ADC_PORT_INVERT_VAL); //Initialization of acquistion parameters - setSettings(DEFAULT_SETTINGS,-1); + setSettings(DEFAULT_SETTINGS); setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES); setTimer(CYCLES_NUMBER, DEFAULT_NUM_CYCLES); @@ -493,7 +489,7 @@ int setDefaultDacs() { for(i = 0; i < NDAC; ++i) { // if not already default, set it to default if (dacValues[i] != defaultvals[i]) { - setDAC((enum DACINDEX)i,defaultvals[i],0,0,retval); + setDAC((enum DACINDEX)i,defaultvals[i],0,retval); if (retval[0] != defaultvals[i]) { cprintf(RED, "Warning: Setting dac %d failed, wrote %d, read %d\n",i ,defaultvals[i], retval[0]); ret = FAIL; @@ -602,16 +598,8 @@ void configureASICTimer() { -/* set parameters - nmod, dr, roi */ +/* set parameters - dr, roi */ -int setNMod(int nm, enum dimension dim){ - return NMOD; -} - - -int getNModBoard(enum dimension arg){ - return NMAXMOD; -} int setDynamicRange(int dr){ @@ -861,7 +849,7 @@ int setModule(sls_detector_module myMod){ printf("Setting module with settings %d\n",myMod.reg); //#endif - setSettings( (enum detectorSettings)myMod.reg,-1); + setSettings( (enum detectorSettings)myMod.reg); //copy module locally if (detectorModules) @@ -869,7 +857,7 @@ int setModule(sls_detector_module myMod){ //set dac values for(i=0;imodule>=0) { -#ifdef VERBOSE - printf("Copying module number %d to module number %d\n",srcMod->module,destMod->module); -#endif - destMod->module=srcMod->module; - } if (srcMod->serialnumber>=0){ destMod->serialnumber=srcMod->serialnumber; @@ -1732,28 +1714,14 @@ int calculateDataBytes(){ return DATA_BYTES; } -int getTotalNumberOfChannels(){return ((int)getNumberOfChannelsPerModule() * (int)getTotalNumberOfModules());} -int getTotalNumberOfChips(){return ((int)getNumberOfChipsPerModule() * (int)getTotalNumberOfModules());} -int getTotalNumberOfModules(){return NMOD;} -int getNumberOfChannelsPerModule(){return ((int)getNumberOfChannelsPerChip() * (int)getTotalNumberOfChips());} -int getNumberOfChipsPerModule(){return NCHIP;} -int getNumberOfDACsPerModule(){return NDAC;} -int getNumberOfADCsPerModule(){return NADC;} +int getTotalNumberOfChannels(){return ((int)getNumberOfChannelsPerChip() * (int)getNumberOfChips());} +int getNumberOfChips(){return NCHIP;} +int getNumberOfDACs(){return NDAC;} +int getNumberOfADCs(){return NADC;} int getNumberOfChannelsPerChip(){return NCHAN;} -/* sync */ - -enum masterFlags setMaster(enum masterFlags arg){ - return NO_MASTER; -} - -enum synchronizationMode setSynchronization(enum synchronizationMode arg){ - return NO_SYNCHRONIZATION; -} - - diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index f4e89e760..36260b519 100644 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -46,8 +46,6 @@ enum NETWORKINDEX { TXN_FRAME }; /* Hardware Definitions */ -#define NMAXMOD (1) -#define NMOD (1) #define NCHAN (256 * 256) #define NCHIP (8) #define NADC (0) diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_defs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_defs.h index c5062e03f..108fdd66a 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_defs.h @@ -1 +1 @@ -../commonFiles/sls_detector_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_funcs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_funcs.h index 844b67129..a21957495 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_detector_funcs.h @@ -1 +1 @@ -../commonFiles/sls_detector_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_detector_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_defs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_defs.h index 1de31caf5..fbea73b31 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_defs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_defs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_defs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_funcs.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_funcs.h index c2ea4ded9..8f221c967 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/sls_receiver_funcs.h @@ -1 +1 @@ -../../slsReceiverSoftware/include/sls_receiver_funcs.h \ No newline at end of file +../../../slsSupportLib/include/sls_receiver_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/updateGitVersion.sh b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/updateGitVersion.sh index 0c25e7f1e..917de1fcf 100755 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/updateGitVersion.sh +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/updateGitVersion.sh @@ -1,12 +1,12 @@ SERVER=jungfrauDetectorServer -MAINDIR=slsDetectorsPackage -SPECDIR=slsDetectorSoftware/$SERVER +MAINDIR=slsDetectorPackage +SPECDIR=slsDetectorSoftware/slsDetectorServers/$SERVER TMPFILE=gitInfoJungfrauTmp.h INCLFILE=gitInfoJungfrau.h #evaluate the variables -EVALFILE=../../evalVersionVariables.sh +EVALFILE=../../../evalVersionVariables.sh source $EVALFILE @@ -25,7 +25,7 @@ OLDDATE=$(more $INCLFILE | grep '#define GITDATE' | awk '{print $3}') #update INCLFILE if changes if [ "$OLDDATE" != "$NEWDATE" ]; then echo Path: ${MAINDIR}/${SPECDIR} $'\n'URL: ${GITREPO} $'\n'Repository Root: ${GITREPO} $'\n'Repsitory UUID: ${REPUID} $'\n'Revision: ${FOLDERREV} $'\n'Branch: ${BRANCH} $'\n'Last Changed Author: ${AUTH1}_${AUTH2} $'\n'Last Changed Rev: ${REV} $'\n'Last Changed Date: ${RDATE} > gitInfo.txt - cd ../../ + cd ../../../ ./genVersionHeader.sh $SPECDIR/gitInfo.txt $SPECDIR/$TMPFILE $SPECDIR/$INCLFILE cd $WD fi \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/versionAPI.h b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/versionAPI.h index d3bf8d6cf..5336e713b 120000 --- a/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/versionAPI.h +++ b/slsDetectorSoftware/slsDetectorServers/jungfrauDetectorServer/versionAPI.h @@ -1 +1 @@ -../commonFiles/versionAPI.h \ No newline at end of file +../../../slsSupportLib/include/versionAPI.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/.target-makefrag b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/.target-makefrag deleted file mode 100755 index ce093ecac..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/.target-makefrag +++ /dev/null @@ -1 +0,0 @@ -AXIS_BUILDTYPE ?= cris-axis-linux-gnu diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile deleted file mode 100755 index 490d4761b..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# $Id: Makefile,v 1.1.1.1 2006/02/04 03:35:01 freza Exp $ -# first compile -# make cris-axis-linux-gnu - - -CROSS = bfin-uclinux- -CC = $(CROSS)gcc - -CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG #-DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER - - -PROGS= moenchDetectorServer -INSTDIR= /tftpboot -INSTMODE= 0777 - - - -BINS = testlib_sharedlibc -SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c -OBJS = $(SRCS:%.c=%.o) - - - -all: clean versioning $(PROGS) - -boot: $(OBJS) - -versioning: - @echo `tput setaf 6; ./updateGitVersion.sh; tput sgr0;` - -$(PROGS): $(OBJS) - echo $(OBJS) - $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) - - -install: $(PROGS) - $(INSTALL) -d $(INSTDIR) - $(INSTALL) -m $(INSTMODE) $(PROGS) $(INSTDIR) - - -romfs: - $(ROMFSINST) /bin/$(PROGS) - -clean: - rm -rf $(PROGS) *.o *.gdb - - - - - - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile.virtual b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile.virtual deleted file mode 100755 index 38dd2537c..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/Makefile.virtual +++ /dev/null @@ -1,30 +0,0 @@ - -DESTDIR ?= ./ - -CC = gcc -CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG -DVIRTUAL - - -PROGS= $(DESTDIR)/moenchVirtualServer - - -SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c -OBJS = $(SRCS:%.c=%.o) - -moenchVirtualServer = $(PROGS) - -all: clean $(PROGS) - - -$(PROGS): $(OBJS) - $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) - - -clean: - rm -rf $(PROGS) *.o *.gdb - - - - - - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/ansi.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/ansi.h deleted file mode 120000 index a122db0ad..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/ansi.h +++ /dev/null @@ -1 +0,0 @@ -../../slsReceiverSoftware/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.c deleted file mode 120000 index 87a4f95d1..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.c +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/communication_funcs.c \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.h deleted file mode 120000 index f220903b2..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/communication_funcs.h +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/communication_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.c deleted file mode 100755 index 25b6e7598..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.c +++ /dev/null @@ -1,2613 +0,0 @@ - -#include "server_defs.h" -#include "firmware_funcs.h" -#include "mcb_funcs.h" -#include "registers_m.h" - -#ifdef SHAREDMEMORY -#include "sharedmemory.h" -#endif - -#include -#include -#include - -#include - -//for memory mapping -u_int64_t CSP0BASE; - -FILE *debugfp, *datafp; - -int fr; -int wait_time; -int *fifocntrl; - -//int *statusreg; commented out by dhanya -const int nModY=1; -int nModBoard; -int nModX=NMAXMOD; -int dynamicRange=16;//32; -int dataBytes=NMAXMOD*NCHIP*NCHAN*2; -int storeInRAM=0; -int ROI_flag=0; -int adcConfigured=-1; -u_int32_t *ram_values=NULL; -volatile char *now_ptr=NULL; -volatile u_int16_t *values; -int ram_size=0; - -int64_t totalTime=1; -u_int32_t progressMask=0; - -int phase_shift=0;//DEFAULT_PHASE_SHIFT; -int ipPacketSize=DEFAULT_IP_PACKETSIZE; -int udpPacketSize=DEFAULT_UDP_PACKETSIZE; - - -int ififostart, ififostop, ififostep, ififo; - -int masterMode=NO_MASTER, syncMode=NO_SYNCHRONIZATION, timingMode=AUTO_TIMING; - -enum externalSignalFlag signals[4]={EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF}; - - -#ifdef MCB_FUNCS -extern const int nChans; -extern const int nChips; -//extern const int nDacs; -//extern const int nAdcs; -#endif -#ifndef MCB_FUNCS - -const int nChans=NCHAN; -const int nChips=NCHIP; -const int nDacs=NDAC; -const int nAdcs=NADC; -#endif - - - - -/** - ENEt conf structs -*/ -typedef struct mac_header_struct{ - u_int8_t mac_dest_mac2; - u_int8_t mac_dest_mac1; - u_int8_t mac_dummy1; - u_int8_t mac_dummy2; - u_int8_t mac_dest_mac6; - u_int8_t mac_dest_mac5; - u_int8_t mac_dest_mac4; - u_int8_t mac_dest_mac3; - u_int8_t mac_src_mac4; - u_int8_t mac_src_mac3; - u_int8_t mac_src_mac2; - u_int8_t mac_src_mac1; - u_int16_t mac_ether_type; - u_int8_t mac_src_mac6; - u_int8_t mac_src_mac5; -} mac_header; - -typedef struct ip_header_struct { - u_int16_t ip_len; - u_int8_t ip_tos; - u_int8_t ip_ihl:4 ,ip_ver:4; - u_int16_t ip_offset:13,ip_flag:3; - u_int16_t ip_ident; - u_int16_t ip_chksum; - u_int8_t ip_protocol; - u_int8_t ip_ttl; - u_int32_t ip_sourceip; - u_int32_t ip_destip; -} ip_header; - -typedef struct udp_header_struct{ - u_int16_t udp_destport; - u_int16_t udp_srcport; - u_int16_t udp_chksum; - u_int16_t udp_len; -} udp_header; - -typedef struct mac_conf_struct{ - mac_header mac; - ip_header ip; - udp_header udp; - u_int32_t npack; - u_int32_t lpack; - u_int32_t npad; - u_int32_t cdone; -} mac_conf; - -typedef struct tse_conf_struct{ - u_int32_t rev; //0x0 - u_int32_t scratch; - u_int32_t command_config; - u_int32_t mac_0; //0x3 - u_int32_t mac_1; - u_int32_t frm_length; - u_int32_t pause_quant; - u_int32_t rx_section_empty; //0x7 - u_int32_t rx_section_full; - u_int32_t tx_section_empty; - u_int32_t tx_section_full; - u_int32_t rx_almost_empty; //0xB - u_int32_t rx_almost_full; - u_int32_t tx_almost_empty; - u_int32_t tx_almost_full; - u_int32_t mdio_addr0; //0xF - u_int32_t mdio_addr1; -}tse_conf; - - - -int mapCSP0(void) { - printf("Mapping memory\n"); -#ifndef VIRTUAL - int fd; - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) { - printf("\nCan't find /dev/mem!\n"); - return FAIL; - } - printf("/dev/mem opened\n"); - - CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0); - if (CSP0BASE == (u_int32_t)MAP_FAILED) { - printf("\nCan't map memmory area!!\n"); - return FAIL; - } - printf("CSP0 mapped\n"); - -#endif -#ifdef VIRTUAL - CSP0BASE = malloc(MEM_SIZE); - printf("memory allocated\n"); -#endif -#ifdef SHAREDMEMORY - if ( (res=inism(SMSV))<0) { - printf("error attaching shared memory! %i",res); - return FAIL; - } -#endif - printf("CSPObase is 0x%x \n",CSP0BASE); - printf("CSPOBASE=from %08x to %x\n",CSP0BASE,CSP0BASE+MEM_SIZE); - - u_int32_t address; - address = FIFO_DATA_REG_OFF; - values=(u_int16_t*)(CSP0BASE+address*2); - printf("statusreg=%08x\n",bus_r(STATUS_REG)); - printf("\n\n"); - return OK; -} - -u_int16_t bus_r16(u_int32_t offset){ - volatile u_int16_t *ptr1; - ptr1=(u_int16_t*)(CSP0BASE+offset*2); - return *ptr1; -} - -u_int16_t bus_w16(u_int32_t offset, u_int16_t data) { - volatile u_int16_t *ptr1; - ptr1=(u_int16_t*)(CSP0BASE+offset*2); - *ptr1=data; - return OK; -} - -/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ -u_int16_t ram_w16(u_int32_t ramType, int adc, int adcCh, int Ch, u_int16_t data) { - unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); - // printf("Writing to addr:%x\n",adr); - return bus_w16(adr,data); -} - -/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ -u_int16_t ram_r16(u_int32_t ramType, int adc, int adcCh, int Ch){ - unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); - // printf("Reading from addr:%x\n",adr); - return bus_r16(adr); -} - -u_int32_t bus_w(u_int32_t offset, u_int32_t data) { - volatile u_int32_t *ptr1; - - ptr1=(u_int32_t*)(CSP0BASE+offset*2); - *ptr1=data; - - return OK; -} - - -u_int32_t bus_r(u_int32_t offset) { - volatile u_int32_t *ptr1; - - ptr1=(u_int32_t*)(CSP0BASE+offset*2); - return *ptr1; -} - - -int setPhaseShiftOnce(){ - u_int32_t addr, reg; - int i; - addr=MULTI_PURPOSE_REG; - reg=bus_r(addr); -#ifdef VERBOSE - printf("Multipurpose reg:%x\n",reg); -#endif - - //Checking if it is power on(negative number) - // if(((reg&0xFFFF0000)>>16)>0){ - //bus_w(addr,0x0); //clear the reg - - if(reg==0){ - printf("\nImplementing phase shift of %d\n",phase_shift); - for (i=1;i0) { - bus_w(PLL_CNTRL_REG, 1);//reset PLL - bus_w(PLL_CNTRL_REG, 0); - phase_shift=0; - for (i=0;i1) nc=d;// nc=161/d; - else return -1; - - if (nc>255) - return -1; - - int addr, addr1, addr0; - u_int32_t pat,pat1,pat0; - - addr= PLL_PARAM_REG; - addr0= PLL_PARAM_OUT_REG; - addr1=PLL_CNTRL_REG; - pat1=0x10; - - - //write high count c0 -/* pat=(1<<12)|(7<<9)|nc; */ -/* bus_w(addr, pat); */ -/* bus_w(addr1, pat1); */ -/* bus_w(addr1, 0); */ -/* usleep (1000); */ -/* pat=bus_r(addr0); */ -/* bus_w(addr1, 0x4); */ -/* bus_w(addr1, 0); */ -/* pat=bus_r(addr0); */ -/* printf("M nominal count read %x (%d)\n",pat,(pat&0x1ff)); */ - - - - //write low count c0 - pat=(nc-1)|(4<<12)|(1<<9); - bus_w(addr, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - pat0=bus_r(PLL_PARAM_OUT_REG); - usleep (1000); - printf("C0 low count status %x\n",pat0); - - //write high count c0 - pat=(nc)|(4<<12)|(0<<9); - bus_w(addr, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - pat0=bus_r(PLL_PARAM_OUT_REG); - printf("C0 high count status %x\n",pat0); - usleep (1000); - - //write low count c1 - pat=(nc-1)|(5<<12)|(1<<9); - bus_w(addr, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - pat0=bus_r(PLL_PARAM_OUT_REG); - printf("C1 high count status %x\n",pat0); - usleep (1000); - - //write high count c1 - pat=(nc)|(5<<12)|(0<<9); - bus_w(addr, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - pat0=bus_r(PLL_PARAM_OUT_REG); - printf("C1 low count status %x\n",pat0); - usleep (1000); - - //reconfigure pll - pat1=0x8; - bus_w(addr1, pat1); - bus_w(addr1, 0); - pat0=bus_r(PLL_PARAM_OUT_REG); - printf("configure status %d\n",pat0); - sleep (1); - printf("finish status %x\n",pat0); - - - bus_w(PLL_CNTRL_REG, 1); //reset PLL - bus_w(PLL_CNTRL_REG, 0); - - return 0; -} - -u_int32_t getClockDivider() { - int addr, addr1, addr0; - u_int32_t pat,pat1; - - addr0= PLL_PARAM_REG; - addr= PLL_PARAM_OUT_REG; - addr1=PLL_CNTRL_REG; - pat1=0x4; - - - //write low count c0 - pat=(4<<12)|(1<<9); - bus_w(addr0, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - usleep (1000); - pat=bus_r(addr); - printf("C0 low count read %x (%d)\n",pat,(pat&0xff)); - - //write high count c0 - pat=(4<<12)|(0<<9); - bus_w(addr0, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - usleep (1000); - pat=bus_r(addr); - printf("C0 high count read %x (%d)\n",pat,(pat&0xff)); - - - //write low count c1 - pat=(5<<12)|(1<<9); - bus_w(addr0, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - usleep (1000); - pat=bus_r(addr); - printf("C1 low count read %x (%d)\n",pat,(pat&0xff)); - - //write high count c1 - pat=(5<<12)|(0<<9); - bus_w(addr0, pat); - bus_w(addr1, pat1); - bus_w(addr1, 0); - usleep (1000); - pat=bus_r(addr); - printf("C1 high count read %x (%d)\n",pat,(pat&0xff)); - - - return (pat&0xff); - -/* //write low count c0 */ -/* pat=(0<<12)|(7<<9); */ -/* bus_w(addr0, pat); */ -/* bus_w(addr1, pat1); */ -/* bus_w(addr1, 0); */ -/* usleep (1000); */ -/* pat=bus_r(addr); */ -/* printf("N nominal count read %x (%d)\n",pat,pat&0x1ff); */ - -/* //write high count c0 */ -/* pat=(1<<12)|(7<<9); */ -/* bus_w(addr0, pat); */ -/* bus_w(addr1, pat1); */ -/* bus_w(addr1, 0); */ -/* usleep (1000); */ -/* pat=bus_r(addr); */ -/* printf("M nominal count read %x (%d)\n",pat,(pat&0x1ff)); */ - - - -/* if ((pat&0x1ff)!=0) */ -/* return 161/(pat&0x1ff); */ -/* else */ -/* return -1; */ -} - -u_int32_t setSetLength(int d) { - return 0; -} - -u_int32_t getSetLength() { - return 0; -} - -u_int32_t setOversampling(int d) { - - if (d>=0 && d<=255) - bus_w(OVERSAMPLING_REG, d); - - return bus_r(OVERSAMPLING_REG); -} - - -u_int32_t setWaitStates(int d1) { - return 0; -} - -u_int32_t getWaitStates() { - return 0; -} - - -u_int32_t setTotClockDivider(int d) { - return 0; -} - -u_int32_t getTotClockDivider() { - return 0; -} - - -u_int32_t setTotDutyCycle(int d) { - return 0; -} - -u_int32_t getTotDutyCycle() { - return 0; -} - - -u_int32_t setExtSignal(int d, enum externalSignalFlag mode) { - - //int modes[]={EXT_SIG_OFF, EXT_GATE_IN_ACTIVEHIGH, EXT_GATE_IN_ACTIVELOW,EXT_TRIG_IN_RISING,EXT_TRIG_IN_FALLING,EXT_RO_TRIG_IN_RISING, EXT_RO_TRIG_IN_FALLING,EXT_GATE_OUT_ACTIVEHIGH, EXT_GATE_OUT_ACTIVELOW, EXT_TRIG_OUT_RISING, EXT_TRIG_OUT_FALLING, EXT_RO_TRIG_OUT_RISING, EXT_RO_TRIG_OUT_FALLING}; - // int off=d*SIGNAL_OFFSET; - - u_int32_t c; - c=bus_r(EXT_SIGNAL_REG); - - if (d>=0 && d<4) { - signals[d]=mode; -#ifdef VERBOSE - printf("settings signal variable number %d to value %04x\n", d, signals[d]); -#endif - - // if output signal, set it! - - switch (mode) { - case GATE_IN_ACTIVE_HIGH: - case GATE_IN_ACTIVE_LOW: - if (timingMode==GATE_FIX_NUMBER || timingMode==GATE_WITH_START_TRIGGER) - setFPGASignal(d,mode); - else - setFPGASignal(d,SIGNAL_OFF); - break; - case TRIGGER_IN_RISING_EDGE: - case TRIGGER_IN_FALLING_EDGE: - if (timingMode==TRIGGER_EXPOSURE || timingMode==GATE_WITH_START_TRIGGER) - setFPGASignal(d,mode); - else - setFPGASignal(d,SIGNAL_OFF); - break; - case RO_TRIGGER_IN_RISING_EDGE: - case RO_TRIGGER_IN_FALLING_EDGE: - if (timingMode==TRIGGER_READOUT) - setFPGASignal(d,mode); - else - setFPGASignal(d,SIGNAL_OFF); - break; - case MASTER_SLAVE_SYNCHRONIZATION: - setSynchronization(syncMode); - break; - default: - setFPGASignal(d,mode); - break; - } - - setTiming(GET_EXTERNAL_COMMUNICATION_MODE); - } - - -// if (mode<=RO_TRIGGER_OUT_FALLING_EDGE && mode>=0) -// bus_w(EXT_SIGNAL_REG,((modes[mode])<=0) { -#ifdef VERBOSE - printf("writing signal register number %d mode %04x\n",d, modes[mode]); -#endif - bus_w(EXT_SIGNAL_REG,((modes[mode])<>off); - - if (mode=0 && d<4) { -#ifdef VERBOSE - printf("gettings signal variable number %d value %04x\n", d, signals[d]); -#endif - return signals[d]; - } else - return -1; - - -} - - -int getFPGASignal(int d) { - - int modes[]={SIGNAL_OFF, GATE_IN_ACTIVE_HIGH, GATE_IN_ACTIVE_LOW,TRIGGER_IN_RISING_EDGE, TRIGGER_IN_FALLING_EDGE,RO_TRIGGER_IN_RISING_EDGE, RO_TRIGGER_IN_FALLING_EDGE, GATE_OUT_ACTIVE_HIGH, GATE_OUT_ACTIVE_LOW, TRIGGER_OUT_RISING_EDGE, TRIGGER_OUT_FALLING_EDGE, RO_TRIGGER_OUT_RISING_EDGE,RO_TRIGGER_OUT_FALLING_EDGE}; - - int off=d*SIGNAL_OFFSET; - int mode=((bus_r(EXT_SIGNAL_REG)&(SIGNAL_MASK<>off); - - if (mode<=RO_TRIGGER_OUT_FALLING_EDGE) { - if (modes[mode]!=SIGNAL_OFF && signals[d]!=MASTER_SLAVE_SYNCHRONIZATION) - signals[d]=modes[mode]; -#ifdef VERYVERBOSE - printf("gettings signal register number %d value %04x\n", d, modes[mode]); -#endif - return modes[mode]; - } else - return -1; - -} - - - - - -/* -enum externalCommunicationMode{ - GET_EXTERNAL_COMMUNICATION_MODE, - AUTO, - TRIGGER_EXPOSURE_SERIES, - TRIGGER_EXPOSURE_BURST, - TRIGGER_READOUT, - TRIGGER_COINCIDENCE_WITH_INTERNAL_ENABLE, - GATE_FIX_NUMBER, - GATE_FIX_DURATION, - GATE_WITH_START_TRIGGER, - GATE_COINCIDENCE_WITH_INTERNAL_ENABLE -}; -*/ - - -int setTiming(int ti) { - - - int ret=GET_EXTERNAL_COMMUNICATION_MODE; - - int g=-1, t=-1, rot=-1; - - int i; - - switch (ti) { - case AUTO_TIMING: - timingMode=ti; - // disable all gates/triggers in except if used for master/slave synchronization - for (i=0; i<4; i++) { - if (getFPGASignal(i)>0 && getFPGASignal(i)=0 && t>=0 && rot<0) { - ret=GATE_WITH_START_TRIGGER; - } else if (g<0 && t>=0 && rot<0) { - ret=TRIGGER_EXPOSURE; - } else if (g>=0 && t<0 && rot<0) { - ret=GATE_FIX_NUMBER; - } else if (g<0 && t<0 && rot>0) { - ret=TRIGGER_READOUT; - } else if (g<0 && t<0 && rot<0) { - ret=AUTO_TIMING; - } - - // timingMode=ret; - - return ret; - -} - - - -int setConfigurationRegister(int d) { -#ifdef VERBOSE - printf("Setting configuration register to %x",d); -#endif - if (d>=0) { - bus_w(CONFIG_REG,d); - } -#ifdef VERBOSE - printf("configuration register is %x", bus_r(CONFIG_REG)); -#endif - return bus_r(CONFIG_REG); -} - -int setToT(int d) { - //int ret=0; - int reg; -#ifdef VERBOSE - printf("Setting ToT to %d\n",d); -#endif - reg=bus_r(CONFIG_REG); -#ifdef VERBOSE - printf("Before: ToT is %x\n", reg); -#endif - if (d>0) { - bus_w(CONFIG_REG,reg|TOT_ENABLE_BIT); - } else if (d==0) { - bus_w(CONFIG_REG,reg&(~TOT_ENABLE_BIT)); - } - reg=bus_r(CONFIG_REG); -#ifdef VERBOSE - printf("ToT is %x\n", reg); -#endif - if (reg&TOT_ENABLE_BIT) - return 1; - else - return 0; -} - -int setContinousReadOut(int d) { - //int ret=0; - int reg; -#ifdef VERBOSE - printf("Setting Continous readout to %d\n",d); -#endif - reg=bus_r(CONFIG_REG); -#ifdef VERBOSE - printf("Before: Continous readout is %x\n", reg); -#endif - if (d>0) { - bus_w(CONFIG_REG,reg|CONT_RO_ENABLE_BIT); - } else if (d==0) { - bus_w(CONFIG_REG,reg&(~CONT_RO_ENABLE_BIT)); - } - reg=bus_r(CONFIG_REG); -#ifdef VERBOSE - printf("Continous readout is %x\n", reg); -#endif - if (reg&CONT_RO_ENABLE_BIT) - return 1; - else - return 0; -} - - -int startReceiver(int start) { - u_int32_t addr=CONFIG_REG; -#ifdef VERBOSE - if(start) - printf("Setting up detector to send to Receiver\n"); - else - printf("Setting up detector to send to CPU\n"); -#endif - int reg=bus_r(addr); - //for start recever, write 0 and for stop, write 1 - if (!start) - bus_w(CONFIG_REG,reg|CPU_OR_RECEIVER_BIT); - else - bus_w(CONFIG_REG,reg&(~CPU_OR_RECEIVER_BIT)); - - reg=bus_r(addr); -//#ifdef VERBOSE - printf("Config Reg %x\n", reg); -//#endif - int d =reg&CPU_OR_RECEIVER_BIT; - if(d!=0) d=1; - if(d!=start) - return OK; - else - return FAIL; -} - - -u_int64_t getDetectorNumber() { - char output[255],mac[255]=""; - u_int64_t res=0; - FILE* sysFile = popen("ifconfig eth0 | grep HWaddr | cut -d \" \" -f 11", "r"); - fgets(output, sizeof(output), sysFile); - pclose(sysFile); - //getting rid of ":" - char * pch; - pch = strtok (output,":"); - while (pch != NULL){ - strcat(mac,pch); - pch = strtok (NULL, ":"); - } - sscanf(mac,"%llx",&res); - return res; -} - -u_int32_t getFirmwareVersion() { - return bus_r(FPGA_VERSION_REG); -} - -u_int32_t getFirmwareSVNVersion(){ - return bus_r(FPGA_SVN_REG); -} - - -// for fpga test -u_int32_t testFpga(void) { - printf("Testing FPGA:\n"); - volatile u_int32_t val,addr,val2; - int result=OK,i; - //fixed pattern - val=bus_r(FIX_PATT_REG); - if (val==FIXED_PATT_VAL) { - printf("fixed pattern ok!! %08x\n",val); - } else { - printf("fixed pattern wrong!! %08x\n",val); - result=FAIL; - } - - //dummy register - addr = DUMMY_REG; - for(i=0;i<1000000;i++) - { - val=0x5A5A5A5A-i; - bus_w(addr, val); - val=bus_r(addr); - if (val!=0x5A5A5A5A-i) { - printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of %x \n",i,val,0x5A5A5A5A-i); - result=FAIL; - } - val=(i+(i<<10)+(i<<20)); - bus_w(addr, val); - val2=bus_r(addr); - if (val2!=val) { - printf("ATTEMPT:%d:\tFPGA dummy register wrong!! read %x instead of %x.\n",i,val2,val); - result=FAIL; - } - val=0x0F0F0F0F; - bus_w(addr, val); - val=bus_r(addr); - if (val!=0x0F0F0F0F) { - printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of 0x0F0F0F0F \n",i,val); - result=FAIL; - } - val=0xF0F0F0F0; - bus_w(addr, val); - val=bus_r(addr); - if (val!=0xF0F0F0F0) { - printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of 0xF0F0F0F0 \n\n",i,val); - result=FAIL; - } - } - if(result==OK) - { - printf("----------------------------------------------------------------------------------------------"); - printf("\nATTEMPT 1000000: FPGA DUMMY REGISTER OK!!!\n"); - printf("----------------------------------------------------------------------------------------------"); - } - printf("\n"); - return result; -} - - -// for fpga test -u_int32_t testRAM(void) { - int result=OK; - int i=0; - allocateRAM(); - // while(i<100000) { - memcpy(ram_values, values, dataBytes); - printf ("Testing RAM:\t%d: copied fifo %x to memory %x size %d\n",i++, (unsigned int)(values), (unsigned int)(ram_values), dataBytes); - // } - return result; -} - -int getNModBoard() { - return nModX; -} - -int setNMod(int n) { - return nModX; -} - - -// fifo test -int testFifos(void) { - printf("Fifo test not implemented!\n"); - bus_w16(CONTROL_REG, START_FIFOTEST_BIT); - bus_w16(CONTROL_REG, 0x0); - return OK; -} - - - -// program dacq settings - -int64_t set64BitReg(int64_t value, int aLSB, int aMSB){ - int64_t v64; - u_int32_t vLSB,vMSB; - if (value!=-1) { - vLSB=value&(0xffffffff); - bus_w(aLSB,vLSB); - v64=value>> 32; - vMSB=v64&(0xffffffff); - bus_w(aMSB,vMSB); - } - return get64BitReg(aLSB, aMSB); - -} - -int64_t get64BitReg(int aLSB, int aMSB){ - int64_t v64; - u_int32_t vLSB,vMSB; - vLSB=bus_r(aLSB); - vMSB=bus_r(aMSB); - v64=vMSB; - v64=(v64<<32) | vLSB; - - printf("reg64(%x,%x) %x %x %llx\n", aLSB, aMSB, vLSB, vMSB, v64); - - return v64; -} - -int64_t setFrames(int64_t value){ - return set64BitReg(value, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); -} - -int64_t getFrames(){ - printf("gf"); - return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG); -} - -int64_t setExposureTime(int64_t value){ - /* time is in ns */ - if (value!=-1) - value*=(1E-9*CLK_FREQ); - return set64BitReg(value,SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t getExposureTime(){ - return get64BitReg(GET_EXPTIME_LSB_REG, GET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t setGates(int64_t value){ - return set64BitReg(value, SET_GATES_LSB_REG, SET_GATES_MSB_REG); -} - -int64_t getGates(){ - return get64BitReg(GET_GATES_LSB_REG, GET_GATES_MSB_REG); -} - -int64_t setPeriod(int64_t value){ - /* time is in ns */ - if (value!=-1) { - value*=(1E-9*CLK_FREQ); - } - - - - return set64BitReg(value,SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t getPeriod(){ - return get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t setDelay(int64_t value){ - /* time is in ns */ - if (value!=-1) { - value*=(1E-9*CLK_FREQ); - } - return set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t getDelay(){ - return get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t setTrains(int64_t value){ - return set64BitReg(value, SET_TRAINS_LSB_REG, SET_TRAINS_MSB_REG); -} - -int64_t getTrains(){ - return get64BitReg(GET_TRAINS_LSB_REG, GET_TRAINS_MSB_REG); -} - - -int64_t setProbes(int64_t value){ - return 0; -} - - -int64_t setProgress() { - - //????? eventually call after setting the registers - -return 0; - -} - - -int64_t getProgress() { - - - //should be done in firmware!!!! - - return 0; - -} - -int64_t getActualTime(){ - return get64BitReg(GET_ACTUAL_TIME_LSB_REG, GET_ACTUAL_TIME_MSB_REG)/(1E-9*CLK_FREQ); -} - -int64_t getMeasurementTime(){ - int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG); - int64_t mask=0x8000000000000000; - if (v & mask ) { -#ifdef VERBOSE - printf("no measurement time left\n"); -#endif - return -1E+9; - } else - return v/(1E-9*CLK_FREQ); -} - - - - -int loadImage(int index, short int ImageVals[]){ - u_int32_t address; - switch (index) { - case DARK_IMAGE : - address = DARK_IMAGE_REG; - break; - case GAIN_IMAGE : - address = GAIN_IMAGE_REG; - break; - } - volatile u_int16_t *ptr; - ptr=(u_int16_t*)(CSP0BASE+address*2); -#ifdef VERBOSE - int i; - for(i=0;i<6;i++) - printf("%d:%d\t",i,ImageVals[i]); -#endif - memcpy(ptr,ImageVals ,dataBytes); -#ifdef VERBOSE - printf("\nLoaded x%08x address with image of index %d\n",(unsigned int)(ptr),index); -#endif - return OK; -} - - - -int64_t getProbes(){ - return 0; -} - - -int setDACRegister(int idac, int val, int imod) { - u_int32_t addr, reg, mask; - int off; -#ifdef VERBOSE - if(val==-1) - printf("Getting dac register%d module %d\n",idac,imod); - else - printf("Setting dac register %d module %d to %d\n",idac,imod,val); -#endif - - switch(idac){ - case 0: - case 1: - case 2: - addr=MOD_DACS1_REG; - break; - case 3: - case 4: - case 5: - addr=MOD_DACS2_REG; - break; - case 6: - case 7: - addr=MOD_DACS3_REG; - break; - default: - printf("weird idac value %d\n",idac); - return -1; - break; - } - //saving only the msb - val=val>>2; - - off=(idac%3)*10; - mask=~((0x3ff)<=0 && val>off)&0x3ff; - //since we saved only the msb - val=val<<2; - - //val=(bus_r(addr)>>off)&0x3ff; - - -#ifdef VERBOSE - printf("Dac %d module %d register is %d\n\n",idac,imod,val); -#endif - return val; -} - - -int getTemperature(int tempSensor, int imod){ - int val; - imod=0;//ignoring more than 1 mod for now - int i,j,repeats=6; - u_int32_t tempVal=0; -#ifdef VERBOSE - char cTempSensor[2][100]={"ADCs/ASICs","VRs/FPGAs"}; - printf("Getting Temperature of module:%d for the %s for tempsensor:%d\n",imod,cTempSensor[tempSensor],tempSensor); -#endif - bus_w(TEMP_IN_REG,(T1_CLK_BIT)|(T1_CS_BIT)|(T2_CLK_BIT)|(T2_CS_BIT));//standby - bus_w(TEMP_IN_REG,((T1_CLK_BIT)&~(T1_CS_BIT))|(T2_CLK_BIT));//high clk low cs - - for(i=0;i<20;i++) { - //repeats is number of register writes for delay - for(j=0;j>1);//fpga - } - } - - bus_w(TEMP_IN_REG,(T1_CLK_BIT)|(T1_CS_BIT)|(T2_CLK_BIT)|(T2_CS_BIT));//standby - val=((int)tempVal)/4.0; - -#ifdef VERBOSE - printf("Temperature of module:%d for the %s is %.2fC\n",imod,cTempSensor[tempSensor],val); -#endif - return val; -} - - - -int initHighVoltage(int val, int imod){ -#ifdef VERBOSE - printf("Setting/Getting High Voltage of module:%d with val:%d\n",imod,val); -#endif - volatile u_int32_t addr=HV_REG; - int writeVal,writeVal2; - switch(val){ - case -1: break; - case 0: writeVal=0x0; writeVal2=0x0; break; - case 90: writeVal=0x0; writeVal2=0x1; break; - case 110:writeVal=0x2; writeVal2=0x3; break; - case 120:writeVal=0x4; writeVal2=0x5; break; - case 150:writeVal=0x6; writeVal2=0x7; break; - case 180:writeVal=0x8; writeVal2=0x9; break; - case 200:writeVal=0xA; writeVal2=0xB; break; - default :printf("Invalid voltage\n");return -2;break; - } - //to set value - if(val!=-1){ - //set value to converted value - bus_w(addr,writeVal); - bus_w(addr,writeVal2); -#ifdef VERBOSE - printf("Value sent is %d and then %d\n",writeVal,writeVal2); -#endif - } - //read value and return the converted value - val=bus_r(addr); -#ifdef VERBOSE - printf("Value read from reg is %d\n",val); -#endif - switch(val){ - case 0x0:val=0;break; - case 0x1:val=90;break; - case 0x3:val=110;break; - case 0x5:val=120;break; - case 0x7:val=150;break; - case 0x9:val=180;break; - case 0xB:val=200;break; - default:printf("Weird value read:%d\n",val);return -3;break; - } -#ifdef VERBOSE - printf("High voltage of module:%d is %d\n",imod,val); -#endif - return val; -} - - - -int initConfGain(int isettings,int val,int imod){ - int retval; - u_int32_t addr=GAIN_REG; - - if(val!=-1){ -#ifdef VERBOSE - printf("Setting Gain of module:%d with val:%d\n",imod,val); -#endif - bus_w(addr,((val<>SETTINGS_OFFSET); -#ifdef VERBOSE - printf("Settings read from reg is %d\n",retval); -#endif - if((isettings!=-1)&&(retval!=isettings)){ - printf("\n\nSettings r\n\n"); - return -1; - } - - return retval; -} - - - -int setADC(int adc){ - int reg,nchips,mask,nchans; - - if(adc==-1) ROI_flag=0; - else ROI_flag=1; - - setDAQRegister();//token timing - cleanFifo();//adc sync - -/* if(adc==-1){*/ - //set packet size - ipPacketSize= DEFAULT_IP_PACKETSIZE; - udpPacketSize=DEFAULT_UDP_PACKETSIZE; - //set channel mask - nchips = NCHIP; - nchans = NCHANS; - mask = ACTIVE_ADC_MASK; - /* - //with moench module 1 adc -- NOT IMPLEMENTED - else{ - ipPacketSize= ADC1_IP_PACKETSIZE; - udpPacketSize=ADC1_UDP_PACKETSIZE; - //set channel mask - nchips = NCHIPS_PER_ADC; - nchans = GOTTHARDNCHAN; - mask = 1<mac.mac_dest_mac1 =((macad>>(8*5))&0xFF);// 0x00; //pc7060 - mac_conf_regs->mac.mac_dest_mac2 =((macad>>(8*4))&0xFF);// 0x19; //pc7060 - mac_conf_regs->mac.mac_dest_mac3 =((macad>>(8*3))&0xFF);// 0x99; //pc7060 - mac_conf_regs->mac.mac_dest_mac4 =((macad>>(8*2))&0xFF);// 0x24; //pc7060 - mac_conf_regs->mac.mac_dest_mac5 =((macad>>(8*1))&0xFF);// 0xEB; //pc7060 - mac_conf_regs->mac.mac_dest_mac6 =((macad>>(8*0))&0xFF);// 0xEE; //pc7060 - - /* - mac_conf_regs->mac.mac_src_mac1 = 0x00; - mac_conf_regs->mac.mac_src_mac2 = 0xAA; - mac_conf_regs->mac.mac_src_mac3 = 0xBB; - mac_conf_regs->mac.mac_src_mac4 = 0xCC; - mac_conf_regs->mac.mac_src_mac5 = 0xDD; - mac_conf_regs->mac.mac_src_mac6 = 0xEE; - */ - mac_conf_regs->mac.mac_src_mac1 =((detectormacad>>(8*5))&0xFF); - mac_conf_regs->mac.mac_src_mac2 =((detectormacad>>(8*4))&0xFF); - mac_conf_regs->mac.mac_src_mac3 =((detectormacad>>(8*3))&0xFF); - mac_conf_regs->mac.mac_src_mac4 =((detectormacad>>(8*2))&0xFF); - mac_conf_regs->mac.mac_src_mac5 =((detectormacad>>(8*1))&0xFF); - mac_conf_regs->mac.mac_src_mac6 =((detectormacad>>(8*0))&0xFF); - mac_conf_regs->mac.mac_ether_type = 0x0800; //ipv4 - - - - mac_conf_regs->ip.ip_ver = 0x4; - mac_conf_regs->ip.ip_ihl = 0x5; - mac_conf_regs->ip.ip_tos = 0x0; - mac_conf_regs->ip.ip_len = ipPacketSize;//0x0522; // was 0x0526; - mac_conf_regs->ip.ip_ident = 0x0000; - mac_conf_regs->ip.ip_flag = 0x2; - mac_conf_regs->ip.ip_offset = 0x00; - mac_conf_regs->ip.ip_ttl = 0x70; - mac_conf_regs->ip.ip_protocol = 0x11; - mac_conf_regs->ip.ip_chksum = 0x0000 ; //6E42 now is automatically computed - mac_conf_regs->ip.ip_sourceip = detipad; //0x8181CA2E;129.129.202.46 - mac_conf_regs->ip.ip_destip = ipad; //CA57 - - //#ifdef VERBOSE - printf("mac_dest:%llx %x:%x:%x:%x:%x:%x\n", - macad, - mac_conf_regs->mac.mac_dest_mac1, - mac_conf_regs->mac.mac_dest_mac2, - mac_conf_regs->mac.mac_dest_mac3, - mac_conf_regs->mac.mac_dest_mac4, - mac_conf_regs->mac.mac_dest_mac5, - mac_conf_regs->mac.mac_dest_mac6); - printf("mac_src:%llx %x:%x:%x:%x:%x:%x\n", - detectormacad, - mac_conf_regs->mac.mac_src_mac1, - mac_conf_regs->mac.mac_src_mac2, - mac_conf_regs->mac.mac_src_mac3, - mac_conf_regs->mac.mac_src_mac4, - mac_conf_regs->mac.mac_src_mac5, - mac_conf_regs->mac.mac_src_mac6); - printf("ip_ttl:%x\n",mac_conf_regs->ip.ip_ttl); - printf("det_ip: %x %x\n",detipad, mac_conf_regs->ip.ip_sourceip); - printf("dest_ip: %x %x\n",ipad, mac_conf_regs->ip.ip_destip); - - //#endif - - //checksum - count=sizeof(mac_conf_regs->ip); - addr=&(mac_conf_regs->ip); - while( count > 1 ) { - sum += *addr++; - count -= 2; - } - if( count > 0 ) sum += *addr; // Add left-over byte, if any - while (sum>>16) sum = (sum & 0xffff) + (sum >> 16);// Fold 32-bit sum to 16 bits - checksum = (~sum)&0xffff; - mac_conf_regs->ip.ip_chksum = checksum; - //#ifdef VERBOSE - printf("IP header checksum is 0x%x s\n",(unsigned int)(checksum)); - //#endif - - mac_conf_regs->udp.udp_srcport = 0xE185; - mac_conf_regs->udp.udp_destport = udpport;//0xC351; - mac_conf_regs->udp.udp_len = udpPacketSize;//0x050E; //was 0x0512; - mac_conf_regs->udp.udp_chksum = 0x0000; - -#ifdef VERBOSE - printf("Configuring TSE\n"); -#endif - tse_conf_regs->rev = 0xA00; - tse_conf_regs->scratch = 0xCCCCCCCC; - tse_conf_regs->command_config = 0xB; - tse_conf_regs->mac_0 = 0x17231C00; - tse_conf_regs->mac_1 = 0xCB4A; - tse_conf_regs->frm_length = 0x5DC; //max frame length (1500 bytes) (was 0x41C) - tse_conf_regs->pause_quant = 0x0; - tse_conf_regs->rx_section_empty = 0x7F0; - tse_conf_regs->rx_section_full = 0x10; - tse_conf_regs->tx_section_empty = 0x3F8; //was 0x7F0; - tse_conf_regs->tx_section_full = 0x16; - tse_conf_regs->rx_almost_empty = 0x8; - tse_conf_regs->rx_almost_full = 0x8; - tse_conf_regs->tx_almost_empty = 0x8; - tse_conf_regs->tx_almost_full = 0x3; - tse_conf_regs->mdio_addr0 = 0x12; - tse_conf_regs->mdio_addr1 = 0x0; - - mac_conf_regs->cdone = 0xFFFFFFFF; - - - if(ival) - bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT|DIGITAL_TEST_BIT)); //0x2840,write shadow regs.. - else - bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT)); //0x2840,write shadow regs.. - - val=bus_r(addrr); -#ifdef VERBOSE - printf("Value read from Multi-purpose Reg:%x\n",val); -#endif - // if(val!=0x2840) return -1; - - usleep(100000); - - if(ival) - bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT|DIGITAL_TEST_BIT)); //0x2820,write shadow regs.. - else - bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT)); //0x2820,write shadow regs.. - - val=bus_r(addrr); -#ifdef VERBOSE - printf("Value read from Multi-purpose Reg:%x\n",val); -#endif - // if(val!=0x2820) return -1; - - - - - return adcConfigured; -} - - -int getAdcConfigured(){ - return adcConfigured; -} - -u_int32_t runBusy(void) { - u_int32_t s = bus_r(STATUS_REG) & 1; -#ifdef VERBOSE - printf("status %04x\n",s); -#endif - return s; -} - -u_int32_t dataPresent(void) { - return bus_r(LOOK_AT_ME_REG); -} - -u_int32_t runState(void) { - int s=bus_r(STATUS_REG); -#ifdef SHAREDMEMORY - if (s&RUN_BUSY_BIT) - write_status_sm("Running"); - else - write_status_sm("Stopped"); -#endif -#ifdef VERBOSE - printf("status %04x\n",s); -#endif - -/* if (s==0x62001) - exit(-1);*/ - return s; -} - - -// State Machine - -int startStateMachine(){ -int i; -//#ifdef VERBOSE - printf("*******Starting State Machine*******\n"); -//#endif - cleanFifo(); - // fifoReset(); - now_ptr=(char*)ram_values; -#ifdef SHAREDMEMORY - write_stop_sm(0); - write_status_sm("Started"); -#endif - - - for(i=0;i<100;i++){ - //start state machine - bus_w16(CONTROL_REG, START_ACQ_BIT | START_EXPOSURE_BIT); - bus_w16(CONTROL_REG, 0x0); - //verify - if(bus_r(STATUS_REG) & RUN_BUSY_BIT) - break; - else - usleep(5000); - } - if(i!=0) - printf("tried to start state machine %d times\n",i); - if(i==100){ - printf("\n***********COULD NOT START STATE MACHINE***************\n"); - return FAIL; - } - - printf("statusreg=%08x\n",bus_r(STATUS_REG)); - return OK; -} - - - - -int stopStateMachine(){ - int i; -//#ifdef VERBOSE - printf("*******Stopping State Machine*******\n"); -//#endif -#ifdef SHAREDMEMORY - write_stop_sm(1); - write_status_sm("Stopped"); -#endif - for(i=0;i<100;i++){ - //stop state machine - bus_w16(CONTROL_REG, STOP_ACQ_BIT); - bus_w16(CONTROL_REG, 0x0); - usleep(5000); - //verify - if(!(bus_r(STATUS_REG)&RUNMACHINE_BUSY_BIT)) - break; - } - if(i!=0) - printf("tried to stop state machine %d times\n",i); - if(i==100){ - printf("\n***********COULD NOT STOP STATE MACHINE***************\n"); - return FAIL; - } - -/* - usleep(5000); - // if (!runBusy()) - if(!(bus_r(STATUS_REG)&RUNMACHINE_BUSY_BIT)) - return OK; - else - return FAIL; - */ - printf("statusreg=%08x\n",bus_r(STATUS_REG)); - return OK; -} - - -int startReadOut(){ - u_int32_t status; -#ifdef VERBOSE - printf("Starting State Machine Readout\n"); -#endif - status=bus_r(STATUS_REG)&RUN_BUSY_BIT; -#ifdef DEBUG - printf("State machine status is %08x\n",bus_r(STATUS_REG)); -#endif - bus_w16(CONTROL_REG, START_ACQ_BIT |START_READOUT_BIT); // start readout - bus_w16(CONTROL_REG, 0x0); - return OK; -} - - -// fifo routines - -u_int32_t fifoReset(void) { - return -1; -} - - -u_int32_t setNBits(u_int32_t n) { - return -1; -} - -u_int32_t getNBits(){ - return -1; -} - - -u_int32_t fifoReadCounter(int fifonum){ - return -1; -} - -u_int32_t fifoReadStatus() -{ - // reads from the global status register - - return bus_r(STATUS_REG)&(SOME_FIFO_FULL_BIT | ALL_FIFO_EMPTY_BIT); -} - -u_int32_t fifo_full(void) -{ - // checks fifo empty flag returns 1 if fifo is empty - // otherwise 0 - return bus_r(STATUS_REG)&SOME_FIFO_FULL_BIT; -} - - -u_int32_t* fifo_read_event() -{ - - int i=0; - -#ifdef VIRTUAL - return NULL; -#endif - -#ifdef VERBOSE - printf("before looping\n"); -#endif - volatile u_int32_t t = bus_r(LOOK_AT_ME_REG); - -#ifdef VERBOSE - printf("lookatmereg=x%x\n",t); -#endif -/* - while ((t&0x1)==0) - { - t = bus_r(LOOK_AT_ME_REG); - if (!runBusy()){ - return NULL; - } - } -*/ - - while((t&0x1)==0) { -#ifdef VERYVERBOSE - printf("before readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); -#endif -#ifdef VERYVERBOSE - printf("look at me reg:%08x\n",bus_r(LOOK_AT_ME_REG)); -#endif - if (runBusy()==0) { - t = bus_r(LOOK_AT_ME_REG); -#ifdef VERYVERBOSE - printf("status should be idle!..look at me reg:%08x\n",bus_r(LOOK_AT_ME_REG)); -#endif - if ((t&0x1)==0) { -#ifdef VERBOSE - printf("no frame found - exiting\n"); - printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); -#endif -#ifdef VERYVERBOSE - printf("returning null\n"); -#endif - printf("lookatmereg=x%x\n",t); - return NULL; - } else { -#ifdef VERBOSE - printf("no frame found %x status %x\n", bus_r(LOOK_AT_ME_REG),runState()); -#endif - break; - } - } - t = bus_r(LOOK_AT_ME_REG); -#ifdef VERYVERBOSE - printf("before starting while loop again: look at me reg:%08x\n\n",bus_r(LOOK_AT_ME_REG)); -#endif - if (i%1000==0) - printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); - i++; - } -#ifdef VERYVERBOSE - printf(" out of while loop!\n"); -#endif -#ifdef VERYVERBOSE - printf("before readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); -#endif - - dma_memcpy(now_ptr,values ,dataBytes); - - -#ifdef VERYVERBOSE - int a; - for (a=0;a<8; a=a+2) - printf("\n%d %d: x%04x x%04x ",a+1,a,*(now_ptr+a+1),*(now_ptr+a) ); - for (a=2554;a<2560; a=a+2) - printf("\n%d %d: x%04x x%04x ",a+1,a,*(now_ptr+a+1),*(now_ptr+a) ); - printf("********\n"); - //memcpy(now_ptr, values, dataBytes); -#endif -#ifdef VERYVERBOSE - printf("Copying to ptr %08x %d\n",(unsigned int)(now_ptr), dataBytes); - printf("after readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); -#endif - - if (storeInRAM>0) { - now_ptr+=dataBytes; - } - printf("lookatmereg=x%x\n",t); - return ram_values; -} - - - -u_int32_t* decode_data(int *datain) -{ - u_int32_t *dataout; - // const char one=1; - const int bytesize=8; - char *ptr=(char*)datain; - //int nbits=dynamicRange; - int ipos=0, ichan=0;; - //int nch, boff=0; - int ibyte;//, ibit; - char iptr; - -#ifdef VERBOSE - printf("Decoding data for DR %d\n",dynamicRange); -#endif - dataout=malloc(nChans*nChips*nModX*4); - ichan=0; - switch (dynamicRange) { - case 1: - for (ibyte=0; ibyte>(ipos))&0x1; - ichan++; - } - } - break; - case 4: - for (ibyte=0; ibyte>(ipos*4))&0xf; - ichan++; - } - } - break; - case 8: - for (ichan=0; ichan0) - storeInRAM=1; - else - storeInRAM=0; - return allocateRAM(); -} - - -int allocateRAM() { - size_t size; - u_int32_t nt, nf; - nt=setTrains(-1); - nf=setFrames(-1); - if (nt==0) nt=1; - if (nf==0) nf=1; - // ret=clearRAM(); - if (storeInRAM) { - size=dataBytes*nf*nt; - if (size>(23-i))&0x1)<> 8); - // printf("%i: %i %i\n",a, frame[a],v); - avg[a] += ((double)frame[a])/(double)frames; - //if(frame[a] == 8191) - // printf("ch %i: %u\n",a,frame[a]); - } - // printf("********\n"); - numberFrames++; - } - - //no more data or no data - else { - if(getFrames()>-2) { - dataret=FAIL; - printf("no data and run stopped: %d frames left\n",(int)(getFrames()+2)); - - } else { - dataret=FINISHED; - printf("acquisition successfully finished\n"); - - } - printf("dataret %d\n",dataret); - } - } - - - - double nf = (double)numberFrames; - for(i =0; i < 1280; i++){ - adc = i / 256; - adcCh = (i - adc * 256) / 32; - Ch = i - adc * 256 - adcCh * 32; - adc--; - double v2 = avg[i]; - avg[i] = avg[i]/ ((double)numberFrames/(double)frames); - unsigned short v = (unsigned short)avg[i]; - printf("setting avg for channel %i(%i,%i,%i): %i (double= %f (%f))\t", i,adc,adcCh,Ch, v,avg[i],v2); - v=i*100; - ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); - if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ - printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); - } - } - - /*for(adc = 1; adc < 5; adc++){ - for(adcCh = 0; adcCh < 8; adcCh++){ - for(Ch=0 ; Ch < 32; Ch++){ - int channel = (adc+1) * 32 * 8 + adcCh * 32 + Ch; - double v2 = avg[channel]; - avg[channel] = avg[channel]/ ((double)numberFrames/(double)frames); - unsigned short v = (unsigned short)avg[channel]; - printf("setting avg for channel %i: %i (double= %f (%f))\t", channel, v,avg[channel],v2); - ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); - if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ - printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); - } - } - } - }*/ - - - - printf("frames: %i\n",numberFrames); - printf("corrected avg by: %f\n",(double)numberFrames/(double)frames); - - printf("restoring previous condition\n"); - setFrames(framesBefore); - setPeriod(periodBefore); - - printf("---------------------------\n"); - return 0; -} - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.h deleted file mode 100755 index 48918e428..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/firmware_funcs.h +++ /dev/null @@ -1,179 +0,0 @@ -#ifndef FIRMWARE_FUNCS_H -#define FIRMWARE_FUNCS_H - - -#include "sls_detector_defs.h" - - -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include - - -int mapCSP0(void); - -u_int16_t bus_r16(u_int32_t offset); -u_int16_t bus_w16(u_int32_t offset, u_int16_t data);//aldos function -u_int32_t bus_w(u_int32_t offset, u_int32_t data); -u_int32_t bus_r(u_int32_t offset); - -int setPhaseShiftOnce(); -int phaseStep(int st); -int cleanFifo(); -int setDAQRegister(); - -u_int32_t putout(char *s, int modnum); -u_int32_t readin(int modnum); -u_int32_t setClockDivider(int d); -u_int32_t getClockDivider(); -u_int32_t setSetLength(int d); -u_int32_t getSetLength(); -u_int32_t setWaitStates(int d); -u_int32_t getWaitStates(); -u_int32_t setTotClockDivider(int d); -u_int32_t getTotClockDivider(); -u_int32_t setTotDutyCycle(int d); -u_int32_t getTotDutyCycle(); -u_int32_t setOversampling(int d); - -u_int32_t setExtSignal(int d, enum externalSignalFlag mode); -int getExtSignal(int d); - -u_int32_t setFPGASignal(int d, enum externalSignalFlag mode); -int getFPGASignal(int d); - -int setTiming(int t); - - -int setConfigurationRegister(int d); -int setToT(int d); -int setContinousReadOut(int d); -int startReceiver(int d); - -int setDACRegister(int idac, int val, int imod); - -int getTemperature(int tempSensor,int imod); -int initHighVoltage(int val,int imod); -int initConfGain(int isettings,int val,int imod); - -int setADC(int adc); -int configureMAC(int ipad, long long int macad, long long int detectormacadd, int detipad, int ival, int udpport); -int getAdcConfigured(); - - -u_int64_t getDetectorNumber(); -u_int32_t getFirmwareVersion(); -int testFifos(void); -u_int32_t testFpga(void); -u_int32_t testRAM(void); -int testBus(void); -int setDigitalTestBit(int ival); - -int64_t set64BitReg(int64_t value, int aLSB, int aMSB); -int64_t get64BitReg(int aLSB, int aMSB); - -int64_t setFrames(int64_t value); -int64_t getFrames(); - -int64_t setExposureTime(int64_t value); -int64_t getExposureTime(); - -int64_t setGates(int64_t value); -int64_t getGates(); - -int64_t setDelay(int64_t value); -int64_t getDelay(); - -int64_t setPeriod(int64_t value); -int64_t getPeriod(); - -int64_t setTrains(int64_t value); -int64_t getTrains(); - -int64_t setProbes(int64_t value); -int64_t getProbes(); - -int64_t getProgress(); -int64_t setProgress(); - -int64_t getActualTime(); -int64_t getMeasurementTime(); - - -u_int32_t runBusy(void); -u_int32_t runState(void); -u_int32_t dataPresent(void); - - -int startStateMachine(); -int stopStateMachine(); -int startReadOut(); -u_int32_t fifoReset(void); -u_int32_t fifoReadCounter(int fifonum); -u_int32_t fifoReadStatus(); - - -u_int32_t fifo_full(void); - - - -u_int32_t* fifo_read_event(); -u_int32_t* decode_data(int* datain); -//u_int32_t move_data(u_int64_t* datain, u_int64_t* dataout); -int setDynamicRange(int dr); -int getDynamicRange(); -int getNModBoard(); -int setNMod(int n); -int setStoreInRAM(int b); -int allocateRAM(); -int clearRAM(); - - -int setMaster(int f); -int setSynchronization(int s); - -int loadImage(int index, short int ImageVals[]); -int readCounterBlock(int startACQ, short int CounterVals[]); -int resetCounterBlock(int startACQ); - -int calibratePedestal(int frames); - - - -/* - -u_int32_t setNBits(u_int32_t); -u_int32_t getNBits(); -*/ - -/* -//move to mcb_funcs? - -int readOutChan(int *val); -u_int32_t getModuleNumber(int modnum); -int testShiftIn(int imod); -int testShiftOut(int imod); -int testShiftStSel(int imod); -int testDataInOut(int num, int imod); -int testExtPulse(int imod); -int testExtPulseMux(int imod, int ow); -int testDataInOutMux(int imod, int ow, int num); -int testOutMux(int imod); -int testFpgaMux(int imod); -int calibration_sensor(int num, int *values, int *dacs) ; -int calibration_chip(int num, int *values, int *dacs); -*/ - - -#endif diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfo.txt b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfo.txt deleted file mode 100644 index 4ff46c75b..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfo.txt +++ /dev/null @@ -1,9 +0,0 @@ -Path: slsDetectorsPackage/slsDetectorSoftware/moenchDetectorServer -URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: e6bd874a88493557fc5127d4a1686832299aaf06 -Revision: 85 -Branch: 3.0.1 -Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3346 -Last Changed Date: 2018-02-07 09:14:36.000000002 +0100 ./server_funcs.c diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h deleted file mode 100644 index 96f110d39..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h +++ /dev/null @@ -1,6 +0,0 @@ -#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "e6bd874a88493557fc5127d4a1686832299aaf06" -#define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3346 -#define GITDATE 0x20180207 -#define GITBRANCH "3.0.1" diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoenchTmp.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoenchTmp.h deleted file mode 100644 index dfd9bb246..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/gitInfoMoenchTmp.h +++ /dev/null @@ -1,6 +0,0 @@ -#define GITURL "" -#define GITREPUUID "" -#define GITAUTH "" -#define GITREV "" -#define GITDATE "" -#define GITBRANCH "" diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/mcb_funcs.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/mcb_funcs.c deleted file mode 100755 index 1db487a31..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/mcb_funcs.c +++ /dev/null @@ -1,2528 +0,0 @@ -#ifdef MCB_FUNCS - -#include -#include -#include -#include -#include -#include "registers_m.h" - -#ifndef PICASSOD -#include "server_defs.h" -#else -#include "picasso_defs.h" -#endif -#include "firmware_funcs.h" -#include "mcb_funcs.h" - - -/* global variables */ -#undef DEBUG -#undef DEBUGOUT - -extern int nModX; -//extern int dataBytes; -extern int dynamicRange; -const int nChans=NCHAN; -const int nChips=NCHIP; -const int nDacs=NDAC; -const int nAdcs=NADC; -enum detectorSettings thisSettings; - -int sChan, sChip, sMod, sDac, sAdc; -const int allSelected=-2; -const int noneSelected=-1; - - -sls_detector_module *detectorModules=NULL; -int *detectorChips=NULL; -int *detectorChans=NULL; -int *detectorDacs=NULL; -int *detectorAdcs=NULL; -//int numberOfProbes; - -ROI rois[MAX_ROIS]; -int nROI=0; - - -int initDetector() { - - int imod; - // sls_detector_module *myModule; - int n=getNModBoard(); - nModX=n; - -#ifdef VERBOSE - printf("Board is for %d modules\n",n); -#endif - detectorModules=malloc(n*sizeof(sls_detector_module)); - detectorChips=malloc(n*NCHIP*sizeof(int)); - detectorChans=malloc(n*NCHIP*NCHAN*sizeof(int)); - detectorDacs=malloc(n*NDAC*sizeof(int)); - detectorAdcs=malloc(n*NADC*sizeof(int)); -#ifdef VERBOSE - printf("modules from 0x%x to 0x%x\n",(unsigned int)(detectorModules), (unsigned int)(detectorModules+n)); - printf("chips from 0x%x to 0x%x\n",(unsigned int)(detectorChips), (unsigned int)(detectorChips+n*NCHIP)); - printf("chans from 0x%x to 0x%x\n",(unsigned int)(detectorChans), (unsigned int)(detectorChans+n*NCHIP*NCHAN)); - printf("dacs from 0x%x to 0x%x\n",(unsigned int)(detectorDacs), (unsigned int)(detectorDacs+n*NDAC)); - printf("adcs from 0x%x to 0x%x\n",(unsigned int)(detectorAdcs), (unsigned int)(detectorAdcs+n*NADC)); -#endif - for (imod=0; imoddacs=detectorDacs+imod*NDAC; - (detectorModules+imod)->adcs=detectorAdcs+imod*NADC; - (detectorModules+imod)->chipregs=detectorChips+imod*NCHIP; - (detectorModules+imod)->chanregs=detectorChans+imod*NCHIP*NCHAN; - (detectorModules+imod)->ndac=NDAC; - (detectorModules+imod)->nadc=NADC; - (detectorModules+imod)->nchip=NCHIP; - (detectorModules+imod)->nchan=NCHIP*NCHAN; - (detectorModules+imod)->module=imod; - (detectorModules+imod)->gain=0; - (detectorModules+imod)->offset=0; - (detectorModules+imod)->reg=0; - /* initialize registers, dacs, retrieve sn, adc values etc */ - } - thisSettings=UNINITIALIZED; - sChan=noneSelected; - sChip=noneSelected; - sMod=noneSelected; - sDac=noneSelected; - sAdc=noneSelected; - - /* - setCSregister(ALLMOD); //commented out by dhanya - setSSregister(ALLMOD); - counterClear(ALLMOD); - clearSSregister(ALLMOD); - putout("0000000000000000",ALLMOD); - */ - - /* initialize dynamic range etc. */ - /* dynamicRange=getDynamicRange(); //always 16 not required commented out - nModX=setNMod(-1);*/ - - //dataBytes=nModX*NCHIP*NCHAN*4; - // dynamicRange=32; - // initChip(0, 0,ALLMOD); - //nModX=n; - // - allocateRAM(); - - - return OK; -} - - - - -int copyChannel(sls_detector_channel *destChan, sls_detector_channel *srcChan) { - destChan->chan=srcChan->chan; - destChan->chip=srcChan->chip; - destChan->module=srcChan->module; - destChan->reg=srcChan->reg; - return OK; -} - - -int copyChip(sls_detector_chip *destChip, sls_detector_chip *srcChip) { - - int ichan; - int ret=OK; - if ((srcChip->nchan)>(destChip->nchan)) { - printf("Number of channels of source is larger than number of channels of destination\n"); - return FAIL; - } - - destChip->nchan=srcChip->nchan; - destChip->reg=srcChip->reg; - destChip->chip=srcChip->chip; - destChip->module=srcChip->module; - for (ichan=0; ichan<(srcChip->nchan); ichan++) { - *((destChip->chanregs)+ichan)=*((srcChip->chanregs)+ichan); - } - return ret; -} - - -int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod) { - - int ichip, idac, ichan, iadc; - - int ret=OK; - -#ifdef VERBOSE - printf("Copying module %x to module %x\n",(unsigned int)(srcMod),(unsigned int)(destMod)); -#endif - - if (srcMod->module>=0) { -#ifdef VERBOSE - printf("Copying module number %d to module number %d\n",srcMod->module,destMod->module); -#endif - destMod->module=srcMod->module; - } - if (srcMod->serialnumber>=0){ -/* #ifdef VERBOSE */ -/* printf("Copying module serial number %x to module serial number %x\n",srcMod->serialnumber,destMod->serialnumber); */ -/* #endif */ - destMod->serialnumber=srcMod->serialnumber; - } - if ((srcMod->nchip)>(destMod->nchip)) { - printf("Number of chip of source is larger than number of chips of destination\n"); - return FAIL; - } - if ((srcMod->nchan)>(destMod->nchan)) { - printf("Number of channels of source is larger than number of channels of destination\n"); - return FAIL; - } - if ((srcMod->ndac)>(destMod->ndac)) { - printf("Number of dacs of source is larger than number of dacs of destination\n"); - return FAIL; - } - if ((srcMod->nadc)>(destMod->nadc)) { - printf("Number of dacs of source is larger than number of dacs of destination\n"); - return FAIL; - } - -#ifdef VERBOSE - printf("DACs: src %d, dest %d\n",srcMod->ndac,destMod->ndac); - printf("ADCs: src %d, dest %d\n",srcMod->nadc,destMod->nadc); - printf("Chips: src %d, dest %d\n",srcMod->nchip,destMod->nchip); - printf("Chans: src %d, dest %d\n",srcMod->nchan,destMod->nchan); - -#endif - - - - destMod->ndac=srcMod->ndac; - destMod->nadc=srcMod->nadc; - destMod->nchip=srcMod->nchip; - destMod->nchan=srcMod->nchan; - if (srcMod->reg>=0) - destMod->reg=srcMod->reg; -#ifdef VERBOSE - printf("Copying register %x (%x)\n",destMod->reg,srcMod->reg ); -#endif - if (srcMod->gain>=0) - destMod->gain=srcMod->gain; - if (srcMod->offset>=0) - destMod->offset=srcMod->offset; - - // printf("copying gain and offset %f %f to %f %f\n",srcMod->gain,srcMod->offset,destMod->gain,destMod->offset); - - for (ichip=0; ichip<(srcMod->nchip); ichip++) { - if (*((srcMod->chipregs)+ichip)>=0) - *((destMod->chipregs)+ichip)=*((srcMod->chipregs)+ichip); - } - for (ichan=0; ichan<(srcMod->nchan); ichan++) { - if (*((srcMod->chanregs)+ichan)>=0) - *((destMod->chanregs)+ichan)=*((srcMod->chanregs)+ichan); - } - for (idac=0; idac<(srcMod->ndac); idac++) { - if (*((srcMod->dacs)+idac)>=0) - *((destMod->dacs)+idac)=*((srcMod->dacs)+idac); - } - for (iadc=0; iadc<(srcMod->nadc); iadc++) { - if (*((srcMod->adcs)+iadc)>=0) - *((destMod->adcs)+iadc)=*((srcMod->adcs)+iadc); - } - return ret; -} - - - -/* Register commands */ - - -int clearDACSregister(int imod) { - - putout("1111111111111111",imod);//reset - putout("1111111111111110",imod);//cs down - - /* commented out by dhanya - putout("0000000001000000",imod); - putout("0000000101000000",imod); - putout("0000000101000000",imod); - putout("0000000001000000",imod); - */ -#ifdef DEBUG - fprintf(stdout, "Clearing DAC shiftregister\n"); -#endif - // sDac=0; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return OK; -} - -int nextDAC(int imod) { - - putout("1111111111111011",imod);//cs up - putout("1111111111111001",imod);//clk down - putout("1111111111111111",imod);//reset - - /*commented out by dhanya - putout("0000000001000000",imod); - putout("0000000001001000",imod); - putout("0000000001000000",imod); - */ -#ifdef DEBUG - fprintf(stdout, "Next DAC\n"); -#endif - // sDac++; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return OK; -} - - -int clearCSregister(int imod) { - - putout("0000000001000000",imod); - putout("0000100001000000",imod); - putout("0000100001000000",imod); - putout("0000000001000000",imod); -#ifdef DEBUG - fprintf(stdout, "Clearing CS shiftregister\n"); -#endif - /* - sChan=noneSelected; - sMod=noneSelected; - sDac=noneSelected; - sAdc=noneSelected; - */ - sChip=noneSelected; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - //putout("0000000000000000",imod); - return 0; -} - -int setCSregister(int imod){ - - putout("0000000001000000",imod); - putout("0001000001000000",imod); - putout("0001000001000000",imod); - putout("0000000001000000",imod); -#ifdef DEBUG - fprintf(stdout, "Setting CS shiftregister\n"); -#endif - putout("0000000000000000",imod); - sChip=allSelected; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int nextChip(int imod){ - - putout("0000000001000000",imod); - putout("0010000001000000",imod); - putout("0000000001000000",imod); -#ifdef DEBUG - fprintf(stdout, "Next Chip\n"); -#endif - sChip++; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int firstChip(int imod){ - - putout("0100000001000000",imod); - putout("0110000001000000",imod); - putout("0100000001000000",imod); -#ifdef DEBUG - fprintf(stdout, "First Chip\n"); -#endif - sChip=0; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int clearSSregister(int imod){ - int i; - putout("0000011000000000",imod); - for (i=0; i<10; i++) - putout("0000111000000000",imod); - putout("0000011000000000",imod); -#ifdef DEBUG - fprintf(stdout,"Clearing SS shiftregister\n"); -#endif - putout("0000000000000000",imod); - sChan=noneSelected; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int setSSregister(int imod){ - int i; - putout("0000011000000000",imod); - for (i=0; i<10; i++) - putout("0001011000000000",imod); - putout("0000011000000000",imod); -#ifdef DEBUG - fprintf(stdout,"Setting SS shiftregister\n"); -#endif - putout("0000000000000000",imod); - sChan=allSelected; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int nextStrip(int imod){ - putout("0000011000000000",imod); - putout("0010011000000000",imod); - putout("0000011000000000",imod); -#ifdef DEBUG - fprintf(stdout,"|-"); -#endif - sChan++; - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - return 0; -} - -int selChannel(const int strip,int imod) { - int istrip; - clearSSregister(imod); - nextStrip(imod); - for (istrip=0; istrip=0 && imod=0) - initDAC(ind,val, imod); - - if (imod>=0 && imodndac) - return (detectorDacs[ind+imod*NDAC]); - } - return FAIL; - */ - return setDACRegister(ind, -1, imod); -} - - -int initDAC(int dac_addr, int value, int imod) { -// int i; -#ifdef VERBOSE - printf("Programming dac %d with value %d\n", dac_addr, value); -#endif - clearDACSregister(imod); - program_one_dac(dac_addr,value,imod); - nextDAC(imod); - clearDACSregister(imod); - - return 0; -} - -int getTemperatureByModule(int tempSensor, int imod) -{ - int im; - //for the particular module - if (imod>=0 && imod=0 && imod=0 && imod=0) { -#ifdef VERBOSE - fprintf(stdout, "voltage %d\n", *(v+iaddr)); -#endif - program_one_dac(iaddr, *(v+iaddr),imod); - } - nextDAC(imod); - } - - - clearDACSregister(imod); - - return 0; - -} - - - - -int setSettings(int i, int imod) { -#ifdef VERBOSE - if(i==-1) - printf("\nReading settings of detector...\n"); - else - printf("\ninside set settings wit settings=%d...\n",i); -#endif - int confgain[] = CONF_GAIN; - int isett=-2,retval; - - //reading settings - if(i==GET_SETTINGS){ - retval=initConfGainByModule(i,i,imod); - if(retval==i) - isett=UNDEFINED; - } - //writing settings - else{ - retval=initConfGainByModule(i,confgain[i],imod); - if(retval!=i) - isett=UNDEFINED; - } - //if error while read/writing - if(isett==UNDEFINED) - printf("Error:Weird Value read back from the Gain/Settings Reg\n"); - else{ - //validating the settings read back - if((retval>=HIGHGAIN)&&(retval<=VERYHIGHGAIN)) - isett=retval; - else{ - isett=UNDEFINED; - printf("Error:Wrong Settings Read out:%d\n",retval); - } - } - thisSettings=isett; -#ifdef VERBOSE - printf("detector settings are %d\n",thisSettings); -#endif - return thisSettings; -} - - - - -/* Initialization*/ - -int initChannelbyNumber(sls_detector_channel myChan) { - int reg=myChan.reg; - int ft=reg & TRIM_DR; - int cae=(reg>>(NTRIMBITS))&1; - int ae=(reg>>(NTRIMBITS+1))&1; - int coe=(reg>>(NTRIMBITS+2))&1; - int ocoe=(reg>>(NTRIMBITS+3))&1; - int counts=(reg>>(NTRIMBITS+4)); -#ifdef VERBOSE - printf("Initializing channel %d chip %d module %d reg %x\n",myChan.chan,myChan.chip,myChan.module, reg); - printf("trim %d, cae %d, ae %d, coe %d, ocoe %d, counts %d\n",ft, cae, ae, coe, ocoe, counts); -#endif - - if (myChan.chip<0) - setCSregister(myChan.module); - else - selChip(myChan.chip,myChan.module); - - if (myChan.chan<0) - setSSregister(myChan.module); - else - selChannel(myChan.chan,myChan.module); - - initChannel(ft,cae,ae, coe, ocoe, counts,myChan.module); - - setDynamicRange(dynamicRange); - - setCSregister(ALLMOD); - clearSSregister(ALLMOD); - putout("0000000000000000",ALLMOD); - - return myChan.reg; - -} - -int getChannelbyNumber(sls_detector_channel* myChan) { - int imod, ichip, ichan; - imod=myChan->module; - ichip=myChan->chip; - ichan=myChan->chan; - - if (detectorChans) { - if (imod=0) { - if (ichip<(detectorModules+imod)->nchip && ichan<(detectorModules+imod)->nchan/(detectorModules+imod)->nchip) - myChan->reg=detectorChans[imod*NCHAN*NCHIP+ichip*NCHAN+ichan]; - return OK; - } - } - return FAIL; - -} - -int getTrimbit(int imod, int ichip, int ichan) { - if (detectorChans) { - if (imod=0) - if (ichip<(detectorModules+imod)->nchip && ichan<(detectorModules+imod)->nchan/(detectorModules+imod)->nchip) - return (detectorChans[imod*NCHAN*NCHIP+ichip*NCHAN+ichan] & TRIM_DR); - } - - return -1; -} - -int initChannel(int ft,int cae, int ae, int coe, int ocoe, int counts, int imod){ - - int ibit, bit, i, im, ichip, ichan; - int chanmi, chanma, chipmi, chipma, modmi, modma; - - - - sMod=imod; - // printf("initializing module %d\n",sMod); - if (imod==ALLMOD) { - sMod=allSelected; - - // printf("initializing all modules\n"); - } - - if (sChan==allSelected) { - // printf("initializing all channels ft=%d coe=%d\n",ft,coe); - chanmi=0; - chanma=NCHAN; - } else if (sChan==noneSelected || sChan>NCHAN || sChan<0) { - // printf("initializing no channels ft=%d coe=%d\n",ft,coe); - chanmi=0; - chanma=-1; - } else { - // printf("initializing channel %d ft=%d coe=%d\n",sChan, ft,coe); - chanmi=sChan; - chanma=sChan+1; - } - - if (sChip==allSelected) { - // printf("initializing all chips\n"); - chipmi=0; - chipma=NCHIP; - } else if (sChip==noneSelected || sChip>NCHIP || sChip<0) { - // printf("initializing no chips\n"); - chipmi=0; - chipma=-1; - } else { - // printf("initializing chip %d\n",sChip); - chipmi=sChip; - chipma=sChip+1; - } - - - if (sMod==allSelected) { - modmi=0; - modma=nModX;//getNModBoard(); - } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { - modmi=0; - modma=-1; - return 1; - } else { - modmi=sMod; - modma=sMod+1; - } - - if (detectorChans) { - for (im=modmi; im63 || ft<0) { - fprintf(stdout,"Fine Threshold is %d while should be between 0 and 63!",ft); - return 1; - } - /*cal_enable*/ - if (cae) { - putout("0100000000000000",imod); - putout("0110000000000000",imod); - } else { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - } - /*n_an_enable*/ - if (ae) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } else { - putout("0100000000000000",imod); - putout("0110000000000000",imod); - putout("0100000000000000",imod); - } - /*trb5*/ - ibit=5; - bit=ft & (1<>1; - int nchan, ichan; - int ft, cae, ae, coe, ocoe, counts, chanreg; - - - - nchan=myChip.nchan; - if (ichip<0) - setCSregister(imod); - else - selChip(ichip,imod); - - clearSSregister(imod); - for (ichan=0; ichan>(NTRIMBITS+1))&1; - ae=(chanreg>>(NTRIMBITS+2))&1; - coe=((chanreg)>>(NTRIMBITS+3))&1; - ocoe=((chanreg)>>(NTRIMBITS+4))&1; - counts=((chanreg)>>(NTRIMBITS+5)); - nextStrip(imod); - initChannel(ft,cae,ae, coe, ocoe, counts,imod); - } - initChip(obe,ow,imod); - return myChip.reg; - -} - -int getChipbyNumber(sls_detector_chip* myChip){ - int imod, ichip; - imod=myChip->module; - ichip=myChip->chip; - - if (detectorChips) { - if (imodnchip) { - myChip->reg=detectorChips[ichip+imod*NCHIP]; - myChip->nchan=NCHAN; - myChip->chanregs=detectorChans+imod*NCHAN*NCHIP+ichip*NCHIP; - return OK; - } - } - return FAIL; - -} - - - -int initChip(int obe, int ow,int imod){ - int i; - int im, ichip; - int chipmi, chipma, modmi, modma; - /* switch (ow) { - case 0:; - case 1: - setDynamicRange(32); - break; - case 2: - setDynamicRange(16); - break; - case 3: - setDynamicRange(8); - break; - case 4: - setDynamicRange(4); - break; - case 5: - setDynamicRange(1); - break; - default: - setDynamicRange(32); - break; - } - */ - -#ifdef DEBUGOUT - printf("Initializing chip\n"); -#endif - putout("0000000000000000",imod); -#ifdef DEBUGOUT - printf("Output mode= %d\n", ow); -#endif - - /* clearing shift in register */ - for (i=0; i<10; i++) - putout("0000100000000000",imod); - putout("0000000000000000",imod); - - if (ow>0) { - putout("0100000000000000",imod); - putout("0110000000000000",imod); - putout("0100000000000000",imod); - for (i=0; i<(OUTMUX_OFFSET-1); i++) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - if (ow>1) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - if (ow>2) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - if (ow>3) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - if (ow>4) { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - } -#ifdef DEBUGOUT - printf("Output buffer enable= %d\n", obe); -#endif - if (obe) { - putout("0100000000000000",imod); - putout("0110000000000000",imod); - putout("0100000000000000",imod); - } else { - putout("0000000000000000",imod); - putout("0010000000000000",imod); - putout("0000000000000000",imod); - } - /*}*/ - putout("0000000000000000",imod); - - - - - - sMod=imod; - if (imod==ALLMOD) - sMod=allSelected; - - - if (sChip==allSelected) { - chipmi=0; - chipma=NCHIP; - } else if (sChip==noneSelected || sChip>NCHIP || sChip<0) { - chipmi=0; - chipma=-1; - } else { - chipmi=sChip; - chipma=sChip+1; - } - - - if (sMod==allSelected) { - modmi=0; - modma=nModX;//getNModBoard(); - } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { - modmi=0; - modma=-1; - } else { - modmi=sMod; - modma=sMod+1; - } - - if (detectorChips) { - for (im=modmi; imNCHIP || sChip<0) { - chipmi=0; - chipma=-1; - } else { - chipmi=sChip; - chipma=sChip+1; - } - - - if (sMod==allSelected) { - modmi=0; - modma=nModX;//getNModBoard(); - } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { - modmi=0; - modma=-1; - } else { - modmi=sMod; - modma=sMod+1; - } - - if (detectorChips) { - for (im=modmi; imnModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { - modmi=0; - modma=-1; - } else { - modmi=sMod; - modma=sMod+1; - } - - if (detectorModules) { - for (im=modmi; imreg)=cm; -#ifdef VERBOSE - printf("imod=%d reg=%d (%x)\n",im,(detectorModules+im)->reg,(unsigned int)((detectorModules+im))); -#endif - } - } - return 0; -} - -int initModulebyNumber(sls_detector_module myMod) { - - printf("\ninside initmoduleynumber..\n"); - - int nchip,nchan;//int ichip, nchip, ichan, nchan; - int im, modmi,modma; - // int ft, cae, ae, coe, ocoe, counts, chanreg; - int imod; - // int obe; - // int ow; - int v[NDAC]; - - - nchip=myMod.nchip; - nchan=(myMod.nchan)/nchip; - - imod=myMod.module; - sMod=imod; - - if (sMod==ALLMOD) - sMod=allSelected; - - if (sMod==allSelected) { - modmi=0; - modma=nModX;//getNModBoard(); - } else if (sMod==noneSelected || sMod>nModX || sMod<0) {// (sMod==noneSelected || sMod>getNModBoard() || sMod<0) { - modmi=0; - modma=-1; - } else { - modmi=sMod; - modma=sMod+1; - } - - - /* - for (idac=0; idacmodule; -#ifdef VERBOSE - printf("Getting module %d\n",imod); -#endif - if (detectorModules) { - copyModule(myMod,detectorModules+imod); - ; - } else - return FAIL; - - return OK; -} - -/* To chips */ -int clearCounter(int imod){ - int i; -#ifdef DEBUG - printf("Clearing counter with contclear\n"); -#endif - putout("0000000000000000",imod); - for (i=0; i<10; i++) - putout("0000000000010000",imod); - putout("0000000000000000",imod); - - return 0; -} - -int clearOutReg(int imod){ - int i; -#ifdef DEBUG - printf("Clearing output register\n"); -#endif - putout("0000010000000000",imod); - for (i=0; i<10; i++) - putout("0000110000000000",imod); - putout("0000010000000000",imod); - return 0; -} -int setOutReg(int imod){ - int i; -#ifdef DEBUG - printf("Setting output register\n"); -#endif - putout("0000010000000000",imod); - for (i=0; i<10; i++) - putout("0001010000000000",imod); - putout("0000010000000000",imod); - return 0; -} - - -int extPulse(int ncal, int imod) { - int ical; -#ifdef DEBUG - printf("Giving a clock pulse to the counter\n"); -#endif - for (ical=0; ical0 && i%2==0) { - printf("Shift in: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, i%2); - result++; - } - if (i%2>0 && (val & 1<0 && (dum & (1<0) { - printf("Shift out: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, (dum &1<0 && i%2==0) { - printf("Shift stsel: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, i%2); - result++; - } - if (i%2>0 && (val & 1<> 1; - - - putout("0000000000000000",ALLMOD); - putout("0010000000000000",ALLMOD); //change mux setting - putout("0000000000000000",ALLMOD); - } - - printf("Test FpgaMux module %d : %d errors\n", imod,result); - if (result) - return 1; - else - return 0; -} - - - - - - - - - -int calibration_sensor(int num, int *v, int *dacs) { - int ich, ichip, imod; - int val[10]; - - - printf("calibrating sensor..."); - for (imod=0; imod=0){ - - if(n==0) - adc=-1; - else{ - //if its for 1 adc or general - if ((arg[0].xmin==0) && (arg[0].xmax==GOTTHARDNCHIP*GOTTHARDNCHAN)) - adc=-1; - else{ - //adc = mid value/numchans also for only 1 roi - adc = ((((arg[0].xmax)+(arg[0].xmin))/2)/(GOTTHARDNCHAN*NCHIPS_PER_ADC)); - if((adc>=0) && (adc<=4)); - else { - printf("warning:adc value greater than 5. deleting roi\n"); - adc=-1; - } - } - } - - - //set rois for just 1 adc - take only 1st roi - if(adc!=-1){ - rois[0].xmin=adc*(GOTTHARDNCHAN*NCHIPS_PER_ADC); - rois[0].xmax=(adc+1)*(GOTTHARDNCHAN*NCHIPS_PER_ADC)-1; - rois[0].ymin=-1; - rois[0].ymax=-1; - nROI = 1; - }else - nROI = 0; - - if((arg[0].xmin!=rois[0].xmin)||(arg[0].xmax!=rois[0].xmax)||(arg[0].ymin!=rois[0].ymin)||(arg[0].ymax!=rois[0].ymax)) - *ret=FAIL; - if(n!=nROI) - *ret=FAIL; - - //set adc of interest - setADC(adc); - }*/ - -//#ifdef VERBOSE - printf("Rois:\n"); - for( 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 Nk5l4rl$-I|{{$6L%BKJT diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/registers_m.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/registers_m.h deleted file mode 100755 index 87c398d87..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/registers_m.h +++ /dev/null @@ -1,309 +0,0 @@ -#ifndef REGISTERS_G_H -#define REGISTERS_G_H - - -#include "sls_detector_defs.h" - - -/* Definitions for FPGA*/ -#define CSP0 0x20200000 -#define MEM_SIZE 0x100000 - - - -/* values defined for FPGA */ -#define MCSNUM 0x0 -#define FIXED_PATT_VAL 0xacdc1980 - - -#define FPGA_INIT_PAT 0x60008 -#define FPGA_INIT_ADDR 0xb0000000 - - - - -/* registers defined in FPGA */ -#define PCB_REV_REG 0x2c<<11 -#define GAIN_REG 0x10<<11 -//#define FLOW_CONTROL_REG 0x11<<11 -//#define FLOW_STATUS_REG 0x12<<11 -//#define FRAME_REG 0x13<<11 -#define MULTI_PURPOSE_REG 0x14<<11 -#define DAQ_REG 0x15<<11 -//#define TIME_FROM_START_REG 0x16<<11 -#define MCB_CNTRL_REG_OFF 0x17<<11// control the dacs -//ADC -#define ADC_WRITE_REG 0x18<<11 -#define ADC_SYNC_REG 0x19<<11 -//#define MUTIME_REG 0x1a<<11 -//temperature -#define TEMP_IN_REG 0x1b<<11 -#define TEMP_OUT_REG 0x1c<<11 -//configure MAC -#define TSE_CONF_REG 0x1d<<11 -#define ENET_CONF_REG 0x1e<<11 -//#define WRTSE_SHAD_REG 0x1f<<11 -//HV -#define HV_REG 0x20<<11 - - -#define DUMMY_REG 0x21<<11 -#define FPGA_VERSION_REG 0x22<<11 -#define FIX_PATT_REG 0x23<<11 -#define CONTROL_REG 0x24<<11 -#define STATUS_REG 0x25<<11 -#define CONFIG_REG 0x26<<11 -#define EXT_SIGNAL_REG 0x27<<11 -#define FPGA_SVN_REG 0x29<<11 - - -#define CHIP_OF_INTRST_REG 0x2A<<11 - -//FIFO -#define LOOK_AT_ME_REG 0x28<<11 - -#define FIFO_DATA_REG_OFF 0x50<<11 /////// - - -//to read back dac registers -#define MOD_DACS1_REG 0x65<<11 -#define MOD_DACS2_REG 0x66<<11 -#define MOD_DACS3_REG 0x67<<11 - -//user entered -#define SET_DELAY_LSB_REG 0x68<<11 -#define SET_DELAY_MSB_REG 0x69<<11 -#define GET_DELAY_LSB_REG 0x6a<<11 -#define GET_DELAY_MSB_REG 0x6b<<11 - -#define SET_TRAINS_LSB_REG 0x6c<<11 -#define SET_TRAINS_MSB_REG 0x6d<<11 -#define GET_TRAINS_LSB_REG 0x6e<<11 -#define GET_TRAINS_MSB_REG 0x6f<<11 - -#define SET_FRAMES_LSB_REG 0x70<<11 -#define SET_FRAMES_MSB_REG 0x71<<11 -#define GET_FRAMES_LSB_REG 0x72<<11 -#define GET_FRAMES_MSB_REG 0x73<<11 - -#define SET_PERIOD_LSB_REG 0x74<<11 -#define SET_PERIOD_MSB_REG 0x75<<11 -#define GET_PERIOD_LSB_REG 0x76<<11 -#define GET_PERIOD_MSB_REG 0x77<<11 - -#define SET_EXPTIME_LSB_REG 0x78<<11 -#define SET_EXPTIME_MSB_REG 0x79<<11 -#define GET_EXPTIME_LSB_REG 0x7a<<11 -#define GET_EXPTIME_MSB_REG 0x7b<<11 - -#define SET_GATES_LSB_REG 0x7c<<11 -#define SET_GATES_MSB_REG 0x7d<<11 -#define GET_GATES_LSB_REG 0x7e<<11 -#define GET_GATES_MSB_REG 0x7f<<11 - - - -#define PLL_PARAM_REG 0x37<<11 -#define PLL_PARAM_OUT_REG 0x38<<11 -#define PLL_CNTRL_REG 0x34<<11 - -#define ROI_REG 0x35<<11 -#define OVERSAMPLING_REG 0x36<<11 -#define MOENCH_CNTR_REG 0x31<<11 -#define MOENCH_CNTR_OUT_REG 0x33<<11 -#define MOENCH_CNTR_CONF_REG 0x32<<11 - - - -//image -#define DARK_IMAGE_REG 0x81<<11 -#define GAIN_IMAGE_REG 0x82<<11 - -//counter block memory -#define COUNTER_MEMORY_REG 0x85<<11 - - -#define GET_MEASUREMENT_TIME_LSB_REG 0x023000 -#define GET_MEASUREMENT_TIME_MSB_REG 0x024000 - -#define GET_ACTUAL_TIME_LSB_REG 0x025000 -#define GET_ACTUAL_TIME_MSB_REG 0x026000 - - -//not used -//#define MCB_DOUT_REG_OFF 0x200000 -//#define FIFO_CNTRL_REG_OFF 0x300000 -//#define FIFO_COUNTR_REG_OFF 0x400000 -//not used so far -//#define SPEED_REG 0x006000 -//#define SET_NBITS_REG 0x008000 -//not used -//#define GET_SHIFT_IN_REG 0x022000 - - - -#define SHIFTMOD 2 -#define SHIFTFIFO 9 - -/** for PCB_REV_REG */ -#define DETECTOR_TYPE_MASK 0xF0000 -#define DETECTOR_TYPE_OFFSET 16 -#define BOARD_REVISION_MASK 0xFFFF -#define MOENCH_MODULE 2 - - - - -/* for control register */ -#define START_ACQ_BIT 0x00000001 -#define STOP_ACQ_BIT 0x00000002 -#define START_FIFOTEST_BIT 0x00000004 // ????? -#define STOP_FIFOTEST_BIT 0x00000008 // ?????? -#define START_READOUT_BIT 0x00000010 -#define STOP_READOUT_BIT 0x00000020 -#define START_EXPOSURE_BIT 0x00000040 -#define STOP_EXPOSURE_BIT 0x00000080 -#define START_TRAIN_BIT 0x00000100 -#define STOP_TRAIN_BIT 0x00000200 -#define SYNC_RESET 0x00000400 - -/* for status register */ -#define RUN_BUSY_BIT 0x00000001 -#define READOUT_BUSY_BIT 0x00000002 -#define FIFOTEST_BUSY_BIT 0x00000004 //???? -#define WAITING_FOR_TRIGGER_BIT 0x00000008 -#define DELAYBEFORE_BIT 0x00000010 -#define DELAYAFTER_BIT 0x00000020 -#define EXPOSING_BIT 0x00000040 -#define COUNT_ENABLE_BIT 0x00000080 -#define READSTATE_0_BIT 0x00000100 -#define READSTATE_1_BIT 0x00000200 -#define READSTATE_2_BIT 0x00000400 - -#define RUNSTATE_0_BIT 0x00001000 -#define RUNSTATE_1_BIT 0x00002000 -#define RUNSTATE_2_BIT 0x00004000 -#define SOME_FIFO_FULL_BIT 0x00008000 // error! -#define ALL_FIFO_EMPTY_BIT 0x00010000 // data ready -#define RUNMACHINE_BUSY_BIT 0x00020000 -#define READMACHINE_BUSY_BIT 0x00040000 - - - -/* for fifo status register */ -#define FIFO_ENABLED_BIT 0x80000000 -#define FIFO_DISABLED_BIT 0x01000000 -#define FIFO_ERROR_BIT 0x08000000 -#define FIFO_EMPTY_BIT 0x04000000 -#define FIFO_DATA_READY_BIT 0x02000000 -#define FIFO_COUNTER_MASK 0x000001ff -#define FIFO_NM_MASK 0x00e00000 -#define FIFO_NM_OFF 21 -#define FIFO_NC_MASK 0x001ffe00 -#define FIFO_NC_OFF 9 - -/* for config register *///not really used yet -#define TOT_ENABLE_BIT 0x00000002 -#define TIMED_GATE_BIT 0x00000004 -#define CONT_RO_ENABLE_BIT 0x00080000 -#define CPU_OR_RECEIVER_BIT 0x00001000 - - - -/* for speed register */ -#define CLK_DIVIDER_MASK 0x000000ff -#define CLK_DIVIDER_OFFSET 0 -#define SET_LENGTH_MASK 0x00000f00 -#define SET_LENGTH_OFFSET 8 -#define WAIT_STATES_MASK 0x0000f000 -#define WAIT_STATES_OFFSET 12 -#define TOTCLK_DIVIDER_MASK 0xff000000 -#define TOTCLK_DIVIDER_OFFSET 24 -#define TOTCLK_DUTYCYCLE_MASK 0x00ff0000 -#define TOTCLK_DUTYCYCLE_OFFSET 16 - -/* for external signal register */ -#define SIGNAL_OFFSET 4 -#define SIGNAL_MASK 0xF -#define EXT_SIG_OFF 0x0 -#define EXT_GATE_IN_ACTIVEHIGH 0x1 -#define EXT_GATE_IN_ACTIVELOW 0x2 -#define EXT_TRIG_IN_RISING 0x3 -#define EXT_TRIG_IN_FALLING 0x4 -#define EXT_RO_TRIG_IN_RISING 0x5 -#define EXT_RO_TRIG_IN_FALLING 0x6 -#define EXT_GATE_OUT_ACTIVEHIGH 0x7 -#define EXT_GATE_OUT_ACTIVELOW 0x8 -#define EXT_TRIG_OUT_RISING 0x9 -#define EXT_TRIG_OUT_FALLING 0xA -#define EXT_RO_TRIG_OUT_RISING 0xB -#define EXT_RO_TRIG_OUT_FALLING 0xC - - - -/* for temperature register */ -#define T1_CLK_BIT 0x00000001 -#define T1_CS_BIT 0x00000002 -#define T2_CLK_BIT 0x00000004 -#define T2_CS_BIT 0x00000008 - - - -/* fifo control register */ -#define FIFO_RESET_BIT 0x00000001 -#define FIFO_DISABLE_TOGGLE_BIT 0x00000002 - - -//chip shiftin register meaning -#define OUTMUX_OFF 20 -#define OUTMUX_MASK 0x1f -#define PROBES_OFF 4 -#define PROBES_MASK 0x7f -#define OUTBUF_OFF 0 -#define OUTBUF_MASK 1 - - -/* multi purpose register */ -#define PHASE_STEP_BIT 0x00000001 -#define PHASE_STEP_OFFSET 0 -// #define xxx_BIT 0x00000002 -#define RESET_COUNTER_BIT 0x00000004 -#define RESET_COUNTER_OFFSET 2 -//#define xxx_BIT 0x00000008 -//#define xxx_BIT 0x00000010 -#define SW1_BIT 0x00000020 -#define SW1_OFFSET 5 -#define WRITE_BACK_BIT 0x00000040 -#define WRITE_BACK_OFFSET 6 -#define RESET_BIT 0x00000080 -#define RESET_OFFSET 7 -#define ENET_RESETN_BIT 0x00000800 -#define ENET_RESETN_OFFSET 11 -#define INT_RSTN_BIT 0x00002000 -#define INT_RSTN_OFFSET 13 -#define DIGITAL_TEST_BIT 0x00004000 -#define DIGITAL_TEST_OFFSET 14 -//#define CHANGE_AT_POWER_ON_BIT 0x00008000 -//#define CHANGE_AT_POWER_ON_OFFSET 15 - - -/* settings/conf gain register */ -#define GAIN_MASK 0x0000000f -#define GAIN_OFFSET 0 -#define SETTINGS_MASK 0x000000f0 -#define SETTINGS_OFFSET 4 - - -/* CHIP_OF_INTRST_REG */ -#define CHANNEL_MASK 0xffff0000 -#define CHANNEL_OFFSET 16 -#define ACTIVE_ADC_MASK 0x0000001f - - - -/**ADC SYNC CLEAN FIFO*/ -#define ADCSYNC_CLEAN_FIFO_BITS 0x300000 -#define CLEAN_FIFO_MASK 0x0fffff - -#endif - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server.c deleted file mode 100755 index acf625119..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server.c +++ /dev/null @@ -1,112 +0,0 @@ -/* A simple server in the internet domain using TCP - The port number is passed as an argument */ - -#include "sls_detector_defs.h" - -#include "communication_funcs.h" -#include "server_funcs.h" -#include - - -extern int sockfd; -extern int phase_shift; - - - -void error(char *msg) -{ - perror(msg); -} - -int main(int argc, char *argv[]) -{ - int portno, b; - char cmd[500]; - int retval=OK; - int sd, fd; - int iarg; - - - for(iarg=1; iarg 2) && (!strcasecmp(argv[2],"stopserver"))){ - portno = DEFAULT_PORTNO+1; - if ( sscanf(argv[1],"%d",&portno) ==0) { - printf("could not open stop server: unknown port\n"); - return 1; - } - b=0; - printf("\n\nStop Server\nOpening stop server on port %d\n",portno); - } - - //control server - else { - portno = DEFAULT_PORTNO; - sprintf(cmd,"%s %d stopserver &",argv[0],DEFAULT_PORTNO+1); - printf("\n\nControl Server\nOpening control server on port %d\n",portno ); - - //printf("\n\ncmd:%s\n",cmd); - system(cmd); - b=1; - } - - - init_detector(b); - - - sd=bindSocket(portno); - sockfd=sd; - if (getServerError(sd)) { - printf("server error!\n"); - return -1; - } - - /* assign function table */ - function_table(); -#ifdef VERBOSE - printf("function table assigned \n"); -#endif - - - /* waits for connection */ - while(retval!=GOODBYE) { -#ifdef VERBOSE - printf("\n"); -#endif -#ifdef VERY_VERBOSE - printf("Waiting for client call\n"); -#endif - fd=acceptConnection(sockfd); -#ifdef VERY_VERBOSE - printf("Conenction accepted\n"); -#endif - retval=decode_function(fd); -#ifdef VERY_VERBOSE - printf("function executed\n"); -#endif - closeConnection(fd); -#ifdef VERY_VERBOSE - printf("connection closed\n"); -#endif - } - - exitServer(sockfd); - printf("Goodbye!\n"); - - return 0; -} - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_defs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_defs.h deleted file mode 100755 index e86b3107f..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_defs.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef SERVER_DEFS_H -#define SERVER_DEFS_H - -#include "sls_detector_defs.h" - -#include - - -// Hardware definitions - -#define NCHAN (160*160) -#define NCHIP 1 -#define NMAXMODX 1 -#define NMAXMODY 1 -#define NMAXMOD (NMAXMODX*NMAXMODY) -#define NDAC 8 -#define NADC 1 - - - - - - -#define NCHANS (NCHAN*NCHIP*NMAXMOD) -#define NDACS (NDAC*NMAXMOD) - -#define NTRIMBITS 6 -#define NCOUNTBITS 24 - -#define NCHIPS_PER_ADC 2 - -//#define TRIM_DR ((2**NTRIMBITS)-1) -//#define COUNT_DR ((2**NCOUNTBITS)-1) -#define TRIM_DR (((int)pow(2,NTRIMBITS))-1) -#define COUNT_DR (((int)pow(2,NCOUNTBITS))-1) - - -#define ALLMOD 0xffff -#define ALLFIFO 0xffff - -#define GOTTHARD_ADCSYNC_VAL 0x32214 -#define ADCSYNC_VAL 0x02111 -#define TOKEN_RESTART_DELAY 0x88000000 -#define TOKEN_RESTART_DELAY_ROI 0x1b000000 -#define TOKEN_TIMING_REV1 0x1f16 -#define TOKEN_TIMING_REV2 0x1f0f - -#define DEFAULT_PHASE_SHIFT 0 // 120 -#define DEFAULT_IP_PACKETSIZE 0x0522 -#define DEFAULT_UDP_PACKETSIZE 0x050E -#define ADC1_IP_PACKETSIZE 256*2+14+20 -#define ADC1_UDP_PACKETSIZE 256*2+4+8+2 - -#ifdef VIRTUAL -#define DEBUGOUT -#endif - -#define CLK_FREQ 65.6E+6 - - -#endif diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.c deleted file mode 100755 index 33f776c33..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.c +++ /dev/null @@ -1,3083 +0,0 @@ -#include "sls_detector_defs.h" -#include "server_funcs.h" -#ifndef PICASSOD -#include "server_defs.h" -#else -#include "picasso_defs.h" -#endif -#include "firmware_funcs.h" -#include "mcb_funcs.h" -#include "trimming_funcs.h" -#include "registers_m.h" -#include "gitInfoMoench.h" - -#define FIFO_DATA_REG_OFF 0x50<<11 -#define CONTROL_REG 0x24<<11 -// Global variables - - -int (*flist[256])(int); - - -//defined in the detector specific file -#ifdef MYTHEND -const enum detectorType myDetectorType=MYTHEN; -#elif GOTTHARDD -const enum detectorType myDetectorType=GOTTHARD; -#elif EIGERD -const enum detectorType myDetectorType=EIGER; -#elif PICASSOD -const enum detectorType myDetectorType=PICASSO; -#elif MOENCHD -const enum detectorType myDetectorType=MOENCH; -#else -const enum detectorType myDetectorType=GENERIC; -#endif - - -extern int nModX; -extern int nModY; -extern int dataBytes; -extern int dynamicRange; -extern int storeInRAM; - -extern int lockStatus; -extern char lastClientIP[INET_ADDRSTRLEN]; -extern char thisClientIP[INET_ADDRSTRLEN]; -extern int differentClients; - -/* global variables for optimized readout */ -extern unsigned int *ram_values; -char *dataretval=NULL; -int nframes, iframes, dataret; -char mess[MAX_STR_LENGTH]; - -int digitalTestBit = 0; - - -int init_detector(int b) { - if (mapCSP0()==FAIL) { printf("Could not map memory\n"); - exit(1); - } - - // - - bus_w16(CONTROL_REG, SYNC_RESET); - bus_w16(CONTROL_REG, 0x0); - - //confirm if it is really moench - if(((bus_r(PCB_REV_REG) & DETECTOR_TYPE_MASK)>>DETECTOR_TYPE_OFFSET) != MOENCH_MODULE ){ - printf("This is a Gotthard detector. Exiting Moench Server.\n\n"); - exit(-1); - } - - if (b) { - printf("***This is a MOENCH detector with %d chips per module***\n",NCHIP); - -#ifdef MCB_FUNCS - printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK)); - initDetector(); - printf("Initializing Detector\n"); - bus_w16(CONTROL_REG, SYNC_RESET); // reset registers -#endif - - - testFpga(); - testRAM(); - printf("ADC_SYNC_REG:%x\n",bus_r(ADC_SYNC_REG)); - //moench specific - - // setPhaseShiftOnce(); //firmware.h - - - prepareADC(); // server_funcs - setADC(-1); //already does setdaqreg and clean fifo - setSettings(GET_SETTINGS,-1); - - //Initialization - setFrames(1); - setTrains(1); - setExposureTime(1e3); - setPeriod(1E6); - setDelay(0); - setGates(0); - - setTiming(GET_EXTERNAL_COMMUNICATION_MODE); - setMaster(GET_MASTER); - setSynchronization(GET_SYNCHRONIZATION_MODE); - startReceiver(0); //firmware - } - strcpy(mess,"dummy message"); - strcpy(lastClientIP,"none"); - strcpy(thisClientIP,"none1"); - lockStatus=0; - return OK; -} - - -int decode_function(int file_des) { - int fnum,n; - int retval=FAIL; -#ifdef VERBOSE - printf( "receive data\n"); -#endif - n = receiveDataOnly(file_des,&fnum,sizeof(fnum)); - if (n <= 0) { -#ifdef VERBOSE - printf("ERROR reading from socket %d, %d %d\n", n, fnum, file_des); -#endif - return FAIL; - } -#ifdef VERBOSE - else - printf("size of data received %d\n",n); -#endif - -#ifdef VERBOSE - printf( "calling function fnum = %d %x\n",fnum,(unsigned int)(flist[fnum])); -#endif - if (fnum<0 || fnum>255) - fnum=255; - retval=(*flist[fnum])(file_des); - if (retval==FAIL) - printf( "Error executing the function = %d \n",fnum); - return retval; -} - - -int function_table() { - int i; - for (i=0;i<256;i++){ - flist[i]=&M_nofunc; - } - flist[F_EXIT_SERVER]=&exit_server; - flist[F_EXEC_COMMAND]=&exec_command; - flist[F_GET_DETECTOR_TYPE]=&get_detector_type; - flist[F_SET_NUMBER_OF_MODULES]=&set_number_of_modules; - flist[F_GET_MAX_NUMBER_OF_MODULES]=&get_max_number_of_modules; - flist[F_SET_EXTERNAL_SIGNAL_FLAG]=&set_external_signal_flag; - flist[F_SET_EXTERNAL_COMMUNICATION_MODE]=&set_external_communication_mode; - flist[F_GET_ID]=&get_id; - flist[F_DIGITAL_TEST]=&digital_test; - flist[F_WRITE_REGISTER]=&write_register; - flist[F_READ_REGISTER]=&read_register; - flist[F_SET_DAC]=&set_dac; - flist[F_GET_ADC]=&get_adc; - flist[F_SET_CHANNEL]=&set_channel; - flist[F_SET_CHIP]=&set_chip; - flist[F_SET_MODULE]=&set_module; - flist[F_GET_CHANNEL]=&get_channel; - flist[F_GET_CHIP]=&get_chip; - flist[F_GET_MODULE]=&get_module; - flist[F_GET_THRESHOLD_ENERGY]=&get_threshold_energy; - flist[F_SET_THRESHOLD_ENERGY]=&set_threshold_energy; - flist[F_SET_SETTINGS]=&set_settings; - flist[F_START_ACQUISITION]=&start_acquisition; - flist[F_STOP_ACQUISITION]=&stop_acquisition; - flist[F_START_READOUT]=&start_readout; - flist[F_GET_RUN_STATUS]=&get_run_status; - flist[F_READ_FRAME]=&read_frame; - flist[F_READ_ALL]=&read_all; - flist[F_START_AND_READ_ALL]=&start_and_read_all; - flist[F_SET_TIMER]=&set_timer; - flist[F_GET_TIME_LEFT]=&get_time_left; - flist[F_SET_DYNAMIC_RANGE]=&set_dynamic_range; - flist[F_SET_ROI]=&set_roi; - flist[F_SET_SPEED]=&set_speed; - flist[F_SET_READOUT_FLAGS]=&set_readout_flags; - flist[F_EXECUTE_TRIMMING]=&execute_trimming; - flist[F_LOCK_SERVER]=&lock_server; - flist[F_SET_PORT]=&set_port; - flist[F_GET_LAST_CLIENT_IP]=&get_last_client_ip; - flist[F_UPDATE_CLIENT]=&update_client; - flist[F_CONFIGURE_MAC]=&configure_mac; - flist[F_LOAD_IMAGE]=&load_image; - flist[F_SET_MASTER]=&set_master; - flist[F_SET_SYNCHRONIZATION_MODE]=&set_synchronization; - flist[F_READ_COUNTER_BLOCK]=&read_counter_block; - flist[F_RESET_COUNTER_BLOCK]=&reset_counter_block; - flist[F_START_RECEIVER]=&start_receiver; - flist[F_STOP_RECEIVER]=&stop_receiver; - flist[F_CALIBRATE_PEDESTAL]=&calibrate_pedestal; - return OK; -} - - -int M_nofunc(int file_des){ - - int ret=FAIL; - sprintf(mess,"Unrecognized Function\n"); - printf(mess); - - sendDataOnly(file_des,&ret,sizeof(ret)); - sendDataOnly(file_des,mess,sizeof(mess)); - return GOODBYE; -} - - -int exit_server(int file_des) { - int retval=FAIL; - sendDataOnly(file_des,&retval,sizeof(retval)); - printf("closing server."); - sprintf(mess,"closing server"); - sendDataOnly(file_des,mess,sizeof(mess)); - return GOODBYE; -} - -int exec_command(int file_des) { - char cmd[MAX_STR_LENGTH]; - char answer[MAX_STR_LENGTH]; - int retval=OK; - int sysret=0; - int n=0; - - /* receive arguments */ - n = receiveDataOnly(file_des,cmd,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - retval=FAIL; - } - - /* execute action if the arguments correctly arrived*/ - if (retval==OK) { -#ifdef VERBOSE - printf("executing command %s\n", cmd); -#endif - if (lockStatus==0 || differentClients==0) - sysret=system(cmd); - - //should be replaced by popen - if (sysret==0) { - sprintf(answer,"Succeeded\n"); - if (lockStatus==1 && differentClients==1) - sprintf(answer,"Detector locked by %s\n", lastClientIP); - } else { - sprintf(answer,"Failed\n"); - retval=FAIL; - } - } else { - sprintf(answer,"Could not receive the command\n"); - } - - /* send answer */ - n = sendDataOnly(file_des,&retval,sizeof(retval)); - n = sendDataOnly(file_des,answer,MAX_STR_LENGTH); - if (n < 0) { - sprintf(mess,"Error writing to socket"); - retval=FAIL; - } - - - /*return ok/fail*/ - return retval; - -} - - - -int get_detector_type(int file_des) { - int n=0; - enum detectorType ret; - int retval=OK; - - sprintf(mess,"Can't return detector type\n"); - - - /* receive arguments */ - /* execute action */ - ret=myDetectorType; - -#ifdef VERBOSE - printf("Returning detector type %d\n",ret); -#endif - - /* send answer */ - /* send OK/failed */ - if (differentClients==1) - retval=FORCE_UPDATE; - - n += sendDataOnly(file_des,&retval,sizeof(retval)); - if (retval!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&ret,sizeof(ret)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - /*return ok/fail*/ - return retval; - - -} - - -int set_number_of_modules(int file_des) { - int n; - int arg[2], ret=0; - int retval=OK; - int dim, nm; - - sprintf(mess,"Can't set number of modules\n"); - - /* receive arguments */ - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket %d", n); - retval=GOODBYE; - } - if (retval==OK) { - dim=arg[0]; - nm=arg[1]; - - /* execute action */ -#ifdef VERBOSE - printf("Setting the number of modules in dimension %d to %d\n",dim,nm ); -#endif - - //if (nm!=GET_FLAG) { - if (dim!=X && nm!=GET_FLAG) { - retval=FAIL; - sprintf(mess,"Can't change module number in dimension %d\n",dim); - } else { - if (lockStatus==1 && differentClients==1 && nm!=GET_FLAG) { - sprintf(mess,"Detector locked by %s\n", lastClientIP); - retval=FAIL; - } else { - ret=setNMod(nm); - if (nModX==nm || nm==GET_FLAG) { - retval=OK; - if (differentClients==1) - retval=FORCE_UPDATE; - } else - retval=FAIL; - } - } - } - /*} else { - if (dim==Y) { - ret=nModY; - } else if (dim==X) { - ret=setNMod(-1); - } - } - */ - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&retval,sizeof(retval)); - if (retval!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&ret,sizeof(ret)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - /*return ok/fail*/ - return retval; - -} - - -int get_max_number_of_modules(int file_des) { - int n; - int ret; - int retval=OK; - enum dimension arg; - - sprintf(mess,"Can't get max number of modules\n"); - /* receive arguments */ - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - retval=FAIL; - } - /* execute action */ -#ifdef VERBOSE - printf("Getting the max number of modules in dimension %d \n",arg); -#endif - - - switch (arg) { - case X: - ret=getNModBoard(); - break; - case Y: - ret=NMAXMODY; - break; - default: - ret=FAIL; - retval=FAIL; - break; - } -#ifdef VERBOSE - printf("Max number of module in dimension %d is %d\n",arg,ret ); -#endif - - - - if (differentClients==1 && retval==OK) { - retval=FORCE_UPDATE; - } - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&retval,sizeof(retval)); - if (retval!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&ret,sizeof(ret)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - - - /*return ok/fail*/ - return retval; -} - - -//index 0 is in gate -//index 1 is in trigger -//index 2 is out gate -//index 3 is out trigger - -int set_external_signal_flag(int file_des) { - int n; - int arg[2]; - int ret=OK; - int signalindex; - enum externalSignalFlag flag, retval; - - sprintf(mess,"Can't set external signal flag\n"); - - /* receive arguments */ - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - retval=SIGNAL_OFF; - if (ret==OK) { - signalindex=arg[0]; - flag=arg[1]; - /* execute action */ - switch (flag) { - case GET_EXTERNAL_SIGNAL_FLAG: - retval=getExtSignal(signalindex); - break; - - default: - if (differentClients==0 || lockStatus==0) { - retval=setExtSignal(signalindex,flag); - } else { - if (lockStatus!=0) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n", lastClientIP); - } - } - - } - -#ifdef VERBOSE - printf("Setting external signal %d to flag %d\n",signalindex,flag ); - printf("Set to flag %d\n",retval); -#endif - - } else { - ret=FAIL; - } - - if (ret==OK && differentClients!=0) - ret=FORCE_UPDATE; - - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - - /*return ok/fail*/ - return ret; - -} - - -int set_external_communication_mode(int file_des) { - int n; - enum externalCommunicationMode arg, ret=GET_EXTERNAL_COMMUNICATION_MODE; - int retval=OK; - - sprintf(mess,"Can't set external communication mode\n"); - - - /* receive arguments */ - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - retval=FAIL; - } - /* - enum externalCommunicationMode{ - GET_EXTERNAL_COMMUNICATION_MODE, - AUTO, - TRIGGER_EXPOSURE_SERIES, - TRIGGER_EXPOSURE_BURST, - TRIGGER_READOUT, - TRIGGER_COINCIDENCE_WITH_INTERNAL_ENABLE, - GATE_FIX_NUMBER, - GATE_FIX_DURATION, - GATE_WITH_START_TRIGGER, - GATE_COINCIDENCE_WITH_INTERNAL_ENABLE - }; - */ - if (retval==OK) { - /* execute action */ - - ret=setTiming(arg); - - /* switch(arg) { */ - /* default: */ - /* sprintf(mess,"The meaning of single signals should be set\n"); */ - /* retval=FAIL; */ - /* } */ - - -#ifdef VERBOSE - printf("Setting external communication mode to %d\n", arg); -#endif - } else - ret=FAIL; - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&retval,sizeof(retval)); - if (retval!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&ret,sizeof(ret)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - /*return ok/fail*/ - return retval; -} - - - -int get_id(int file_des) { - // sends back 64 bits! - int64_t retval=-1; - int ret=OK; - int n=0; - enum idMode arg; - - sprintf(mess,"Can't return id\n"); - - /* receive arguments */ - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - -#ifdef VERBOSE - printf("Getting id %d\n", arg); -#endif - - switch (arg) { - case DETECTOR_SERIAL_NUMBER: - retval=getDetectorNumber(); - break; - case DETECTOR_FIRMWARE_VERSION: - retval = (getFirmwareVersion() & 0xFFFFFF); - break; - case DETECTOR_SOFTWARE_VERSION: - retval = (GITDATE & 0xFFFFFF); - break; - default: - printf("Required unknown id %d \n", arg); - ret=FAIL; - retval=FAIL; - break; - } - -#ifdef VERBOSE - printf("Id is %llx\n", retval); -#endif - - if (differentClients==1) - ret=FORCE_UPDATE; - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - /*return ok/fail*/ - return ret; - -} - -int digital_test(int file_des) { - - int retval; - int ret=OK; - int imod=-1; - int n=0; - int ibit=0; - int ow; - int ival; - enum digitalTestMode arg; - - sprintf(mess,"Can't send digital test\n"); - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - -#ifdef VERBOSE - printf("Digital test mode %d\n",arg ); -#endif - - switch (arg) { - case CHIP_TEST: - n = receiveDataOnly(file_des,&imod,sizeof(imod)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - retval=FAIL; - } -#ifdef VERBOSE - printf("of module %d\n", imod); -#endif - retval=0; -#ifdef MCB_FUNCS - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - break; - } - if (imod >= nModX) { - ret=FAIL; - sprintf(mess,"Module %d disabled\n",imod); - break; - } - if (testShiftIn(imod)) retval|=(1<<(ibit)); - ibit++; - if (testShiftOut(imod)) retval|=(1<<(ibit)); - ibit++; - if (testShiftStSel(imod)) retval|=(1<<(ibit)); - ibit++; - //if ( testDataInOut(0x123456, imod)) retval|=(1<<(ibit++)); - //if ( testExtPulse(imod)) retval|=(1<<(ibit++)); - // for (ow=0; ow<6; ow++) - // ow=1; - //#ifndef PICASSOD - for (ow=0; ow<5; ow++) { - //#endif - if (testDataInOutMux(imod, ow, 0x789abc)) retval|=(1<=getNModBoard()) - ret=FAIL; - if (imod<0) - imod=ALLMOD; - -#ifdef MCB_FUNCS - switch (ind) { - case V_DAC0 : - idac=VDAC0; - break; - case V_DAC1: - idac=VDAC1; - break; - case V_DAC2: - idac=VDAC2; - break; - case V_DAC3: - idac=VDAC3; - break; - case V_DAC4: - idac=VDAC4; - break; - case V_DAC5: - idac=VDAC5; - break; - case V_DAC6: - idac=VDAC6; - break; - case V_DAC7: - idac=VDAC7; - break; - case HV_POT: - idac=HIGH_VOLTAGE; - break; - - default: - printf("Unknown DAC index %d for Moench\n",ind); - sprintf(mess,"Unknown DAC index %d for Moench\n",ind); - ret=FAIL; - break; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else{ - if(idac==HIGH_VOLTAGE){ - retval[0]=initHighVoltageByModule(val,imod); - ret=FAIL; - if(retval[0]==-2) - strcpy(mess,"Invalid Voltage.Valid values are 0,90,110,120,150,180,200"); - else if(retval[0]==-3) - strcpy(mess,"Weird value read back or it has not been set yet\n"); - else - ret=OK; - }else{ - initDACbyIndexDACU(idac,val,imod,mV,retval); - ret=FAIL; - if(mV) - temp = retval[1]; - else - temp = retval[0]; - if ((abs(temp-val)<=3) || val==-1) { - ret=OK; -#ifdef VERBOSE - printf("DAC set to %d in dac units and %d mV\n", retval[0],retval[1]); -#endif - } - } - } - } - -#endif - - - if(ret==FAIL) - printf("Setting dac %d of module %d: wrote %d but read %d\n", ind, imod, val, temp); - else{ - if (differentClients) - ret=FORCE_UPDATE; - } - - - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - - /*return ok/fail*/ - return ret; - -} - - - -int get_adc(int file_des) { - //default: mod 0 - int retval; - int ret=OK; - int arg[2]; - enum dacIndex ind; - int imod; - int n; - int idac=0; - - sprintf(mess,"Can't read ADC\n"); - - - n = receiveDataOnly(file_des,arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - ind=arg[0]; - imod=arg[1]; - -#ifdef VERBOSE - printf("Getting ADC %d of module %d\n", ind, imod); -#endif - - if (imod>=getNModBoard() || imod<0) - ret=FAIL; - -#ifdef MCB_FUNCS - switch (ind) { - case TEMPERATURE_FPGA: - idac=TEMP_FPGA; - break; - case TEMPERATURE_ADC: - idac=TEMP_ADC; - break; - default: - printf("Unknown DAC index %d\n",ind); - sprintf(mess,"Unknown DAC index %d\n",ind); - ret=FAIL; - break; - } - - if (ret==OK) - retval=getTemperatureByModule(idac,imod); -#endif - -#ifdef VERBOSE - printf("ADC is %d V\n", retval); -#endif - if (ret==FAIL) { - printf("Getting adc %d of module %d failed\n", ind, imod); - } - - if (differentClients) - ret=FORCE_UPDATE; - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - /*return ok/fail*/ - return ret; - -} - -int set_channel(int file_des) { - int ret=OK; - sls_detector_channel myChan; - int retval; - int n; - - - sprintf(mess,"Can't set channel\n"); - -#ifdef VERBOSE - printf("Setting channel\n"); -#endif - ret=receiveChannel(file_des, &myChan); - if (ret>=0) - ret=OK; - else - ret=FAIL; -#ifdef VERBOSE - printf("channel number is %d, chip number is %d, module number is %d, register is %lld\n", myChan.chan,myChan.chip, myChan.module, myChan.reg); -#endif - - if (ret==OK) { - if (myChan.module>=getNModBoard()) - ret=FAIL; - if (myChan.chip>=NCHIP) - ret=FAIL; - if (myChan.chan>=NCHAN) - ret=FAIL; - if (myChan.module<0) - myChan.module=ALLMOD; - } - - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { -#ifdef MCB_FUNCS - retval=initChannelbyNumber(myChan); -#endif - } - } - /* Maybe this is done inside the initialization funcs */ - //copyChannel(detectorChans[myChan.module][myChan.chip]+(myChan.chan), &myChan); - - - - if (differentClients==1 && ret==OK) - ret=FORCE_UPDATE; - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - - /*return ok/fail*/ - return ret; - -} - - - - -int get_channel(int file_des) { - - int ret=OK; - sls_detector_channel retval; - - int arg[3]; - int ichan, ichip, imod; - int n; - - sprintf(mess,"Can't get channel\n"); - - - - n = receiveDataOnly(file_des,arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - ichan=arg[0]; - ichip=arg[1]; - imod=arg[2]; - - if (ret==OK) { - ret=FAIL; - if (imod>=0 && imod=0 && ichip=0 && ichan=0) - ret=OK; - else - ret=FAIL; -#ifdef VERBOSE - printf("chip number is %d, module number is %d, register is %d, nchan %d\n",myChip.chip, myChip.module, myChip.reg, myChip.nchan); -#endif - - if (ret==OK) { - if (myChip.module>=getNModBoard()) - ret=FAIL; - if (myChip.module<0) - myChip.module=ALLMOD; - if (myChip.chip>=NCHIP) - ret=FAIL; - } - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { -#ifdef MCB_FUNCS - retval=initChipbyNumber(myChip); -#endif - } - /* Maybe this is done inside the initialization funcs */ - //copyChip(detectorChips[myChip.module]+(myChip.chip), &myChip); - - if (differentClients && ret==OK) - ret=FORCE_UPDATE; - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - - return ret; -} - -int get_chip(int file_des) { - - - int ret=OK; - sls_detector_chip retval; - int arg[2]; - int ichip, imod; - int n; - - - - n = receiveDataOnly(file_des,arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - ichip=arg[0]; - imod=arg[1]; - if (ret==OK) { - ret=FAIL; - if (imod>=0 && imod=0 && ichip=0) - ret=OK; - else - ret=FAIL; - - -#ifdef VERBOSE - printf("module number is %d,register is %d, nchan %d, nchip %d, ndac %d, nadc %d, gain %f, offset %f\n",myModule.module, myModule.reg, myModule.nchan, myModule.nchip, myModule.ndac, myModule.nadc, myModule.gain,myModule.offset); -#endif - - if (ret==OK) { - if (myModule.module>=getNModBoard()) { - ret=FAIL; - printf("Module number is too large %d\n",myModule.module); - } - if (myModule.module<0) - myModule.module=ALLMOD; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { -#ifdef MCB_FUNCS - retval=initModulebyNumber(myModule); -#endif - } - } - - if (differentClients==1 && ret==OK) - ret=FORCE_UPDATE; - - /* Maybe this is done inside the initialization funcs */ - //copyChip(detectorChips[myChip.module]+(myChip.chip), &myChip); - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - free(myChip); - free(myChan); - free(myDac); - free(myAdc); - - // setDynamicRange(dr); always 16 commented out - - - return ret; -} - - - - -int get_module(int file_des) { - - - int ret=OK; - - - int arg; - int imod; - int n; - - - - sls_detector_module myModule; - int *myChip=malloc(NCHIP*sizeof(int)); - int *myChan=malloc(NCHIP*NCHAN*sizeof(int)); - int *myDac=malloc(NDAC*sizeof(int));/**dhanya*/ - int *myAdc=malloc(NADC*sizeof(int));/**dhanya*/ - - - if (myDac) - myModule.dacs=myDac; - else { - sprintf(mess,"could not allocate dacs\n"); - ret=FAIL; - } - if (myAdc) - myModule.adcs=myAdc; - else { - sprintf(mess,"could not allocate adcs\n"); - ret=FAIL; - } - if (myChip) - myModule.chipregs=myChip; - else { - sprintf(mess,"could not allocate chips\n"); - ret=FAIL; - } - if (myChan) - myModule.chanregs=myChan; - else { - sprintf(mess,"could not allocate chans\n"); - ret=FAIL; - } - - myModule.ndac=NDAC; - myModule.nchip=NCHIP; - myModule.nchan=NCHAN*NCHIP; - myModule.nadc=NADC; - - - - - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - imod=arg; - - if (ret==OK) { - ret=FAIL; - if (imod>=0 && imod-2) { - dataret=FAIL; - sprintf(mess,"no data and run stopped: %d frames left\n",(int)(getFrames()+2)); - printf("%s\n",mess); - } else { - dataret=FINISHED; - sprintf(mess,"acquisition successfully finished\n"); - printf("%s\n",mess); - } -#ifdef VERYVERBOSE - printf("%d %d %x %s\n",(int)(sizeof(mess)),(int)(strlen(mess)),(unsigned int)( mess),mess); -#endif - sendDataOnly(file_des,&dataret,sizeof(dataret)); - sendDataOnly(file_des,mess,sizeof(mess)); -#ifdef VERYVERBOSE - printf("message sent %s\n",mess); -#endif - printf("dataret %d\n",dataret); - return dataret; - } - } else { - nframes=0; - while(fifo_read_event()) { - nframes++; - } - dataretval=(char*)ram_values; - dataret=OK; -#ifdef VERBOSE - printf("sending data of %d frames\n",nframes); -#endif - for (iframes=0; iframes-2) { - dataret=FAIL; - sprintf(mess,"no data and run stopped: %d frames left\n",(int)(getFrames()+2)); - printf("%s\n",mess); - } else { - dataret=FINISHED; - sprintf(mess,"acquisition successfully finished\n"); - printf("%s\n",mess); - if (differentClients) - dataret=FORCE_UPDATE; - } -#ifdef VERBOSE - printf("Frames left %d\n",(int)(getFrames())); -#endif - sendDataOnly(file_des,&dataret,sizeof(dataret)); - sendDataOnly(file_des,mess,sizeof(mess)); - printf("dataret %d\n",dataret); - return dataret; - } - printf("dataret %d\n",dataret); - return dataret; -} - - - - - - - - -int read_all(int file_des) { - -while(read_frame(file_des)==OK) { - -#ifdef VERBOSE - printf("frame read\n"); -#endif - ; - } -#ifdef VERBOSE - printf("Frames finished\n"); -#endif - return OK; - - -} - -int start_and_read_all(int file_des) { - //int dataret=OK; -#ifdef VERBOSE - printf("Starting and reading all frames\n"); -#endif - - if (differentClients==1 && lockStatus==1) { - dataret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - sendDataOnly(file_des,&dataret,sizeof(dataret)); - sendDataOnly(file_des,mess,sizeof(mess)); - return dataret; - - } - - startStateMachine(); - - /* ret=startStateMachine(); - if (ret!=OK) { - sprintf(mess,"could not start state machine\n"); - sendDataOnly(file_des,&ret,sizeof(ret)); - sendDataOnly(file_des,mess,sizeof(mess)); - - #ifdef VERBOSE - printf("could not start state machine\n"); -#endif -} else {*/ - read_all(file_des); -#ifdef VERBOSE - printf("Frames finished\n"); -#endif - //} - - - return OK; - - -} - -int set_timer(int file_des) { - enum timerIndex ind; - int64_t tns; - int n; - int64_t retval; - int ret=OK; - - - sprintf(mess,"can't set timer\n"); - - n = receiveDataOnly(file_des,&ind,sizeof(ind)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - n = receiveDataOnly(file_des,&tns,sizeof(tns)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if (ret!=OK) { - printf(mess); - } - -#ifdef VERBOSE - printf("setting timer %d to %lld ns\n",ind,tns); -#endif - if (ret==OK) { - - if (differentClients==1 && lockStatus==1 && tns!=-1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - switch(ind) { - case FRAME_NUMBER: - retval=setFrames(tns); - break; - case ACQUISITION_TIME: - retval=setExposureTime(tns); - break; - case FRAME_PERIOD: - retval=setPeriod(tns); - break; - case DELAY_AFTER_TRIGGER: - retval=setDelay(tns); - break; - case GATES_NUMBER: - retval=setGates(tns); - break; - case PROBES_NUMBER: - sprintf(mess,"can't set timer for moench\n"); - ret=FAIL; - break; - case CYCLES_NUMBER: - retval=setTrains(tns); - break; - default: - ret=FAIL; - sprintf(mess,"timer index unknown %d\n",ind); - break; - } - } - } - if (ret!=OK) { - printf(mess); - if (differentClients) - ret=FORCE_UPDATE; - } - - if (ret!=OK) { - printf(mess); - printf("set timer failed\n"); - } else if (ind==FRAME_NUMBER) { - ret=allocateRAM(); - if (ret!=OK) - sprintf(mess, "could not allocate RAM for %lld frames\n", tns); - } - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { -#ifdef VERBOSE - printf("returning ok %d\n",(int)(sizeof(retval))); -#endif - - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - - return ret; - -} - - - - - - - - -int get_time_left(int file_des) { - - enum timerIndex ind; - int n; - int64_t retval; - int ret=OK; - - sprintf(mess,"can't get timer\n"); - n = receiveDataOnly(file_des,&ind,sizeof(ind)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - - //#ifdef VERBOSE - - printf("getting time left on timer %d \n",ind); - //#endif - - if (ret==OK) { - switch(ind) { - case FRAME_NUMBER: - printf("getting frames \n"); - retval=getFrames(); - break; - case ACQUISITION_TIME: - retval=getExposureTime(); - break; - case FRAME_PERIOD: - retval=getPeriod(); - break; - case DELAY_AFTER_TRIGGER: - retval=getDelay(); - break; - case GATES_NUMBER: - retval=getGates(); - break; - case PROBES_NUMBER: - retval=getProbes(); - break; - case CYCLES_NUMBER: - retval=getTrains(); - break; - case PROGRESS: - retval=getProgress(); - break; - case ACTUAL_TIME: - retval=getActualTime(); - break; - case MEASUREMENT_TIME: - retval=getMeasurementTime(); - break; - default: - ret=FAIL; - sprintf(mess,"timer index unknown %d\n",ind); - break; - } - } - - - if (ret!=OK) { - printf("get time left failed\n"); - } else if (differentClients) - ret=FORCE_UPDATE; - - //#ifdef VERBOSE - - printf("time left on timer %d is %lld\n",ind, retval); - //#endif - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=OK) { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } -#ifdef VERBOSE - - printf("data sent\n"); -#endif - - return ret; - - -} - -int set_dynamic_range(int file_des) { - - - - int dr; - int n; - int retval; - int ret=OK; - - - sprintf(mess,"can't set dynamic range\n"); - - - n = receiveDataOnly(file_des,&dr,sizeof(dr)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - - if (differentClients==1 && lockStatus==1 && dr>=0) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - retval=setDynamicRange(dr); - } - - //if (dr>=0 && retval!=dr) ret=FAIL; - if (ret!=OK) { - sprintf(mess,"set dynamic range failed\n"); - } else { - ret=allocateRAM(); - if (ret!=OK) - sprintf(mess,"Could not allocate RAM for the dynamic range selected\n"); - else if (differentClients) - ret=FORCE_UPDATE; - } - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} - -int set_roi(int file_des) { - - int i; - int ret=OK; - int nroi=-1; - int n=0; - int retvalsize=0; - ROI arg[MAX_ROIS]; - ROI* retval=0; - - strcpy(mess,"Could not set/get roi\n"); - - - n = receiveDataOnly(file_des,&nroi,sizeof(nroi)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if(nroi!=-1){ - n = receiveDataOnly(file_des,arg,nroi*sizeof(ROI)); - if (n != (nroi*sizeof(ROI))) { - sprintf(mess,"Received wrong number of bytes for ROI\n"); - ret=FAIL; - } -//#ifdef VERBOSE - /* - printf("Setting ROI to:"); - for( i=0;i=0) { - if (differentClients==1 && lockStatus==1 && val>=0) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - switch (arg) { - case CLOCK_DIVIDER: - retval=setClockDivider(val); - break; - - case PHASE_SHIFT: - retval=phaseStep(val); - break; - - case OVERSAMPLING: - retval=setOversampling(val); - break; - - default: - ret=FAIL; - sprintf(mess,"Unknown speed parameter %d",arg); - } - } - } - - - switch (arg) { - case CLOCK_DIVIDER: - retval=getClockDivider(); - break; - - case PHASE_SHIFT: - retval=phaseStep(-1); - break; - - case OVERSAMPLING: - retval=setOversampling(-1); - break; - - default: - ret=FAIL; - sprintf(mess,"Unknown speed parameter %d",arg); - } - } - - - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} - - - -int set_readout_flags(int file_des) { - - enum readOutFlags arg; - int n; - int ret=FAIL; - - - receiveDataOnly(file_des,&arg,sizeof(arg)); - - sprintf(mess,"can't set readout flags for moench\n"); - - sendDataOnly(file_des,&ret,sizeof(ret)); - sendDataOnly(file_des,mess,sizeof(mess)); - - return ret; -} - - - - - -int execute_trimming(int file_des) { - - int arg[3]; - int ret=FAIL; - enum trimMode mode; - - sprintf(mess,"can't set execute trimming for moench\n"); - - receiveDataOnly(file_des,&mode,sizeof(mode)); - receiveDataOnly(file_des,arg,sizeof(arg)); - - - sendDataOnly(file_des,&ret,sizeof(ret)); - sendDataOnly(file_des,mess,sizeof(mess)); - - return ret; -} - - -int lock_server(int file_des) { - - - int n; - int ret=OK; - - int lock; - n = receiveDataOnly(file_des,&lock,sizeof(lock)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (lock)\n"); - ret=FAIL; - } - if (lock>=0) { - if (lockStatus==0 || strcmp(lastClientIP,thisClientIP)==0 || strcmp(lastClientIP,"none")==0) - lockStatus=lock; - else { - ret=FAIL; - sprintf(mess,"Server already locked by %s\n", lastClientIP); - } - } - if (differentClients && ret==OK) - ret=FORCE_UPDATE; - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else - n = sendDataOnly(file_des,&lockStatus,sizeof(lockStatus)); - - return ret; - -} - -int set_port(int file_des) { - int n; - int ret=OK; - int sd=-1; - - enum portType p_type; /** data? control? stop? Unused! */ - int p_number; /** new port number */ - - n = receiveDataOnly(file_des,&p_type,sizeof(p_type)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (ptype)\n"); - ret=FAIL; - } - - n = receiveDataOnly(file_des,&p_number,sizeof(p_number)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - printf("Error reading from socket (pnum)\n"); - ret=FAIL; - } - if (differentClients==1 && lockStatus==1 ) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - if (p_number<1024) { - sprintf(mess,"Too low port number %d\n", p_number); - printf("\n"); - ret=FAIL; - } - - printf("set port %d to %d\n",p_type, p_number); - - sd=bindSocket(p_number); - } - if (sd>=0) { - ret=OK; - if (differentClients ) - ret=FORCE_UPDATE; - } else { - ret=FAIL; - sprintf(mess,"Could not bind port %d\n", p_number); - printf("Could not bind port %d\n", p_number); - if (sd==-10) { - sprintf(mess,"Port %d already set\n", p_number); - printf("Port %d already set\n", p_number); - - } - } - - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&p_number,sizeof(p_number)); - closeConnection(file_des); - exitServer(sockfd); - sockfd=sd; - - } - - return ret; - -} - -int get_last_client_ip(int file_des) { - int ret=OK; - int n; - if (differentClients ) - ret=FORCE_UPDATE; - n = sendDataOnly(file_des,&ret,sizeof(ret)); - n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); - - return ret; - -} - - -int send_update(int file_des) { - - int ret=OK; - enum detectorSettings t; - int n;//int thr, n; - //int it; - int64_t retval, tns=-1; - n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); - n = sendDataOnly(file_des,&nModX,sizeof(nModX)); - n = sendDataOnly(file_des,&nModY,sizeof(nModY)); - n = sendDataOnly(file_des,&dynamicRange,sizeof(dynamicRange)); - n = sendDataOnly(file_des,&dataBytes,sizeof(dataBytes)); - t=setSettings(GET_SETTINGS,-1); - n = sendDataOnly(file_des,&t,sizeof(t)); -/* thr=getThresholdEnergy(); - n = sendDataOnly(file_des,&thr,sizeof(thr));*/ - retval=setFrames(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); - retval=setExposureTime(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); - retval=setPeriod(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); - retval=setDelay(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); - retval=setGates(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); -/* retval=setProbes(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t));*/ - retval=setTrains(tns); - n = sendDataOnly(file_des,&retval,sizeof(int64_t)); - - if (lockStatus==0) { - strcpy(lastClientIP,thisClientIP); - } - - return ret; - - -} -int update_client(int file_des) { - - int ret=OK; - - sendDataOnly(file_des,&ret,sizeof(ret)); - return send_update(file_des); - - - -} - - -int configure_mac(int file_des) { - - int ret=OK; - char arg[6][50]; - int n; - - int imod=0;//should be in future sent from client as -1, arg[2] - int ipad; - long long int imacadd; - long long int idetectormacadd; - int udpport; - int detipad; - int retval=-100; - - sprintf(mess,"Can't configure MAC\n"); - - - n = receiveDataOnly(file_des,arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - sscanf(arg[0], "%x", &ipad); - sscanf(arg[1], "%llx", &imacadd); - sscanf(arg[2], "%x", &udpport); - sscanf(arg[3], "%llx", &idetectormacadd); - sscanf(arg[4], "%x", &detipad); -//arg[5] is for eiger -#ifdef VERBOSE - int i; - printf("\ndigital_test_bit in server %d\t",digitalTestBit); - printf("\nipadd %x\t",ipad); - printf("destination ip is %d.%d.%d.%d = 0x%x \n",(ipad>>24)&0xff,(ipad>>16)&0xff,(ipad>>8)&0xff,(ipad)&0xff,ipad); - printf("macad:%llx\n",imacadd); - for (i=0;i<6;i++) - printf("mac adress %d is 0x%x \n",6-i,(unsigned int)(((imacadd>>(8*i))&0xFF))); - printf("udp port:0x%x\n",udpport); - printf("detector macad:%llx\n",idetectormacadd); - for (i=0;i<6;i++) - printf("detector mac adress %d is 0x%x \n",6-i,(unsigned int)(((idetectormacadd>>(8*i))&0xFF))); - printf("detipad %x\n",detipad); - printf("\n"); -#endif - - - - if (imod>=getNModBoard()) - ret=FAIL; - if (imod<0) - imod=ALLMOD; - - //#ifdef VERBOSE - printf("Configuring MAC of module %d at port %x\n", imod, udpport); - //#endif -#ifdef MCB_FUNCS - if (ret==OK){ - if(runBusy()){ - ret=stopStateMachine(); - if(ret==FAIL) - strcpy(mess,"could not stop detector acquisition to configure mac"); - } - - if(ret==OK) - configureMAC(ipad,imacadd,idetectormacadd,detipad,digitalTestBit,udpport); - retval=getAdcConfigured(); - } -#endif - if (ret==FAIL) - printf("configuring MAC of mod %d failed\n", imod); - else - printf("Configuremac successful of mod %d and adc %d\n",imod,retval); - - if (differentClients) - ret=FORCE_UPDATE; - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) - n += sendDataOnly(file_des,mess,sizeof(mess)); - else - n += sendDataOnly(file_des,&retval,sizeof(retval)); - /*return ok/fail*/ - return ret; - -} - - - -int load_image(int file_des) { - int retval; - int ret=OK; - int n; - enum imageType index; - short int ImageVals[NCHAN*NCHIP]; - - sprintf(mess,"Loading image failed\n"); - - n = receiveDataOnly(file_des,&index,sizeof(index)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - n = receiveDataOnly(file_des,ImageVals,dataBytes); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - switch (index) { - case DARK_IMAGE : -#ifdef VERBOSE - printf("Loading Dark image\n"); -#endif - break; - case GAIN_IMAGE : -#ifdef VERBOSE - printf("Loading Gain image\n"); -#endif - break; - default: - printf("Unknown index %d\n",index); - sprintf(mess,"Unknown index %d\n",index); - ret=FAIL; - break; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else{ - retval=loadImage(index,ImageVals); - if (retval==-1) - ret = FAIL; - } - } - - if(ret==OK){ - if (differentClients) - ret=FORCE_UPDATE; - } - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - /*return ok/fail*/ - return ret; -} - - - -int set_master(int file_des) { - - enum masterFlags retval=GET_MASTER; - enum masterFlags arg; - int n; - int ret=OK; - // int regret=OK; - - - sprintf(mess,"can't set master flags\n"); - - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - - if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - retval=setMaster(arg); - - } - if (retval==GET_MASTER) { - ret=FAIL; - } - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} - - - - - - -int set_synchronization(int file_des) { - - enum synchronizationMode retval=GET_MASTER; - enum synchronizationMode arg; - int n; - int ret=OK; - //int regret=OK; - - - sprintf(mess,"can't set synchronization mode\n"); - - - n = receiveDataOnly(file_des,&arg,sizeof(arg)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - - if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else { - //ret=setStoreInRAM(0); - // initChipWithProbes(0,0,0, ALLMOD); - retval=setSynchronization(arg); - } - if (retval==GET_SYNCHRONIZATION_MODE) { - ret=FAIL; - } - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) { - n = sendDataOnly(file_des,mess,sizeof(mess)); - } else { - n = sendDataOnly(file_des,&retval,sizeof(retval)); - } - return ret; -} - - - - - - -int read_counter_block(int file_des) { - - int ret=OK; - int n; - int startACQ; - //char *retval=NULL; - short int CounterVals[NCHAN*NCHIP]; - - sprintf(mess,"Read counter block failed\n"); - - n = receiveDataOnly(file_des,&startACQ,sizeof(startACQ)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else{ - ret=readCounterBlock(startACQ,CounterVals); -#ifdef VERBOSE - int i; - for(i=0;i<6;i++) - printf("%d:%d\t",i,CounterVals[i]); -#endif - } - } - - if(ret!=FAIL){ - if (differentClients) - ret=FORCE_UPDATE; - } - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret!=FAIL) { - /* send return argument */ - n += sendDataOnly(file_des,CounterVals,dataBytes);//1280*2 - } else { - n += sendDataOnly(file_des,mess,sizeof(mess)); - } - - /*return ok/fail*/ - return ret; -} - - - - - -int reset_counter_block(int file_des) { - - int ret=OK; - int n; - int startACQ; - - sprintf(mess,"Reset counter block failed\n"); - - n = receiveDataOnly(file_des,&startACQ,sizeof(startACQ)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else - ret=resetCounterBlock(startACQ); - } - - if(ret==OK){ - if (differentClients) - ret=FORCE_UPDATE; - } - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) - n += sendDataOnly(file_des,mess,sizeof(mess)); - - /*return ok/fail*/ - return ret; -} - - - - - - -int start_receiver(int file_des) { - int ret=OK; - int n=0; - strcpy(mess,"Could not start receiver\n"); - - /* execute action if the arguments correctly arrived*/ -#ifdef MCB_FUNCS - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Detector locked by %s\n", lastClientIP); - ret=FAIL; - } - else - ret = startReceiver(1); - -#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - - -int stop_receiver(int file_des) { - int ret=OK; - int n=0; - - strcpy(mess,"Could not stop receiver\n"); - - /* execute action if the arguments correctly arrived*/ -#ifdef MCB_FUNCS - if (lockStatus==1 && differentClients==1){//necessary??? - sprintf(mess,"Detector locked by %s\n", lastClientIP); - ret=FAIL; - } - else - ret=startReceiver(0); - -#endif - - - if(ret==OK && differentClients){ - printf("Force update\n"); - ret=FORCE_UPDATE; - } - - /* send answer */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if(ret==FAIL) - n = sendDataOnly(file_des,mess,sizeof(mess)); - /*return ok/fail*/ - return ret; -} - - - - - -int calibrate_pedestal(int file_des){ - - int ret=OK; - int retval=-1; - int n; - int frames; - - sprintf(mess,"Could not calibrate pedestal\n"); - - n = receiveDataOnly(file_des,&frames,sizeof(frames)); - if (n < 0) { - sprintf(mess,"Error reading from socket\n"); - ret=FAIL; - } - - if (ret==OK) { - if (differentClients==1 && lockStatus==1) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } else - ret=calibratePedestal(frames); - } - - if(ret==OK){ - if (differentClients) - ret=FORCE_UPDATE; - } - - /* send answer */ - /* send OK/failed */ - n = sendDataOnly(file_des,&ret,sizeof(ret)); - if (ret==FAIL) - n += sendDataOnly(file_des,mess,sizeof(mess)); - else - n += sendDataOnly(file_des,&retval,sizeof(retval)); - - /*return ok/fail*/ - return ret; -} - - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.h deleted file mode 100755 index 890c7452d..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/server_funcs.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef SERVER_FUNCS_H -#define SERVER_FUNCS_H - - -#include "sls_detector_defs.h" - - -#include -/* -#include -#include -#include -*/ -#include "communication_funcs.h" - - - - -#define GOODBYE -200 - -int sockfd; - -int function_table(); - -int decode_function(int); -int init_detector(int); - -int M_nofunc(int); -int exit_server(int); - - - - -// General purpose functions -int get_detector_type(int); -int set_number_of_modules(int); -int get_max_number_of_modules(int); - - -int exec_command(int); -int set_external_signal_flag(int); -int set_external_communication_mode(int); -int get_id(int); -int digital_test(int); -int write_register(int); -int read_register(int); -int set_dac(int); -int get_adc(int); -int set_channel(int); -int set_chip(int); -int set_module(int); -int get_channel(int); -int get_chip(int); -int get_module(int); - -int get_threshold_energy(int); -int set_threshold_energy(int); -int set_settings(int); -int start_acquisition(int); -int stop_acquisition(int); -int start_readout(int); -int get_run_status(int); -int read_frame(int); -int read_all(int); -int start_and_read_all(int); -int set_timer(int); -int get_time_left(int); -int set_dynamic_range(int); -int set_roi(int); -int get_roi(int); -int set_speed(int); -void prepareADC(void); -int set_readout_flags(int); -int execute_trimming(int); -int lock_server(int); -int set_port(int); -int get_last_client_ip(int); -int set_master(int); -int set_synchronization(int); - -int update_client(int); -int send_update(int); -int configure_mac(int); - -int load_image(int); -int read_counter_block(int); -int reset_counter_block(int); - -int start_receiver(int); -int stop_receiver(int); - - -int calibrate_pedestal(int); - -int set_roi(int); - -#endif diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.c deleted file mode 100755 index 4504cfe05..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "sharedmemory.h" - -struct statusdata *stdata; - -int inism(int clsv) { - -static int scansmid; - - if (clsv==SMSV) { - if ( (scansmid=shmget(SMKEY,1024,IPC_CREAT | 0666 ))==-1 ) { - return -1; - } - if ( (stdata=shmat(scansmid,NULL,0))==(void*)-1) { - return -2; - } - } - - if (clsv==SMCL) { - if ( (scansmid=shmget(SMKEY,0,0) )==-1 ) { - return -3; - } - if ( (stdata=shmat(scansmid,NULL,0))==(void*)-1) { - return -4; - } - } - return 1; -} - -void write_status_sm(char *status) { - strcpy(stdata->status,status); -} - -void write_stop_sm(int v) { - stdata->stop=v; -} - -void write_runnumber_sm(int v) { - stdata->runnumber=v; -} diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.h deleted file mode 100755 index bdbddf719..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sharedmemory.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef SM -#define SM - -#include "sls_detector_defs.h" - -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include - - -#include - -#include -#include - -/* key for shared memory */ -#define SMKEY 10001 - -#define SMSV 1 -#define SMCL 2 - - -struct statusdata { - int runnumber; - int stop; - char status[20]; -} ; - - -/* for shared memory */ - -int inism(int clsv); -void write_status_sm(char *status); -void write_stop_sm(int v); -void write_runnumber_sm(int v); - -#endif diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_defs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_defs.h deleted file mode 120000 index c5062e03f..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_defs.h +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/sls_detector_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_funcs.h deleted file mode 120000 index 844b67129..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_detector_funcs.h +++ /dev/null @@ -1 +0,0 @@ -../commonFiles/sls_detector_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_defs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_defs.h deleted file mode 120000 index 1de31caf5..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_defs.h +++ /dev/null @@ -1 +0,0 @@ -../../slsReceiverSoftware/include/sls_receiver_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_funcs.h deleted file mode 120000 index c2ea4ded9..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/sls_receiver_funcs.h +++ /dev/null @@ -1 +0,0 @@ -../../slsReceiverSoftware/include/sls_receiver_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/stop_server.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/stop_server.c deleted file mode 100755 index e3c8ff7e1..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/stop_server.c +++ /dev/null @@ -1,46 +0,0 @@ -/* A simple server in the internet domain using TCP - The port number is passed as an argument */ - - -#include "sls_detector_defs.h" - - -#include "communication_funcs.h" -#include "firmware_funcs.h" - - -int sockfd; - -int main(int argc, char *argv[]) -{ - int portno; - int retval=0; - - portno = DEFAULT_PORTNO; - - - bindSocket(portno); - if (getServerError()) - return -1; - - - - /* waits for connection */ - while(retval!=GOODBYE) { -#ifdef VERBOSE - printf("\n"); -#endif -#ifdef VERY_VERBOSE - printf("Stop server: waiting for client call\n"); -#endif - acceptConnection(); - retval=stopStateMachine(); - closeConnection(); - } - - exitServer(); - printf("Goodbye!\n"); - - return 0; -} - diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.c b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.c deleted file mode 100755 index 9a28b9b4a..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.c +++ /dev/null @@ -1,749 +0,0 @@ -#ifndef PICASSOD -#include "server_defs.h" -#else -#include "picasso_defs.h" -#endif -#include "trimming_funcs.h" -#include "mcb_funcs.h" -#include "firmware_funcs.h" -#include - - - -extern int nModX; -//extern int *values; - -extern const int nChans; -extern const int nChips; -extern const int nDacs; -extern const int nAdcs; - - -int trim_fixed_settings(int countlim, int par2, int im) -{ - - int retval=OK; -#ifdef VERBOSE - printf("Trimming with fixed settings\n"); -#endif -#ifdef VIRTUAL - return OK; -#endif - - if (par2<=0) - retval=trim_with_level(countlim, im); - else - retval=trim_with_median(countlim,im); - - - return retval; -} - - -int trim_with_noise(int countlim, int nsigma, int im) -{ - - - int retval=OK, retval1=OK, retval2=OK; -#ifdef VERBOSE - printf("Trimming using noise\n"); -#endif -#ifdef VIRTUAL - return OK; -#endif - - /* threshold scan */ - -#ifdef VERBOSE - printf("chosing vthresh and vtrim....."); -#endif - retval1=choose_vthresh_and_vtrim(countlim,nsigma, im); - -#ifdef VERBOSE - printf("trimming with noise.....\n"); -#endif - retval2=trim_with_level(countlim, im); - -#ifdef DEBUGOUT - printf("done\n"); -#endif - if (retval1==OK && retval2==OK) - retval=OK; - else - retval=FAIL; - - return retval; - -} - -int trim_with_beam(int countlim, int nsigma, int im) //rpc -{ - - - int retval=OK, retval1=OK, retval2=OK; - - printf("Trimming using beam\n"); - //return OK; -#ifdef VIRTUAL - printf("Trimming using beam\n"); - return OK; -#endif - /* threshold scan */ -#ifdef DEBUGOUT - printf("chosing vthresh and vtrim....."); -#endif - - retval1=choose_vthresh_and_vtrim(countlim,nsigma,im); - retval2=trim_with_median(TRIM_DR, im); - -#ifdef DEBUGOUT - printf("done\n"); -#endif - - if (retval1==OK && retval2==OK) - retval=OK; - else - retval=FAIL; - - return retval; - -} - - -int trim_improve(int maxit, int par2, int im) //rpc -{ - - int retval=OK, retval1=OK, retval2=OK; - - -#ifdef VERBOSE - printf("Improve the trimming\n"); -#endif -#ifdef VIRTUAL - return OK; -#endif - - - if (par2!=0 && im==ALLMOD) - retval1=choose_vthresh(); - - retval2=trim_with_median(2*maxit+1, im); -#ifdef DEBUGOUT - printf("done\n"); -#endif - if (retval1==OK && retval2==OK) - retval=OK; - else - retval=FAIL; - - return retval; - -} - -int calcthr_from_vcal(int vcal) { - int thrmin; - //thrmin=140+3*vcal/5; - thrmin=180+3*vcal/5; - return thrmin; -} - -int calccal_from_vthr(int vthr) { - int vcal; - vcal=5*(vthr-140)/3; - return vcal; -} - -int choose_vthresh_and_vtrim(int countlim, int nsigma, int im) { - int retval=OK; -#ifdef MCB_FUNCS - int modma, modmi, nm; - int thr, thrstep=5, nthr=31; - - int *fifodata; - - double vthreshmean, vthreshSTDev; - int *thrmi, *thrma; - double c; - double b=BVTRIM; - double a=AVTRIM; - int *trim; - int ich, imod, ichan; - int nvalid=0; - u_int32_t *scan; - int ithr; - sls_detector_channel myChan; - - - - setFrames(1); - // setNMod(getNModBoard()); - - if (im==ALLMOD){ - modmi=0; - modma=nModX; - } else { - modmi=im; - modma=im+1; - } - nm=modma-modmi; - - trim=malloc(sizeof(int)*nChans*nChips*nModX); - thrmi=malloc(sizeof(int)*nModX); - thrma=malloc(sizeof(int)*nModX); - - - for (ich=0; ichcountlim && trim[ich]==-1) { -//commented out by dhanya trim[ich]=getDACbyIndexDACU(VTHRESH,imod); -#ifdef VERBOSE - // printf("yes: %d %d %d\n",ich,ithr,scan[ich]); -#endif - } -#ifdef VERBOSE - /* else { - printf("no: %d %d %d\n",ich,ithr,scan[ich]); - }*/ -#endif - } - } - free(scan); - } - - for (imod=modmi; imodthrmi[imod] && trim[ich]0) { - vthreshmean=vthreshmean/nvalid; - //commented out by dhanya vthreshSTDev=sqrt((vthreshSTDev/nvalid)-vthreshmean*vthreshmean); - } else { - vthreshmean=thrmi[imod]; - vthreshSTDev=nthr*thrstep; - printf("No valid channel for module %d\n",imod); - retval=FAIL; - } - -#ifdef DEBUGOUT - printf("module= %d nvalid = %d mean=%f RMS=%f\n",imod, nvalid, vthreshmean,vthreshSTDev); -#endif - // *vthresh=round(vthreshmean-nsigma*vthreshSTDev); - thr=(int)(vthreshmean-nsigma*vthreshSTDev); - if (thr<0 || thr>(DAC_DR-1)) { - thr=thrmi[imod]/2; - printf("Can't find correct threshold for module %d\n",imod); - retval=FAIL; - } -//commented out by dhanya initDACbyIndexDACU(VTHRESH,thr,imod); -#ifdef VERBOSE - printf("vthresh=%d \n",thr); -#endif - c=CVTRIM-2.*nsigma*vthreshSTDev/63.; - //commented out by dhanya thr=(int)((-b-sqrt(b*b-4*a*c))/(2*a)); - if (thr<500 || thr>(DAC_DR-1)) { - thr=750; - printf("Can't find correct trimbit size for module %d\n",imod); - retval=FAIL; - } - - //commented out by dhanya initDACbyIndexDACU(VTRIM,thr,imod); - -#ifdef VERBOSE - printf("vtrim=%d \n",thr); -#endif - - } - free(trim); - free(thrmi); - free(thrma); - -#endif - return retval; -} - - - - - -int trim_with_level(int countlim, int im) { - int ich, itrim, ichan, ichip, imod; - u_int32_t *scan; - int *inttrim; - int modma, modmi, nm; - int retval=OK; - int *fifodata; - sls_detector_channel myChan; - printf("trimming module number %d", im); - - -#ifdef MCB_FUNCS - setFrames(1); - // setNMod(getNModBoard()); - - if (im==ALLMOD){ - modmi=0; - modma=nModX; - } else { - modmi=im; - modma=im+1; - } - nm=modma-modmi; - - inttrim=malloc(sizeof(int)*nChips*nChans*nModX); - printf("countlim=%d\n",countlim); - for (ich=0; ichcountlim){ - inttrim[ich]=itrim; - if (scan[ich]>2*countlim && itrim>0) { - //if (scan[ich]>2*countlim || itrim==0) { - inttrim[ich]=itrim-1; - } -#ifdef VERBOSE - printf("Channel %d trimbit %d counted %d (%08x) countlim %d\n",ich,itrim,scan[ich],fifodata[ich],countlim); -#endif - } - } -#ifdef VERBOSE - /* else - printf("Channel %d trimbit %d counted %d countlim %d\n",ich,itrim,scan[ich],countlim);*/ -#endif - } - } - free(scan); - } - - for (imod=modmi; imod0) - direction[ichan]=1; - else - direction[ichan]=-1; - } - //commented out by dhanya vthresh=getDACbyIndexDACU(VTHRESH,imod); - if ( direction[ichan]!=-3) { - if (abs(diff)>abs(olddiff[ichan])) { - vthresh=vthresh-direction[ichan]; - if (vthresh>(DAC_DR-1)) { - vthresh=(DAC_DR-1); - printf("can't equalize threshold for module %d\n", ichan); - retval=FAIL; - } - if (vthresh<0) { - vthresh=0; - printf("can't equalize threshold for module %d\n", ichan); - retval=FAIL; - } - direction[ichan]=-3; - } else { - vthresh=vthresh+direction[ichan]; - olddiff[ichan]=diff; - change_flag=1; - } -//commented out by dhanya initDACbyIndex(VTHRESH,vthresh, ichan); - } - } - iteration++; - free(scan); - free(scan1); - } -#endif - return retval; -} - - - - - -int trim_with_median(int stop, int im) { - - - int retval=OK; - -#ifdef MCB_FUNCS - int ichan, imod, ichip, ich; - u_int32_t *scan, *scan1; - int *olddiff, *direction; - int med, diff; - int change_flag=1; - int iteration=0; - int me[nModX], me1[nModX]; - int modma, modmi, nm; - int trim; - int *fifodata; - - setFrames(1); - // setNMod(getNModBoard()); - - if (im==ALLMOD){ - modmi=0; - modma=nModX; - } else { - modmi=im; - modma=im+1; - } - nm=modma-modmi; - - olddiff=malloc(4*nModX*nChips*nChans); - direction=malloc(4*nModX*nChips*nChans); - for (imod=modmi; imod0) { - direction[ichan]=1; - } else { - direction[ichan]=-1; - } - } - if ( direction[ichan]!=-3) { - if (abs(diff)>abs(olddiff[ichan])) { - trim=getTrimbit(imod,ichip,ich)+direction[ichan]; - printf("%d old diff %d < new diff %d %d - trimbit %d\n",ichan, olddiff[ichan], diff, direction[ichan], trim); - direction[ichan]=-3; - } else { - trim=getTrimbit(imod,ichip,ich)-direction[ichan]; - olddiff[ichan]=diff; - change_flag=1; - } - if (trim>TRIM_DR) { - trim=63; - printf("can't trim channel %d chip %d module %d to trim %d\n",ich, ichip, imod, trim); - retval=FAIL; - } - if (trim<0) { - printf("can't trim channel %d chip %d module %d to trim %d\n",ich, ichip, imod, trim); - trim=0; - retval=FAIL; - } - initChannel(trim,0,0,1,0,0,imod); - } - } - } - } - iteration++; - free(scan); - free(scan1); - } - free(olddiff); - free(direction); -#endif - return retval; -} diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.h b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.h deleted file mode 100755 index 42ecea24a..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/trimming_funcs.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef TRIMMING_FUNCS_H -#define TRIMMING_FUNCS_H - -#include "sls_detector_defs.h" - -int trim_fixed_settings(int countlim, int par2, int imod); -int trim_with_noise(int countlim, int nsigma, int imod); -int trim_with_beam(int countlim, int nsigma, int imod); -int trim_improve(int maxit, int par2, int imod); -int calcthr_from_vcal(int vcal); -int calccal_from_vthr(int vthr); -int choose_vthresh_and_vtrim(int countlim, int nsigma, int imod); - -int choose_vthresh(); -int trim_with_level(int countlim, int imod); -int trim_with_median(int stop, int imod); -int calcthr_from_vcal(int vcal); -int calccal_from_vthr(int vthr); - -#endif diff --git a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/updateGitVersion.sh b/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/updateGitVersion.sh deleted file mode 100755 index cea04b2de..000000000 --- a/slsDetectorSoftware/slsDetectorServers/moenchDetectorServer/updateGitVersion.sh +++ /dev/null @@ -1,31 +0,0 @@ -SERVER=moenchDetectorServer -MAINDIR=slsDetectorsPackage -SPECDIR=slsDetectorSoftware/$SERVER -TMPFILE=gitInfoMoenchTmp.h -INCLFILE=gitInfoMoench.h - - -#evaluate the variables -EVALFILE=../../evalVersionVariables.sh -source $EVALFILE - - -#get modified date -#RDATE1='git log --pretty=format:"%ci" -1' -RDATE1="find . -type f -exec stat --format '%Y :%y %n' '{}' \; | sort -nr | cut -d: -f2- | egrep -v 'gitInfo|.git|updateGitVersion|.o' | head -n 1" -RDATE=`eval $RDATE1` -NEWDATE=$(sed "s/-//g" <<< $RDATE | awk '{print $1;}') -NEWDATE=${NEWDATE/#/0x} - - -#get old date from INCLFILE -OLDDATE=$(more $INCLFILE | grep '#define GITDATE' | awk '{print $3}') - - -#update INCLFILE if changes -if [ "$OLDDATE" != "$NEWDATE" ]; then - echo Path: ${MAINDIR}/${SPECDIR} $'\n'URL: ${GITREPO} $'\n'Repository Root: ${GITREPO} $'\n'Repsitory UUID: ${REPUID} $'\n'Revision: ${FOLDERREV} $'\n'Branch: ${BRANCH} $'\n'Last Changed Author: ${AUTH1}_${AUTH2} $'\n'Last Changed Rev: ${REV} $'\n'Last Changed Date: ${RDATE} > gitInfo.txt - cd ../../ - ./genVersionHeader.sh $SPECDIR/gitInfo.txt $SPECDIR/$TMPFILE $SPECDIR/$INCLFILE - cd $WD -fi \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h index b10be6845..262b9f71c 100644 --- a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h @@ -29,24 +29,22 @@ u_int32_t testFpga(void); int testBus(void); #endif -#if defined(MYTHEND) || defined(JUNGFRAUD) || defined(MYTHEN3D) -int moduleTest( enum digitalTestMode arg, int imod); +#ifdef MYTHEN3D +int moduleTest( enum digitalTestMode arg); #endif -#if defined(MYTHEND) || defined(JUNGFRAUD) +#ifdef JUNGFRAUD int detectorTest( enum digitalTestMode arg); #endif // Ids int64_t getDetectorId(enum idMode arg); u_int64_t getFirmwareVersion(); -#ifdef MYTHEND -int64_t getModuleId(enum idMode arg, int imod); -#elif JUNGFRAUD +#ifdef JUNGFRAUD u_int64_t getFirmwareAPIVersion(); u_int16_t getHardwareVersionNumber(); u_int16_t getHardwareSerialNumber(); #endif -#ifndef MYTHEN3D +#if !defined(MYTHEN3D) || !defined(EIGERD) u_int32_t getDetectorNumber(); #endif u_int64_t getDetectorMAC(); @@ -96,9 +94,7 @@ int getPhase(); void configureASICTimer(); #endif -// parameters - nmod, dr, roi -int setNMod(int nm, enum dimension dim); // mythen specific, but for detector compatibility as a get -int getNModBoard(enum dimension arg); // mythen specific, but for detector compatibility as a get +// parameters - dr, roi int setDynamicRange(int dr); #ifdef GOTTHARD int setROI(int n, ROI arg[], int *retvalsize, int *ret); @@ -106,12 +102,9 @@ int setROI(int n, ROI arg[], int *retvalsize, int *ret); // parameters - readout int setSpeed(enum speedVariable arg, int val); -#if defined(EIGERD) || defined(MYTHEND) +#ifdef EIGERD enum readOutFlags setReadOutFlags(enum readOutFlags val); #endif -#ifdef MYTHEND -int executeTrimming(enum trimMode mode, int par1, int par2, int imod); -#endif // parameters - timer #ifdef JUNGFRAUD @@ -121,27 +114,22 @@ int64_t setTimer(enum timerIndex ind, int64_t val); int64_t getTimeLeft(enum timerIndex ind); -// parameters - channel, chip, module, settings -#ifdef MYTHEND -int setChannel(sls_detector_channel myChan); -int getChannel(sls_detector_channel *myChan); -int setChip(sls_detector_chip myChip); -int getChip(sls_detector_chip *myChip); -#endif +// parameters - module, settings + #ifdef EIGERD int setModule(sls_detector_module myMod, int delay); #else int setModule(sls_detector_module myMod); #endif int getModule(sls_detector_module *myMod); -enum detectorSettings setSettings(enum detectorSettings sett, int imod); +enum detectorSettings setSettings(enum detectorSettings sett); enum detectorSettings getSettings(); // parameters - threshold -#if defined(MYTHEND) || defined(EIGERD) -int getThresholdEnergy(int imod); -int setThresholdEnergy(int ev, int imod); +#ifdef EIGERD +int getThresholdEnergy(); +int setThresholdEnergy(int ev); #endif // parameters - dac, adc, hv @@ -161,34 +149,30 @@ int dacToPower(int value, int chip); extern void setAdc(int addr, int val); // AD9257.h #endif -void setDAC(enum DACINDEX ind, int val, int imod, int mV, int retval[]); +void setDAC(enum DACINDEX ind, int val, int mV, int retval[]); #ifdef MYTHEN3D int getVLimit(); void setDacRegister(int dacnum,int dacvalue); int getDacRegister(int dacnum); #endif #ifndef MYTHEN3D -int getADC(enum ADCINDEX ind, int imod); +int getADC(enum ADCINDEX ind); #endif -#if !defined(MYTHEN3D) && !defined(MYTHEND) +#ifndef MYTHEN3D int setHighVoltage(int val); #endif // parameters - timing, extsig -#ifdef MYTHEND -enum externalSignalFlag getExtSignal(int signalindex); -enum externalSignalFlag setExtSignal(int signalindex, enum externalSignalFlag flag); -#endif enum externalCommunicationMode setTiming( enum externalCommunicationMode arg); // configure mac #ifdef JUNGFRAUD long int calcChecksum(int sourceip, int destip); #endif -#if !defined(MYTHEN3D) && !defined(MYTHEND) +#ifndef MYTHEN3D int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport, uint32_t udpport2, int ival); #endif #if defined(JUNGFRAUD) || defined(EIGERD) @@ -220,7 +204,7 @@ extern int writeFPGAProgram(char* fpgasrc, size_t fsize, FILE* filefp); // prog // eiger specific - iodelay, 10g, pulse, rate, temp, activate, delay nw parameter #elif EIGERD -int setIODelay(int val, int imod); +int setIODelay(int val); int enableTenGigabitEthernet(int val); int setCounterBit(int val); int pulsePixel(int n, int x, int y); @@ -270,22 +254,15 @@ u_int32_t runBusy(void); int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod); int calculateDataBytes(); int getTotalNumberOfChannels(); -int getTotalNumberOfChips(); -int getTotalNumberOfModules(); -int getNumberOfChannelsPerModule(); -int getNumberOfChipsPerModule(); -int getNumberOfDACsPerModule(); -int getNumberOfADCsPerModule(); +int getNumberOfChips(); +int getNumberOfDACs(); +int getNumberOfADCs(); #ifdef EIGERD -int getNumberOfGainsPerModule(); -int getNumberOfOffsetsPerModule(); +int getNumberOfGains(); +int getNumberOfOffsets(); #endif int getNumberOfChannelsPerChip(); -// sync -enum masterFlags setMaster(enum masterFlags arg); -enum synchronizationMode setSynchronization(enum synchronizationMode arg); - #endif diff --git a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 8cd09f2b1..9f282abf2 100755 --- a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -17,16 +17,10 @@ extern char thisClientIP[INET_ADDRSTRLEN]; extern int differentClients; //defined in the detector specific Makefile -#ifdef MYTHEND -const enum detectorType myDetectorType=MYTHEN; -#elif GOTTHARDD +#ifdef GOTTHARDD const enum detectorType myDetectorType=GOTTHARD; #elif EIGERD const enum detectorType myDetectorType=EIGER; -#elif PICASSOD -const enum detectorType myDetectorType=PICASSO; -#elif MOENCHD -const enum detectorType myDetectorType=MOENCH; #elif JUNGFRAUD const enum detectorType myDetectorType=JUNGFRAU; #elif MYTHEN3D @@ -132,41 +126,24 @@ int decode_function(int file_des) { const char* getFunctionName(enum detFuncs func) { switch (func) { case F_EXEC_COMMAND: return "F_EXEC_COMMAND"; - case F_GET_ERROR: return "F_GET_ERROR"; case F_GET_DETECTOR_TYPE: return "F_GET_DETECTOR_TYPE"; - case F_SET_NUMBER_OF_MODULES: return "F_SET_NUMBER_OF_MODULES"; - case F_GET_MAX_NUMBER_OF_MODULES: return "F_GET_MAX_NUMBER_OF_MODULES"; case F_SET_EXTERNAL_SIGNAL_FLAG: return "F_SET_EXTERNAL_SIGNAL_FLAG"; case F_SET_EXTERNAL_COMMUNICATION_MODE: return "F_SET_EXTERNAL_COMMUNICATION_MODE"; case F_GET_ID: return "F_GET_ID"; case F_DIGITAL_TEST: return "F_DIGITAL_TEST"; - case F_ANALOG_TEST: return "F_ANALOG_TEST"; - case F_ENABLE_ANALOG_OUT: return "F_ENABLE_ANALOG_OUT"; - case F_CALIBRATION_PULSE: return "F_CALIBRATION_PULSE"; case F_SET_DAC: return "F_SET_DAC"; case F_GET_ADC: return "F_GET_ADC"; case F_WRITE_REGISTER: return "F_WRITE_REGISTER"; case F_READ_REGISTER: return "F_READ_REGISTER"; - case F_WRITE_MEMORY: return "F_WRITE_MEMORY"; - case F_READ_MEMORY: return "F_READ_MEMORY"; - case F_SET_CHANNEL: return "F_SET_CHANNEL"; - case F_GET_CHANNEL: return "F_GET_CHANNEL"; - case F_SET_ALL_CHANNELS: return "F_SET_ALL_CHANNELS"; - case F_SET_CHIP: return "F_SET_CHIP"; - case F_GET_CHIP: return "F_GET_CHIP"; - case F_SET_ALL_CHIPS: return "F_SET_ALL_CHIPS"; case F_SET_MODULE: return "F_SET_MODULE"; case F_GET_MODULE: return "F_GET_MODULE"; - case F_SET_ALL_MODULES: return "F_SET_ALL_MODULES"; case F_SET_SETTINGS: return "F_SET_SETTINGS"; case F_GET_THRESHOLD_ENERGY: return "F_GET_THRESHOLD_ENERGY"; - case F_SET_THRESHOLD_ENERGY: return "F_SET_THRESHOLD_ENERGY"; case F_START_ACQUISITION: return "F_START_ACQUISITION"; case F_STOP_ACQUISITION: return "F_STOP_ACQUISITION"; case F_START_READOUT: return "F_START_READOUT"; case F_GET_RUN_STATUS: return "F_GET_RUN_STATUS"; case F_START_AND_READ_ALL: return "F_START_AND_READ_ALL"; - case F_READ_FRAME: return "F_READ_FRAME"; case F_READ_ALL: return "F_READ_ALL"; case F_SET_TIMER: return "F_SET_TIMER"; case F_GET_TIME_LEFT: return "F_GET_TIME_LEFT"; @@ -174,7 +151,6 @@ const char* getFunctionName(enum detFuncs func) { case F_SET_READOUT_FLAGS: return "F_SET_READOUT_FLAGS"; case F_SET_ROI: return "F_SET_ROI"; case F_SET_SPEED: return "F_SET_SPEED"; - case F_EXECUTE_TRIMMING: return "F_EXECUTE_TRIMMING"; case F_EXIT_SERVER: return "F_EXIT_SERVER"; case F_LOCK_SERVER: return "F_LOCK_SERVER"; case F_GET_LAST_CLIENT_IP: return "F_GET_LAST_CLIENT_IP"; @@ -182,8 +158,6 @@ const char* getFunctionName(enum detFuncs func) { case F_UPDATE_CLIENT: return "F_UPDATE_CLIENT"; case F_CONFIGURE_MAC: return "F_CONFIGURE_MAC"; case F_LOAD_IMAGE: return "F_LOAD_IMAGE"; - case F_SET_MASTER: return "F_SET_MASTER"; - case F_SET_SYNCHRONIZATION_MODE: return "F_SET_SYNCHRONIZATION_MODE"; case F_READ_COUNTER_BLOCK: return "F_READ_COUNTER_BLOCK"; case F_RESET_COUNTER_BLOCK: return "F_RESET_COUNTER_BLOCK"; case F_CALIBRATE_PEDESTAL: return "F_CALIBRATE_PEDESTAL"; @@ -203,7 +177,6 @@ const char* getFunctionName(enum detFuncs func) { case F_POWER_CHIP: return "F_POWER_CHIP"; case F_ACTIVATE: return "F_ACTIVATE"; case F_PREPARE_ACQUISITION: return "F_PREPARE_ACQUISITION"; - case F_CLEANUP_ACQUISITION: return "F_CLEANUP_ACQUISITION"; case F_THRESHOLD_TEMP: return "F_THRESHOLD_TEMP"; case F_TEMP_CONTROL: return "F_TEMP_CONTROL"; case F_TEMP_EVENT: return "F_TEMP_EVENT"; @@ -218,41 +191,24 @@ const char* getFunctionName(enum detFuncs func) { void function_table() { flist[F_EXEC_COMMAND] = &exec_command; - flist[F_GET_ERROR] = &get_error; flist[F_GET_DETECTOR_TYPE] = &get_detector_type; - flist[F_SET_NUMBER_OF_MODULES] = &set_number_of_modules; - flist[F_GET_MAX_NUMBER_OF_MODULES] = &get_max_number_of_modules; flist[F_SET_EXTERNAL_SIGNAL_FLAG] = &set_external_signal_flag; flist[F_SET_EXTERNAL_COMMUNICATION_MODE] = &set_external_communication_mode; flist[F_GET_ID] = &get_id; flist[F_DIGITAL_TEST] = &digital_test; - flist[F_ANALOG_TEST] = &analog_test; - flist[F_ENABLE_ANALOG_OUT] = &enable_analog_out; - flist[F_CALIBRATION_PULSE] = &calibration_pulse; flist[F_SET_DAC] = &set_dac; flist[F_GET_ADC] = &get_adc; flist[F_WRITE_REGISTER] = &write_register; flist[F_READ_REGISTER] = &read_register; - flist[F_WRITE_MEMORY] = &write_memory; - flist[F_READ_MEMORY] = &read_memory; - flist[F_SET_CHANNEL] = &set_channel; - flist[F_GET_CHANNEL] = &get_channel; - flist[F_SET_ALL_CHANNELS] = &set_all_channels; - flist[F_SET_CHIP] = &set_chip; - flist[F_GET_CHIP] = &get_chip; - flist[F_SET_ALL_CHIPS] = &set_all_chips; flist[F_SET_MODULE] = &set_module; flist[F_GET_MODULE] = &get_module; - flist[F_SET_ALL_MODULES] = &set_all_modules; flist[F_SET_SETTINGS] = &set_settings; flist[F_GET_THRESHOLD_ENERGY] = &get_threshold_energy; - flist[F_SET_THRESHOLD_ENERGY] = &set_threshold_energy; flist[F_START_ACQUISITION] = &start_acquisition; flist[F_STOP_ACQUISITION] = &stop_acquisition; flist[F_START_READOUT] = &start_readout; flist[F_GET_RUN_STATUS] = &get_run_status; flist[F_START_AND_READ_ALL] = &start_and_read_all; - flist[F_READ_FRAME] = &read_frame; flist[F_READ_ALL] = &read_all; flist[F_SET_TIMER] = &set_timer; flist[F_GET_TIME_LEFT] = &get_time_left; @@ -260,7 +216,6 @@ void function_table() { flist[F_SET_READOUT_FLAGS] = &set_readout_flags; flist[F_SET_ROI] = &set_roi; flist[F_SET_SPEED] = &set_speed; - flist[F_EXECUTE_TRIMMING] = &execute_trimming; flist[F_EXIT_SERVER] = &exit_server; flist[F_LOCK_SERVER] = &lock_server; flist[F_GET_LAST_CLIENT_IP] = &get_last_client_ip; @@ -268,8 +223,6 @@ void function_table() { flist[F_UPDATE_CLIENT] = &update_client; flist[F_CONFIGURE_MAC] = &configure_mac; flist[F_LOAD_IMAGE] = &load_image; - flist[F_SET_MASTER] = &set_master; - flist[F_SET_SYNCHRONIZATION_MODE] = &set_synchronization; flist[F_READ_COUNTER_BLOCK] = &read_counter_block; flist[F_RESET_COUNTER_BLOCK] = &reset_counter_block; flist[F_CALIBRATE_PEDESTAL] = &calibrate_pedestal; @@ -289,7 +242,6 @@ void function_table() { flist[F_POWER_CHIP] = &power_chip; flist[F_ACTIVATE] = &set_activate; flist[F_PREPARE_ACQUISITION] = &prepare_acquisition; - flist[F_CLEANUP_ACQUISITION] = &cleanup_acquisition; flist[F_THRESHOLD_TEMP] = &threshold_temp; flist[F_TEMP_CONTROL] = &temp_control; flist[F_TEMP_EVENT] = &temp_event; @@ -333,7 +285,7 @@ int M_nofunc(int file_des){ } - +// Jungfrau program mode int M_nofuncMode(int file_des){ int ret=FAIL,ret1=FAIL; int n=0; @@ -396,24 +348,6 @@ int exec_command(int file_des) { -int get_error(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Get Error) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - int get_detector_type(int file_des) { int ret=OK,ret1=OK; @@ -443,102 +377,6 @@ int get_detector_type(int file_des) { -int set_number_of_modules(int file_des) { - int ret=OK,ret1=OK; - int n=0; - int retval=0; - int arg[2]={-1,-1}; - sprintf(mess,"set number of modules failed\n"); - - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - enum dimension dim=arg[0]; - int nm=arg[1]; - - // execute action -#ifdef VERBOSE - printf("Setting the number of modules in dimension %d to %d\n",dim,nm ); -#endif - if (lockStatus && differentClients && nm!=GET_FLAG) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else { - retval=setNMod(nm, dim); - dataBytes=calculateDataBytes(); - } -#endif - - if (retval==nm || nm==GET_FLAG) { - ret=OK; - if (differentClients) - ret=FORCE_UPDATE; - } else - ret=FAIL; - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - - -int get_max_number_of_modules(int file_des) { - int ret=OK,ret1=OK; - int n=0; - int retval=-1; - enum dimension arg=0; - sprintf(mess,"get max number of modules failed\n"); - - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action -#ifdef VERBOSE - printf("Getting the max number of modules in dimension %d \n",arg); -#endif -#ifdef SLS_DETECTOR_FUNCTION_LIST - retval=getNModBoard(arg); -#endif -#ifdef VERBOSE - printf("Max number of module in dimension %d is %d\n",arg,retval ); -#endif - if (differentClients && ret==OK) { - ret=FORCE_UPDATE; - } - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - int set_external_signal_flag(int file_des) { int ret=OK,ret1=OK; @@ -546,7 +384,7 @@ int set_external_signal_flag(int file_des) { enum externalSignalFlag retval=GET_EXTERNAL_SIGNAL_FLAG; sprintf(mess,"set external signal flag failed\n"); -#ifndef MYTHEND +#ifndef GOTTHARDD //to receive any arguments while (n > 0) n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); @@ -681,7 +519,6 @@ int get_id(int file_des) { int ret=OK,ret1=OK; int n=0; enum idMode arg=0; - int imod=-1; int64_t retval=-1; sprintf(mess,"get id failed\n"); @@ -689,11 +526,6 @@ int get_id(int file_des) { n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - if (arg == MODULE_SERIAL_NUMBER) { - n = receiveData(file_des,&imod,sizeof(imod),INT32); - if (n < 0) return printSocketReadError(); - } - // execute action #ifdef VERBOSE printf("Getting id %d\n", arg); @@ -701,22 +533,6 @@ int get_id(int file_des) { #ifdef SLS_DETECTOR_FUNCTION_LIST switch (arg) { -#ifdef MYTHEND - case MODULE_SERIAL_NUMBER: - case MODULE_FIRMWARE_VERSION: -#ifdef VERBOSE - printf("of module %d\n", imod); -#endif - - if (imod>=0 && imod=0 && imod 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - -int enable_analog_out(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Enable Analog Out) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - -int calibration_pulse(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Calibration Pulse) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - - int set_dac(int file_des) { int ret=OK,ret1=OK; int n=0; - int arg[3]={-1,-1,-1}; + int arg[2]={-1,-1}; int val=-1; enum dacIndex ind=0; - int imod=-1; int retval[2]={-1,-1}; int mV=0; sprintf(mess,"set DAC failed\n"); @@ -944,22 +673,11 @@ int set_dac(int file_des) { n = receiveData(file_des,arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); ind=arg[0]; - imod=arg[1]; - mV=arg[2]; + mV=arg[1]; n = receiveData(file_des,&val,sizeof(val),INT32); if (n < 0) return printSocketReadError(); - // checks -#ifdef MYTHEND -#ifdef SLS_DETECTOR_FUNCTION_LIST - if (imod>=getTotalNumberOfModules()) { - ret = FAIL; - sprintf(mess,"Module number %d out of range\n",imod); - cprintf(RED, "Warning: %s", mess); - } -#endif -#endif // check if dac exists for this detector enum DACINDEX idac=0; #ifdef JUNGFRAUD @@ -971,15 +689,7 @@ int set_dac(int file_des) { idac = ind; #else switch (ind) { -#ifdef MYTHEND - case TRIMBIT_SIZE: //ind = VTRIM; - case THRESHOLD: - case SHAPER1: - case SHAPER2: - case CALIBRATION_PULSE: - case PREAMP: - break; -#elif GOTTHARDD +#ifdef GOTTHARDD case G_VREF_DS : break; case G_VCASCN_PB: @@ -1164,7 +874,7 @@ int set_dac(int file_des) { // execute action #ifdef VERBOSE - printf("Setting DAC %d of module %d to %d \n", idac, imod, val); + printf("Setting DAC %d to %d \n", idac, val); #endif #ifdef SLS_DETECTOR_FUNCTION_LIST int temp; @@ -1177,7 +887,7 @@ int set_dac(int file_des) { #ifdef EIGERD //iodelay if(ind == IO_DELAY) - retval[0] = setIODelay(val,imod); + retval[0] = setIODelay(val); //high voltage else #endif @@ -1255,7 +965,7 @@ int set_dac(int file_des) { } } #endif - setDAC(idac,val,imod,mV,retval); + setDAC(idac,val,mV,retval); #ifdef EIGERD if(val != -1) { //changing dac changes settings to undefined @@ -1266,7 +976,7 @@ int set_dac(int file_des) { case VCMP_RR: case VRF: case VCP: - setSettings(UNDEFINED,-1); + setSettings(UNDEFINED); cprintf(RED,"Settings has been changed to undefined (changed specific dacs)\n"); break; default: @@ -1284,7 +994,7 @@ int set_dac(int file_des) { ret = OK; } else { ret = FAIL; - sprintf(mess,"Setting dac %d of module %d: wrote %d but read %d\n", idac, imod, val, temp); + sprintf(mess,"Setting dac %d : wrote %d but read %d\n", idac, val, temp); cprintf(RED, "Warning: %s", mess); } } @@ -1322,10 +1032,9 @@ int set_dac(int file_des) { int get_adc(int file_des) { int ret=OK,ret1=OK; int n=0; - int arg[2]={-1,-1}; + int arg=-1; int retval=-1; enum dacIndex ind=0; - int imod=-1; sprintf(mess,"get ADC failed\n"); #ifdef MYTHEN3D @@ -1338,20 +1047,9 @@ int get_adc(int file_des) { #else // receive arguments - n = receiveData(file_des,arg,sizeof(arg),INT32); + n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - ind=arg[0]; - imod=arg[1]; - -#ifdef MYTHEND -#ifdef SLS_DETECTOR_FUNCTION_LIST - if (imod>=getTotalNumberOfModules() || imod<0) { - ret = FAIL; - sprintf(mess,"Module number %d out of range\n",imod); - cprintf(RED, "Warning: %s", mess); - } -#endif -#endif + ind=arg; enum ADCINDEX iadc=0; switch (ind) { @@ -1397,11 +1095,11 @@ int get_adc(int file_des) { } #ifdef VERBOSE - printf("Getting ADC %d of module %d\n", iadc, imod); + printf("Getting ADC %d\n", iadc); #endif #ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) - retval=getADC(iadc,imod); + retval=getADC(iadc); #endif #ifdef VERBOSE printf("ADC is %f\n", retval); @@ -1531,370 +1229,6 @@ int read_register(int file_des) { -int write_memory(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Write Memory) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - -int read_memory(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Read Memory) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - -int set_channel(int file_des) { - int ret=OK,ret1=OK; - int n=0; - int retval=-1; - sprintf(mess,"set channel failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Set Channel) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - - // receive arguments - sls_detector_channel myChan; - n=receiveChannel(file_des, &myChan); - if (n < 0) return printSocketReadError(); - - // execute action -#ifdef VERBOSE - printf("Setting channel\n"); - printf("channel number is %d, chip number is %d, module number is %d, register is %lld\n", myChan.chan,myChan.chip, myChan.module, myChan.reg); -#endif - if (differentClients && lockStatus) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else if (myChan.chan>=getNumberOfChannelsPerChip()) { - ret = FAIL; - sprintf(mess,"channel number %d too large!\n",myChan.chan); - cprintf(RED, "Warning: %s", mess); - } - else if (myChan.chip>=getNumberOfChipsPerModule()) { - ret = FAIL; - sprintf(mess,"chip number %d too large!\n",myChan.chip); - cprintf(RED, "Warning: %s", mess); - } - else if (myChan.module>=getTotalNumberOfModules()) { - ret = FAIL; - sprintf(mess,"module number %d too large!\n",myChan.module); - cprintf(RED, "Warning: %s", mess); - } - else - retval=setChannel(myChan); -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - - -int get_channel(int file_des) { - int ret=OK,ret1=OK; - int n=0; - sls_detector_channel retval; - sprintf(mess,"get channel failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Get Channel) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - - // receive arguments - int arg[3]={-1,-1,-1}; - n = receiveData(file_des,arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action - int ichan=arg[0]; - int ichip=arg[1]; - int imod=arg[2]; -#ifdef SLS_DETECTOR_FUNCTION_LIST - if (ichan>=getNumberOfChannelsPerChip()) { - ret=FAIL; - sprintf(mess, "channel number %d too large!\n",myChan.chan); - cprintf(RED, "Warning: %s", mess); - } else - retval.chan=ichan; - if (ichip>=getNumberOfChipsPerModule()) { - ret=FAIL; - sprintf(mess, "chip number %d too large!\n",myChan.chip); - cprintf(RED, "Warning: %s", mess); - } else - retval.chip=ichip; - - if (imod>=getTotalNumberOfModules()) { - ret=FAIL; - sprintf(mess, "module number %d too large!\n",myChan.module); - cprintf(RED, "Warning: %s", mess); - } else { - retval.module=imod; - ret=getChannel(&retval); -#ifdef VERBOSE - printf("Returning channel %d %d %d, 0x%llx\n", retval.chan, retval.chip, retval.mod, (retval.reg)); -#endif - } -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - ret=sendChannel(file_des, &retval); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - -int set_all_channels(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Set All Channels) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - - - -int set_chip(int file_des) { - int ret=OK,ret1=OK; - int n=0; - int retval=-1; - sprintf(mess,"set chip failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Set Chip) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - sls_detector_chip myChip; - -#ifdef SLS_DETECTOR_FUNCTION_LIST - myChip.nchan=getNumberOfChannelsPerChip(); - int *ch(int*)malloc((myChip.nchan)*sizeof(int)); - myChip.chanregs=ch; - - // receive arguments - n=receiveChip(file_des, &myChip); -#ifdef VERBOSE - printf("Chip received\n"); -#endif - if(n < 0) return FAIL; - - // execute action - if (differentClients==1 && lockStatus==1) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } - else{ -#ifdef VERBOSE - printf("Setting chip\n"); - printf("chip number is %d, module number is %d, register is %d, nchan %d\n",myChip.chip, myChip.module, myChip.reg, myChip.nchan); -#endif - if (myChip.chip>=getNumberOfChipsPerModule()) { - ret = FAIL; - sprintf(mess,"chip number %d too large!\n",myChan.chip); - cprintf(RED, "Warning: %s", mess); - } - else if (myChip.module>=getTotalNumberOfModules()) { - ret = FAIL; - sprintf(mess,"module number %d too large!\n",myChan.module); - cprintf(RED, "Warning: %s", mess); - } - else - retval=setChip(myChip); - } - free(ch); -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - n += sendData(file_des,&retval,sizeof(retval),INT32); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - - -int get_chip(int file_des) { - int ret=OK,ret1=OK; - int n=0; - sls_detector_chip retval; - sprintf(mess,"get chip failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Get Chip) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - - // receive arguments - int arg[2]={-1,-1}; - n = receiveData(file_des,arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - -#ifdef SLS_DETECTOR_FUNCTION_LIST - int ichip=arg[0]; - int imod=arg[1]; - - // execute action - if (ichip>=getNumberOfChipsPerModule()) { - ret = FAIL; - sprintf(mess,"channel number %d too large!\n",myChan.chan); - cprintf(RED, "Warning: %s", mess); - } else - retval.chip=ichip; - - if (imod>=getTotalNumberOfModules()) { - ret = FAIL; - sprintf(mess,"module number %d too large!\n",imod); - cprintf(RED, "Warning: %s", mess); - } else - retval.module=imod; - - if (ret==OK) - ret=getChip(&retval); -#endif -#ifdef VERBOSE - printf("Returning chip %d %d\n", ichip, imod); -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret!=FAIL) { - ret=sendChip(file_des, &retval); - } else { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - - -int set_all_chips(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Set All Chips) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - - - - - int set_module(int file_des) { int ret=OK,ret1=OK; int n=0; @@ -1924,16 +1258,16 @@ int set_module(int file_des) { int *myChip = NULL; int *myChan = NULL; - myDac=(int*)malloc(getNumberOfDACsPerModule()*sizeof(int)); - if (getNumberOfDACsPerModule() > 0 && myDac == NULL) { + myDac=(int*)malloc(getNumberOfDACs()*sizeof(int)); + if (getNumberOfDACs() > 0 && myDac == NULL) { ret = FAIL; sprintf(mess,"could not allocate dacs\n"); cprintf(RED, "Warning: %s", mess); } else { myModule.dacs=myDac; - myAdc=(int*)malloc(getNumberOfADCsPerModule()*sizeof(int)); - if (getNumberOfADCsPerModule() > 0 && myAdc == NULL) { + myAdc=(int*)malloc(getNumberOfADCs()*sizeof(int)); + if (getNumberOfADCs() > 0 && myAdc == NULL) { ret = FAIL; sprintf(mess,"could not allocate adcs\n"); cprintf(RED, "Warning: %s", mess); @@ -1945,16 +1279,16 @@ int set_module(int file_des) { myModule.chipregs=NULL; myModule.chanregs=NULL; #else - myChip=(int*)malloc(getNumberOfChipsPerModule()*sizeof(int)); - if (getNumberOfChipsPerModule() > 0 && myChip == NULL) { + myChip=(int*)malloc(getNumberOfChips()*sizeof(int)); + if (getNumberOfChips() > 0 && myChip == NULL) { ret = FAIL; sprintf(mess,"could not allocate chips\n"); cprintf(RED, "Warning: %s", mess); } else { myModule.chipregs=myChip; - myChan=(int*)malloc(getNumberOfChannelsPerModule()*sizeof(int)); - if (getNumberOfChannelsPerModule() > 0 && myChan == NULL) { + myChan=(int*)malloc(getTotalNumberOfChannels()*sizeof(int)); + if (getTotalNumberOfChannels() > 0 && myChan == NULL) { ret = FAIL; sprintf(mess,"could not allocate chans\n"); cprintf(RED, "Warning: %s", mess); @@ -1962,10 +1296,10 @@ int set_module(int file_des) { else { myModule.chanregs=myChan; #endif - myModule.nchip=getNumberOfChipsPerModule(); - myModule.nchan=getNumberOfChannelsPerModule(); - myModule.ndac=getNumberOfDACsPerModule(); - myModule.nadc=getNumberOfADCsPerModule(); + myModule.nchip=getNumberOfChips(); + myModule.nchan=getTotalNumberOfChannels(); + myModule.ndac=getNumberOfDACs(); + myModule.nadc=getNumberOfADCs(); // receive arguments @@ -1981,8 +1315,8 @@ int set_module(int file_des) { ); if (n<0) return FAIL; #ifdef VERBOSE - printf("module number is %d,register is %d, nchan %d, nchip %d, ndac %d, nadc %d, gain %f, offset %f\n", - myModule.module, myModule.reg, myModule.nchan, myModule.nchip, myModule.ndac, myModule.nadc, myModule.gain,myModule.offset); + printf("module number register is %d, nchan %d, nchip %d, ndac %d, nadc %d, gain %f, offset %f\n", + myModule.reg, myModule.nchan, myModule.nchip, myModule.ndac, myModule.nadc, myModule.gain,myModule.offset); #endif #ifdef EIGERD n = receiveData(file_des,&myIODelay,sizeof(myIODelay),INT32); @@ -2006,15 +1340,6 @@ int set_module(int file_des) { //check settings index if (ret==OK) { -#ifdef MYTHEND - if (myModule.module>=getNModBoard()) { - ret = FAIL; - sprintf(mess,"Module Number to Set Module (%d) is too large\n", myModule.module); - cprintf(RED, "Warning: %s", mess); - } - if (myModule.module<0) - myModule.module=ALLMOD; -#endif #if defined(JUNGFRAUD) || defined(EIGERD) switch(myModule.reg){ case GET_SETTINGS: @@ -2056,10 +1381,10 @@ int set_module(int file_des) { ret=setModule(myModule, myIODelay); //set threshhold if (myEV >= 0) - setThresholdEnergy(myEV,-1); + setThresholdEnergy(myEV); else { //changes settings to undefined (loading a random trim file) - setSettings(UNDEFINED,-1); + setSettings(UNDEFINED); cprintf(RED,"Settings has been changed to undefined (random trim file)\n"); } //rate correction @@ -2124,25 +1449,18 @@ int set_module(int file_des) { int get_module(int file_des) { int ret=OK,ret1=OK; int n=0; - int arg=-1; - int imod=-1; sls_detector_module myModule; sprintf(mess,"get module failed\n"); #ifdef MYTHEN3D - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Get Module) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); + //to receive any arguments + while (n > 0) + n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); + ret = FAIL; + sprintf(mess,"Function (Get Module) is not implemented for this detector\n"); + cprintf(RED, "Warning: %s", mess); #else - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - imod=arg; - // execute action #ifdef SLS_DETECTOR_FUNCTION_LIST int *myDac=NULL; @@ -2150,64 +1468,56 @@ int get_module(int file_des) { int *myChip = NULL; int *myChan = NULL; - if (imod<0 || imod>getTotalNumberOfModules()) { + myDac=(int*)malloc(getNumberOfDACs()*sizeof(int)); + if (getNumberOfDACs() > 0 && myDac == NULL) { ret = FAIL; - sprintf(mess,"Module Index (%d) is out of range\n", imod); + sprintf(mess,"could not allocate dacs\n"); cprintf(RED, "Warning: %s", mess); } else { - myDac=(int*)malloc(getNumberOfDACsPerModule()*sizeof(int)); - if (getNumberOfDACsPerModule() > 0 && myDac == NULL) { + myModule.dacs=myDac; + myAdc=(int*)malloc(getNumberOfADCs()*sizeof(int)); + if (getNumberOfADCs() > 0 && myAdc == NULL) { ret = FAIL; - sprintf(mess,"could not allocate dacs\n"); + sprintf(mess,"could not allocate adcs\n"); cprintf(RED, "Warning: %s", mess); } else { - myModule.dacs=myDac; - myAdc=(int*)malloc(getNumberOfADCsPerModule()*sizeof(int)); - if (getNumberOfADCsPerModule() > 0 && myAdc == NULL) { + myModule.adcs=myAdc; + //no chips and chans allocated for jungfrau, too much memory +#ifdef JUNGFRAUD + myModule.chipregs=NULL; + myModule.chanregs=NULL; +#else + myChip=(int*)malloc(getNumberOfChips()*sizeof(int)); + if (getNumberOfChips() > 0 && myChip == NULL) { ret = FAIL; - sprintf(mess,"could not allocate adcs\n"); + sprintf(mess,"could not allocate chips\n"); cprintf(RED, "Warning: %s", mess); } else { - myModule.adcs=myAdc; - //no chips and chans allocated for jungfrau, too much memory -#ifdef JUNGFRAUD - myModule.chipregs=NULL; - myModule.chanregs=NULL; -#else - myChip=(int*)malloc(getNumberOfChipsPerModule()*sizeof(int)); - if (getNumberOfChipsPerModule() > 0 && myChip == NULL) { + myModule.chipregs=myChip; + myChan=(int*)malloc(getTotalNumberOfChannels()*sizeof(int)); + if (getTotalNumberOfChannels() > 0 && myChan == NULL) { ret = FAIL; - sprintf(mess,"could not allocate chips\n"); + sprintf(mess,"could not allocate chans\n"); cprintf(RED, "Warning: %s", mess); } else { - myModule.chipregs=myChip; - myChan=(int*)malloc(getNumberOfChannelsPerModule()*sizeof(int)); - if (getNumberOfChannelsPerModule() > 0 && myChan == NULL) { - ret = FAIL; - sprintf(mess,"could not allocate chans\n"); - cprintf(RED, "Warning: %s", mess); - } - else { - myModule.chanregs=myChan; + myModule.chanregs=myChan; #endif - myModule.nchip=getNumberOfChipsPerModule(); - myModule.nchan=getNumberOfChannelsPerModule(); - myModule.ndac=getNumberOfDACsPerModule(); - myModule.nadc=getNumberOfADCsPerModule(); - myModule.module=imod; - getModule(&myModule); + myModule.nchip=getNumberOfChips(); + myModule.nchan=getTotalNumberOfChannels(); + myModule.ndac=getNumberOfDACs(); + myModule.nadc=getNumberOfADCs(); + getModule(&myModule); #ifdef VERBOSE - printf("Returning module %d of register %x\n", imod, myModule.reg); + printf("Returning module of register %x\n", myModule.reg); #endif #ifndef JUNGFRAUD - } } -#endif } +#endif } } #endif @@ -2246,32 +1556,14 @@ int get_module(int file_des) { -int set_all_modules(int file_des) { - int ret=FAIL,ret1=FAIL; - int n=0; - sprintf(mess,"Function (Set All Modules) is not implemented for this detector\n"); - cprintf(RED, "Error: %s", mess); - - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - - n = sendData(file_des,&ret1,sizeof(ret),INT32); - n = sendData(file_des,mess,MAX_STR_LENGTH,OTHER); - - // return ok / fail - return ret; -} - int set_settings(int file_des) { int ret=OK,ret1=OK; int n=0; - int arg[2]={-1,-1}; + int arg=-1; int retval=-1; - int imod=-1; enum detectorSettings isett=-1; sprintf(mess,"set settings failed\n"); @@ -2287,8 +1579,7 @@ int set_settings(int file_des) { // receive arguments n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - isett=arg[0]; - imod=arg[1]; + isett=arg; // execute action if (differentClients && lockStatus && isett!=GET_SETTINGS) { @@ -2298,13 +1589,6 @@ int set_settings(int file_des) { } #ifdef SLS_DETECTOR_FUNCTION_LIST -#ifdef MYTHEND - if ( (ret != FAIL) && (imod>=getTotalNumberOfModules())) { - ret = FAIL; - sprintf(mess,"Module number %d out of range\n",imod); - cprintf(RED, "Warning: %s", mess); - } -#endif switch(isett) { case GET_SETTINGS: case UNINITIALIZED: @@ -2341,9 +1625,9 @@ int set_settings(int file_des) { if (ret != FAIL) { #ifdef VERBOSE - printf("Changing settings of module %d to %d\n", imod, isett); + printf("Changing settings to %d\n", isett); #endif - retval=setSettings(isett, imod); + retval=setSettings(isett); #ifdef VERBOSE printf("Settings changed to %d\n", isett); #endif @@ -2351,7 +1635,7 @@ int set_settings(int file_des) { ret=OK; } else { ret = FAIL; - sprintf(mess,"Changing settings of module %d: wrote %d but read %d\n", imod, isett, retval); + sprintf(mess,"Changing settings : wrote %d but read %d\n", isett, retval); cprintf(RED, "Warning: %s", mess); } } @@ -2396,35 +1680,21 @@ int get_threshold_energy(int file_des) { int retval=-1; sprintf(mess,"get threshold energy failed\n"); -#if !defined(MYTHEND) && !defined(EIGERD) - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); +#ifndef EIGERD ret = FAIL; sprintf(mess,"Function (Get Threshold Energy) is not implemented for this detector\n"); cprintf(RED, "Warning: %s", mess); #else - // receive arguments - int imod=-1; - n = receiveData(file_des,&imod,sizeof(imod),INT32); - if (n < 0) return printSocketReadError(); - // execute action #ifdef VERBOSE - printf("Getting threshold energy of module %d\n", imod); + printf("Getting threshold energy \n"); #endif #ifdef SLS_DETECTOR_FUNCTION_LIST - if (imod>=getTotalNumberOfModules()) { - ret=FAIL; - sprintf(mess,"Module number %d out of range\n",imod); - } - else { - retval=getThresholdEnergy(imod); + retval=getThresholdEnergy(); #ifdef VERBOSE printf("Threshold is %d eV\n", retval); #endif - } #endif if (ret==OK && differentClients) ret=FORCE_UPDATE; @@ -2447,75 +1717,6 @@ int get_threshold_energy(int file_des) { -int set_threshold_energy(int file_des) { - int ret=OK,ret1=OK; - int n=0; - int retval=-1; - sprintf(mess,"set thhreshold energy failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; -#ifdef EIGERD - sprintf(mess,"Function (Set Threshold Energy) is only implemented via Set Settings for this detector\n"); -#else - sprintf(mess,"Function (Set Threshold Energy) is not implemented for this detector\n"); -#endif - cprintf(RED, "Warning: %s", mess); -#else - - // receive arguments - int arg[3]={-1,-1,-1}; - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action - int ethr=arg[0]; - int imod=arg[1]; - enum detectorSettings isett=arg[2]; - if (differentClients && lockStatus) { - ret=FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else if (imod>=getTotalNumberOfModules()) { - ret=FAIL; - sprintf(mess,"Module number %d out of range\n",imod); - } - else { - printf("Setting threshold energy of module %d to %d eV with settings %d\n", imod, ethr, isett); - retval=setThresholdEnergy(ethr, imod); -#ifdef VERBOSE - printf("Threshold set to %d eV\n", retval); -#endif - if (retval!=ethr) { - ret=FAIL; - sprintf(mess,"Setting threshold of module %d: wrote %d but read %d\n", imod, ethr, retval); - cprintf(RED, "Warning: %s", mess); - } -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } else - n += sendData(file_des,&retval,sizeof(retval),INT32); - - // return ok / fail - return ret; -} - - - int start_acquisition(int file_des) { @@ -2701,10 +1902,10 @@ int start_and_read_all(int file_des) { -int read_frame(int file_des) { +int read_all(int file_des) { int dataret1=FAIL, dataret=FAIL; int n=0; - sprintf(mess, "read frame failed\n"); + sprintf(mess, "read all frame failed\n"); // execute action if (differentClients && lockStatus) { @@ -2746,22 +1947,6 @@ int read_frame(int file_des) { -int read_all(int file_des) { -#ifdef SLS_DETECTOR_FUNCTION_LIST - while(read_frame(file_des)==OK) { -#ifdef VERBOSE - printf("frame read\n"); -#endif - ; - } -#endif -#ifdef VERBOSE - printf("Frames finished or failed\n"); -#endif - return OK; -} - - int set_timer(int file_des) { @@ -2826,11 +2011,7 @@ int set_timer(int file_des) { retval = setTimer(ind,tns); break; #endif -#ifdef MYTHEN - case PROBES_NUMBER: - case GATES_NUMBER: - case DELAY_AFTER_TRIGGER: -#elif JUNGFRAUD +#ifdef JUNGFRAUD case DELAY_AFTER_TRIGGER: #elif MYTHEN3D case DELAY_AFTER_TRIGGER: @@ -2851,17 +2032,6 @@ int set_timer(int file_des) { break; } - -#if defined(MYTHEND) || defined(GOTTHARD) - if (ret == OK && ind==FRAME_NUMBER) { - ret=allocateRAM(); - if (ret!=OK) { - ret = FAIL; - sprintf(mess,"Could not allocate RAM for %lld frames\n", tns); - cprintf(RED, "%s", mess); - } - } -#endif } #endif if (ret==OK && differentClients) @@ -2918,8 +2088,6 @@ int get_time_left(int file_des) { #ifdef EIGERD case MEASURED_PERIOD: case MEASURED_SUBPERIOD: -#elif MYTHEND - case PROBES_NUMBER: #elif JUNGFRAUD case FRAMES_FROM_START: case FRAMES_FROM_START_PG: @@ -3086,7 +2254,7 @@ int set_readout_flags(int file_des) { enum readOutFlags retval=-1; sprintf(mess,"set readout flags failed\n"); -#if !defined(MYTHEND) && !defined(EIGERD) +#ifndef EIGERD //to receive any arguments while (n > 0) n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); @@ -3113,12 +2281,7 @@ int set_readout_flags(int file_des) { #endif switch(arg) { case GET_READOUT_FLAGS: -#ifdef MYTHEND - case TOT_MODE: - case NORMAL_READOUT: - case STORE_IN_RAM: - case CONTINOUS_RO: -#elif EIGERD +#ifdef EIGERD case STORE_IN_RAM: case CONTINOUS_RO: case PARALLEL: @@ -3303,13 +2466,7 @@ int set_speed(int file_des) { } break; #endif -#ifdef MYTHEND - case CLOCK_DIVIDER: - case WAIT_STATES: - case SET_SIGNAL_LENGTH: - case TOT_CLOCK_DIVIDER: - case TOT_DUTY_CYCLE: -#elif EIGERD +#ifdef EIGERD case CLOCK_DIVIDER: #elif JUNGFRAUD case CLOCK_DIVIDER: @@ -3353,92 +2510,6 @@ int set_speed(int file_des) { -int execute_trimming(int file_des) { - int ret=OK,ret1=OK; - int n=0; - sprintf(mess,"execute trimming failed\n"); - -#ifndef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Execute Trimming) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - - int retval=-1; - - // receive arguments - enum trimMode mode=0; - int arg[3]={-1,-1,-1}; - n = receiveData(file_des,&mode,sizeof(mode),INT32); - if (n < 0) return printSocketReadError(); - - n = receiveData(file_des,arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action - int imod, par1,par2; - imod=arg[0]; - par1=arg[1]; - par2=arg[2]; - if (differentClients && lockStatus) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else if (imod>=getTotalNumberOfModules()) { - ret = FAIL; - sprintf(mess,"Module Number (%d) is out of range\n"); - cprintf(RED, "Warning: %s", mess); - } - else { -#ifdef VERBOSE - printf("trimming module %d mode %d, parameters %d %d \n",imod,mode, par1, par2); -#endif - switch(mode) { - case NOISE_TRIMMING: - case BEAM_TRIMMING: - case IMPROVE_TRIMMING: - case FIXEDSETTINGS_TRIMMING: - retval=executeTrimming(mode, par1, par2, imod); - if ((ret!=OK) && (retval>0)) { - ret=FAIL; - sprintf(mess,"Could not trim %d channels\n", retval); - cprintf(RED, "Warning: %s", mess); - } - break; - default: - ret = FAIL; - sprintf(mess,"Trimming Mode (%d) is not implemented for this detector\n", (int) mode); - cprintf(RED, "Warning: %s", mess); - break; - } - - } -#endif - if (ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - - - - int exit_server(int file_des) { int ret=FAIL; @@ -3594,20 +2665,6 @@ int send_update(int file_des) { if (n < 0) return printSocketReadError(); -#ifdef SLS_DETECTOR_FUNCTION_LIST - nm=setNMod(GET_FLAG,X); -#endif - n = sendData(file_des,&nm,sizeof(nm),INT32); - if (n < 0) return printSocketReadError(); - - -#ifdef SLS_DETECTOR_FUNCTION_LIST - nm=setNMod(GET_FLAG,Y); -#endif - n = sendData(file_des,&nm,sizeof(nm),INT32); - if (n < 0) return printSocketReadError(); - - #ifdef SLS_DETECTOR_FUNCTION_LIST nm=setDynamicRange(GET_FLAG); #endif @@ -3623,13 +2680,13 @@ int send_update(int file_des) { #ifdef SLS_DETECTOR_FUNCTION_LIST - t=setSettings(GET_SETTINGS, GET_FLAG); + t=setSettings(GET_SETTINGS); #endif n = sendData(file_des,&t,sizeof(t),INT32); if (n < 0) return printSocketReadError(); -#if defined(MYTHEND) || defined(EIGERD) +#ifdef EIGERD #ifdef SLS_DETECTOR_FUNCTION_LIST nm=getThresholdEnergy(GET_FLAG); #endif @@ -3692,15 +2749,6 @@ int send_update(int file_des) { #endif -#ifdef MYTHEND -#ifdef SLS_DETECTOR_FUNCTION_LIST - retval=setTimer(PROBES_NUMBER,GET_FLAG); -#endif - n = sendData(file_des,&retval,sizeof(int64_t),INT64); - if (n < 0) return printSocketReadError(); -#endif - - #ifdef SLS_DETECTOR_FUNCTION_LIST retval=setTimer(CYCLES_NUMBER,GET_FLAG); #endif @@ -3726,15 +2774,6 @@ int configure_mac(int file_des) { int retval=-100; sprintf(mess,"configure mac failed\n"); -#ifdef MYTHEND - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - strcpy(mess,"Function (Configure MAC) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - // receive arguments char arg[6][50]; memset(arg,0,sizeof(arg)); @@ -3790,7 +2829,7 @@ int configure_mac(int file_des) { printf("detipad %x\n",detipad); printf("udp port2:0x%x\n",udpport2); printf("\n"); - printf("Configuring MAC of module %d at port %x\n", imod, udpport); + printf("Configuring MAC at port %x\n", udpport); #if defined(JUNGFRAUD) || defined(EIGERD) printf("Position: [%d,%d,%d]\n", pos[0],pos[1],pos[2]); @@ -3855,7 +2894,7 @@ int configure_mac(int file_des) { #endif if (differentClients) ret=FORCE_UPDATE; -#endif + // ret could be swapped during sendData ret1 = ret; @@ -3960,105 +2999,6 @@ int load_image(int file_des) { -int set_master(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum masterFlags arg=GET_MASTER; - enum masterFlags retval=GET_MASTER; - sprintf(mess,"set master failed\n"); - - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action - if (differentClients && lockStatus && ((int)arg!=(int)GET_MASTER)) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else { -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - retval=setMaster(arg); - if (retval==GET_MASTER) - ret=FAIL; - - if (ret==OK && differentClients) - ret=FORCE_UPDATE; - } -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } else - n += sendData(file_des,&retval,sizeof(retval),INT32); - - // return ok / fail - return ret; -} - - - - - - - -int set_synchronization(int file_des) { - int ret=OK,ret1=OK; - int n=0; - enum synchronizationMode arg=GET_SYNCHRONIZATION_MODE; - enum synchronizationMode retval=GET_SYNCHRONIZATION_MODE; - sprintf(mess,"synchronization mode failed\n"); - - // receive arguments - n = receiveData(file_des,&arg,sizeof(arg),INT32); - if (n < 0) return printSocketReadError(); - - // execute action - if (differentClients && lockStatus && ((int)arg!=(int)GET_SYNCHRONIZATION_MODE)) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else { -#ifdef VERBOSE - printf("setting master flags to %d\n",arg); -#endif - retval=setSynchronization(arg); - if (retval==GET_SYNCHRONIZATION_MODE) - ret=FAIL; - - if (ret==OK && differentClients) - ret=FORCE_UPDATE; - } -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } else - n += sendData(file_des,&retval,sizeof(retval),INT32); - - // return ok / fail - return ret; -} - - - - int read_counter_block(int file_des) { int ret=OK,ret1=OK; @@ -4335,7 +3275,7 @@ int set_all_trimbits(int file_des){ if(arg >= 0){ ret = setAllTrimbits(arg); //changes settings to undefined - setSettings(UNDEFINED,-1); + setSettings(UNDEFINED); cprintf(RED,"Settings has been changed to undefined (change all trimbits)\n"); } retval = getAllTrimbits(); @@ -4864,7 +3804,7 @@ int set_rate_correct(int file_des) { tau_ns = getDefaultSettingsTau_in_nsec(); else if(tau_ns > 0){ //changing tau to a user defined value changes settings to undefined - setSettings(UNDEFINED,-1); + setSettings(UNDEFINED); cprintf(RED,"Settings has been changed to undefined (tau changed)\n"); } @@ -5419,50 +4359,6 @@ int prepare_acquisition(int file_des) { } -int cleanup_acquisition(int file_des) { - int ret=OK,ret1=OK; - int n=0; - strcpy(mess,"prepare acquisition failed\n"); - -#ifndef GOTTHARDD - //to receive any arguments - while (n > 0) - n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); - ret = FAIL; - sprintf(mess,"Function (Cleanup Acquisition) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); -#else - - // execute action - if (differentClients && lockStatus) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); - cprintf(RED, "Warning: %s", mess); - } -#ifdef SLS_DETECTOR_FUNCTION_LIST - else {//to be implemented when used here - ret = FAIL; - sprintf(mess,"Function (Cleanup Acquisition) is not implemented for this detector\n"); - cprintf(RED, "Warning: %s", mess); - } -#endif - if(ret==OK && differentClients) - ret=FORCE_UPDATE; -#endif - - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - - // return ok / fail - return ret; -} - @@ -5480,14 +4376,14 @@ int threshold_temp(int file_des) { sprintf(mess,"Function (Threshold Temp) is not implemented for this detector\n"); cprintf(RED, "%s", mess); #else - int arg[2]={-1,-1}; + int arg=-1; int val=-1; // receive arguments - n = receiveData(file_des,arg,sizeof(arg),INT32); + n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - val=arg[0]; - //ignoring imod + + val=arg; if (val > MAX_THRESHOLD_TEMP_VAL) { ret=FAIL; sprintf(mess,"Threshold Temp %d should be in range: 0 - %d\n", val, MAX_THRESHOLD_TEMP_VAL); @@ -5542,15 +4438,13 @@ int temp_control(int file_des) { sprintf(mess,"Function (Temperature control) is not implemented for this detector\n"); cprintf(RED, "%s", mess); #else - int arg[2]={-1,-1}; + int arg=-1; int val=-1; // receive arguments - n = receiveData(file_des,arg,sizeof(arg),INT32); + n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - val=arg[0]; - //ignoring imod - + val=arg; #ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { @@ -5599,14 +4493,13 @@ int temp_event(int file_des) { sprintf(mess,"Function (Temperature Event) is not implemented for this detector\n"); cprintf(RED, "%s", mess); #else - int arg[2]={-1,-1}; + int arg=-1; int val=-1; // receive arguments - n = receiveData(file_des,arg,sizeof(arg),INT32); + n = receiveData(file_des,&arg,sizeof(arg),INT32); if (n < 0) return printSocketReadError(); - val=arg[0]; - //ignoring imod + val=arg; #ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { diff --git a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h index a4bbaeb64..7722bbe7b 100755 --- a/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h +++ b/slsDetectorSoftware/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.h @@ -17,41 +17,24 @@ int M_nofuncMode(int); // functions called by client int exec_command(int); -int get_error(int); int get_detector_type(int); -int set_number_of_modules(int); -int get_max_number_of_modules(int); int set_external_signal_flag(int); int set_external_communication_mode(int); int get_id(int); int digital_test(int); -int analog_test(int); -int enable_analog_out(int); -int calibration_pulse(int); int set_dac(int); int get_adc(int); int write_register(int); int read_register(int); -int write_memory(int); -int read_memory(int); -int set_channel(int); -int get_channel(int); -int set_all_channels(int); -int set_chip(int); -int get_chip(int); -int set_all_chips(int); int set_module(int); int get_module(int); -int set_all_modules(int); int set_settings(int); int get_threshold_energy(int); -int set_threshold_energy(int); int start_acquisition(int); int stop_acquisition(int); int start_readout(int); int get_run_status(int); int start_and_read_all(int); -int read_frame(int); int read_all(int); int set_timer(int); int get_time_left(int); @@ -59,7 +42,6 @@ int set_dynamic_range(int); int set_readout_flags(int); int set_roi(int); int set_speed(int); -int execute_trimming(int); int exit_server(int); int lock_server(int); int get_last_client_ip(int); @@ -68,8 +50,6 @@ int update_client(int); int send_update(int); int configure_mac(int); int load_image(int); -int set_master(int); -int set_synchronization(int); int read_counter_block(int); int reset_counter_block(int); int calibrate_pedestal(int); @@ -89,7 +69,6 @@ int reset_fpga(int); int power_chip(int); int set_activate(int); int prepare_acquisition(int); -int cleanup_acquisition(int); int threshold_temp(int); int temp_control(int); int temp_event(int); diff --git a/slsSupportLib/include/communication_funcs.c b/slsSupportLib/include/communication_funcs.c index 487b2c66e..2954b895d 100755 --- a/slsSupportLib/include/communication_funcs.c +++ b/slsSupportLib/include/communication_funcs.c @@ -361,40 +361,6 @@ int receiveData(int file_des, void* buf,int length, intType itype){ - - - - - - - - - - - -int sendChannel(int file_des, sls_detector_channel *myChan) { - int ts=0; - //sendDataOnly(file_des,myChan, sizeof(sls_detector_channel)); - ts+=sendData(file_des,&(myChan->chan),sizeof(myChan->chan),INT32); - ts+=sendData(file_des,&(myChan->chip),sizeof(myChan->chip),INT32); - ts+=sendData(file_des,&(myChan->module),sizeof(myChan->module),INT32); - ts+=sendData(file_des,&(myChan->reg),sizeof(myChan->reg),INT64); - return ts; -} - -int sendChip(int file_des, sls_detector_chip *myChip) { - int ts=0; - //ts+=sendDataOnly(file_des,myChip,sizeof(sls_detector_chip)); - ts+=sendData(file_des,&(myChip->chip),sizeof(myChip->chip),INT32); - ts+=sendData(file_des,&(myChip->module),sizeof(myChip->module),INT32); - ts+=sendData(file_des,&(myChip->nchan),sizeof(myChip->nchan),INT32); - ts+=sendData(file_des,&(myChip->reg),sizeof(myChip->reg),INT32); - ts+=sendData(file_des,(myChip->chanregs),sizeof(myChip->chanregs),INT32); - ts+=sendData(file_des,myChip->chanregs,myChip->nchan*sizeof(int),INT32); - return ts; -} - - int sendModule(int file_des, sls_detector_module *myMod) { return sendModuleGeneral(file_des, myMod, 1); } @@ -410,7 +376,6 @@ int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll) { int nAdcs=myMod->nadc; int nDacs=myMod->ndac; //ts+= sendDataOnly(file_des,myMod,sizeof(sls_detector_module)); - ts+=sendData(file_des,&(myMod->module),sizeof(myMod->module),INT32); ts+=sendData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); ts+=sendData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); ts+=sendData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); @@ -429,90 +394,38 @@ int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll) { ts+=sendData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER); #ifdef VERBOSE - printf("module %d of size %d sent\n",myMod->module, ts); + printf("module of size %d sent\n",ts); #endif - ts+= sendData(file_des,myMod->dacs,sizeof(dacs_t)*nDacs,INT32); + ts+= sendData(file_des,myMod->dacs,sizeof(int)*nDacs,INT32); #ifdef VERBOSE - printf("dacs %d of size %d sent\n",myMod->module, ts); + printf("dacs of size %d sent\n",ts); int idac; for (idac=0; idac< nDacs; idac++) printf("dac %d is %d\n",idac,(int)myMod->dacs[idac]); #endif - ts+= sendData(file_des,myMod->adcs,sizeof(dacs_t)*nAdcs,INT32); + ts+= sendData(file_des,myMod->adcs,sizeof(int)*nAdcs,INT32); #ifdef VERBOSE - printf("adcs %d of size %d sent\n",myMod->module, ts); + printf("adcs of size %d sent\n", ts); #endif /*some detectors dont require sending all trimbits etc.*/ if(sendAll){ ts+=sendData(file_des,myMod->chipregs,sizeof(int)*nChips,INT32); #ifdef VERBOSE - printf("chips %d of size %d sent\n",myMod->module, ts); + printf("chips of size %d sent\n", ts); #endif ts+=sendData(file_des,myMod->chanregs,sizeof(int)*nChans,INT32); #ifdef VERBOSE - printf("chans %d of size %d sent - %d\n",myMod->module, ts, myMod->nchan); + printf("chans of size %d sent - %d\n", ts, myMod->nchan); #endif } #ifdef VERBOSE - printf("module %d of size %d sent register %x\n",myMod->module, ts, myMod->reg); + printf("module of size %d sent register %x\n", ts, myMod->reg); #endif return ts; } -int receiveChannel(int file_des, sls_detector_channel *myChan) { - int ts=0; - //receiveDataOnly(file_des,myChan,sizeof(sls_detector_channel)); - ts+=receiveData(file_des,&(myChan->chan),sizeof(myChan->chan),INT32); - ts+=receiveData(file_des,&(myChan->chip),sizeof(myChan->chip),INT32); - ts+=receiveData(file_des,&(myChan->module),sizeof(myChan->module),INT32); - ts+=receiveData(file_des,&(myChan->reg),sizeof(myChan->reg),INT32); - return ts; -} - -int receiveChip(int file_des, sls_detector_chip* myChip) { - - int *ptr=myChip->chanregs; - int ts=0; - int nChans, nchanold=myChip->nchan, chdiff; - - //ts+= receiveDataOnly(file_des,myChip,sizeof(sls_detector_chip)); - ts+=receiveData(file_des,&(myChip->chip),sizeof(myChip->chip),INT32); - ts+=receiveData(file_des,&(myChip->module),sizeof(myChip->module),INT32); - ts+=receiveData(file_des,&(myChip->nchan),sizeof(myChip->nchan),INT32); - ts+=receiveData(file_des,&(myChip->reg),sizeof(myChip->reg),INT32); - ts+=receiveData(file_des,(myChip->chanregs),sizeof(myChip->chanregs),INT32); - - myChip->chanregs=ptr; - nChans=myChip->nchan; - chdiff=nChans-nchanold; - if (nchanold!=nChans) { - printf("wrong number of channels received!\n"); - } - - -#ifdef VERBOSE - printf("chip structure received\n"); - printf("now receiving %d channels\n", nChans); -#endif - - if (chdiff<=0) - ts+=receiveData(file_des,myChip->chanregs, sizeof(int)*nChans,INT32); - else { - ptr=(int*)malloc(chdiff*sizeof(int)); - myChip->nchan=nchanold; - ts+=receiveData(file_des,myChip->chanregs, sizeof(int)*nchanold,INT32); - ts+=receiveData(file_des,ptr, sizeof(int)*chdiff,INT32); - free(ptr); - return FAIL; - } - -#ifdef VERBOSE - printf("chip's channels received\n"); -#endif - return ts; -} int receiveModule(int file_des, sls_detector_module* myMod) { @@ -521,8 +434,8 @@ int receiveModule(int file_des, sls_detector_module* myMod) { int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll) { int ts=0; - dacs_t *dacptr=myMod->dacs; - dacs_t *adcptr=myMod->adcs; + int *dacptr=myMod->dacs; + int *adcptr=myMod->adcs; int *chipptr=myMod->chipregs, *chanptr=myMod->chanregs; int nChips, nchipold=myMod->nchip, nchipdiff; int nChans, nchanold=myMod->nchan, nchandiff; @@ -532,7 +445,6 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA int id=0; #endif // ts+= receiveDataOnly(file_des,myMod,sizeof(sls_detector_module)); - ts+=receiveData(file_des,&(myMod->module),sizeof(myMod->module),INT32); ts+=receiveData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32); ts+=receiveData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32); ts+=receiveData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32); @@ -604,7 +516,7 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA printf("received %d adcs\n",nAdcs); #endif if (ndacdiff<=0) { - ts+=receiveData(file_des,myMod->dacs, sizeof(dacs_t)*nDacs,INT32); + ts+=receiveData(file_des,myMod->dacs, sizeof(int)*nDacs,INT32); #ifdef VERBOSE printf("dacs received\n"); int id; @@ -614,24 +526,24 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA #endif } else { - dacptr=(dacs_t*)malloc(ndacdiff*sizeof(dacs_t)); + dacptr=(int*)malloc(ndacdiff*sizeof(int)); myMod->ndac=ndold; - ts+=receiveData(file_des,myMod->dacs, sizeof(dacs_t)*ndold,INT32); - ts+=receiveData(file_des,dacptr, sizeof(dacs_t)*ndacdiff,INT32); + ts+=receiveData(file_des,myMod->dacs, sizeof(int)*ndold,INT32); + ts+=receiveData(file_des,dacptr, sizeof(int)*ndacdiff,INT32); free(dacptr); return FAIL; } if (nadcdiff<=0) { - ts+=receiveData(file_des,myMod->adcs, sizeof(dacs_t)*nAdcs,INT32); + ts+=receiveData(file_des,myMod->adcs, sizeof(int)*nAdcs,INT32); #ifdef VERBOSE printf("adcs received\n"); #endif } else { - adcptr=(dacs_t*)malloc(nadcdiff*sizeof(dacs_t)); + adcptr=(int*)malloc(nadcdiff*sizeof(int)); myMod->nadc=naold; - ts+=receiveData(file_des,myMod->adcs, sizeof(dacs_t)*naold,INT32); - ts+=receiveData(file_des,adcptr, sizeof(dacs_t)*nadcdiff,INT32); + ts+=receiveData(file_des,myMod->adcs, sizeof(int)*naold,INT32); + ts+=receiveData(file_des,adcptr, sizeof(int)*nadcdiff,INT32); free(adcptr); return FAIL; } @@ -669,7 +581,7 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA } } #ifdef VERBOSE - printf("received module %d of size %d register %x\n",myMod->module,ts,myMod->reg); + printf("received module of size %d register %x\n",ts,myMod->reg); #endif return ts; diff --git a/slsSupportLib/include/communication_funcs.h b/slsSupportLib/include/communication_funcs.h index e4e3fac27..4d41098cd 100755 --- a/slsSupportLib/include/communication_funcs.h +++ b/slsSupportLib/include/communication_funcs.h @@ -39,12 +39,8 @@ int receiveDataOnly(int file_des, void* buf,int length); int getServerError(int socketDescriptor); -int sendChannel(int file_des, sls_detector_channel *myChan); -int sendChip(int file_des, sls_detector_chip *myChip); int sendModule(int file_des, sls_detector_module *myMod); int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll); -int receiveChannel(int file_des, sls_detector_channel *myChan); -int receiveChip(int file_des, sls_detector_chip* myChip); int receiveModule(int file_des, sls_detector_module* myMod); int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll); diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index a6f21665a..876da5437 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -213,11 +213,8 @@ enum idMode{ detector digital test modes */ enum digitalTestMode { - CHIP_TEST, /**< test chips */ - MODULE_FIRMWARE_TEST, /**< test module firmware */ DETECTOR_FIRMWARE_TEST, /**< test detector system firmware */ - DETECTOR_MEMORY_TEST, /**< test detector system memory */ - DETECTOR_SOFTWARE_TEST, /**< test detector system software */ + DETECTOR_BUS_TEST, /**< test detector system CPU-FPGA bus */ DIGITAL_BIT_TEST /**< gotthard digital bit test */ }; diff --git a/slsSupportLib/include/sls_detector_funcs.h b/slsSupportLib/include/sls_detector_funcs.h index 0a0022f04..648622b81 100644 --- a/slsSupportLib/include/sls_detector_funcs.h +++ b/slsSupportLib/include/sls_detector_funcs.h @@ -9,118 +9,65 @@ #define SLS_DETECTOR_FUNCS_H enum detFuncs{ - - // General purpose functions F_EXEC_COMMAND=0, /**< command is executed */ - F_GET_ERROR, /**< return detector error status */ - - // configuration functions F_GET_DETECTOR_TYPE, /**< return detector type */ - F_SET_NUMBER_OF_MODULES, /**< set/get number of installed modules */ - F_GET_MAX_NUMBER_OF_MODULES, /**< get maximum number of installed modules */ F_SET_EXTERNAL_SIGNAL_FLAG, /**< set/get flag for external signal */ F_SET_EXTERNAL_COMMUNICATION_MODE, /**< set/get external communication mode (obsolete) */ - - // Tests and identification F_GET_ID, /**< get detector id of version */ F_DIGITAL_TEST, /**< digital test of the detector */ - F_ANALOG_TEST, /**