diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c index da4d19085..e0af9fccb 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c @@ -278,7 +278,7 @@ int setPhaseShiftOnce(){ bus_w(addr,(CHANGE_AT_POWER_ON_BIT|//DIGITAL_TEST_BIT| INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT&~PHASE_STEP_BIT)); } - + reg=bus_r(addr); #ifdef VERBOSE printf("Multipupose reg now:%d\n",reg); #endif @@ -960,11 +960,12 @@ int setDACRegister(int idac, int val, int imod) { u_int32_t addr, reg, mask; int off; #ifdef VERBOSE - printf("Settings dac %d module %d register to %d\n",idac,imod,val); + 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 - // addr=DUMMY_REG; - //off=0; switch(idac){ case 0: case 1: @@ -1094,22 +1095,39 @@ int initHighVoltage(int val, int imod){ -int initConfGain(int val, int imod){ -#ifdef VERBOSE - printf("Setting/Getting confgain of module:%d with val:%d\n",imod,val); -#endif +int initConfGain(int isettings,int val,int imod){ + int retval; u_int32_t addr=GAIN_REG; + if(val!=-1){ - bus_w(addr,val); #ifdef VERBOSE - printf("Value sent to confGain reg is %d\n",val); -#endif + 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; } diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h index 5e84efeb5..da6949223 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.h @@ -51,9 +51,9 @@ int setContinousReadOut(int d); int setDACRegister(int idac, int val, int imod); -float getTemperature(int tempSensor, int imod); -int initHighVoltage(int val, int imod); -int initConfGain(int val, int imod); +float getTemperature(int tempSensor,int imod); +int initHighVoltage(int val,int imod); +int initConfGain(int isettings,int val,int imod); int configureMAC(int ipad, long long int macad, long long int servermacad, int ival); diff --git a/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.c index 0dbea34c0..5c0388bbd 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.c @@ -667,7 +667,7 @@ int setThresholdEnergy(int ethr) { int imod; int ret=ethr; - setSettings(GET_SETTINGS); + setSettings(GET_SETTINGS,-1);//-1 added by dhanya if (thisSettings>=0 || thisSettings<3){ myg=g[thisSettings]; myo=o[thisSettings]; @@ -780,21 +780,20 @@ int initHighVoltageByModule(int val, int imod) } -int initConfGainByModule(int val, int imod) +int initConfGainByModule(int isettings,int val, int imod) { int im; //for the particular module if (imod>=0 && imod=HIGHGAIN) && (i<= VERYHIGHGAIN)) { - v[VREF_DS]=vrefds[i]; - v[VCASCN_PB]=vcascn[i]; - v[VCASCP_PB]=vcascp[i]; - v[VOUT_CM]=voutcm[i]; - v[VCASC_OUT]=vcascout[i]; - v[VIN_CM]=vincm[i]; - v[VREF_COMP]=vrefcomp[i]; - v[IB_TESTC]=ibtestc[i]; - - initDACs(v,ALLMOD); - thisSettings=i; + //reading settings + if(i==GET_SETTINGS){ + retval=initConfGainByModule(i,i,imod); + if(retval==i) + isett=UNDEFINED; } - - //check settings for module 0 - imod=0; - isett=UNDEFINED; - ivrefds=setDACRegister(VREF_DS,-1,imod); - ivcascn=setDACRegister(VCASCN_PB,-1,imod); - ivcascp=setDACRegister(VCASCP_PB,-1,imod); - ivoutcm=setDACRegister(VOUT_CM,-1,imod); - ivcascout=setDACRegister(VCASC_OUT,-1,imod); - ivincm=setDACRegister(VIN_CM,-1,imod); - ivrefcomp=setDACRegister(VREF_COMP,-1,imod); - iibtestc=setDACRegister(IB_TESTC,-1,imod); - - for (is=HIGHGAIN; is=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 and confGain is %d\n",isett,initConfGainByModule(-1,-1)); + printf("detector settings are %d\n",thisSettings); #endif - if (isett==UNDEFINED && thisSettings==UNINITIALIZED) - ; - else - thisSettings=isett; return thisSettings; } @@ -1652,17 +1588,10 @@ int initModulebyNumber(sls_detector_module myMod) { copyModule(detectorModules+im,&myMod); } } - thisSettings=UNDEFINED; - setSettings(GET_SETTINGS); - int confgain[] = CONF_GAIN; - if ((thisSettings>=HIGHGAIN) && (thisSettings<= VERYHIGHGAIN)) { - int retval=initConfGainByModule(confgain[thisSettings],imod); - if(retval!=confgain[thisSettings]){ - printf("Weird Value read from the confGain Reg, changing settings to UNDEFINED",retval); - thisSettings=UNDEFINED; - return -1; - } - } + + //setting the conf gain and the settings register + setSettings(myMod.reg,imod); + return myMod.reg; } diff --git a/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.h b/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.h index c33d9520d..05d9fc9c4 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.h +++ b/slsDetectorSoftware/gotthardDetectorServer/mcb_funcs.h @@ -10,14 +10,6 @@ #define RGSH2VALS {260,300,260} //high,dynamic,low,medium,very high -#define VREFDS_VALS {0,0,200,300,400,500,600} -#define VCASCN_VALS {0,0,220,320,420,520,620} -#define VCASCP_VALS {0,0,240,340,440,540,640} -#define VOUTCM_VALS {0,0,260,360,460,560,660} -#define VCASCOUT_VALS {0,0,280,380,480,580,680} -#define VINCM_VALS {0,0,300,400,500,600,700} -#define VREFCOMP_VALS {0,0,320,420,520,620,720} -#define IBTESTC_VALS {0,0,340,440,540,640,740} #define CONF_GAIN {0,0, 0, 1, 6, 2, 1}//dynamic gain confgain yet to be figured out-probably 8 or 16 @@ -115,7 +107,7 @@ int program_one_dac(int addr, int value,int imod ); int set_one_dac(int imod); int initDAC(int dac_addr, int value,int imod ); int initDACs(int* v,int imod ); -int setSettings(int i); +int setSettings(int i,int imod); float initDACbyIndex(int ind,float val, int imod); float initDACbyIndexDACU(int ind,int val, int imod); float getDACbyIndexDACU(int ind, int imod); @@ -125,7 +117,7 @@ int setThresholdEnergy(int ethr); /* Other DAC index routines*/ float getTemperatureByModule(int tempSensor, int imod); int initHighVoltageByModule(int val, int imod); -int initConfGainByModule(int val, int imod); +int initConfGainByModule(int isettings,int val,int imod); /* Initialization*/ int initChannel(int ft,int cae, int ae, int coe, int ocoe, int counts,int imod ); diff --git a/slsDetectorSoftware/gotthardDetectorServer/registers_g.h b/slsDetectorSoftware/gotthardDetectorServer/registers_g.h index 7290e7819..6e13037f0 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/registers_g.h +++ b/slsDetectorSoftware/gotthardDetectorServer/registers_g.h @@ -207,33 +207,32 @@ /* multi purpose register */ #define PHASE_STEP_BIT 0x00000001 #define PHASE_STEP_OFFSET 0 - /* #define READOUT_BUSY_BIT 0x00000002 #define FIFOTEST_BUSY_BIT 0x00000004 #define WAITING_FOR_TRIGGER_BIT 0x00000008 #define DELAYBEFORE_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 + + #endif diff --git a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c index 0a13774c6..76adeb599 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c @@ -73,7 +73,7 @@ int init_detector( int b) { setDummyRegister(); setPhaseShiftOnce(); setDAQRegister(); - setSettings(GET_SETTINGS); + setSettings(GET_SETTINGS,-1); //testRAM(); @@ -1435,10 +1435,6 @@ int set_module(int file_des) { } else { #ifdef MCB_FUNCS retval=initModulebyNumber(myModule); - if(retval==-1){ - ret=FAIL; - strcpy(mess,"Cannot set this settings as confGain register read back weird value\n"); - } #endif } } @@ -1712,10 +1708,10 @@ int set_settings(int file_des) { sprintf(mess,"Detector locked by %s\n",lastClientIP); } else { #ifdef MCB_FUNCS - retval=setSettings(arg[0]); + retval=setSettings(arg[0],imod); #endif #ifdef VERBOSE - printf("Settings changed to %d\n", isett); + printf("Settings changed to %d\n",retval); #endif if (retval==isett || isett<0) {