jungfrau module data, fixel moench02 for jctb and jctb server actualized for both buses

This commit is contained in:
bergamaschi 2018-08-13 16:27:36 +02:00
parent 52b1e98726
commit 921ae01bbe
7 changed files with 172 additions and 81 deletions

View File

@ -8,6 +8,23 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
private: private:
typedef struct {
uint64_t frameNumber; /**< is the frame number */
uint32_t expLength; /**< is the subframe number (32 bit eiger) or real time exposure time in 100ns (others) */
uint32_t packetNumber; /**< is the packet number */
uint64_t bunchId; /**< is the bunch id from beamline */
uint64_t timestamp; /**< is the time stamp with 10 MHz clock */
uint16_t modId; /**< is the unique module id (unique even for left, right, top, bottom) */
uint16_t xCoord; /**< is the x coordinate in the complete detector system */
uint16_t yCoord; /**< is the y coordinate in the complete detector system */
uint16_t zCoord; /**< is the z coordinate in the complete detector system */
uint32_t debug; /**< is for debugging purposes */
uint16_t roundRNumber; /**< is the round robin set number */
uint8_t detType; /**< is the detector type see :: detectorType */
uint8_t version; /**< is the version number of this structure format */
} sls_detector_header;
int iframe; int iframe;
int nadc; int nadc;
int sc_width; int sc_width;
@ -25,7 +42,7 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
*/ */
jungfrau10ModuleData(int ns=16384): slsDetectorData<uint16_t>(256*4, 256*2, 256*256*8*2, NULL, NULL, NULL) , iframe(0), nadc(32), sc_width(64), sc_height(256) { jungfrau10ModuleData(int ns=16384): slsDetectorData<uint16_t>(256*4, 256*2, 256*256*8*2+48, NULL, NULL, NULL) , iframe(0) {
@ -38,43 +55,51 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
int ichip; int ichip;
// cout << sizeof(uint16_t) << endl; // cout << sizeof(uint16_t) << endl;
int ip=0;
for (iadc=0; iadc<nadc; iadc++) { for (int iy=0; iy<256*2; iy++) {
ichip=iadc/4; for (int ix=0; ix<256*4; ix++){
dataMap[iy][ix]=ip*2+48;
for (int i=0; i<sc_width*sc_height; i++) { ip++;
}
if (ichip%2==0) {
row=sc_height+i/sc_width;
col=(ichip/2)*256+iadc%4*sc_width+(i%sc_width);
} else {
row=sc_height-1-i/sc_width;
col=((ichip/2)*256+iadc%4*sc_width)+sc_width-(i%sc_width)-1;
} }
/* for (iadc=0; iadc<nadc; iadc++) { */
/* ichip=iadc/4; */
/* if (iadc<nadc/2) { */ /* for (int i=0; i<sc_width*sc_height; i++) { */
/* if (ichip%2==0) { */
/* row=sc_height+i/sc_width; */ /* row=sc_height+i/sc_width; */
/* col=iadc*sc_width+(i%sc_width); */ /* col=(ichip/2)*256+iadc%4*sc_width+(i%sc_width); */
/* } else { */ /* } else { */
/* row=sc_height-1-i/sc_width; */ /* row=sc_height-1-i/sc_width; */
/* col=(nx-1)-((iadc-16)*sc_width)-(i%sc_width); */ /* col=((ichip/2)*256+iadc%4*sc_width)+sc_width-(i%sc_width)-1; */
/* } */ /* } */
if (row<0 || row>=ny || col<0 || col>=nx) {
cout << "Wrong row, column " << row << " " << col << " " << iadc << " " << i << endl;
} else
dataMap[row][col]=(nadc*i+iadc)*2;
if (dataMap[row][col]<0 || dataMap[row][col]>=dataSize)
cout << "Error: pointer " << dataMap[row][col] << " out of range " << row << " " << col <<" " << iadc << " " << i << endl;
else {
xmap[nadc*i+iadc]=col;
ymap[nadc*i+iadc]=row;
}
}
}
/* /\* if (iadc<nadc/2) { *\/ */
/* /\* row=sc_height+i/sc_width; *\/ */
/* /\* col=iadc*sc_width+(i%sc_width); *\/ */
/* /\* } else { *\/ */
/* /\* row=sc_height-1-i/sc_width; *\/ */
/* /\* col=(nx-1)-((iadc-16)*sc_width)-(i%sc_width); *\/ */
/* /\* } *\/ */
/* if (row<0 || row>=ny || col<0 || col>=nx) { */
/* cout << "Wrong row, column " << row << " " << col << " " << iadc << " " << i << endl; */
/* } else */
/* dataMap[row][col]=(nadc*i+iadc)*2; */
/* if (dataMap[row][col]<0 || dataMap[row][col]>=dataSize) */
/* cout << "Error: pointer " << dataMap[row][col] << " out of range " << row << " " << col <<" " << iadc << " " << i << endl; */
/* else { */
/* xmap[nadc*i+iadc]=col; */
/* ymap[nadc*i+iadc]=row; */
/* } */
/* } */
// }
@ -91,7 +116,7 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
*/ */
int getFrameNumber(char *buff){(void)buff; return iframe;}; int getFrameNumber(return (sls_detector_header*)buff)->frameNumber;};
/** /**
@ -123,28 +148,65 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
\returns pointer to the begin of the last good frame, NULL if no frame is found or last frame is incomplete \returns pointer to the begin of the last good frame, NULL if no frame is found or last frame is incomplete
*/ */
char *readNextFrame(ifstream &filebin){ virtual char *readNextFrame(ifstream &filebin) {
// int afifo_length=0; int ff=-1, np=-1;
uint16_t *afifo_cont; return readNextFrame(filebin, ff, np);
int ib=0;
if (filebin.is_open()) {
afifo_cont=new uint16_t[dataSize/2];
while (filebin.read(((char*)afifo_cont)+ib,2)) {
ib+=2;
if (ib==dataSize) break;
}
if (ib>0) {
iframe++;
// cout << ib << "-" << endl;
return (char*)afifo_cont;
} else {
delete [] afifo_cont;
return NULL;
}
}
return NULL;
}; };
virtual char *readNextFrame(ifstream &filebin, int &ff) {
int np=-1;
return readNextFrame(filebin, ff, np);
};
virtual char *readNextFrame(ifstream &filebin, int& ff, int &np) {
char *data=new char[dataSize];
char *d=readNextFrame(filebin, ff, np, data);
if (d==NULL) {delete [] data; data=NULL;}
return data;
}
virtual char *readNextFrame(ifstream &filebin, int& ff, int &np, char *data) {
// char *readNextFrame(ifstream &filebin){
// int afifo_length=0;
/* uint16_t *afifo_cont; */
/* int ib=0; */
/* if (filebin.is_open()) { */
/* afifo_cont=new uint16_t[dataSize/2]; */
/* while (filebin.read(((char*)afifo_cont)+ib,2)) { */
/* ib+=2; */
/* if (ib==dataSize) break; */
/* } */
/* if (ib>0) { */
/* iframe++; */
/* // cout << ib << "-" << endl; */
/* return (char*)afifo_cont; */
/* } else { */
/* delete [] afifo_cont; */
/* return NULL; */
/* } */
/* } */
/* return NULL; */
/* }; */
char *retval=0;
int nd;
int fnum = -1;
np=0;
int pn;
// cout << dataSize << endl;
if (ff>=0)
fnum=ff;
if (filebin.is_open()) {
if (filebin.read(data, dataSize) ){
ff=getFrameNumber(data);
np=getPacketNumber(data);
return data;
}
}
return NULL;

View File

@ -34,7 +34,7 @@ class moench02CtbData : public slsDetectorData<uint16_t> {
moench02CtbData(int ns=6400): slsDetectorData<uint16_t>(160, 160, ns*2*32, NULL, NULL) , nadc(32), sc_width(40), sc_height(160) { moench02CtbData(int ns=6400): slsDetectorData<uint16_t>(160, 160, ns*2*32, NULL, NULL) , nadc(32), sc_width(40), sc_height(160) {
int adc_off[4]={0,40,80,120}; int adc_off[4]={40,0,120,80};
int adc_nr[4]={8,10,20,23}; int adc_nr[4]={8,10,20,23};
int row, col; int row, col;
@ -86,10 +86,10 @@ class moench02CtbData : public slsDetectorData<uint16_t> {
if(ip>=0 && ip<maplength){ if(ip>=0 && ip<maplength){
x=xmap[ip]; x=xmap[ip];
y=ymap[ip]; y=ymap[ip];
}else{ }/*else{
cerr<<"WRONG ARRAY LENGTH"<<endl; cerr<<"WRONG ARRAY LENGTH"<<endl;
cerr<<"Trying to access the "<<ip<<"-th element"<<endl; cerr<<"Trying to access the "<<ip<<"-th element"<<endl;
} }*/
}; };

View File

@ -6,7 +6,7 @@
CROSS = bfin-uclinux- CROSS = bfin-uclinux-
CC = $(CROSS)gcc CC = $(CROSS)gcc
CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG -DV1 -DCTB -DOLDVERSION #-DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG -DV1 -DCTB
PROGS= jctbDetectorServer PROGS= jctbDetectorServer
@ -24,22 +24,18 @@ OBJS = $(SRCS:%.c=%.o)
all: clean versioning $(PROGS) all: clean versioning $(PROGS)
test: clean jungfrauADCTEst test: clean jungfrauADCTest
boot: $(OBJS) boot: $(OBJS)
versioning: versioning:
@echo `tput setaf 6; ./updateGitVersion.sh; tput sgr0;` @echo `tput setaf 6; ./updateGitVersion.sh; tput sgr0;`
jctbDetectorServerNew: $(OBJS) jctbDetectorServer: $(OBJS)
echo $(OBJS) echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@)
jctbDetectorServer: $(OBJS) jungfrauADCTest: $(OBJS)
echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DOLDVERSION
jungfrauADCTEst: $(OBJS)
echo $(OBJS) echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DTESTADC $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DTESTADC

View File

@ -28,7 +28,7 @@
#include "registers_m.h" #include "registers_m.h"
//for memory mapping //for memory mapping
u_int32_t CSP0BASE; u_int64_t CSP0BASE;
u_int16_t volatile *values; u_int16_t volatile *values;
@ -43,8 +43,8 @@ int mapCSP0(void) {
} }
printf("/dev/mem opened\n"); printf("/dev/mem opened\n");
CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0); CSP0BASE = mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0);
if (CSP0BASE == (u_int32_t)MAP_FAILED) { if (CSP0BASE == MAP_FAILED) {
printf("\nCan't map memmory area!!\n"); printf("\nCan't map memmory area!!\n");
return FAIL; return FAIL;
} }
@ -61,8 +61,8 @@ int mapCSP0(void) {
return FAIL; return FAIL;
} }
#endif #endif
printf("CSPObase is 0x%08x \n",CSP0BASE); printf("CSPObase is 0x%08llx \n",CSP0BASE);
printf("CSPOBASE=from %08x to %08x\n",CSP0BASE,CSP0BASE+MEM_SIZE); printf("CSPOBASE=from %08llx to %08llx\n",CSP0BASE,CSP0BASE+MEM_SIZE);
u_int32_t address; u_int32_t address;
address = FIFO_DATA_REG;//_OFF; address = FIFO_DATA_REG;//_OFF;
@ -73,12 +73,24 @@ int mapCSP0(void) {
return OK; return OK;
} }
u_int16_t bus_r16(u_int32_t offset){
u_int16_t a_bus_r16(u_int32_t offset){
volatile u_int16_t *ptr1; volatile u_int16_t *ptr1;
ptr1=(u_int16_t*)(CSP0BASE+offset*2); ptr1=(u_int16_t*)(CSP0BASE+offset*2);
return *ptr1; return *ptr1;
} }
u_int16_t bus_r16(u_int32_t offset){
u_int16_t r= a_bus_r16(offset);
#ifndef OLDVERSION
while (r!=a_bus_r16(offset))
r=a_bus_r16(offset);
#endif
return r;
}
u_int16_t bus_w16(u_int32_t offset, u_int16_t data) { u_int16_t bus_w16(u_int32_t offset, u_int16_t data) {
volatile u_int16_t *ptr1; volatile u_int16_t *ptr1;
ptr1=(u_int16_t*)(CSP0BASE+offset*2); ptr1=(u_int16_t*)(CSP0BASE+offset*2);
@ -97,12 +109,21 @@ u_int32_t bus_w(u_int32_t offset, u_int32_t data) {
} }
u_int32_t bus_r(u_int32_t offset) { u_int32_t a_bus_r(u_int32_t offset) {
volatile u_int32_t *ptr1; volatile u_int32_t *ptr1;
ptr1=(u_int32_t*)(CSP0BASE+offset*2); ptr1=(u_int32_t*)(CSP0BASE+offset*2);
return *ptr1; return *ptr1;
} }
u_int32_t bus_r(u_int32_t offset){
u_int32_t r= a_bus_r(offset);
#ifndef OLDVERSION
while (r!=a_bus_r(offset))
r=a_bus_r(offset);
#endif
return r;
}
// program dacq settings // program dacq settings
int64_t set64BitReg(int64_t value, int aLSB, int aMSB){ int64_t set64BitReg(int64_t value, int aLSB, int aMSB){

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 9ae128961675230ad322ff2867f1862dbe8566a7 Repsitory UUID: 52b1e987263c831adcfab79c1c2b7bb9c68b09c7
Revision: 25 Revision: 26
Branch: developer Branch: anna
Last Changed Author: Anna_Bergamaschi Last Changed Author: Anna_Bergamaschi
Last Changed Rev: 3764 Last Changed Rev: 3960
Last Changed Date: 2018-05-07 14:30:14.000000002 +0200 ./Makefile Last Changed Date: 2018-08-09 14:00:05.000000002 +0200 ./server_funcs.c

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "9ae128961675230ad322ff2867f1862dbe8566a7" #define GITREPUUID "52b1e987263c831adcfab79c1c2b7bb9c68b09c7"
#define GITAUTH "Anna_Bergamaschi" #define GITAUTH "Anna_Bergamaschi"
#define GITREV 0x3764 #define GITREV 0x3960
#define GITDATE 0x20180507 #define GITDATE 0x20180809
#define GITBRANCH "developer" #define GITBRANCH "anna"

View File

@ -70,6 +70,8 @@ int N_CHANS=NCHANS;
int init_detector(int b, int checkType) { int init_detector(int b, int checkType) {
int i; int i;
int ret;
int ii;
if (mapCSP0()==FAIL) { printf("Could not map memory\n"); if (mapCSP0()==FAIL) { printf("Could not map memory\n");
exit(1); exit(1);
} }
@ -81,8 +83,18 @@ int init_detector(int b, int checkType) {
for (i=0; i<1000000; i++) { for (i=0; i<1000000; i++) {
bus_w(SET_DELAY_LSB_REG, i*100); bus_w(SET_DELAY_LSB_REG, i*100);
bus_r(FPGA_VERSION_REG); bus_r(FPGA_VERSION_REG);
if (i*100!=bus_r(SET_DELAY_LSB_REG)) //usleep(100);
printf("ERROR: wrote 0x%x, read 0x%x\n",i*100,bus_r(SET_DELAY_LSB_REG)); ii=0;
// usleep(100);
//usleep(100);
// ret=bus_r(SET_DELAY_LSB_REG);
ret=bus_r(SET_DELAY_LSB_REG);
while (ret!=i*100 && ii<100) {
//if (i*100!=ret)
printf("ERROR %d: wrote 0x%x, read 0x%x\n",i, i*100,ret);
ret=bus_r(SET_DELAY_LSB_REG);
}
} }
printf("Finished\n"); printf("Finished\n");
}else }else