included command to get detector firmware svn version

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@261 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d 2012-09-19 12:09:00 +00:00
parent 8cc957f109
commit 32621b1916
7 changed files with 31 additions and 164 deletions

View File

@ -273,7 +273,8 @@ enum idMode{
DETECTOR_SERIAL_NUMBER, /**<return detector system serial number */
DETECTOR_FIRMWARE_VERSION, /**<return detector system firmware version */
DETECTOR_SOFTWARE_VERSION, /**<return detector system software version */
THIS_SOFTWARE_VERSION /**<return this software version */
THIS_SOFTWARE_VERSION, /**<return this software version */
DETECTOR_FIRMWARE_SVN_VERSION /**<return detector system firmware svn version */
};
/**
detector digital test modes

View File

@ -705,7 +705,7 @@ int setContinousReadOut(int d) {
}
u_int64_t getMcsNumber() {
u_int64_t getDetectorNumber() {
FILE *fp=NULL;
u_int64_t res;
@ -737,11 +737,15 @@ u_int64_t getMcsNumber() {
return res;
}
u_int32_t getMcsVersion() {
u_int32_t getFirmwareVersion() {
return bus_r(FPGA_VERSION_REG);
//return MCSVERSION;
}
u_int32_t getFirmwareSVNVersion(){
return bus_r(FPGA_SVN_REG);
}
// for fpga test
u_int32_t testFpga(void) {
printf("Test FPGA:\n");
@ -755,15 +759,6 @@ u_int32_t testFpga(void) {
printf("fixed pattern wrong!! %08x\n",val);
result=FAIL;
}
//FPGA code version
val=bus_r(FPGA_VERSION_REG)&0x00ffffff;
if (val>=(FPGA_VERSION_VAL&0x00ffffff)) {
printf("FPGA version ok!! %06x\n",val);
} else {
printf("FPGA version too old! %06x\n",val);
result= FAIL;
}
//dummy register
addr = DUMMY_REG;
@ -821,129 +816,10 @@ u_int32_t testRAM(void) {
}
int getNModBoard() {
int nmodboard;
u_int32_t val;
val=bus_r(FPGA_VERSION_REG)&0xff000000;
nmodboard=val >> 24;
#ifdef VERY_VERBOSE
printf("The board hosts %d modules\n",nmodboard);
#endif
nModBoard=nmodboard;
return nmodboard;
return nModX;
}
int setNMod(int n) {
/* commented out by dhanya
// int fifo;
// int ifsta, ifsto, ifste;
int imod;
int rval;
int reg;
int nf=0;
int shiftfifo=SHIFTFIFO;
int ntot=getNModBoard();
if (getProbes()==0) {
switch (dynamicRange) {
case 16:
shiftfifo=SHIFTFIFO-1;
break;
case 8:
shiftfifo=SHIFTFIFO-2;
break;
case 4:
shiftfifo=SHIFTFIFO-3;
break;
case 1:
shiftfifo=SHIFTFIFO-5;
break;
default:
shiftfifo=SHIFTFIFO;
break;
}
} else
shiftfifo=SHIFTFIFO;
#ifdef VERBOSE
printf("SetNMod called arg %d -- dr %d shiftfifo %d\n",n,dynamicRange,shiftfifo);
#endif
if (n>0 && n<=ntot) {
nModX=n;
//d isable the fifos relative to the unused modules
for (ififo=0; ififo<ntot*NCHIP; ififo++) {
reg=bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo));
if (ififo<n*NCHIP) {
if (reg&FIFO_DISABLED_BIT) {
bus_w(FIFO_CNTRL_REG_OFF+(ififo<<shiftfifo), FIFO_DISABLE_TOGGLE_BIT);
#ifdef VERBOSE
if (bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo))&FIFO_DISABLED_BIT) {
printf("Fifo %d is %x (nm %d nc %d addr %08x)",ififo,reg, (reg&FIFO_NM_MASK)>>FIFO_NM_OFF, (reg&FIFO_NC_MASK)>>FIFO_NC_OFF, FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo));
printf(" enabling %08x\n",bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo)));
}
#endif
}
//#ifdef VERBOSE
//else printf(" unmodified ",ififo,reg);
//#endif
} else {
if ((reg&FIFO_ENABLED_BIT)) {
bus_w(FIFO_CNTRL_REG_OFF+(ififo<<shiftfifo), FIFO_DISABLE_TOGGLE_BIT);
#ifdef VERBOSE
if ((bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo))&FIFO_ENABLED_BIT)) {
printf("Fifo %d is %x (nm %d nc %d addr %08x)",ififo,reg, (reg&FIFO_NM_MASK)>>FIFO_NM_OFF, (reg&FIFO_NC_MASK)>>FIFO_NC_OFF, FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo));
printf(" disabling %08x\n",bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo)));
}
#endif
}
//#ifdef VERBOSE
//else printf(" unmodified ",ififo,reg);
//#endif
}
//#ifdef VERBOSE
//printf(" done %x\n",bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo)));
//#endif
}
}
// ifste=dynamicRange/32;
nModX=0;
nf=0;
for (imod=0; imod<ntot; imod++) {
rval=0;
for (ififo=imod*NCHIP; ififo<(imod+1)*NCHIP; ififo++) {
bus_w(FIFO_CNTRL_REG_OFF+(ififo<<shiftfifo), FIFO_RESET_BIT);
#ifdef VERBOSE
printf("%08x ",(bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo))));
#endif
if ((bus_r(FIFO_COUNTR_REG_OFF+(ififo<<shiftfifo))&FIFO_ENABLED_BIT)){
rval=1; // checks if at least one fifo of the module is enabled
#ifdef VERBOSE
printf("Fifo %d is enabled\n",ififo);
#endif
nf++;
}
#ifdef VERBOSE
else printf("Fifo %d is disabled\n",ififo);
#endif
}
if (rval) {
nModX++;
#ifdef VERBOSE
printf("Module %d is enabled --total %d (%d fifos)\n",imod,nModX,nf );
#endif
}
#ifdef VERBOSE
else printf("Module %d is disabled --total %d (%d fifos)\n",imod,nModX,nf );
#endif
}
#ifdef VERBOSE
printf("There are %d modules enabled (%d fifos)\n",nModX, nf);
#endif
getDynamicRange();
*/
return nModX;
}

View File

@ -62,8 +62,8 @@ int initConfGain(int isettings,int val,int imod);
int configureMAC(int ipad, long long int macad, long long int servermacad, int ival);
u_int64_t getMcsNumber();
u_int32_t getMcsVersion();
u_int64_t getDetectorNumber();
u_int32_t getFirmwareVersion();
int testFifos(void);
u_int32_t testFpga(void);
u_int32_t testRAM(void);

View File

@ -10,9 +10,9 @@
/* values defined for FPGA */
#define MCSNUM 0x0
#define MCSVERSION 0x101
#define FIXED_PATT_VAL 0xacdc1980
#define FPGA_VERSION_VAL 0x01110825 //0x00090514
#define FPGA_INIT_PAT 0x60008
#define FPGA_INIT_ADDR 0xb0000000
@ -41,6 +41,8 @@
//#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
@ -48,6 +50,7 @@
#define STATUS_REG 0x25<<11
#define CONFIG_REG 0x26<<11
#define EXT_SIGNAL_REG 0x27<<11
#define FPGA_SVN_REG 0x29<<11
//FIFO

View File

@ -40,5 +40,5 @@
#define CLK_FREQ 32.1E+6
#define THIS_SOFTWARE_VERSION 0x20100429
#define THIS_SOFTWARE_VERSION 0x20120919
#endif

View File

@ -565,39 +565,18 @@ int get_id(int file_des) {
#endif
switch (arg) {
case MODULE_SERIAL_NUMBER:
n = receiveDataOnly(file_des,&imod,sizeof(imod));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
retval=FAIL;
} else {
#ifdef VERBOSE
printf("of module %d\n", imod);
#endif
if (imod>=0 && imod<=getNModBoard()) {
#ifdef MCB_FUNCS
retval=getModuleNumber(imod);
#endif
;
}
else {
sprintf(mess,"Module number %d out of range\n",imod);
ret=FAIL;
}
}
break;
case MODULE_FIRMWARE_VERSION:
retval=0x1;
break;
case DETECTOR_SERIAL_NUMBER:
retval=getMcsNumber();
retval=getDetectorNumber();
break;
case DETECTOR_FIRMWARE_VERSION:
retval=getMcsVersion();
retval=getFirmwareVersion();
break;
case DETECTOR_SOFTWARE_VERSION:
retval=THIS_SOFTWARE_VERSION;
break;
case DETECTOR_FIRMWARE_SVN_VERSION:
retval=getFirmwareSVNVersion();
break;
default:
printf("Required unknown id %d \n", arg);
ret=FAIL;

View File

@ -391,6 +391,10 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSN;
i++;
descrToFuncMap[i].m_pFuncName="detectorsvnversion"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSN;
i++;
/* digital test and debugging */
@ -2541,6 +2545,10 @@ string slsDetectorCommand::cmdSN(int narg, char *args[], int action) {
return string(answer);
}
if (cmd=="detectorsvnversion") {
sprintf(answer,"%llx",myDet->getId(DETECTOR_FIRMWARE_SVN_VERSION));
return string(answer);
}
return string("unknown id mode ")+cmd;
}