included propix for client

This commit is contained in:
Dhanya Maliakal 2015-07-21 16:26:50 +02:00
parent 74fc443db5
commit a8fc34c92b
6 changed files with 176 additions and 32 deletions

View File

@ -0,0 +1,48 @@
# $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 trimming_funcs.c sharedmemory.c
OBJS = $(SRCS:%.c=%.o)
all: clean $(PROGS)
boot: $(OBJS)
$(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

View File

@ -20,6 +20,8 @@ int (*flist[256])(int);
//defined in the detector specific file
#ifdef MYTHEND
const enum detectorType myDetectorType=MYTHEN;
#elif PROPIXD
const enum detectorType myDetectorType=PROPIX;
#elif GOTTHARDD
const enum detectorType myDetectorType=GOTTHARD;
#elif EIGERD
@ -67,8 +69,12 @@ int init_detector( int b) {
}
if (b) {
printf("***This is a GOTTHARD detector with %d chips per module***\n", NCHIP);
printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK));
#ifdef PROPIXD
printf("***This is a PROPIX detector***\n");
#else
printf("***This is a GOTTHARD detector with %d chips per module***\n", NCHIP);
#endif
printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK));
#ifdef MCB_FUNCS
initDetector();
printf("Initializing Detector\n");
@ -1582,7 +1588,12 @@ int get_threshold_energy(int file_des) {
int n;
int imod;
#ifdef PROPIXD
strcpy(mess,"cannot get threshold for propix");
#else
strcpy(mess,"cannot get threshold for gotthard");
#endif
n = receiveDataOnly(file_des,&imod,sizeof(imod));
if (n < 0)
@ -1603,7 +1614,12 @@ int set_threshold_energy(int file_des) {
int arg[3];
int n;
#ifdef PROPIXD
strcpy(mess,"cannot set threshold for propix");
#else
strcpy(mess,"cannot set threshold for gotthard");
#endif
n = receiveDataOnly(file_des,&arg,sizeof(arg));
if (n < 0)
@ -2066,7 +2082,12 @@ int set_timer(int file_des) {
retval=setGates(tns);
break;
case PROBES_NUMBER:
#ifdef PROPIXD
sprintf(mess,"can't set/get number of probes for propix\n");
#else
sprintf(mess,"can't set/get number of probes for gotthard\n");
#endif
ret=FAIL;
break;
case CYCLES_NUMBER:
@ -2268,35 +2289,41 @@ int set_roi(int file_des) {
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<nroi;i++)
printf("%d\t%d\t%d\t%d\n",arg[i].xmin,arg[i].xmax,arg[i].ymin,arg[i].ymax);
//#endif
}
/* 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{
retval=setROI(nroi,arg,&retvalsize,&ret);
#ifdef PROPIXD
sprintf(mess,"can't set roi for propix\n");
ret = FAIL;
#endif
if(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<nroi;i++)
printf("%d\t%d\t%d\t%d\n",arg[i].xmin,arg[i].xmax,arg[i].ymin,arg[i].ymax);
//#endif
}
/* execute action if the arguments correctly arrived*/
if (ret==FAIL){
printf("mess:%s\n",mess);
sprintf(mess,"Could not set all roi, should have set %d rois, but only set %d rois\n",nroi,retvalsize);
}
}
#ifdef MCB_FUNCS
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Detector locked by %s\n", lastClientIP);
ret=FAIL;
}
else{
retval=setROI(nroi,arg,&retvalsize,&ret);
if (ret==FAIL){
printf("mess:%s\n",mess);
sprintf(mess,"Could not set all roi, should have set %d rois, but only set %d rois\n",nroi,retvalsize);
}
}
#endif
}
if(ret==OK && differentClients){
printf("Force update\n");
@ -2330,7 +2357,12 @@ int set_speed(int file_des) {
receiveDataOnly(file_des,&arg,sizeof(arg));
receiveDataOnly(file_des,&val,sizeof(val));
#ifdef PROPIXD
sprintf(mess,"can't set speed variable for propix\n");
#else
sprintf(mess,"can't set speed variable for gotthard\n");
#endif
sendDataOnly(file_des,&ret,sizeof(ret));
@ -2350,7 +2382,11 @@ int set_readout_flags(int file_des) {
receiveDataOnly(file_des,&arg,sizeof(arg));
#ifdef PROPIXD
sprintf(mess,"can't set readout flags for propix\n");
#else
sprintf(mess,"can't set readout flags for gotthard\n");
#endif
sendDataOnly(file_des,&ret,sizeof(ret));
sendDataOnly(file_des,mess,sizeof(mess));
@ -2368,7 +2404,12 @@ int execute_trimming(int file_des) {
int ret=FAIL;
enum trimMode mode;
#ifdef PROPIXD
sprintf(mess,"can't set execute trimming for propix\n");
#else
sprintf(mess,"can't set execute trimming for gotthard\n");
#endif
receiveDataOnly(file_des,&mode,sizeof(mode));
receiveDataOnly(file_des,arg,sizeof(arg));
@ -2655,6 +2696,11 @@ int load_image(int file_des) {
ret=FAIL;
}
#ifdef PROPIXD
sprintf(mess,"can't load image for propix\n");
ret = FAIL;
#endif
switch (index) {
case DARK_IMAGE :
#ifdef VERBOSE
@ -2814,6 +2860,12 @@ int read_counter_block(int file_des) {
ret=FAIL;
}
#ifdef PROPIXD
sprintf(mess,"can't read counter block for propix\n");
ret = FAIL;
#endif
if (ret==OK) {
if (differentClients==1 && lockStatus==1) {
ret=FAIL;

View File

@ -44,6 +44,12 @@ int slsDetector::initSharedMemory(detectorType type, int id) {
nc=10;
nd=13; // dacs+adcs
break;
case PROPIX:
nch=22*22;
nm=1;
nc=1;
nd=13; // dacs+adcs
break;
case EIGER:
nch=256*256; // one EIGER half module
nm=1; //modules/detector
@ -553,6 +559,17 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->nModMax[Y]=1;
thisDetector->dynamicRange=16;
break;
case PROPIX:
thisDetector->nChan[X]=22;
thisDetector->nChan[Y]=22;
thisDetector->nChip[X]=1;
thisDetector->nChip[Y]=1;
thisDetector->nDacs=8;
thisDetector->nAdcs=5;
thisDetector->nModMax[X]=1;
thisDetector->nModMax[Y]=1;
thisDetector->dynamicRange=16;
break;
case MOENCH:
thisDetector->nChan[X]=160;
thisDetector->nChan[Y]=160;
@ -775,7 +792,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
fileName=parentDet->fileName;
fileIndex=parentDet->fileIndex;
framesPerFile=parentDet->framesPerFile;
if(thisDetector->myDetectorType==GOTTHARD)
if((thisDetector->myDetectorType==GOTTHARD)||(thisDetector->myDetectorType==PROPIX))
setFramesPerFile(MAX_FRAMES_PER_FILE);
if (thisDetector->myDetectorType==MOENCH)
setFramesPerFile(MOENCH_MAX_FRAMES_PER_FILE);
@ -881,6 +898,13 @@ slsDetectorDefs::sls_detector_module* slsDetector::createModule(detectorType t)
nd=8; // dacs+adcs
na=5;
break;
case PROPIX:
nch=22*22;
nm=1;
nc=1;
nd=8; // dacs+adcs
na=5;
break;
case EIGER:
nch=256*256; // one EIGER half module
nm=1; //modules/detector
@ -2952,6 +2976,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
case HIGHGAIN:
if ( (thisDetector->myDetectorType == MYTHEN) ||
(thisDetector->myDetectorType == GOTTHARD) ||
(thisDetector->myDetectorType == PROPIX) ||
(thisDetector->myDetectorType == MOENCH) ||
(thisDetector->myDetectorType == EIGER)) {
ssettings="/highgain";
@ -2960,6 +2985,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
break;
case DYNAMICGAIN:
if ((thisDetector->myDetectorType == GOTTHARD) ||
(thisDetector->myDetectorType == PROPIX) ||
(thisDetector->myDetectorType == MOENCH)) {
ssettings="/dynamicgain";
thisDetector->currentSettings=DYNAMICGAIN;
@ -2967,6 +2993,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
break;
case LOWGAIN:
if ((thisDetector->myDetectorType == GOTTHARD) ||
(thisDetector->myDetectorType == PROPIX) ||
(thisDetector->myDetectorType == MOENCH)) {
ssettings="/lowgain";
thisDetector->currentSettings=LOWGAIN;
@ -2974,6 +3001,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
break;
case MEDIUMGAIN:
if ((thisDetector->myDetectorType == GOTTHARD) ||
(thisDetector->myDetectorType == PROPIX) ||
(thisDetector->myDetectorType == MOENCH)) {
ssettings="/mediumgain";
thisDetector->currentSettings=MEDIUMGAIN;
@ -2981,6 +3009,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
break;
case VERYHIGHGAIN:
if ((thisDetector->myDetectorType == GOTTHARD) ||
(thisDetector->myDetectorType == PROPIX) ||
(thisDetector->myDetectorType == MOENCH)) {
ssettings="/veryhighgain";
thisDetector->currentSettings=VERYHIGHGAIN;
@ -3025,6 +3054,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
break;
case MOENCH:
case GOTTHARD:
case PROPIX:
case JUNGFRAUCTB:
//settings is saved in myMod.reg
myMod->reg=thisDetector->currentSettings;
@ -3055,6 +3085,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
switch(thisDetector->myDetectorType){
case MOENCH:
case GOTTHARD:
case PROPIX:
case JUNGFRAUCTB:
ostfn << thisDetector->settingsDir << ssettings << ssettings << ".settings";
break;
@ -3168,7 +3199,9 @@ int slsDetector::updateDetectorNoWait() {
n = controlSocket->ReceiveDataOnly( &t,sizeof(t));
thisDetector->currentSettings=t;
if((thisDetector->myDetectorType!= GOTTHARD)&&(thisDetector->myDetectorType!= MOENCH)){
if((thisDetector->myDetectorType!= GOTTHARD)&&
(thisDetector->myDetectorType!= PROPIX)&&
(thisDetector->myDetectorType!= MOENCH)){
//thr=getThresholdEnergy();
n = controlSocket->ReceiveDataOnly( &thr,sizeof(thr));
thisDetector->currentThresholdEV=thr;
@ -3640,7 +3673,9 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){
//std::cout<< "offline " << std::endl;
if (t>=0)
thisDetector->timerValue[index]=t;
if((thisDetector->myDetectorType==GOTTHARD)||(thisDetector->myDetectorType==MOENCH))
if((thisDetector->myDetectorType==GOTTHARD)||
(thisDetector->myDetectorType==PROPIX)||
(thisDetector->myDetectorType==MOENCH))
thisDetector->timerValue[PROBES_NUMBER]=0;
}
} else {
@ -5722,7 +5757,9 @@ int slsDetector::writeConfigurationFile(ofstream &outfile, int id){
// "trimen",
// "receiverTCPPort",
if ((thisDetector->myDetectorType==GOTTHARD)||(thisDetector->myDetectorType==MOENCH)) {
if ((thisDetector->myDetectorType==GOTTHARD)||
(thisDetector->myDetectorType==PROPIX)||
(thisDetector->myDetectorType==MOENCH)) {
names[0]= "hostname";
names[1]= "port";
names[2]= "stopport";

View File

@ -534,6 +534,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
case MOENCH: return string("Moench"); \
case JUNGFRAU: return string("Jungfrau"); \
case JUNGFRAUCTB: return string("JungfrauCTB"); \
case PROPIX: return string("Propix"); \
default: return string("Unknown"); \
}};
@ -550,6 +551,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
if (type=="Moench") return MOENCH; \
if (type=="Jungfrau") return JUNGFRAU; \
if (type=="JungfrauCTB") return JUNGFRAUCTB; \
if (type=="Propix") return PROPIX; \
return GENERIC;};

View File

@ -811,6 +811,7 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
names[nvar++]="ratecorr";
break;
case GOTTHARD:
case PROPIX:
names[nvar++]="flags";
names[nvar++]="delay";
names[nvar++]="gates";
@ -894,6 +895,7 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
case EIGER:
case MYTHEN:
case GOTTHARD:
case PROPIX:
names[nvar++]="flatfield";
names[nvar++]="badchannels";
break;

View File

@ -111,6 +111,7 @@ slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string
names[id++]="Vdac7";
break;
case GOTTHARD:
case PROPIX:
names[id++]="Vref";
names[id++]="VcascN";
names[id++]="VcascP";
@ -265,6 +266,7 @@ slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string
case MOENCH:
case GOTTHARD:
case PROPIX:
//---------------dacs---------------
infile.open(myfname.c_str(), ios_base::in);
if (infile.is_open()) {
@ -352,6 +354,7 @@ int energyConversion::writeSettingsFile(string fname, detectorType myDetectorTyp
names[id++]="Vdac7";
break;
case GOTTHARD:
case PROPIX:
names[id++]="Vref";
names[id++]="VcascN";
names[id++]="VcascP";