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:
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 nadc;
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,45 +55,53 @@ class jungfrau10ModuleData : public slsDetectorData<uint16_t> {
int ichip;
// cout << sizeof(uint16_t) << endl;
for (iadc=0; iadc<nadc; iadc++) {
ichip=iadc/4;
for (int i=0; i<sc_width*sc_height; i++) {
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;
}
/* 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;
}
int ip=0;
for (int iy=0; iy<256*2; iy++) {
for (int ix=0; ix<256*4; ix++){
dataMap[iy][ix]=ip*2+48;
ip++;
}
}
/* for (iadc=0; iadc<nadc; iadc++) { */
/* ichip=iadc/4; */
/* for (int i=0; i<sc_width*sc_height; i++) { */
/* 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; */
/* } */
/* /\* 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
*/
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;
};
virtual char *readNextFrame(ifstream &filebin) {
int ff=-1, np=-1;
return readNextFrame(filebin, ff, np);
};
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) {
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 row, col;
@ -86,10 +86,10 @@ class moench02CtbData : public slsDetectorData<uint16_t> {
if(ip>=0 && ip<maplength){
x=xmap[ip];
y=ymap[ip];
}else{
}/*else{
cerr<<"WRONG ARRAY LENGTH"<<endl;
cerr<<"Trying to access the "<<ip<<"-th element"<<endl;
}
}*/
};

View File

@ -6,7 +6,7 @@
CROSS = bfin-uclinux-
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
@ -24,22 +24,18 @@ OBJS = $(SRCS:%.c=%.o)
all: clean versioning $(PROGS)
test: clean jungfrauADCTEst
test: clean jungfrauADCTest
boot: $(OBJS)
versioning:
@echo `tput setaf 6; ./updateGitVersion.sh; tput sgr0;`
jctbDetectorServerNew: $(OBJS)
jctbDetectorServer: $(OBJS)
echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@)
jctbDetectorServer: $(OBJS)
echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DOLDVERSION
jungfrauADCTEst: $(OBJS)
jungfrauADCTest: $(OBJS)
echo $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DTESTADC

View File

@ -28,7 +28,7 @@
#include "registers_m.h"
//for memory mapping
u_int32_t CSP0BASE;
u_int64_t CSP0BASE;
u_int16_t volatile *values;
@ -43,8 +43,8 @@ int mapCSP0(void) {
}
printf("/dev/mem opened\n");
CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0);
if (CSP0BASE == (u_int32_t)MAP_FAILED) {
CSP0BASE = mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0);
if (CSP0BASE == MAP_FAILED) {
printf("\nCan't map memmory area!!\n");
return FAIL;
}
@ -61,8 +61,8 @@ int mapCSP0(void) {
return FAIL;
}
#endif
printf("CSPObase is 0x%08x \n",CSP0BASE);
printf("CSPOBASE=from %08x to %08x\n",CSP0BASE,CSP0BASE+MEM_SIZE);
printf("CSPObase is 0x%08llx \n",CSP0BASE);
printf("CSPOBASE=from %08llx to %08llx\n",CSP0BASE,CSP0BASE+MEM_SIZE);
u_int32_t address;
address = FIFO_DATA_REG;//_OFF;
@ -73,12 +73,24 @@ int mapCSP0(void) {
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;
ptr1=(u_int16_t*)(CSP0BASE+offset*2);
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) {
volatile u_int16_t *ptr1;
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;
ptr1=(u_int32_t*)(CSP0BASE+offset*2);
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
int64_t set64BitReg(int64_t value, int aLSB, int aMSB){

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 9ae128961675230ad322ff2867f1862dbe8566a7
Revision: 25
Branch: developer
Repsitory UUID: 52b1e987263c831adcfab79c1c2b7bb9c68b09c7
Revision: 26
Branch: anna
Last Changed Author: Anna_Bergamaschi
Last Changed Rev: 3764
Last Changed Date: 2018-05-07 14:30:14.000000002 +0200 ./Makefile
Last Changed Rev: 3960
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 GITREPUUID "9ae128961675230ad322ff2867f1862dbe8566a7"
#define GITREPUUID "52b1e987263c831adcfab79c1c2b7bb9c68b09c7"
#define GITAUTH "Anna_Bergamaschi"
#define GITREV 0x3764
#define GITDATE 0x20180507
#define GITBRANCH "developer"
#define GITREV 0x3960
#define GITDATE 0x20180809
#define GITBRANCH "anna"

View File

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