diff --git a/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c b/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c index ce81ec8b2..5d73fc0e0 100755 --- a/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c @@ -50,6 +50,7 @@ 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}; +int withGotthard = 0; #ifdef MCB_FUNCS extern const int nChans; @@ -177,6 +178,7 @@ int mapCSP0(void) { 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; } @@ -256,7 +258,7 @@ int setPhaseShiftOnce(){ int cleanFifo(){ u_int32_t addr, reg, val; - printf("\nCleaning FIFO\n"); + printf("Cleaning FIFO\n"); addr=ADC_SYNC_REG; //88332214 @@ -295,7 +297,7 @@ int setDAQRegister() //depended on pcb rev int tokenTiming = TOKEN_TIMING_REV2; - if(bus_r(PCB_REV_REG)==1) + if((bus_r(PCB_REV_REG)&BOARD_REVISION_MASK)==1) tokenTiming= TOKEN_TIMING_REV1; @@ -763,7 +765,7 @@ u_int32_t getFirmwareSVNVersion(){ // for fpga test u_int32_t testFpga(void) { - printf("Test FPGA:\n"); + printf("Testing FPGA:\n"); volatile u_int32_t val,addr,val2; int result=OK,i; //fixed pattern @@ -812,8 +814,9 @@ u_int32_t testFpga(void) { { printf("----------------------------------------------------------------------------------------------"); printf("\nATTEMPT 1000000: FPGA DUMMY REGISTER OK!!!\n"); - printf("----------------------------------------------------------------------------------------------\n"); + printf("----------------------------------------------------------------------------------------------"); } + printf("\n"); return result; } @@ -825,7 +828,7 @@ u_int32_t testRAM(void) { allocateRAM(); // while(i<100000) { memcpy(ram_values, values, dataBytes); - printf ("Test RAM:\t%d: copied fifo %x to memory %x size %d\n",i++, (unsigned int)(values), (unsigned int)(ram_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; } @@ -1192,7 +1195,7 @@ int initConfGain(int isettings,int val,int imod){ int setADC(int adc){ - int reg,nchips,mask; + int reg,nchips,mask,nchans; if(adc==-1) ROI_flag=0; else ROI_flag=1; @@ -1200,33 +1203,46 @@ int setADC(int adc){ setDAQRegister();//token timing cleanFifo();//adc sync - //all adc - if(adc==-1){ + //with gotthard module + if(withGotthard){ //set packet size ipPacketSize= DEFAULT_IP_PACKETSIZE; udpPacketSize=DEFAULT_UDP_PACKETSIZE; //set channel mask nchips = GOTTHARDNCHIP; + nchans = GOTTHARDNCHAN; mask = ACTIVE_ADC_MASK; } - //1 adc + + //with moench module all adc + else{/* 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<0) { - nm=setNMod(-1); - if (dr==1) { - dynamicRange=1; - ow=5; - } else if (dr<=4) { - dynamicRange=4; - ow=4; - } else if (dr<=8) { - dynamicRange=8; - ow=3; - } else if (dr<=16) { - dynamicRange=16; - ow=2; - } else { - dynamicRange=32; - ow=0; //or 1? - } - setCSregister(ALLMOD); - initChipWithProbes(0, ow,np, ALLMOD); - putout("0000000000000000",ALLMOD); - setNMod(nm); - } - */ - return getDynamicRange(); } @@ -1733,46 +1709,6 @@ int setDynamicRange(int dr) { int getDynamicRange() { - /* - int dr; - u_int32_t shiftin=bus_r(GET_SHIFT_IN_REG); - u_int32_t outmux=(shiftin >> OUTMUX_OFF) & OUTMUX_MASK; - u_int32_t probes=(shiftin >> PROBES_OFF) & PROBES_MASK; -#ifdef VERYVERBOSE - printf("%08x ",shiftin); - printf("outmux=%02x probes=%d\n",outmux,probes); -#endif - - switch (outmux) { - case 2: - dr=16; - break; - case 4: - dr=8; - break; - case 8: - dr=4; - break; - case 16: - dr=1; - break; - default: - dr=32; - } - dynamicRange=dr; - if (probes==0) { - dataBytes=nModX*nModY*NCHIP*NCHAN*dynamicRange/8; - } else { - dataBytes=nModX*nModY*NCHIP*NCHAN*4;/// - } -#ifdef VERBOSE - printf("Number of data bytes %d - probes %d dr %d\n", dataBytes, probes, dr); -#endif - if (allocateRAM()==OK) { - ; - } else - printf("ram not allocated\n"); -*/ dynamicRange=16; return dynamicRange; @@ -1891,6 +1827,7 @@ int allocateRAM() { } int prepareADC(){ + printf("Preparing ADC\n"); u_int32_t valw,codata,csmask; int i,cdx,ddx; cdx=0; ddx=1; @@ -1901,12 +1838,18 @@ int prepareADC(){ valw=0xff; bus_w(ADC_WRITE_REG,(valw)); // start point valw=((0xffffffff&(~csmask)));bus_w(ADC_WRITE_REG,valw); //chip sel bar down for (i=0;i<24;i++) { - valw=valw&(~(0x1<>(23-i))&0x1)< 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("opening stop server on port %d\n",portno); + printf("\n\nStop Server\nOpening stop server on port %d\n",portno); } - init_detector(b); + + //control server + else { + portno = DEFAULT_PORTNO; + if(checkType) + sprintf(cmd,"%s %d stopserver &",argv[0],DEFAULT_PORTNO+1); + else + sprintf(cmd,"%s %d stopserver -test with_gotthard &",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, checkType); sd=bindSocket(portno); - sockfd=sd; - - if (getServerError(sd)) { printf("server error!\n"); return -1; diff --git a/slsDetectorSoftware/moenchDetectorServer/server_defs.h b/slsDetectorSoftware/moenchDetectorServer/server_defs.h index d6821563f..2a77d68c0 100755 --- a/slsDetectorSoftware/moenchDetectorServer/server_defs.h +++ b/slsDetectorSoftware/moenchDetectorServer/server_defs.h @@ -8,23 +8,23 @@ // Hardware definitions -#define NCHAN 160*160 +#define NCHAN (160*160) #define NCHIP 1 #define NMAXMODX 1 #define NMAXMODY 1 -#define NMAXMOD NMAXMODX*NMAXMODY +#define NMAXMOD (NMAXMODX*NMAXMODY) #define NDAC 8 #define NADC 1 -/**change this for the real moench chip*/ +/**when moench readout tested with gotthard module*/ #define GOTTHARDNCHAN 128 #define GOTTHARDNCHIP 10 -#define NCHANS NCHAN*NCHIP*NMAXMOD -#define NDACS NDAC*NMAXMOD +#define NCHANS (NCHAN*NCHIP*NMAXMOD) +#define NDACS (NDAC*NMAXMOD) #define NTRIMBITS 6 #define NCOUNTBITS 24 diff --git a/slsDetectorSoftware/moenchDetectorServer/server_funcs.c b/slsDetectorSoftware/moenchDetectorServer/server_funcs.c index 94504e650..010c71071 100755 --- a/slsDetectorSoftware/moenchDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/moenchDetectorServer/server_funcs.c @@ -53,39 +53,44 @@ char mess[1000]; int digitalTestBit = 0; - +extern int withGotthard; -int init_detector( int b) { -#ifndef PICASSOD - printf("This is a MOENCH detector with %d chips per module\n", NCHIP); -#else - printf("This is a PICASSO detector with %d chips per module\n", NCHIP); -#endif +int init_detector(int b, int checkType) { if (mapCSP0()==FAIL) { printf("Could not map memory\n"); exit(1); } - //testFpga(); + //confirm if it is really moench + if(((bus_r(PCB_REV_REG) & DETECTOR_TYPE_MASK)>>DETECTOR_TYPE_OFFSET) != MOENCH_MODULE ){ + if(checkType){ + printf("This is a Gotthard detector. Exiting Moench Server.\n\n"); + exit(-1); + } + //no check required as specified in command line arguments + else if(b){ + printf("***This is a GOTTHARD detector with %d chips per module***\n",GOTTHARDNCHIP); + printf("***Assuming this to be a MOENCH detector***\n"); + } + withGotthard = 1; + } + if (b) { + int reg; #ifdef MCB_FUNCS + printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK)); initDetector(); - printf("\n***initdetector done*** \n\n"); + printf("Initializing Detector\n"); #endif testFpga(); testRAM(); + //moench specific setPhaseShiftOnce(); - prepareADC(); setADC(-1); //already does setdaqreg and clean fifo - printf("in chip of interes reg:%d\n",bus_r(CHIP_OF_INTRST_REG)); - int reg = /*NCHAN*40;*/(GOTTHARDNCHAN*GOTTHARDNCHIP)<