From b11b7c1c0999c472e60d02e35db713e7517958c3 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 12 Jun 2015 17:45:43 +0200 Subject: [PATCH 01/22] beb stop acquisiion return, some minor changes, increased the check time for receiver frame after detector read out done using acquisiingDone variable --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 4 ++-- .../eigerDetectorServer/Makefile | 2 +- .../bin/eigerDetectorServer | Bin 242164 -> 242164 bytes .../slsDetectorFunctionList.c | 3 ++- .../slsDetectorAnalysis/postProcessing.cpp | 2 +- .../slsDetectorServer_funcs.c | 4 ++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 1174392b6..77408c82f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -568,6 +568,7 @@ int Beb_StopAcquisition() *(ptrl+7) = 0; *(ptrr+7) = 0; close(fd); + return 1; } int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait){ @@ -637,9 +638,8 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu ptrl = (u_int32_t*)(CSP0BASE); ptrr = (u_int32_t*)(CSP0BASE+0x100); - int i; - #ifdef MARTIN + int i; for (i=0; i < 10; i++) printf("%X\n",*(ptrl+i)); #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile index effb17e9c..462930bac 100755 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile @@ -1,6 +1,6 @@ CC = powerpc-4xx-softfloat-gcc CCX = powerpc-4xx-softfloat-g++ -CFLAGS += -Wall -DDACS_INT -DMARTIN -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE -DMARTIN +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE -DMARTIN LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 249c97ce420554a1dc58f5fd4af30d4a17d03ecd..c4d92e50ac408e73bed8f69d08effb84badc191b 100755 GIT binary patch delta 23813 zcmb_^e_T{W_y3()Tmca;iu_z)`Jwz&7k`4HqLQwPg@%TPxtb*!8m1N ~@lSm>C8 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 EKhH~DAOHXW delta 25011 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 2){ + if (acquiringDone >= 4){ if((!nthframe) ||(!newData)){ #ifdef VERY_VERY_DEBUG cout << "gonna post for it to end" << endl; diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 8cfa80dd0..ad749c248 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -2197,9 +2197,9 @@ int stop_acquisition(int file_des) { sprintf(mess,"can't stop acquisition\n"); -#ifdef VERBOSE +//#ifdef VERBOSE printf("Stopping acquisition\n"); -#endif +//#endif #ifdef SLS_DETECTOR_FUNCTION_LIST if (differentClients==1 && lockStatus==1) { ret=FAIL; From 8323f81e8acb0960b0df3046802d30365afdf89a Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 15 Jun 2015 17:41:48 +0200 Subject: [PATCH 02/22] beb includes read, write functions, so that it doesnt have to go to locallink interface --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 127 +++++++++++------- slsDetectorSoftware/eigerDetectorServer/Beb.h | 4 + .../eigerDetectorServer/EigerRegisterDefs.h | 5 + .../eigerDetectorServer/FebRegisterDefs.h | 11 ++ .../eigerDetectorServer/LocalLinkInterface.c | 23 ---- .../eigerDetectorServer/LocalLinkInterface.h | 1 - .../bin/eigerDetectorServer | Bin 242164 -> 242151 bytes .../eigerDetectorServer/xparameters.h | 4 +- 8 files changed, 104 insertions(+), 71 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 77408c82f..771dc74ce 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -15,8 +15,12 @@ #include #include + + + #include "xfs_types.h" #include "xparameters.h" +#include "FebRegisterDefs.h" #include "Beb.h" @@ -26,7 +30,6 @@ int bebInfoSize = 0; struct LocalLinkInterface ll_beb_local,* ll_beb; - struct LocalLinkInterface ll_beb_new_memory_local,* ll_beb_new_memory; struct udp_header_type udp_header; @@ -146,24 +149,24 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ *top = 0; *master = 0; //mapping new memory to read master top module configuration - ll_beb_new_memory = &ll_beb_new_memory_local; - Local_LocalLinkInterface(ll_beb_new_memory); - int ret = Local_GetModuleConfiguration(ll_beb_new_memory,XPAR_PLB_GPIO_SYS_BASEADDR, MODULE_CONFIGURATION); - if(!ret) - printf("Module Configuration FAIL\n"); - else{ - printf("Module Configuration OK\n"); - printf("Beb: value =0x%x\n",ret); - if(ret&0xf){ - *top = 1; - // printf("Beb.c: TOP\n\n\n\n"); - }//else printf("Beb.c: BOTTOM\n\n\n\n"); - - if(ret&0x200){ - *master = 1; - // printf("Beb.c: MASTER\n\n\n\n"); - }//else printf("Beb.c: SLAVE\n\n\n\n"); - } + u_int32_t baseaddr; + int ret; + //open file pointer + int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + if(fd < 0){ + cprintf(RED,"Module Configuration FAIL\n"); + }else{ + //read data + ret = Beb_Read32(baseaddr, MODULE_CONFIGURATION_MASK); + printf("Module Configuration OK\n"); + printf("Beb: value =0x%x\n",ret); + if(ret&TOP_BIT_MASK) + *top = 1; + if(ret&MASTER_BIT_MASK) + *master = 1; + //close file pointer + Beb_close(fd); + } } @@ -542,33 +545,29 @@ int Beb_SetUpTransferParameters(short the_bit_mode){ int Beb_StopAcquisition() { + u_int32_t baseaddr; + u_int32_t valuel,valuer; + //open file pointer + int fd = Beb_open(XPAR_STOP_ACQUISITION,&baseaddr); + if(fd < 0){ + cprintf(RED,"Beb Stop Acquisition FAIL\n"); + return 0; + }else{ + //find value + valuel = Beb_Read32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET); + valuer = Beb_Read32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET); + //high + Beb_Write32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET,(valuel|STOP_ACQUISITION_BIT)); + Beb_Write32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET,(valuer|STOP_ACQUISITION_BIT)); + //low + Beb_Write32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET,(valuel&(~STOP_ACQUISITION_BIT))); + Beb_Write32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET,(valuer&(~STOP_ACQUISITION_BIT))); - volatile u_int32_t* ptrl; - volatile u_int32_t* ptrr; - // Mapping - int fd; - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - { - printf("\nCan't find /dev/mem!\n"); - return 0; - } - u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0xC5000000 ); - if (CSP0BASE == (u_int32_t)MAP_FAILED) - { - printf("\nCan't map memmory area!!\n"); - return 0; - } - - ptrl = (u_int32_t*)(CSP0BASE); - ptrr = (u_int32_t*)(CSP0BASE+0x100); - - *(ptrl+7) = (1 << 30); - *(ptrr+7) = (1 << 30); - *(ptrl+7) = 0; - *(ptrr+7) = 0; - close(fd); - return 1; + printf("Beb Stop Acquisition OK\n"); + //close file pointer + Beb_close(fd); + } + return 1; } int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait){ @@ -758,3 +757,41 @@ int Beb_GetBebFPGATemp() return temperature; } + + + + +int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ + + int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); + if (fd == -1) + cprintf(RED,"\nCan't find /dev/mem!\n"); + else{ + printf("/dev/mem opened\n"); + *csp0base = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, baseaddr); + if (*csp0base == (u_int32_t)MAP_FAILED) { + cprintf(RED,"\nCan't map memmory area!!\n"); + fd = -1; + }else printf("CSP0 mapped\n"); + } + return fd; +} + +u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset){ + volatile u_int32_t *ptr1; + ptr1=(u_int32_t*)(baseaddr + offset); + return *ptr1; +} + + +u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data){ + volatile u_int32_t *ptr1; + ptr1=(u_int32_t*)(baseaddr + offset); + *ptr1 = data; + return *ptr1; +} + +void Beb_close(int fd){ + if(fd >= 0) + close(fd); +} diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 73660be3d..a5c9fc3ba 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -83,6 +83,10 @@ struct BebInfo{ int Beb_GetBebFPGATemp(); + int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base); + u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset); + u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data); + void Beb_close(int fd); #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h index 11f712716..0c5fe1b1d 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h @@ -109,3 +109,8 @@ #define CHIP_DATA_OUT_DELAY_REG3 3 #define CHIP_DATA_OUT_DELAY_REG4 4 #define CHIP_DATA_OUT_DELAY_SET 0x20000000 + + +//module configuration +#define TOP_BIT_MASK 0x00f +#define MASTER_BIT_MASK 0x200 diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 11f712716..1d2d680d7 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -109,3 +109,14 @@ #define CHIP_DATA_OUT_DELAY_REG3 3 #define CHIP_DATA_OUT_DELAY_REG4 4 #define CHIP_DATA_OUT_DELAY_SET 0x20000000 + +//module configuration +#define TOP_BIT_MASK 0x00f +#define MASTER_BIT_MASK 0x200 +// Master Slave Top Bottom Definition +#define MODULE_CONFIGURATION_MASK 0x84 +//stop acquisition offsets +#define STOP_ACQUISITION_LEFT_OFFSET 0x01c +#define STOP_ACQUISITION_RIGHT_OFFSET 0x11c +#define STOP_ACQUISITION_BIT 0x40000000 + diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c index 29bb958c8..8d1b9db1f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c @@ -32,29 +32,6 @@ void Local_LocalLinkInterface(struct LocalLinkInterface* ll){ printf("Initializing new memory\n"); } -int Local_GetModuleConfiguration (struct LocalLinkInterface* ll, u_int32_t baseaddr, u_int32_t offset){ - int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) { - printf("\nCan't find /dev/mem!\n"); - return 0; - } - printf("/dev/mem opened\n"); - - u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x100000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, baseaddr); - if (CSP0BASE == (u_int32_t)MAP_FAILED) { - printf("\nCan't map memmory area!!\n"); - return 0; - } - printf("CSP0 mapped\n"); - - volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(CSP0BASE + offset); - //printf("LocalLinkInterface:: value:%d\n",*ptr1); - close(fd); - - return *ptr1; -} - int Local_Init(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr){ diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h index 725f12125..e3453361a 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h @@ -40,7 +40,6 @@ struct LocalLinkInterface{ int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer); void Local_LocalLinkInterface(struct LocalLinkInterface* ll); - int Local_GetModuleConfiguration (struct LocalLinkInterface* ll, u_int32_t baseaddr, u_int32_t offset); /* int FiFoReset(unsigned int numb); diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index c4d92e50ac408e73bed8f69d08effb84badc191b..d0b7e96d96f6da5865aaf2594a8f9cc9ba1f6710 100755 GIT binary patch delta 34683 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/xparameters.h b/slsDetectorSoftware/eigerDetectorServer/xparameters.h index b6ef24bcc..ed044fdb6 100644 --- a/slsDetectorSoftware/eigerDetectorServer/xparameters.h +++ b/slsDetectorSoftware/eigerDetectorServer/xparameters.h @@ -49,8 +49,8 @@ XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR #define XPAR_PLB_GPIO_SYS_BASEADDR 0xD1000000 #define XPAR_PLB_GPIO_SYS_HIGHADDR 0xD100FFFF -/* Master Slave Top Bottom Definition */ -#define MODULE_CONFIGURATION 0x84 +/** Stop Acquisition */ +#define XPAR_STOP_ACQUISITION 0xC5000000 /* Definitions for peripheral PLB_GPIO_TEST */ #define XPAR_PLB_GPIO_TEST_BASEADDR 0xD1010000 From 861753a5d12b928ae953440fd6ed1c6e574b5d0f Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 16 Jun 2015 11:59:07 +0200 Subject: [PATCH 03/22] formatted changes made by Martin, which inclded resolving fifo full problem, first frame problem; 32 bit mode sub frame and 16 byte ignore --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 191 +++++++++--------- .../eigerDetectorServer/FebRegisterDefs.h | 19 +- .../bin/eigerDetectorServer | Bin 242151 -> 242151 bytes .../eigerDetectorServer/gitInfo.txt | 16 +- .../eigerDetectorServer/gitInfoEiger.h | 12 +- .../slsDetectorFunctionList.c | 17 -- .../eigerDetectorServer/xparameters.h | 2 +- slsDetectorSoftware/gitInfo.txt | 16 +- .../gotthardDetectorServer/gitInfo.txt | 16 +- .../gotthardDetectorServer/gitInfoGotthard.h | 12 +- .../moenchDetectorServer/gitInfo.txt | 16 +- .../moenchDetectorServer/gitInfoMoench.h | 12 +- .../mythenDetectorServer/gitInfo.txt | 16 +- .../mythenDetectorServer/gitInfoMythen.h | 12 +- slsDetectorSoftware/slsDetector/gitInfoLib.h | 12 +- 15 files changed, 178 insertions(+), 191 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 771dc74ce..64f78e1cc 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -546,22 +546,22 @@ int Beb_SetUpTransferParameters(short the_bit_mode){ int Beb_StopAcquisition() { u_int32_t baseaddr; - u_int32_t valuel,valuer; + volatile u_int32_t valuel,valuer; //open file pointer - int fd = Beb_open(XPAR_STOP_ACQUISITION,&baseaddr); + int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); if(fd < 0){ cprintf(RED,"Beb Stop Acquisition FAIL\n"); return 0; }else{ //find value - valuel = Beb_Read32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET); - valuer = Beb_Read32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET); + valuel = Beb_Read32(baseaddr, (LEFT_OFFSET+STOP_ACQ_OFFSET)); + valuer = Beb_Read32(baseaddr, (RIGHT_OFFSET+STOP_ACQ_OFFSET)); //high - Beb_Write32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET,(valuel|STOP_ACQUISITION_BIT)); - Beb_Write32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET,(valuer|STOP_ACQUISITION_BIT)); + Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel|STOP_ACQ_BIT)); + Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer|STOP_ACQ_BIT)); //low - Beb_Write32(baseaddr, STOP_ACQUISITION_LEFT_OFFSET,(valuel&(~STOP_ACQUISITION_BIT))); - Beb_Write32(baseaddr, STOP_ACQUISITION_RIGHT_OFFSET,(valuer&(~STOP_ACQUISITION_BIT))); + Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel&(~STOP_ACQ_BIT))); + Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer&(~STOP_ACQ_BIT))); printf("Beb Stop Acquisition OK\n"); //close file pointer @@ -571,124 +571,117 @@ int Beb_StopAcquisition() } int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait){ - if(dst_number>64) return 0; + if(dst_number>64) return 0; - unsigned int header_size = 4; //4*64 bits - unsigned int packet_size = ten_gig ? 0x200 : 0x80; // 4k or 1k packets - unsigned int npackets = ten_gig ? Beb_bit_mode*4 : Beb_bit_mode*16; - int in_two_requests = (!ten_gig&&Beb_bit_mode==32); + unsigned int header_size = 4; //4*64 bits + unsigned int packet_size = ten_gig ? 0x200 : 0x80; // 4k or 1k packets + unsigned int npackets = ten_gig ? Beb_bit_mode*4 : Beb_bit_mode*16; + int in_two_requests = (!ten_gig&&Beb_bit_mode==32); - volatile u_int32_t* ptrl; - volatile u_int32_t* ptrr; - u_int32_t send_header_command; - u_int32_t send_frame_command; + // volatile u_int32_t* ptrl; + // volatile u_int32_t* ptrr; + u_int32_t send_header_command; + u_int32_t send_frame_command; - if(in_two_requests) npackets/=2; + if(in_two_requests) npackets/=2; #ifdef MARTIN - cprintf(RED, "----Beb_RequestNImages Start----\n"); - cprintf(RED, "beb_number:%X, ten_gig:%X,dst_number:%X,npackets:%X,Beb_bit_mode:%X,header_size:%X,nimages:%d,test_just_send_out_packets_no_wait:%X\n",beb_number,ten_gig,dst_number,npackets,Beb_bit_mode,header_size,nimages,test_just_send_out_packets_no_wait); + cprintf(RED, "----Beb_RequestNImages Start----\n"); + cprintf(RED, "beb_number:%X, ten_gig:%X,dst_number:%X,npackets:%X,Beb_bit_mode:%X,header_size:%X,nimages:%d,test_just_send_out_packets_no_wait:%X\n",beb_number,ten_gig,dst_number,npackets,Beb_bit_mode,header_size,nimages,test_just_send_out_packets_no_wait); #endif - // CMD_GEN core registers - // - // base for left feb fpga + 0x000 - // base for right feb fpga + 0x100 Bytes - // - // OFFSETs given in Bytes - // base+00 0xC0DE0001 (static r/o) - // base+04 0x636D6467 (static r/o, ASCII for "CMDG") - // - // base+08 1st 32bits of 1st command - // base+0c 2nd 32bits of 1st command - // - // base+10 1st 32bits of 2nd command - // base+14 2nd 32bits of 2nd command - // - // base+1c command counter (sends n commands) - // <32 Bit mode : 2 commands for 1 frame neccessary (header + frame) (10 frames = 20 commands) - // 32 Bit mode : 3 commands for 1 frame neccessary (header + 1st halfframe + 2nd halfframe) (10 frames = 30 commands) - // if > 0 core starts operation - // - // base+20 command mode (for 32 bit mode) - // 0 for 2 command mode (send 1st command and 2nd command) (header + frame) - // 1 on bit 31 for 3 command mode (send 1st command, 2nd command, and 2nd command) (header + 1st halfframe + 2nd halfframe) - // - // - // Warning: Hard coded base address 0xc5000000 (TBD) - // + // CMD_GEN core registers + // + // base for left feb fpga + 0x000 + // base for right feb fpga + 0x100 Bytes + // + // OFFSETs given in Bytes + // base+00 0xC0DE0001 (static r/o) + // base+04 0x636D6467 (static r/o, ASCII for "CMDG") + // + // base+08 1st 32bits of 1st command + // base+0c 2nd 32bits of 1st command + // + // base+10 1st 32bits of 2nd command + // base+14 2nd 32bits of 2nd command + // + // base+18 command counter (sends n commands) + // <32 Bit mode : 2 commands for 1 frame neccessary (header + frame) (10 frames = 20 commands) + // 32 Bit mode : 3 commands for 1 frame neccessary (header + 1st halfframe + 2nd halfframe) (10 frames = 30 commands) + // if > 0 core starts operation + // + // base+1c command mode (for 32 bit mode) + // 0 for 2 command mode (send 1st command and 2nd command) (header + frame) + // 1 on bit 31 for 3 command mode (send 1st command, 2nd command, and 2nd command) (header + 1st halfframe + 2nd halfframe) + // + // + // Warning: Hard coded base address 0xc5000000 (TBD) + // - // Mapping - int fd; - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - { - printf("\nCan't find /dev/mem!\n"); - return 0; - } - u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0xC5000000 ); - if (CSP0BASE == (u_int32_t)MAP_FAILED) - { - printf("\nCan't map memmory area!!\n"); - return 0; - } - - ptrl = (u_int32_t*)(CSP0BASE); - ptrr = (u_int32_t*)(CSP0BASE+0x100); + u_int32_t right_port_value = 0x2000; + u_int32_t baseaddr; + volatile u_int32_t value; + //open file pointer + int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); + if(fd < 0){ + cprintf(RED,"Beb Request N Images FAIL\n"); + return 0; + }else{ #ifdef MARTIN - int i; - for (i=0; i < 10; i++) - printf("%X\n",*(ptrl+i)); + int i; + for (i=0; i < 10; i++) + printf("%X\n",Beb_Read32(baseaddr, (LEFT_OFFSET + i*4))); #endif - - // Generating commands - send_header_command = 0x62000000 | (!test_just_send_out_packets_no_wait) << 27 | (ten_gig==1) << 24 | header_size << 14 | 0; - send_frame_command = 0x62000000 | (!test_just_send_out_packets_no_wait) << 27 | (ten_gig==1) << 24 | packet_size << 14 | (npackets-1); + // Generating commands + send_header_command = 0x62000000 | (!test_just_send_out_packets_no_wait) << 27 | (ten_gig==1) << 24 | header_size << 14 | 0; + send_frame_command = 0x62000000 | (!test_just_send_out_packets_no_wait) << 27 | (ten_gig==1) << 24 | packet_size << 14 | (npackets-1); #ifdef MARTIN - for (i=0; i < 10; i++) - printf("%X\n",*(ptrl+i)); - printf("%d\n",in_two_requests); + for (i=0; i < 10; i++) + printf("%X\n",Beb_Read32(baseaddr, (LEFT_OFFSET + i*4))); + printf("%d\n",in_two_requests); #endif - // Wait until last command was send successfully -// while (*(ptrl+6) != 0); -// while (*(ptrr+6) != 0); + //"0x20 << 8" is dst_number (0x00 for left, 0x20 for right) + //Left + Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command); + Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command); + value = Beb_Read32(baseaddr,(LEFT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); - //"0x20 << 8" is dst_number (0x00 for left, 0x20 for right) - //Left - *(ptrl+2) = 0; - *(ptrl+3) = send_header_command; - *(ptrl+4) = 0; - *(ptrl+5) = send_frame_command; - *(ptrl+7) = in_two_requests << 31; + // Right + Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command | right_port_value); + Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command | right_port_value); + value = Beb_Read32(baseaddr,(RIGHT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); - // Right - *(ptrr+2) = 0; - *(ptrr+3) = send_header_command | 0x2000; - *(ptrr+4) = 0; - *(ptrr+5) = send_frame_command | 0x2000; - *(ptrr+7) = in_two_requests | (in_two_requests << 31); - // Set number of frames - *(ptrl+6) = nimages*(2+in_two_requests); - *(ptrr+6) = nimages*(2+in_two_requests); + // Set number of frames + Beb_Write32(baseaddr, (LEFT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); + Beb_Write32(baseaddr, (RIGHT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); #ifdef MARTIN - for (i=0; i < 10; i++) - printf("%X\n",*(ptrl+i)); - printf("%d\n",in_two_requests); + for (i=0; i < 10; i++) + printf("%X\n",Beb_Read32(baseaddr, (LEFT_OFFSET + i*4))); //*(ptrl+i)); + printf("%d\n",in_two_requests); #endif - close(fd); + Beb_close(fd); #ifdef MARTIN - cprintf(RED, "----Beb_RequestNImages----\n"); + printf("----Beb_RequestNImages----\n"); #endif + } - return 1; + return 1; } diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 1d2d680d7..1f9b522c1 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -115,8 +115,19 @@ #define MASTER_BIT_MASK 0x200 // Master Slave Top Bottom Definition #define MODULE_CONFIGURATION_MASK 0x84 -//stop acquisition offsets -#define STOP_ACQUISITION_LEFT_OFFSET 0x01c -#define STOP_ACQUISITION_RIGHT_OFFSET 0x11c -#define STOP_ACQUISITION_BIT 0x40000000 + +//new memory +#define LEFT_OFFSET 0x0 +#define RIGHT_OFFSET 0x100 + +#define FIRST_CMD_PART1_OFFSET 0x8 +#define FIRST_CMD_PART2_OFFSET 0xc +#define SECOND_CMD_PART1_OFFSET 0x10 +#define SECOND_CMD_PART2_OFFSET 0x14 +#define COMMAND_COUNTER_OFFSET 0x18 +#define STOP_ACQ_OFFSET 0x1c +#define STOP_ACQ_BIT 0x40000000 +#define TWO_REQUESTS_OFFSET 0x1c +#define TWO_REQUESTS_BIT 0x80000000 + diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index d0b7e96d96f6da5865aaf2594a8f9cc9ba1f6710..2aa58e4fad06b5e18982e46d55f6d3a1aaa25559 100755 GIT binary patch delta 13775 zcmcJ0e_T~n*7sTa-iv^M2L%QBb@`#9qFjR%6%&moFN%g{g-UrfO-xi𝔒f;)q3s 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

dYp0>J3n=YJ#=qFx#uiDkRAMZCL;-<) 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 B7)$^F delta 13626 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index 22fe3ca19..41499c1aa 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer -URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3 -Revision: 107 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 288 -Last Changed Date: 2014-12-08 10:16:31 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe +Revision: 139 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 299 +Last Changed Date: 2015-06-15 17:41:48 +0200 diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index 2524cb5c7..a1912321b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer" +#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3" -//#define SVNREV 0x288 +#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" +//#define SVNREV 0x299 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x288 -#define SVNDATE 0x20141208 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x299 +#define SVNDATE 0x20150615 // diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 88339bf3f..5f5ccd92f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -233,23 +233,6 @@ int getDetectorNumber(){ perror("gethostname"); sscanf(hostname,"%x",&res); return res; - - - /* - char output[255]=""; - int res=0; - FILE* sysFile = popen("hostname", "r"); - fgets(output, sizeof(output), sysFile); - pclose(sysFile); - sscanf(output,"%x",&res); - return res; - */ - /* - int res=0; - char hostname[100] = "beb000"; - sscanf(hostname,"%x",&res); - return res; - */ } diff --git a/slsDetectorSoftware/eigerDetectorServer/xparameters.h b/slsDetectorSoftware/eigerDetectorServer/xparameters.h index ed044fdb6..191bd6e2f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/xparameters.h +++ b/slsDetectorSoftware/eigerDetectorServer/xparameters.h @@ -50,7 +50,7 @@ XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR #define XPAR_PLB_GPIO_SYS_HIGHADDR 0xD100FFFF /** Stop Acquisition */ -#define XPAR_STOP_ACQUISITION 0xC5000000 +#define XPAR_CMD_GENERATOR 0xC5000000 /* Definitions for peripheral PLB_GPIO_TEST */ #define XPAR_PLB_GPIO_TEST_BASEADDR 0xD1010000 diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index 9735ccc14..aac149b78 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware -URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3 -Revision: 882 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 882 -Last Changed Date: 2014-12-08 10:16:31 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe +Revision: 943 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 943 +Last Changed Date: 2015-06-15 17:41:48 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt index 66efcacee..32d7b3f0d 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/gotthardDetectorServer -URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3 -Revision: 177 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 288 -Last Changed Date: 2014-12-08 10:16:31 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe +Revision: 178 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 299 +Last Changed Date: 2015-06-15 17:41:48 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h index 462c60eec..03d1202df 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer" +#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3" -//#define SVNREV 0x288 +#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" +//#define SVNREV 0x299 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x288 -#define SVNDATE 0x20141208 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x299 +#define SVNDATE 0x20150615 // diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt index fc2f21255..cb0803a19 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/moenchDetectorServer -URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3 -Revision: 64 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 288 -Last Changed Date: 2014-12-08 10:16:31 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe +Revision: 65 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 299 +Last Changed Date: 2015-06-15 17:41:48 +0200 diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h index 781125be9..9e3b823f9 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" +#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3" -//#define SVNREV 0x288 +#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" +//#define SVNREV 0x299 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x288 -#define SVNDATE 0x20141208 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x299 +#define SVNDATE 0x20150615 // diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt index 8f0dca720..ed3f7219e 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/mythenDetectorServer -URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3 -Revision: 93 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 288 -Last Changed Date: 2014-12-08 10:16:31 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe +Revision: 94 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 299 +Last Changed Date: 2015-06-15 17:41:48 +0200 diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h index 722d27e7e..d48ea4c4b 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer" +#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3" -//#define SVNREV 0x288 +#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" +//#define SVNREV 0x299 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x288 -#define SVNDATE 0x20141208 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x299 +#define SVNDATE 0x20150615 // diff --git a/slsDetectorSoftware/slsDetector/gitInfoLib.h b/slsDetectorSoftware/slsDetector/gitInfoLib.h index 35e43998b..7afc9ded0 100644 --- a/slsDetectorSoftware/slsDetector/gitInfoLib.h +++ b/slsDetectorSoftware/slsDetector/gitInfoLib.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURLLIB "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git" +#define SVNURLLIB "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUIDLIB "eff6ffc4c32edd46844d2cd1670cd4d4e7d05ca3" -//#define SVNREV 0x882 +#define SVNREPUUIDLIB "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" +//#define SVNREV 0x943 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTHLIB "Maliakal_Dhanya" -#define SVNREVLIB 0x882 -#define SVNDATELIB 0x20141208 +#define SVNAUTHLIB "Dhanya_Maliakal" +#define SVNREVLIB 0x943 +#define SVNDATELIB 0x20150615 // From f3d5de70bf85aca86ef1a9a4477d5480d9d6df50 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 22 Jun 2015 17:09:47 +0200 Subject: [PATCH 04/22] firmware version for eiger added --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 39 +++++++++++++++++- slsDetectorSoftware/eigerDetectorServer/Beb.h | 3 +- .../eigerDetectorServer/FebRegisterDefs.h | 7 +++- .../bin/eigerDetectorServer | Bin 242151 -> 242191 bytes .../slsDetectorFunctionList.c | 2 +- .../eigerDetectorServer/xparameters.h | 6 ++- 6 files changed, 51 insertions(+), 6 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 64f78e1cc..b0522622f 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -170,6 +170,38 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ } +u_int32_t Beb_GetFirmwareRevision(){ + //mapping new memory + u_int32_t baseaddr, value = 0; + + //open file pointer + int fd = Beb_open(XPAR_VERSION,&baseaddr); + if(fd < 0) + cprintf(RED,"Firmware Revision Read FAIL\n"); + + else{ + //read revision existing bit + value = Beb_Read32(baseaddr, REVISION_EXISTING_OFFSET); + printf("Firmware Revision Read OK\n"); + //error reading + if(!(value&REVISION_EXISTING_BIT)){ + cprintf(RED,"Firmware Revision Number does not exist in this version\n"); + value = 0; + }else{ + //read revision number + value = Beb_Read32(baseaddr, 0); + printf("Firmware Revision Number Read OK\n"); + printf("Rev: 0x%x.%x\n\n",value & REVISION_MASK,value & SUB_REVISION_MASK); + value &= REVISION_MASK; + } + } + + //close file pointer + if(fd > 0) + Beb_close(fd); + + return value; +} void Beb_ClearBebInfos(){ //unsigned int i; @@ -760,12 +792,17 @@ int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ if (fd == -1) cprintf(RED,"\nCan't find /dev/mem!\n"); else{ +#ifdef VERBOSE printf("/dev/mem opened\n"); +#endif *csp0base = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, baseaddr); if (*csp0base == (u_int32_t)MAP_FAILED) { cprintf(RED,"\nCan't map memmory area!!\n"); fd = -1; - }else printf("CSP0 mapped\n"); + } +#ifdef VERBOSE + else printf("CSP0 mapped\n"); +#endif } return fd; } diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index a5c9fc3ba..2e6f9d2a0 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -48,8 +48,7 @@ struct BebInfo{ void Beb_GetModuleCopnfiguration(int* master, int* top); - - + u_int32_t Beb_GetFirmwareRevision(); int Beb_WriteTo(unsigned int index); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 1f9b522c1..a0380c848 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -116,7 +116,7 @@ // Master Slave Top Bottom Definition #define MODULE_CONFIGURATION_MASK 0x84 -//new memory +//command memory #define LEFT_OFFSET 0x0 #define RIGHT_OFFSET 0x100 @@ -130,4 +130,9 @@ #define TWO_REQUESTS_OFFSET 0x1c #define TWO_REQUESTS_BIT 0x80000000 +//firmware version +#define REVISION_EXISTING_OFFSET 8 +#define REVISION_EXISTING_BIT 0x80000000 +#define REVISION_MASK 0x0FFFFFFF +#define SUB_REVISION_MASK 0xF0000000 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 2aa58e4fad06b5e18982e46d55f6d3a1aaa25559..ef98c4c4d06090f0302ac101e44b7d271fc659cc 100755 GIT binary patch delta 24043 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 Date: Mon, 29 Jun 2015 16:56:34 +0200 Subject: [PATCH 05/22] git rev in --- slsDetectorSoftware/eigerDetectorServer/gitInfo.txt | 8 ++++---- slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h | 8 ++++---- slsDetectorSoftware/gitInfo.txt | 8 ++++---- slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt | 8 ++++---- .../gotthardDetectorServer/gitInfoGotthard.h | 8 ++++---- slsDetectorSoftware/moenchDetectorServer/gitInfo.txt | 8 ++++---- slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h | 8 ++++---- slsDetectorSoftware/mythenDetectorServer/gitInfo.txt | 8 ++++---- slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h | 8 ++++---- slsDetectorSoftware/slsDetector/gitInfoLib.h | 8 ++++---- 10 files changed, 40 insertions(+), 40 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index 41499c1aa..c7df38234 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe -Revision: 139 +Repsitory UUID: 3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3 +Revision: 141 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 299 -Last Changed Date: 2015-06-15 17:41:48 +0200 +Last Changed Rev: 300 +Last Changed Date: 2015-06-22 17:09:47 +0200 diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index a1912321b..55e1387c1 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/eigerDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" -//#define SVNREV 0x299 +#define SVNREPUUID "3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3" +//#define SVNREV 0x300 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x299 -#define SVNDATE 0x20150615 +#define SVNREV 0x300 +#define SVNDATE 0x20150622 // diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index aac149b78..67448f583 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe -Revision: 943 +Repsitory UUID: 3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3 +Revision: 945 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 943 -Last Changed Date: 2015-06-15 17:41:48 +0200 +Last Changed Rev: 945 +Last Changed Date: 2015-06-22 17:09:47 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt index 32d7b3f0d..49ffa8ec7 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/gotthardDetectorServer URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe -Revision: 178 +Repsitory UUID: 3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3 +Revision: 179 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 299 -Last Changed Date: 2015-06-15 17:41:48 +0200 +Last Changed Rev: 300 +Last Changed Date: 2015-06-22 17:09:47 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h index 03d1202df..360680d24 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" -//#define SVNREV 0x299 +#define SVNREPUUID "3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3" +//#define SVNREV 0x300 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x299 -#define SVNDATE 0x20150615 +#define SVNREV 0x300 +#define SVNDATE 0x20150622 // diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt index cb0803a19..b1ef89fbd 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/moenchDetectorServer URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe -Revision: 65 +Repsitory UUID: 3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3 +Revision: 66 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 299 -Last Changed Date: 2015-06-15 17:41:48 +0200 +Last Changed Rev: 300 +Last Changed Date: 2015-06-22 17:09:47 +0200 diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h index 9e3b823f9..bcbe5fce7 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" -//#define SVNREV 0x299 +#define SVNREPUUID "3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3" +//#define SVNREV 0x300 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x299 -#define SVNDATE 0x20150615 +#define SVNREV 0x300 +#define SVNDATE 0x20150622 // diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt index ed3f7219e..6a82cdf7c 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/mythenDetectorServer URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: b3dc8271bc5b101e2a973f5d520934ba67ad47fe -Revision: 94 +Repsitory UUID: 3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3 +Revision: 95 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 299 -Last Changed Date: 2015-06-15 17:41:48 +0200 +Last Changed Rev: 300 +Last Changed Date: 2015-06-22 17:09:47 +0200 diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h index d48ea4c4b..b4f624804 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" -//#define SVNREV 0x299 +#define SVNREPUUID "3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3" +//#define SVNREV 0x300 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x299 -#define SVNDATE 0x20150615 +#define SVNREV 0x300 +#define SVNDATE 0x20150622 // diff --git a/slsDetectorSoftware/slsDetector/gitInfoLib.h b/slsDetectorSoftware/slsDetector/gitInfoLib.h index 7afc9ded0..7d42fe403 100644 --- a/slsDetectorSoftware/slsDetector/gitInfoLib.h +++ b/slsDetectorSoftware/slsDetector/gitInfoLib.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURLLIB "maliakal_d@gitorious.psi.ch:sls_det_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUIDLIB "b3dc8271bc5b101e2a973f5d520934ba67ad47fe" -//#define SVNREV 0x943 +#define SVNREPUUIDLIB "3b5e43dfbd7f3819ace58ad8cd0aefd0ba0034c3" +//#define SVNREV 0x945 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTHLIB "Dhanya_Maliakal" -#define SVNREVLIB 0x943 -#define SVNDATELIB 0x20150615 +#define SVNREVLIB 0x945 +#define SVNDATELIB 0x20150622 // From c4e0f2967f9a65213cc4e419b872c769551ab531 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 30 Jun 2015 11:54:13 +0200 Subject: [PATCH 06/22] solved detector organisation in client side --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index eda6d0163..cfe381cce 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -380,18 +380,18 @@ void multiSlsDetector::updateOffsets(){ for (int i=1; inumberOfDetectors; i++) { if (detectors[i]) { //incrementing in y direction - if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + numY) < maxChanY))){ + if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + detectors[i]->getMaxNumberOfChannels(Y)) <= maxChanY))){ offsetY += detectors[i]->getMaxNumberOfChannels(Y); maxY += detectors[i]->getMaxNumberOfChannels(Y); numY += detectors[i]->getTotalNumberOfChannels(Y); } - //incrementing in y direction + //incrementing in x direction else{ offsetY = 0; numY = 0; maxY = 0; thisMultiDetector->maxNumberOfChannel[Y] = 0; - if ((maxChanX == -1) || ((maxChanX > 0) && (offsetX <= maxChanX))){ + if ((maxChanX == -1) || ((maxChanX > 0) && ((offsetX + detectors[i]->getMaxNumberOfChannels(X)) <= maxChanX))){ offsetX += detectors[i]->getMaxNumberOfChannels(X); numX += detectors[i]->getTotalNumberOfChannels(X); maxX += detectors[i]->getMaxNumberOfChannels(X); From f29f9b701d749fd75b668f91657d14459e24f393 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 30 Jun 2015 12:28:44 +0200 Subject: [PATCH 07/22] check detector mac matches hardware mac only for 1Gbe --- .../eigerDetectorServer/slsDetectorFunctionList.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index e2287f1e0..efc8267ae 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -724,13 +724,14 @@ int executeTrimming(enum trimMode mode, int par1, int par2, int imod){ int configureMAC(int ipad, long long int macad, long long int detectormacadd, int detipad, int udpport, int udpport2, int ival){ - - if(detectormacadd != getDetectorMAC()){ + //only for 1Gbe + if((!send_to_ten_gig) && (detectormacadd != getDetectorMAC())){ printf("*************************************************\n"); printf("WARNING: actual detector mac address %llx does not match the one from client %llx\n",getDetectorMAC(),detectormacadd); + detectormacadd = getDetectorMAC(); + printf("WARNING: Matched detectormac to the hardware mac now\n"); printf("*************************************************\n"); } - detectormacadd = getDetectorMAC(); char src_mac[50], src_ip[50],dst_mac[50], dst_ip[50]; int src_port = 0xE185; From a3a2db1f73d6a22fa9ad87745d4132e4317c1331 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 30 Jun 2015 17:20:23 +0200 Subject: [PATCH 08/22] fixed 32 progress problem, and increased debugging --- .../bin/eigerDetectorServer | Bin 242191 -> 242191 bytes .../slsDetectorFunctionList.c | 10 +++++++--- .../slsDetector/slsDetector.cpp | 12 ++++++------ .../slsDetector/slsDetectorUtils.cpp | 5 +++++ .../slsDetectorAnalysis/postProcessing.cpp | 12 ++++++++++-- .../slsDetectorAnalysis/postProcessing.h | 2 ++ .../slsDetectorServer_funcs.c | 4 ++-- 7 files changed, 32 insertions(+), 13 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index ef98c4c4d06090f0302ac101e44b7d271fc659cc..48451f357ac2c000eee71ade7616cceff9b992dc 100755 GIT binary patch delta 20667 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 E00tj$!TdynamicRange=retval; - //#ifdef VERBOSE +#ifdef VERBOSE std::cout<< "Dynamic range set to "<< thisDetector->dynamicRange << std::endl; std::cout<< "Data bytes "<< thisDetector->dataBytes << std::endl; - //#endif +#endif } @@ -4211,11 +4211,11 @@ int slsDetector::setDynamicRange(int n){ if(ret != FAIL){ if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Sending/Getting dynamic range to/from receiver " << retval << std::endl; + std::cout << "Sending/Getting dynamic range to/from receiver " << n << std::endl; #endif if (connectData() == OK) - ret=thisReceiver->sendInt(fnum2,retval1,retval); - if((retval1 != retval)|| (ret==FAIL)){ + ret=thisReceiver->sendInt(fnum2,retval1,n); + if ((ret==FAIL) || (retval1 != retval)){ ret = FAIL; cout << "ERROR:Dynamic range in receiver set incorrectly to " << retval1 << " instead of " << retval << endl; setErrorMask((getErrorMask())|(RECEIVER_DYNAMIC_RANGE)); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index 8acfbb8e1..f98a68bee 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -53,6 +53,11 @@ void slsDetectorUtils::acquire(int delflag){ int multiframe = nc*nf; + // + if(setDynamicRange() == 32) subframe = 1; + else subframe = 0; + + // setTotalProgress(); //moved these 2 here for measurement change progressIndex=0; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 9a2bd6f0b..73e7a3e7c 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -501,6 +501,8 @@ void* postProcessing::processData(int delflag) { int currentFrameIndex = -1; bool newData = false; int nthframe = setReadReceiverFrequency(0); + + #ifdef VERBOSE std::cout << "receiver read freq:" << nthframe << std::endl; #endif @@ -531,8 +533,14 @@ void* postProcessing::processData(int delflag) { pthread_mutex_unlock(&mg); //updating progress - if(currentAcquisitionIndex != -1) - setCurrentProgress(currentAcquisitionIndex+1); + if(currentAcquisitionIndex != -1){ + if(subframe){ + pthread_mutex_lock(&mg); + setCurrentProgress(getFramesCaughtByReceiver()); + pthread_mutex_unlock(&mg); + }else + setCurrentProgress(currentAcquisitionIndex+1); + } #ifdef VERY_VERY_DEBUG cout << "currentAcquisitionIndex:" << currentAcquisitionIndex << endl; #endif diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h index 1472af732..effa175e7 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h @@ -302,6 +302,8 @@ s /** set when detector finishes acquiring */ int acquiringDone; + /**sub frame*/ + int subframe; /** diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index ad749c248..81df1d4f6 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -85,7 +85,7 @@ int decode_function(int file_des) { fnum=255; ret=(*flist[fnum])(file_des); if (ret==FAIL) - printf( "Error executing the function = %d \n",fnum); + cprintf( RED, "Error executing the function = %d \n",fnum); return ret; } @@ -2603,7 +2603,7 @@ int set_dynamic_range(int file_des) { ret=FORCE_UPDATE; #ifdef SLS_DETECTOR_FUNCTION_LIST - dataBytes=calculateDataBytes(); + if (dr>=0) dataBytes=calculateDataBytes(); #endif //ret could be swapped during sendData From 5f0741d882dad6f4d415f3af3ea3f23cf130df33 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 1 Jul 2015 15:00:17 +0200 Subject: [PATCH 09/22] trimbits flipped and works correctly for top and bottom --- .../eigerDetectorServer/FebControl.c | 8 ++++---- .../bin/eigerDetectorServer | Bin 242191 -> 242191 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index 15206ab28..25a97b4a7 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -1028,8 +1028,8 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ } //end row loop if(Module_TopAddressIsValid(&modules[1])){ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ @@ -1037,8 +1037,8 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ return 0; } }else{ - if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| - !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + if(!Feb_Interface_WriteMemoryInLoops(Module_GetBottomLeftAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_l)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetBottomRightAddress(&modules[Feb_Control_current_index]),0,0,1024,trimbits_to_load_r)|| //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 48451f357ac2c000eee71ade7616cceff9b992dc..4b4b1ea2eeedfe0a766704cc59586781b6873b8e 100755 GIT binary patch delta 60 zcmeBw!q@+VuVD*gnDO*w#*C8F^NktJr-y-9`;8gnL1Gfq%}f|AKw=W@Z6=IB%(T7D Igt@a80D)B#+5i9m delta 60 zcmeBw!q@+VuVD*gnDO*w#*C8F^NktJr-y-9`;8gnL1Gfq%}f|AKw=W@Z6=IB%(T7D Igt@a80D)B#+5i9m From 2ef27b718cfb9c99de27e3d05c3d2bb95211906e Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 9 Jul 2015 16:59:13 +0200 Subject: [PATCH 10/22] updated gotthardserver to reflect v1.0 --- .../gotthardDetectorServer/ansi.h | 1 + .../gotthardDetectorServer | Bin 127492 -> 127524 bytes 2 files changed, 1 insertion(+) create mode 120000 slsDetectorSoftware/gotthardDetectorServer/ansi.h diff --git a/slsDetectorSoftware/gotthardDetectorServer/ansi.h b/slsDetectorSoftware/gotthardDetectorServer/ansi.h new file mode 120000 index 000000000..a122db0ad --- /dev/null +++ b/slsDetectorSoftware/gotthardDetectorServer/ansi.h @@ -0,0 +1 @@ +../../slsReceiverSoftware/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServer b/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServer index 14d0bc72bb36dfb1cda7ea51e7f828f07ff3ba69..80ad1a40bb9814ac31eece588eeed7148d5becab 100755 GIT binary patch delta 46079 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 RJNL)u@nL@gQ%Qf#{{xU(%LVmhbtV?{=2wJkQ{c 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 From 29c62b172149c9afd3e59bb48e89b2d763a0c4f6 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 17 Jul 2015 13:55:02 +0200 Subject: [PATCH 11/22] offsets corrected for 1.5m --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index cfe381cce..0f7bae2af 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -380,7 +380,7 @@ void multiSlsDetector::updateOffsets(){ for (int i=1; inumberOfDetectors; i++) { if (detectors[i]) { //incrementing in y direction - if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + detectors[i]->getMaxNumberOfChannels(Y)) <= maxChanY))){ + if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + detectors[i]->getMaxNumberOfChannels(Y)) < maxChanY))){ offsetY += detectors[i]->getMaxNumberOfChannels(Y); maxY += detectors[i]->getMaxNumberOfChannels(Y); numY += detectors[i]->getTotalNumberOfChannels(Y); @@ -391,7 +391,7 @@ void multiSlsDetector::updateOffsets(){ numY = 0; maxY = 0; thisMultiDetector->maxNumberOfChannel[Y] = 0; - if ((maxChanX == -1) || ((maxChanX > 0) && ((offsetX + detectors[i]->getMaxNumberOfChannels(X)) <= maxChanX))){ + if ((maxChanX == -1) || ((maxChanX > 0) && ((offsetX + detectors[i]->getMaxNumberOfChannels(X)) < maxChanX))){ offsetX += detectors[i]->getMaxNumberOfChannels(X); numX += detectors[i]->getTotalNumberOfChannels(X); maxX += detectors[i]->getMaxNumberOfChannels(X); From a8fc34c92bdc8794e9c5cc6cd01ac92d226ab987 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 21 Jul 2015 16:26:50 +0200 Subject: [PATCH 12/22] included propix for client --- .../gotthardDetectorServer/Makefile.propix | 48 ++++++++ .../gotthardDetectorServer/server_funcs.c | 108 +++++++++++++----- .../slsDetector/slsDetector.cpp | 45 +++++++- .../slsDetector/slsDetectorBase.h | 2 + .../slsDetector/slsDetectorUtils.cpp | 2 + .../slsDetectorAnalysis/energyConversion.cpp | 3 + 6 files changed, 176 insertions(+), 32 deletions(-) create mode 100755 slsDetectorSoftware/gotthardDetectorServer/Makefile.propix diff --git a/slsDetectorSoftware/gotthardDetectorServer/Makefile.propix b/slsDetectorSoftware/gotthardDetectorServer/Makefile.propix new file mode 100755 index 000000000..6fb7a6207 --- /dev/null +++ b/slsDetectorSoftware/gotthardDetectorServer/Makefile.propix @@ -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 + + + + + + diff --git a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c index 0fa60e7e7..fe07852f0 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c @@ -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;inModMax[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"; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index ff3774ac4..8f6e4d6db 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -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;}; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index f98a68bee..75f58e648 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -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; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp index d95600824..bce48ebbe 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp @@ -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"; From 0d833469433f40f9749ad0c351f66a9d1337cbfd Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 24 Jul 2015 09:21:38 +0200 Subject: [PATCH 13/22] continuous and storeinram variable --- .../commonFiles/sls_detector_defs.h | 6 +- .../bin/eigerDetectorServer | Bin 242191 -> 242224 bytes .../slsDetectorFunctionList.c | 86 +++++++++++++----- slsDetectorSoftware/slsDetector/slsDetector.h | 2 +- .../slsDetector/slsDetectorCommand.cpp | 44 +++++---- .../slsDetectorServer_funcs.c | 39 +++++--- 6 files changed, 120 insertions(+), 57 deletions(-) diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index dd5e0cd0b..796883d09 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -420,9 +420,9 @@ enum readOutFlags { BACKGROUND_CORRECTIONS=0x1000, /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 - switch (myDet->setReadOutFlags(flag)) { - case NORMAL_READOUT: - return string("none"); - case STORE_IN_RAM: - return string("storeinram"); - case TOT_MODE: - return string("tot"); - case CONTINOUS_RO: - return string("continous"); - case PARALLEL: - return string("parallel"); - case NONPARALLEL: - return string("nonparallel"); - case SAFE: - return string("safe"); - default: - return string("unknown"); - } - + retval = myDet->setReadOutFlags(flag); + + if(retval == NORMAL_READOUT) + return string("none"); + + if(retval & STORE_IN_RAM) + strcat(answer,"storeinram "); + if(retval & TOT_MODE) + strcat(answer,"tot "); + if(retval & CONTINOUS_RO) + strcat(answer,"continous "); + if(retval & PARALLEL) + strcat(answer,"parallel "); + if(retval & NONPARALLEL) + strcat(answer,"nonparallel "); + if(retval & SAFE) + strcat(answer,"safe "); + if(strlen(answer)) + return string(answer); + + return string("unknown"); + } else if (cmd=="extsig") { externalSignalFlag flag=GET_EXTERNAL_SIGNAL_FLAG; int is=-1; diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 81df1d4f6..c97f7652b 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -2637,9 +2637,19 @@ int set_readout_flags(int file_des) { ret=FAIL; } + + +#if !defined(MYTHEND) && !defined(EIGERD) + sprintf(mess,"Read out flags not implemented for this detector\n"); + cprintf(RED, "%s",mess); + ret=FAIL; +#else + + #ifdef VERBOSE printf("setting readout flags to %d\n",arg); #endif + #ifdef SLS_DETECTOR_FUNCTION_LIST if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { ret=FAIL; @@ -2648,30 +2658,37 @@ int set_readout_flags(int file_des) { switch(arg) { case GET_READOUT_FLAGS: #ifdef MYTHEND - case STORE_IN_RAM: case TOT_MODE: - case CONTINOUS_RO: case NORMAL_READOUT: - retval=setReadOutFlags(arg); - break; -#elif EIGERD - case PARALLEL: - case NONPARALLEL: - case SAFE: - retval=setReadOutFlags(arg); - break; #endif +#if defined(MYTHEND) || defined(EIGERD) + case STORE_IN_RAM: + case CONTINOUS_RO: +#endif +#ifdef EIGERD + case PARALLEL: + case NONPARALLEL: + case SAFE: +#endif + retval=setReadOutFlags(arg); + break; + default: sprintf(mess,"Unknown readout flag %d for this detector\n", arg); + cprintf(RED, "%s",mess); ret=FAIL; break; } } #endif + +#endif + if (ret==OK) { - if (arg!=GET_READOUT_FLAGS && arg!=retval) { + if (retval == -1) { ret=FAIL; sprintf(mess,"Could not change readout flag: should be %d but is %d\n", arg, retval); + cprintf(RED, "%s",mess); }else if (differentClients) ret=FORCE_UPDATE; } From 24dcc45f5b193918938c47829b4a177dbe3a5e36 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 24 Jul 2015 10:45:11 +0200 Subject: [PATCH 14/22] receiver crash solved --- slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index 75f58e648..ba271d26b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -467,8 +467,11 @@ void slsDetectorUtils::acquire(int delflag){ pthread_mutex_unlock(&mg); - if (measurement_finished) - measurement_finished(im,*fileIndex,measFinished_p); + if (measurement_finished){ + pthread_mutex_lock(&mg); + measurement_finished(im,*fileIndex,measFinished_p); + pthread_mutex_unlock(&mg); + } if (*stoppedFlag) { break; From c9a952a748b37d36ba8a6b8b7ddfa831ce29d2d6 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Aug 2015 11:38:09 +0200 Subject: [PATCH 15/22] changing file name prefix orders, reset frames caught command from command line --- .../bin/eigerDetectorServer | Bin 242224 -> 242224 bytes .../slsDetector/slsDetectorCommand.cpp | 17 +++++++++++++++ .../slsDetectorAnalysis/fileIOStatic.h | 20 +++++++++--------- .../slsDetectorAnalysis/postProcessing.cpp | 6 +++--- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 2b69b4c2d2baa2107baeb648c1da9ece21070e2f..45bfaa326b1d7db3e39b06746e3378665faa6e37 100755 GIT binary patch delta 18177 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 T@bPq>R&FXn3Eo<6%8vd&C1_7$ delta 18354 zcmbt+4_H-I*7sTaa<71Z2Sh|cxcn6r@uFy`s92;2B}GHS#H6Ieq{PHR!@$DSq6XX6 z)(Mr$)MltCw5vrUPNq0v;=DSe6H_!}Nrgp5rG?(_x6e6O(B^&L@A*ES=eYO!v)5jG zt+m%)`y82|0!roa>L|*p%T+^&3V4bC2rB0_{U@yQ8 zCVWn_L|z75Yr^e-zXDus!kvK6YD%e6X(GCSI0l9?1OCnf@BzSuChP}C$Y76%&1KQ7~!Jqx(>(FR@%VT>=eF#%t8O^5(^YzS9A%9_KUT=HYbfY z-LwNr)NX&2pHI%97M?VA5w-CxV<4%CJZ2W`lhg9A% z9@A<(BV{_}@zkk7b#J7+Ms9LBZ=5*Z0Bk?((b$j2dB>Cx9zHJ`vcb$ho-}}(cynqH zzlz>D9-O+2E&=Y(ccglvw z#KE+H=TH3?>r91ysk}mymc5ZFDBznzuwpPA6R6uld1(knP2_CatCR~nrSkSSL+d=I z_a!RP`-DqCi5+~->$Q-=J#dAK$nIcLHy;c zL3E5aWVvVyZfn1}D4n?yBrEpwqlBUFA`M@wVeWa@b5ywISZlJ))C3;T7jd%yma z%q!+er*zy|3X7NB8O4|08L0P`UBed6PhdX<)>Y5%Lx|?u964*Xa|IU*()3=Tho)>e z&NJ@{ht~`58qx34Zxh2$m-ybhzCq%sUf3Vj+rJRjt8?TIBRb4;?sn0Bo^#J)NGmK} z!Eaim(rKS#k_I<6+ZZpvA~3I*HSsk z{zt>ck^JL=FX$P*_krnj?(GL7i4_mx(aU6XcC&;PUZ7XG&+>ue9-biApQWhdjJ^87 z7p6T_O?i0J4YXq>EfBP=Ja_p`)XePW3a@ zm!r|-#c4`Wj42^WQ&t=|`wrj}&3-ca>AZGDsdQk`JrwrPAW7-g@8Bwv(??U5@8h*A z2eOB}c#~}WdD}`uqbIIu6T);A9^pG4>D{fyvO}hjR83i?FA@Qeg8tZUHI^OX$;CHO zLtSC|v%<(o#XRR3>_|NgfBnp8gs}bD#nh#zobAuX z`TdHu?^Qc7!CIqB$DBAhXtt0es zD&%Ruzsjz7@U$1l%O$-ylwFDEH7|}~S5oWFy|{yLs#as}eb4pdKW&riSGOAnr?hh6 zj&VWbC!66KiXEqy6N&aK1+d?Is;UdE?oGZe8rwX;Fzi(Y8pz`&ob#8$2VM=;7=H$N zNF7mz1XrbOFxV~{$L-a4p7QdD0htC`j%8`YLthC;_Dy-^4%5nicqM(v z#>!F!n^eg#=idoAj_$--sRw(a{pwC0x^o=6rrsdFZ)X@5dur!-{^qy|$cwiC>bSFz z*X-(z4X}S#6i(|F{M-55ZrP2-znxs$9W|#jIh+dCESg`uCK@%6RhAwVA8N{^ttCrB ziZOd&=|)AFyiG|pQ@2rIDObxU{AMdY^S;#Dp|}*@u=`P3$y4@>WGb=7}-2OJtSUcwK(E-MEEU-$+xL!Rk_>25R*#Yp~-+Ot#!Ut@c| zJwjUW?YXuqsTzCyHQt;O%m4iLCLC(^hx3eWt^A0Cp>7(Yg!}A$4`-V!KRowcOYn8A z`vw!8(b1X{=(=j>Zi1m?EwlB&Z)=&dcgHbBMR76F<`|$Uj?bTa?`EbX@wE4T#`&32 zKNyvKUj5h1_BqbN@xDCkVAO!qx_NR*)!0f@I9shI9LFmUeq&vpoU6RR%Nj!H0rp!9Y4>wHjvr<#W-i9$2qr&HR9Srs!*Uv4Kryg1~Tuxyr@j`O+8rdv^ zbn z;p-b4Q4nMv+d;?bI*#2;14odXKRH~9>*l{_4bS-K33{on`6C<*$9a3xRNBmwj?WCP z?VfP)0))M%p^nCP91Z2p<6BVTWqv$ya3(!;wQXPfm#~=+|RXBL);py)o&c zvATMSrH$90jAR}@y!GTj=8??1PL9HX=lH9jBHsAdacpHe_xP_*e7C?+cGPgun$q$- zcbp1izb+S<)2Uw{mV2xRZI+}B{B?NAQ&Gh-e@M%(NxK~jD1xC@Mu0r1KY85yTlzot z@v2kdzO~)LJ~;sHaC%;!hhI76hoA&vz^va6E<#urT``1PHvX1=_ADD z6+dI9_ww52XUUJ+<%#O{5@4P zKSH)C)*Q)b49t0L?Ia~w-u?7cxt%r}zPBQk=6oTAW+|31b2FYZY4C3jLh8&-rDf^^yP;8++XeYauw{)#L zG$wE7fBC!rfLh3_Hpl8mk0aNXtg-oD@#wR$vu!EpA`R)PDBY^q@_>h5|D!6S4RK0~ z5oxx{9;yuBRcGh>ggXB!38hWKpcb)%UMol2^`lR>dtpJa^V`9@J^4zqL%pKfo zv&OPd8Xl1%vOk2am0acXby%d%lc@A+;#$jeujeI~4pjk~tdA+{b%uAeyy&&<8npSJ zzb~D8SqGI~m&}zw@Z1IZaJ#1`@=@lse8lG7YT^Td-`@j2+{D{~5AA{1vwfo7GamTz zZv31pP&^V!tI1JV0Xl)Gf7NTQQaqEp%|GWPZ~pY_SG)n~hG zp4l49dW+ltD}*m1`daq_`4-pym0d59*p|SL}yg4#NoCu`Ay4~MI6Iprd_e0s# zvvocfdr_V1LI%+~9d+wG16A6wkl4-N>$sag1g_4L{CUGKZ_*N8_-p@rmt%S6x#N9U$>*O#*+E>#D9~U*7)f2;W9? zZ7A=PSMj*6MRaRjMb{4U8VzyY8XNsjo^*Al@2T!d#}Kc)+JC?q&|a0sfO#8r^>V!~ zX>80`-f(qVkhh8%ORlf;lFo9wD=f?#Q;pW|mBtB0O0vtyHi?S2o#(iQO;~Q`3kwQC zGw*oEn~GwNq|17(!bUHV^Nwop&XAKyI%psA!>&>E8o%V4IMlna$Djqqprqq&W?ktr z@BJ9`*7La(#Pr#RP8>DoKTPko6Q&>aPg9aCj&7KK)N9YT(g@llRHB=Mdd@#;vN3AZ zTOyxmaKEkYoS3@(N<5AsRB0nmi=9MKM|FGMCLevU`au?^@Kesb-VGF#G&-o-)7;=kUYDRnLV;0NQSB^z-;XZcuX$6^Wt}AiQR4WBo z5_%V6ZNbxB-we23M*L`Ktlw);GDe$PY!PLi)StY>7Ef9_;IJ|B>m}EZ9JbCG>P5IX zxf5Q##)dv1lDug)8-l41_7^+6>EFyJUX=HyF)Z#2QQw<4~2;U9|~nY#lqo3 zgDG8-#<0QPOWJtaE1D$sbrU;BVnc=IOEXJ5OoO*+EcVLUNlLpOJ&IS4jS+hqyUx>e zgp#`5!>ok8&S1%pI>wrXUZP#!JB8Qp9TxMs2==2eo7_FI zr$ve%g-k%?#_n^6(d6xx4UkEA8b8e_jvc->p6Y{#!oQE&k=|F(BO!jhB`5NDgPhTi56Wdg)GnmS8j_Q zt3y7GK43_TmPLwQ0pLot28B#j4+}OMQ$)Yo!-73mY)la`?>`u@6;qhoJ$jyKfF==L zrnKSztu*P6iIJcGR-B)Y#-ffH8b^KJt??*a1eKcK`XF-Se~=Le8S=`fpxr1c{b@{q zUy599cVdq`CeHZNun7JApJCHqPhk&wYAo_@J=}Bs@UkKDw1^I%i8j9i^f!t80Q#8u zmAnu_0|P!gBxmkU6cH0dUSFC@dn8pH=}SZCEz!{zJMD~)nGy(0q9_cck=}ixHvfH=2ictwg}@!KXE{z${bh*;V^F2L<5Bo*KHjTu-0%n>@QtdA>oo00ny z?E&Qy*By+$o1E%kI%@H)H-$s6*Zbn!P~_)lWH3aD5yL2rwuz!)wAoIp`}x1aM|0)1+;1*U4`N)(Nw>Cbxq>Jm{o zhL+Mg(KUu1v;}5rbY-Kn@Fp0`7FeiJ*KMLEnf_!8tkme&jiPWYo$#&E=$Czlc_>sr zQtul_LwwtTzSs0ila7989L4$div!;6uM!<^8&7ezet8;Q{!k>1r*EXhOQ+3CR!{8x!P?4^NFQ&N327P(J$G%!Qe|CTPnw zSJOrK!M)+%xS39(aHsEAit<}%q^&=Me-AgHKdpZ@`c~|)G=z^VfaETW*XL0B@9&n^ zvC){f|0Rt&U=>-my5CgkxI;!vh2Mg}dMu4nY{42h$BKqD%otpbK8Z_dG-|khTh%VV}L-(YJn?kVz z2fA-gFxI#Fb1Vr?NX(*+De-x^YczBz6x4W1HG*=?rw2h3F@!(5iNlki>&U-vf+8>PD_ z(H_zu@e)_odsO#srS{R??s{3HIn*j(=y2L7(WAulbjqVHQJYR->}zbvbb5~#h>B^n znuP`n&*^lNmwv#EY6#61+H?#YEApq)e2Ni=r_;B#P%Nu$ve=(N(@M{Oc&&n>FTa-+ zm-H+~?$nPe!sWZ?8ARvx58I$O;HtRb2AUp?iS|(W*1)|ik84SY&L^6(JEyyT?Wd3J z>#l<7ynZ=$D1%hF)-dlcFGyy1UE%EaqBSr$^`a}Ls7O* zu&ZqB5b)$>(KjfJGw0ygO%(ZaXxIR&WJSVs>>*_RHJ_mmqr3+i#e}n4{m>xR%6l%x@j#xnzV)Tgp(?CK%-R1f-^=T63p%xu&ww~C5vx}SY=R$R)ai8qHwuNj6< z7w^4?p^#^dgNud0ndM$PHJ~Un`2|(H%Iqo9EHH-rS_*40mEz`oKt z#^r}OaQV?MONn-S7kG-Vx8~_tV$WR^78apk+^yYKrS{~5W)g3R@D%6nqKP9&Q4eG(48hsM|xXVZIP0OvSJbHZ(F28 zqmTDF)9$0Y$QG$-bbOY4ZyzN-TS7xb=VJP+Uu3ZrRA zGo7Gd`eW(N?4__kX^adMya&{CxI>9b9Xm-;yJM>HHsp8teNui9KrOJDeem|q5hlKqBS{k9h z=IfzY{`HC-9W81eKuSGwNHjh`GjG#hSRt4#-34t_!S#9_ahGvD^^!OC8}$0{dC^fo zk$zG6-C7;FO==b5eDgtC=HVTsyGo-&t3=!ided5q?jUE&3YtV-jneQM9bDs#UP*Oq zY`f_Qc(wk07!hw`zFsShiZItNEqEE3QI>RvRRLYcTbCRtLT-{H%xS3tSky3 z((^YWm1w*p*Yy%Wgx^5}JRP|)g+M(3*-4^o zHQBslHYArROrw1ynjw)ki?+uo%x~WTbIqta_iht`r8IcRHr;1f7r2*WZ9czQTW$>E zVDANyS4t;nzkc2#VeFkF3d?YtURFls*5UWckSr@r4VLw*Om5R%SB6W;#xWD)&OBJg z8`!o_(oGTRh(d3TUVjVrH*UGxTop!Ik7?K0il3yZ5gn!hkQZLp%WJuJV4xz&nrM$z zMeCCkHFg`McxEZRCgPOp1y9Rk5kqQz?1AqCynYxsl-OXyFR$aax}GAvufb#G3wM6v z8-KBRJ>AJ_J{KM9ap77iayHN_boUDzajd=Nv~Q%NM9W3nQ?x56Hq=xRCVb7BoNH;* zXwN>;yqiMA!KZ0@LTnOrwa7Rx^Bh&uorLzRaVIIPr$Ap%Zfu%JuE1M_exjm+h9<;j z^%z>zJ#_cU|1dOPoRdSBh~#H*>5MJWX!j;PCaPZ|t9a=dTHqI3rqM2=;!$Gjh0n9J zn1+j@XK{UR7dxM&qrUjcuSk7aV(#EjQT#jHib+)e4&}+Gt$$_p0@~ zIqgK&lO9lx=yk$&_g99&hc()Ht4S-rfz}EdE-jT5G%ij--&gWUp42M$_&9j+71N94 zzK5w&K}T*}GHAG*Z=xVu9FoN=@5{U6FzG&Cak;m6ViU~_ibJ{cN(5Hr9#jd~-`Tc_ zZlP-j5nT7u5|O$QrAQ{HW&N4~OG~)NoB?Z=#s7ih7i-zDfB z-0hv;U!Lx|m@b;D=v{H&?Z*BheYcR z`a51v?5{>Zzb>L*LO^d7jW6Nq^xRj@wwLH}#(sA}6zrtks7Ph_I!C-pRlV?5q^X8> z`!<*k$8o$q!ddn@9rUCUXX-oD$4Z6H%=hS%zO=;|e}a~IQM|M241Lg-3Pf%@-j0kF zd)n#i$U*zc2xXe5Wmj^9qRuE&?5gGMG*ua%rBZv1N*8jSdoR#jDvj)NU5%=`{)ucd z;K+Kk1!lkfdY&7{MEQUok0Hh<4(Hx94R{kM5~qMdZs_Pq-e?A1$L2YW5G`R;~iD{Y>UhF zOoz+$Y!=!oqy1fKH!NxLkvN^+1e*IPce(gpm+QG|qs9k7TdJnkvv@UHXp$|L(;4^2DBDY}BlHNRmV3 zk7RFmxkMA%Ts-mzIKpza1fxyWF$OLWCP)L^W#XVA#kpL+j~DUrY%nU%tavtcNExu9 zJx0~ITz}Zm1DB0{1B|s<9FAx63BLz1oDH5+f)NGXqgb}fbpTdV8hYRgT&{P^0N3}x zmAPE+!7|FF9=Of0un%Twb-py5HPZ_Y*56nD^-?IF96VJb+QCLpv&eF=_a@}4Oew%q zh^GioF`g1U<#;OaY{s(%Pc@!Bcxv(N$5W4|!I_cB?j$-Vc8_G?lp&7Frc<1kO^N6= z3Qe0BESn8ts%#F6#j>dt>t(Y=>^7RCvdIwVWm6-1C822-gJshurpl&BES61;STCDK zv0FCh#8KJQiu1C`61_&FX%K^DQzoX4W?}5B6tP&gUnhz6vTY9(yCr##I69g=i@)R& zcZ^|?)^jSonc;kF3=6OreewKQmhY7TbSGl=M`!5-wvUPTQrHZujud_qSiZGWrP>nb zqZ8yXy)T|iW$UdaK({%=CbK~nqc2j^@Z0-sD!qe9=)F)pHkIx2_t=2y2X31yxg|+F zbSvwa*NE`5E~9vr-p)eTW3}E*mDu}bcVDvX-YvUt9hMB$dbe11U(mZKGZc>(Ww)+I z^3Kw+<>I|5>|N^yl@1&htEaMetQC59w8nn0?#2A|Vt6_Www^+_MNCU)iB^36-5)H< z(pi7o{$TVSVp}?!CJl7JL$s%}3D(0Zy<001rm;gt*V#FZ#gVmErT4aohzy|huJe2b z&|X_q`qLIg=^HN%5GoEn$fCp@GuUI+DoGIkn8ALCgv9r-8R-YPh(a0)1HFkm;sZ(_ z5HRz5?c%$cP!sE@-zj`D(cOt|y%>_oGOf)jy?;hLmdVoOWQQ~Gec~I#+FtS3toDE4&BxlsEeb6qky0t%$*}$;&!Bdh!xAwseva4JBpzb8y+J{OcuWs#w zo5e@7*&u5*7Pd!Rn9ZtW*c`4A&)&|O%#YDgIWYDB)l9&|z8*bSRbt=lmQNsz=s|24~3vwwA0-DxJy`Y#}>ng>C-cD2^;- ze>J+!ZMkeBSsPV4b56A04Yb~MI`3gq$O~cgX|1Bfob54FW1g|vPiviL^H>Pk&c>;9 zHd*{~FKdu9eR4`1ypJu!pMugS=V1H=GRpdkiHq53FU0uyEJcYM(L>&+`H-g*oZscM zfiy1%E;AzSvkG(#>wT6dvAXrXNRnOMdac!xLAPFOuXG(uRr2cAYmFB7 z+>gzi1sxj1pr!1eX4kcp{l$t+C$vN}rE`6|enxn7t>^%Jakqqctmd#Fj;tsNo&xcHo!WkXo+& zxQA>4Mh;=}@0%4oqHU2S(l)G8VZ$n&YM$jqkHls<%AzPfvV~~K(qUg6mg5ZA&ww$m zCEt?3SVEHUS!xOQ*HvXW_CUwRyRcWJEVbMf87A=_m>hEGVU>mD_kha)<2NIgT0Ud` zvf7b(1LG}k$V?z=9<+?0CeeZ>Le@>$2GyfKc6%H4MPmSy+#YuQe2ZUZ2@4QlQ;JN! z=_=h9Dsq5llY>RcGRsU96iv&ZE7A{znxp@%(vW)5CAq#)MQEV~fB7R)3N2xgsqqk& zVF;56{6a2Z4-+m|l^=3M3HSm!?Z7)sJo3+`T2TWr{h*^#X`pR=ROL)C98e`%3oRj- zp{vj`krjK0l;xI5D1J(oLoK+DTFn8+ROQEdQ6s6@qJ6n#2Adc!QXYau8brZEz*dMF zG!dPcMCMo+!V}vlc`x7!6JD#*8|Q@23Vl$@3d_PoEZn-qpn9dMv>Mq_F=zBjSLyyZ zsF-ikb5xpGE1FhV!Y7{rTfB*`Qk6^DfZc3wtI97qfZI*_F+D7S0PLeEUMEzVyFtVk z>2}R1g64ZgMUiEuKLU(AjX~Zo%DPOn7eUiv5xNp_mF^)jR$@$}C|GG(hSj#L1TkOu zJPb#zQAGU106RsFY#Kzx!@^hkdrYOGOl$#pn!=}k zo1l0FJ`x~!YedQ_EFQIN&MM1;0b^4kw8miT^Oj1J%0FvSzE&w%3M2c+oiX7RT6D4T;WptW$@IRm`ZKQOhKMESTa9Q2|~m z#bOC^P?^Ac=WBB8pJy0Vsb;kqk%YnbE-uAWANw}QSul(TB(Yv$FRd+PZRBr zVcm_wrxY}t zFu40WW$Ci6i4drz%6=U=-vhiWQ|- zk|8cQSfwYR44pFRQ7YYhPSj(3WIwrgGE6*-lOOP1(bYnha|8N)kFw*4y2 zklUl#gg-%8$YG|dg4lf*2M467bkAN<|F|U~AP5oQ&PN0A+vHO< z(e=0)ZApgM0UxWhGg-txVF@e!Ns8ZN;0OAsly?T|q?vH2s{GUdy18=(j#4RTCtx#U z44kQwbr0aZCjb4aa``ae0ux@R(#B4}4JN!vrGiSxH+R~=D%C;}Eu!fO=>54|ccIDn zl}cXwg-DSLxRS!W3wIWrJ3xxvKm#QrbGIEM)%eacIfl56-p^e-x{%M=ys zpd9kvI^<_uv|9j9E(TYvF>264m8KOzs<}M|tyPsTF}r)m5Bj}IYhep_b{+IOY}+hS zoNe4!t57CWlssuE)r$f%4#Re*3gJ2r*R+`xzOb9-q9RT9L?+RLEjo zhT`G#REjz!D%M*@OqO0VkAv`cak^st?kEUHbd>A|Y-%2k2j^tSVRch$_j}47BM|`;RJZZ@{|E zP_bWCX@x_yY_Ke(9FeloNGcmK2vaiCqY-CS3WujC+mIb`QKeS<2N>Tq5{G1;s+MmMK zo`zv=M@B7GsU`{hs>xrWUo_&MMgo)zG!tOdC;CmcresetFramesCaught() == FAIL) + strcpy(answer,"failed"); + else + strcpy(answer,"successful"); + return string(answer); + } + } + else if(cmd=="frameindex"){ if (action==PUT_ACTION) return string("cannot put"); @@ -4328,6 +4344,7 @@ string slsDetectorCommand::helpReceiver(int narg, char *args[], int action) { ostringstream os; if (action==PUT_ACTION || action==HELP_ACTION) { os << "receiver [status] \t starts/stops the receiver to listen to detector packets. - can be start or stop" << std::endl; + os << "resetframescaught [any value] \t resets frames caught by receiver" << std::endl; os << "r_readfreq \t sets the gui read frequency of the receiver, 0 if gui requests frame, >0 if receiver sends every nth frame to gui" << std::endl; os << "tengiga \t sets system to be configure for 10Gbe if set to 1, else 1Gbe if set to 0" << std::endl; } diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index 6bc657317..d5cffcc03 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -59,11 +59,11 @@ class fileIOStatic { static string createFileName(char *filepath, char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos, int findex, int frameindex=-1, int detindex=-1){ \ ostringstream osfn; \ osfn << filepath << "/" << filename; \ - if(detindex>=0) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ if(frameindex>=0) osfn << "_f" << frameindex; \ + if(detindex>=0) osfn << "_d"<< detindex; \ osfn << "_" << findex; \ return osfn.str(); \ }; @@ -89,10 +89,10 @@ class fileIOStatic { static string createReceiverFilePrefix(char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos,int detindex=-1){ \ ostringstream osfn; \ osfn << filename; \ - if(detindex!=-1) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ + if(detindex!=-1) osfn << "_d"<< detindex; \ return osfn.str(); \ }; @@ -218,6 +218,11 @@ class fileIOStatic { } \ else cout << "******************************** cannot parse frame index" << endl; \ uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ + detindex=i; \ + } \ + else cout << "******************************** cannot parse detector id" << endl; \ + uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ @@ -235,11 +240,6 @@ class fileIOStatic { s=fname.substr(0,uscore); \ } \ else cout << "******************************** cannot parse scan varable 0" << endl; \ - uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ - detindex=i; \ - } \ - else cout << "******************************** cannot parse detector id" << endl; \ return index; \ }; @@ -254,6 +254,9 @@ class fileIOStatic { double f; \ string s; \ s=fname; \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ + s=fname.substr(0,uscore); \ size_t uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) \ s=fname.substr(0,uscore); \ @@ -263,9 +266,6 @@ class fileIOStatic { uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) \ s=fname.substr(0,uscore); \ - uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ - s=fname.substr(0,uscore); \ return s; \ }; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 73e7a3e7c..1620249be 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -563,7 +563,7 @@ void* postProcessing::processData(int delflag) { #endif pthread_mutex_unlock(&mg); //go through once more to get last nth frame data - if (acquiringDone >= 4){ + if (acquiringDone >= 5){cout<<"acquiringdone:"< Date: Wed, 19 Aug 2015 11:46:41 +0200 Subject: [PATCH 16/22] some bug fix with file naming from previous change --- slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index d5cffcc03..8eb0bba37 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -254,10 +254,10 @@ class fileIOStatic { double f; \ string s; \ s=fname; \ - uscore=s.rfind("_"); \ + size_t uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ s=fname.substr(0,uscore); \ - size_t uscore=s.rfind("_"); \ + uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) \ s=fname.substr(0,uscore); \ uscore=s.rfind("_"); \ From 79e13c6db7fb516b6a47d157b73767c3808660f0 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Aug 2015 15:48:14 +0200 Subject: [PATCH 17/22] using framescaught instead of frameindex in gui to get data --- .../slsDetectorAnalysis/postProcessing.cpp | 126 +++++++++++------- 1 file changed, 79 insertions(+), 47 deletions(-) diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 1620249be..f0465f195 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -495,8 +495,9 @@ void* postProcessing::processData(int delflag) { */ - int progress = -1; + int progress = 0; char currentfName[MAX_STR_LENGTH]=""; + int caught = -1; int currentAcquisitionIndex = -1; int currentFrameIndex = -1; bool newData = false; @@ -529,20 +530,23 @@ void* postProcessing::processData(int delflag) { //get progress pthread_mutex_lock(&mg); if(setReceiverOnline() == ONLINE_FLAG) - currentAcquisitionIndex = getReceiverCurrentFrameIndex(); + caught = getFramesCaughtByReceiver();//getReceiverCurrentFrameIndex(); pthread_mutex_unlock(&mg); //updating progress if(currentAcquisitionIndex != -1){ + setCurrentProgress(caught); + /* if(subframe){ pthread_mutex_lock(&mg); setCurrentProgress(getFramesCaughtByReceiver()); pthread_mutex_unlock(&mg); }else setCurrentProgress(currentAcquisitionIndex+1); + */ } #ifdef VERY_VERY_DEBUG - cout << "currentAcquisitionIndex:" << currentAcquisitionIndex << endl; + cout << "caught:" << caught << endl; #endif @@ -585,70 +589,98 @@ void* postProcessing::processData(int delflag) { - if (dataReady){ + //for random reads, ask only if it has new data if(!newData){ - if(currentAcquisitionIndex > progress) + if(caught > progress){ newData = true; +/* + // keeping acquiringdone at 1 to get more time to get data + if(acquiringDone > 0){cout<<"going to maintain acquiidne"< progress){ +#ifdef VERY_VERY_DEBUG + cout << "GOT data" << endl; +#endif + fdata = decodeData(receiverData); delete [] receiverData; - }else if (currentAcquisitionIndex > progress){ + if ((fdata) && (dataReady)){ + // cout << "DATAREADY 3" << endl; + thisData = new detectorData(fdata,NULL,NULL,getCurrentProgress(),currentfName,getTotalNumberOfChannels()); + dataReady(thisData, currentFrameIndex, pCallbackArg); + delete thisData; + fdata = NULL; + progress = caught; #ifdef VERY_VERY_DEBUG - cout << "GOT data" << endl; + cout << "progress:" << progress << endl; #endif - fdata = decodeData(receiverData); - delete [] receiverData; - if ((fdata) && (dataReady)){ - // cout << "DATAREADY 3" << endl; - thisData = new detectorData(fdata,NULL,NULL,getCurrentProgress(),currentfName,getTotalNumberOfChannels()); - dataReady(thisData, currentFrameIndex, pCallbackArg); - delete thisData; - fdata = NULL; - progress = currentAcquisitionIndex; + newData = false; #ifdef VERY_VERY_DEBUG - cout << "progress:" << progress << endl; -#endif - newData = false; -#ifdef VERY_VERY_DEBUG - cout << "newData set to false" << endl; + cout << "newData set to false" << endl; #endif + } } } } } - } + } } From 704c0f796ac0250c92b929ae3faf029a5d4219e2 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Aug 2015 16:56:17 +0200 Subject: [PATCH 18/22] reset acquiringDone before acquistion --- slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index ba271d26b..f87959114 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -57,6 +57,9 @@ void slsDetectorUtils::acquire(int delflag){ if(setDynamicRange() == 32) subframe = 1; else subframe = 0; + pthread_mutex_lock(&mg); + acquiringDone = 0; + pthread_mutex_unlock(&mg); // setTotalProgress(); //moved these 2 here for measurement change From df1453568c487724310d9281e4c4f9784d0e2075 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 26 Aug 2015 12:50:45 +0200 Subject: [PATCH 19/22] reverted the file name indices positioning as it doesnt work for gui --- .../slsDetectorAnalysis/fileIOStatic.h | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index 8eb0bba37..cf4ab75f7 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -59,11 +59,11 @@ class fileIOStatic { static string createFileName(char *filepath, char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos, int findex, int frameindex=-1, int detindex=-1){ \ ostringstream osfn; \ osfn << filepath << "/" << filename; \ + if(detindex>=0) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ if(frameindex>=0) osfn << "_f" << frameindex; \ - if(detindex>=0) osfn << "_d"<< detindex; \ osfn << "_" << findex; \ return osfn.str(); \ }; @@ -89,10 +89,10 @@ class fileIOStatic { static string createReceiverFilePrefix(char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos,int detindex=-1){ \ ostringstream osfn; \ osfn << filename; \ + if(detindex!=-1) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ - if(detindex!=-1) osfn << "_d"<< detindex; \ return osfn.str(); \ }; @@ -161,7 +161,7 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - /*else cout << "******************************** cannot parse file index" << endl; \*/ + /* else cout << "******************************** cannot parse file index from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) \ s=fname.substr(0,uscore); \ @@ -218,11 +218,6 @@ class fileIOStatic { } \ else cout << "******************************** cannot parse frame index" << endl; \ uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ - detindex=i; \ - } \ - else cout << "******************************** cannot parse detector id" << endl; \ - uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ @@ -240,6 +235,11 @@ class fileIOStatic { s=fname.substr(0,uscore); \ } \ else cout << "******************************** cannot parse scan varable 0" << endl; \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ + detindex=i; \ + } \ + else cout << "******************************** cannot parse detector id" << endl; \ return index; \ }; @@ -255,9 +255,6 @@ class fileIOStatic { string s; \ s=fname; \ size_t uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ - s=fname.substr(0,uscore); \ - uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) \ s=fname.substr(0,uscore); \ uscore=s.rfind("_"); \ @@ -265,7 +262,11 @@ class fileIOStatic { s=fname.substr(0,uscore); \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) \ - s=fname.substr(0,uscore); \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ + s=fname.substr(0,uscore); \ + return s; \ }; From 2f160a7c280764b3c338f7719967452d8e8cd9cc Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 26 Aug 2015 16:47:18 +0200 Subject: [PATCH 20/22] reordered file name positions for gemma --- .../slsDetectorAnalysis/fileIOStatic.h | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index cf4ab75f7..b0e394ed3 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -59,10 +59,10 @@ class fileIOStatic { static string createFileName(char *filepath, char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos, int findex, int frameindex=-1, int detindex=-1){ \ ostringstream osfn; \ osfn << filepath << "/" << filename; \ - if(detindex>=0) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ + if(detindex>=0) osfn << "_d"<< detindex; \ if(frameindex>=0) osfn << "_f" << frameindex; \ osfn << "_" << findex; \ return osfn.str(); \ @@ -89,10 +89,10 @@ class fileIOStatic { static string createReceiverFilePrefix(char *filename, int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos,int detindex=-1){ \ ostringstream osfn; \ osfn << filename; \ - if(detindex!=-1) osfn << "_d"<< detindex; \ if ( aMask& (1 << (slsDetectorDefs::MAX_ACTIONS))) osfn << "_S" << fixed << setprecision(prec0) << sv0; \ if (aMask & (1 << (slsDetectorDefs::MAX_ACTIONS+1))) osfn << "_s" << fixed << setprecision(prec1) << sv1; \ if (pindex>0 && pindex<=npos) osfn << "_p" << pindex; \ + if(detindex!=-1) osfn << "_d"<< detindex; \ return osfn.str(); \ }; @@ -161,10 +161,16 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - /* else cout << "******************************** cannot parse file index from " << s << endl; \*/ + else cout << "******************************** cannot parse file index from " << s << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) \ - s=fname.substr(0,uscore); \ + s=fname.substr(0,uscore); \ + else cout << "******************************** cannot parse frame index from " << s << endl; \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ + s=fname.substr(0,uscore); \ + else cout << "******************************** cannot parse detector index from " << s << endl; \ + uscore=s.rfind("_"); if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ @@ -218,6 +224,11 @@ class fileIOStatic { } \ else cout << "******************************** cannot parse frame index" << endl; \ uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ + detindex=i; \ + } \ + else cout << "******************************** cannot parse detector id" << endl; \ + uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ @@ -235,11 +246,7 @@ class fileIOStatic { s=fname.substr(0,uscore); \ } \ else cout << "******************************** cannot parse scan varable 0" << endl; \ - uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ - detindex=i; \ - } \ - else cout << "******************************** cannot parse detector id" << endl; \ + return index; \ }; @@ -255,6 +262,9 @@ class fileIOStatic { string s; \ s=fname; \ size_t uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) \ s=fname.substr(0,uscore); \ uscore=s.rfind("_"); \ @@ -263,9 +273,7 @@ class fileIOStatic { uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) \ s=fname.substr(0,uscore); \ - uscore=s.rfind("_"); \ - if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ - s=fname.substr(0,uscore); \ + return s; \ }; From f546814d39af864a8ffc9055a812c0f103e4acf5 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 27 Aug 2015 10:44:24 +0200 Subject: [PATCH 21/22] reduced size of file names in gui --- .../multiSlsDetector/multiSlsDetector.cpp | 10 +++- .../slsDetectorAnalysis/fileIOStatic.h | 53 ++++++++++++++----- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 0f7bae2af..73e5c7e9f 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4598,6 +4598,8 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &acquisitionIndex int *retdet = NULL, *p=retval; string fullFName=""; string ext=""; + int index=-1,f_index=-1,p_index=-1,det_index=-1; + double sv0=-1,sv1=-1; if(getDetectorsType() == EIGER){ maxX = thisMultiDetector->numberOfChannel[X]; @@ -4645,9 +4647,15 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &acquisitionIndex ext = ext.erase(0,dot); else ext = ""; + + //get variables + fileIOStatic::getVariablesFromFileName(fName,index, f_index, p_index, sv0, sv1, det_index); + fullFName.append(fileIOStatic::getReceiverFileNameToConcatenate(fName)); } } - fullFName.append(getReceiverFileNameToConcatenate(fName)); + if(!fileIOStatic::verifySameFrame(fName,index,f_index, p_index, sv0, sv1, det_index)){ + fullFName.append(fileIOStatic::getReceiverFileNameToConcatenate(fName)); + } } }else { #ifdef VERBOSE diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index b0e394ed3..af8f909cf 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -161,32 +161,32 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse file index from " << s << endl; \ + else cout << "Warning: ******************************** cannot parse file index from " << s << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) \ s=fname.substr(0,uscore); \ - else cout << "******************************** cannot parse frame index from " << s << endl; \ + else cout << "Warning: ******************************** cannot parse frame index from " << s << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ s=fname.substr(0,uscore); \ - else cout << "******************************** cannot parse detector index from " << s << endl; \ - uscore=s.rfind("_"); + else cout << "Warning: ******************************** cannot parse detector index from " << s << endl; \ + uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse position index" << endl; \ + else cout << "Warning: ******************************** cannot parse position index from " << s << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%lf",&f)) { \ sv1=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse scan varable 1" << endl; \ + else cout << "Warning: ******************************** cannot parse scan varable 1 from " << s << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) { \ sv0=f; \ } \ - else cout << "******************************** cannot parse scan varable 0" << endl; \ + else cout << "Warning: ******************************** cannot parse scan varable 0 from " << s << endl; \ return index; \ }; @@ -216,41 +216,68 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse file index" << endl; \ + else cout << "Warning: ******************************** cannot parse file index" << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) { \ f_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse frame index" << endl; \ + else cout << "Warning: ******************************** cannot parse frame index" << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ detindex=i; \ + s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse detector id" << endl; \ + else cout << "Warning: ******************************** cannot parse detector id" << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse position index" << endl; \ + else cout << "Warning: ******************************** cannot parse position index" << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%lf",&f)) { \ sv1=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse scan varable 1" << endl; \ + else cout << "Warning: ******************************** cannot parse scan varable 1" << endl; \ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) { \ sv0=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "******************************** cannot parse scan varable 0" << endl; \ + else cout << "Warning: ******************************** cannot parse scan varable 0" << endl; \ return index; \ }; + /** static function that verifies if the new file name containing new parameters matches all the given parameters + \param fname new complete file name prefix + \param index reference to index + \param f_index reference to frame index + \param p_index reference to position index + \param sv0 reference to scan variable 0 + \param sv1 reference to scan variable 1 + \param detindex reference to detector id + \returns file name + */ + static int verifySameFrame(string fname, int index, int f_index, int p_index, double sv0, double sv1, int detindex) { \ + int new_index=-1; + int new_f_index=-1; + int new_p_index=-1; + int new_det_index=-1; + double new_sv0=-1; + double new_sv1=-1; + getVariablesFromFileName(fname,new_index, new_f_index, new_p_index, new_sv0, new_sv1, new_det_index); + if(index!=new_index) return 0; + if(f_index!=new_f_index) return 0; + if(p_index!=new_p_index) return 0; + if(sv0!=new_sv0) return 0; + if(sv1!=new_sv1) return 0; + return 1; + } + /** static function that returns the name variable from the receiver complete file name prefix \param fname complete file name prefix From 8ebb34dd427dc9cc66dd7991a8cb39937114713a Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 28 Aug 2015 10:23:21 +0200 Subject: [PATCH 22/22] fixed long file names in guireducing redundancy in name --- .../multiSlsDetector/multiSlsDetector.cpp | 4 ++ .../slsDetectorAnalysis/fileIOStatic.h | 60 +++++++++++-------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 73e5c7e9f..5574da290 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4639,6 +4639,7 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &acquisitionIndex delete [] retdet; //concatenate filenames if(!fullFName.length()){ + //assign file prefix fullFName.assign(fileIO::getFileName()); if (strrchr(fName,'.')!=NULL){ ext.assign(fName); @@ -4650,9 +4651,11 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &acquisitionIndex //get variables fileIOStatic::getVariablesFromFileName(fName,index, f_index, p_index, sv0, sv1, det_index); + //append scan and det variables fullFName.append(fileIOStatic::getReceiverFileNameToConcatenate(fName)); } } + //append only if scan variables are different if(!fileIOStatic::verifySameFrame(fName,index,f_index, p_index, sv0, sv1, det_index)){ fullFName.append(fileIOStatic::getReceiverFileNameToConcatenate(fName)); } @@ -4666,6 +4669,7 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &acquisitionIndex } } } + //append extension fullFName.append(ext); strcpy(fName,fullFName.c_str()); //if some of the receivers did not give data, dont count it diff --git a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h index af8f909cf..178f4b9b0 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/fileIOStatic.h @@ -161,32 +161,32 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse file index from " << s << endl; \ + /* else cout << "Warning: ******************************** cannot parse file index from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) \ s=fname.substr(0,uscore); \ - else cout << "Warning: ******************************** cannot parse frame index from " << s << endl; \ + /*else cout << "Warning: ******************************** cannot parse frame index from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ s=fname.substr(0,uscore); \ - else cout << "Warning: ******************************** cannot parse detector index from " << s << endl; \ + /* else cout << "Warning: ******************************** cannot parse detector index from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse position index from " << s << endl; \ + /* else cout << "Warning: ******************************** cannot parse position index from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%lf",&f)) { \ sv1=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse scan varable 1 from " << s << endl; \ + /* else cout << "Warning: ******************************** cannot parse scan varable 1 from " << s << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) { \ sv0=f; \ } \ - else cout << "Warning: ******************************** cannot parse scan varable 0 from " << s << endl; \ + /* else cout << "Warning: ******************************** cannot parse scan varable 0 from " << s << endl; \*/ return index; \ }; @@ -216,37 +216,37 @@ class fileIOStatic { index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse file index" << endl; \ + /*else cout << "Warning: ******************************** cannot parse file index" << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) { \ f_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse frame index" << endl; \ + /*else cout << "Warning: ******************************** cannot parse frame index" << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) { \ detindex=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse detector id" << endl; \ + /* else cout << "Warning: ******************************** cannot parse detector id" << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) { \ p_index=i; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse position index" << endl; \ + /*else cout << "Warning: ******************************** cannot parse position index" << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%lf",&f)) { \ sv1=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse scan varable 1" << endl; \ + /*else cout << "Warning: ******************************** cannot parse scan varable 1" << endl; \*/ uscore=s.rfind("_"); \ if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) { \ sv0=f; \ s=fname.substr(0,uscore); \ } \ - else cout << "Warning: ******************************** cannot parse scan varable 0" << endl; \ + /*else cout << "Warning: ******************************** cannot parse scan varable 0" << endl; \*/ return index; \ }; @@ -314,20 +314,32 @@ class fileIOStatic { \returns file name without file name prefix, detector index or extension */ static string getReceiverFileNameToConcatenate(string fname) { \ - //int i; + int i;double f; \ string s=fname; \ if(fname.empty()) return fname; \ - size_t slash=s.rfind("/"); \ - if (slash!= string::npos) \ - s=s.substr(slash,s.size()-slash); \ - size_t dot=s.find("."); \ - size_t uscore=s.find("_"); \ - if ((dot!= string::npos)&&(uscore!= string::npos)) \ - s=s.substr(uscore,dot-uscore); \ - // uscore=s.find("_",1); - //if ((uscore!= string::npos) && (sscanf( s.substr(1,uscore-1).c_str(),"d%d",&i))) - //s=s.substr(uscore,s.size()-uscore); - return s; \ + size_t dot=s.find("."); + size_t uscore=s.rfind("_"); \ + + if (uscore==string::npos) return "??"; \ + if (sscanf(s.substr(uscore+1,s.size()-uscore-1).c_str(),"%d",&i)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"f%d",&i)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"d%d",&i)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%lf",&f)) \ + s=fname.substr(0,uscore); \ + uscore=s.rfind("_"); \ + if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%lf",&f)) \ + s=fname.substr(0,uscore); \ + return(fname.substr(s.size(),dot-s.size()));\ + \ };