diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index a428774a1..e6683f030 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -185,7 +185,7 @@ int Beb_InitBebInfos(){//file name at some point int Beb_SetBebSrcHeaderInfos(unsigned int beb_number, int ten_gig, char* src_mac, char* src_ip,unsigned int src_port){ //so that the values can be reset externally for now.... - unsigned int i = Beb_GetBebInfoIndex(beb_number); + unsigned int i = 1;/*Beb_GetBebInfoIndex(beb_number);*/ /******* if(!i) return 0;****************************/ //i must be greater than 0, zero is the global send BebInfo_SetHeaderInfo(&beb_infos[i],ten_gig,src_mac,src_ip,src_port); @@ -262,9 +262,10 @@ unsigned int Beb_GetBebInfoIndex(unsigned int beb_numb){ unsigned int i; for(i=1;ill_fifo_base=0; - ll->ll_fifo_ctrl_reg=0; - if(Local_Init(ll,ll_fifo_badr)){ - Local_Reset(ll); - printf("\tFIFO Status : 0x%08x\n",Local_StatusVector(ll)); - }else printf("\tError LocalLink Mappping : 0x%08x\n",ll_fifo_badr); + // printf("\n v 1 \n"); + printf("Initialize PLB LL FIFOs\n"); + ll->ll_fifo_base=0; + ll->ll_fifo_ctrl_reg=0; + if(Local_Init(ll,ll_fifo_badr)){ + Local_Reset(ll); + printf("\tFIFO Status : 0x%08x\n",Local_StatusVector(ll)); + }else printf("\tError LocalLink Mappping : 0x%08x\n",ll_fifo_badr); - printf("\n\n"); + printf("\n\n"); } /*~LocalLinkInterface(){};*/ Local_LocalLinkInterface(struct LocalLinkInterface* ll){ - printf("Initialize new memory\n"); - } + printf("Initialize new memory\n"); +} int Local_InitNewMemory (struct LocalLinkInterface* ll,unsigned int addr, int ifg){ unsigned int CSP0BASE; @@ -63,218 +63,218 @@ int Local_InitNewMemory (struct LocalLinkInterface* ll,unsigned int addr, int if printf("ifg_control=%02x\n",*ptr1); - *ptr1=ifg; + *ptr1=ifg; printf("ifg_control new=%02x\n",*ptr1); close(fd); -*/ + */ return 1; } int Local_Init(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr){ - int fd; - void *plb_ll_fifo_ptr; + int fd; + void *plb_ll_fifo_ptr; - if ((fd=open("/dev/mem", O_RDWR)) < 0){ - fprintf(stderr, "Could not open /dev/mem\n"); - return 0; - } + if ((fd=open("/dev/mem", O_RDWR)) < 0){ + fprintf(stderr, "Could not open /dev/mem\n"); + return 0; + } - plb_ll_fifo_ptr = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, ll_fifo_badr); - close(fd); + plb_ll_fifo_ptr = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, ll_fifo_badr); + close(fd); - if (plb_ll_fifo_ptr == MAP_FAILED){ - perror ("mmap"); - return 0; - } + if (plb_ll_fifo_ptr == MAP_FAILED){ + perror ("mmap"); + return 0; + } - ll->ll_fifo_base = (xfs_u32) plb_ll_fifo_ptr; - ll->ll_fifo_ctrl_reg = 0; + ll->ll_fifo_base = (xfs_u32) plb_ll_fifo_ptr; + ll->ll_fifo_ctrl_reg = 0; - return 1; + return 1; } int Local_Reset(struct LocalLinkInterface* ll){ - return Local_Reset1(ll,PLB_LL_FIFO_CTRL_RESET_STD); + return Local_Reset1(ll,PLB_LL_FIFO_CTRL_RESET_STD); } int Local_Reset1(struct LocalLinkInterface* ll,unsigned int rst_mask){ - ll->ll_fifo_ctrl_reg |= rst_mask; - printf("\tCTRL Register bits: 0x%08x\n",ll->ll_fifo_ctrl_reg); + ll->ll_fifo_ctrl_reg |= rst_mask; + printf("\tCTRL Register bits: 0x%08x\n",ll->ll_fifo_ctrl_reg); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - ll->ll_fifo_ctrl_reg &= (~rst_mask); + ll->ll_fifo_ctrl_reg &= (~rst_mask); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - // printf("FIFO CTRL Address: 0x%08x\n FIFO CTRL Register: 0x%08x\n",PLB_LL_FIFO_REG_CTRL,plb_ll_fifo[PLB_LL_FIFO_REG_CTRL]); - return 1; + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + // printf("FIFO CTRL Address: 0x%08x\n FIFO CTRL Register: 0x%08x\n",PLB_LL_FIFO_REG_CTRL,plb_ll_fifo[PLB_LL_FIFO_REG_CTRL]); + return 1; } unsigned int Local_StatusVector(struct LocalLinkInterface* ll){ - return HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); + return HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); } int Local_Write(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ - // note: buffer must be word (4 byte) aligned - // frame_len in byte - int vacancy=0; - int i; - int words_send = 0; - int last_word; - unsigned int *word_ptr; - unsigned int fifo_ctrl; - xfs_u32 status; + // note: buffer must be word (4 byte) aligned + // frame_len in byte + int vacancy=0; + int i; + int words_send = 0; + int last_word; + unsigned int *word_ptr; + unsigned int fifo_ctrl; + xfs_u32 status; - if (buffer_len < 1) return -1; + if (buffer_len < 1) return -1; - last_word = (buffer_len-1)/4; - word_ptr = (unsigned int *)buffer; + last_word = (buffer_len-1)/4; + word_ptr = (unsigned int *)buffer; - while (words_send <= last_word) - { - while (!vacancy)//wait for Fifo to be empty again - { - status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); - if((status & PLB_LL_FIFO_STATUS_ALMOSTFULL) == 0) vacancy = 1; - } - - //Just to know: #define PLB_LL_FIFO_ALMOST_FULL_THRESHOLD_WORDS 100 - for (i=0; ((ill_fifo_base+4*PLB_LL_FIFO_REG_STATUS); + if((status & PLB_LL_FIFO_STATUS_ALMOSTFULL) == 0) vacancy = 1; + } - if (words_send == last_word) - { - fifo_ctrl |= (PLB_LL_FIFO_CTRL_LL_EOF | (( (buffer_len-1)<ll_fifo_base+4*PLB_LL_FIFO_REG_FIFO,word_ptr[words_send++]); + //Just to know: #define PLB_LL_FIFO_ALMOST_FULL_THRESHOLD_WORDS 100 + for (i=0; ((ill_fifo_base+4*PLB_LL_FIFO_REG_FIFO,word_ptr[words_send++]); + } } - } - return buffer_len; + return buffer_len; } int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ - static unsigned int buffer_ptr = 0; - // note: buffer must be word (4 byte) aligned - // frame_len in byte - int len; - unsigned int *word_ptr; - unsigned int status; - volatile unsigned int fifo_val; - int sof = 0; + static unsigned int buffer_ptr = 0; + // note: buffer must be word (4 byte) aligned + // frame_len in byte + int len; + unsigned int *word_ptr; + unsigned int status; + volatile unsigned int fifo_val; + int sof = 0; - word_ptr = (unsigned int *)buffer; - do - { - status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); - - if (!(status & PLB_LL_FIFO_STATUS_EMPTY)) + word_ptr = (unsigned int *)buffer; + do { - if (status & PLB_LL_FIFO_STATUS_LL_SOF) - { - if (buffer_ptr) - { - buffer_ptr = 0; - return -1; // buffer overflow - } -// printf(">>>> SOF\n\r"); - buffer_ptr = 0; - sof = 1; - } + status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); - fifo_val = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_FIFO); //read from fifo - - if ((buffer_ptr > 0) || sof) - { - if ( (buffer_len >> 2) > buffer_ptr) + if (!(status & PLB_LL_FIFO_STATUS_EMPTY)) { - word_ptr[buffer_ptr++] = fifo_val; //write to buffer - } - else - { - buffer_ptr = 0; - return -2; // buffer overflow - } + if (status & PLB_LL_FIFO_STATUS_LL_SOF) + { + if (buffer_ptr) + { + buffer_ptr = 0; + return -1; // buffer overflow + } + // printf(">>>> SOF\n\r"); + buffer_ptr = 0; + sof = 1; + } - if (status & PLB_LL_FIFO_STATUS_LL_EOF) - { - len = (buffer_ptr << 2) -3 + ( (status & PLB_LL_FIFO_STATUS_LL_REM)>>PLB_LL_FIFO_STATUS_LL_REM_SHIFT ); -// printf(">>>>status=0x%08x EOF len = %d \n\r\n\r",status, len); - buffer_ptr = 0; - return len; - } + fifo_val = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_FIFO); //read from fifo - } + if ((buffer_ptr > 0) || sof) + { + if ( (buffer_len >> 2) > buffer_ptr) + { + word_ptr[buffer_ptr++] = fifo_val; //write to buffer + } + else + { + buffer_ptr = 0; + return -2; // buffer overflow + } + + if (status & PLB_LL_FIFO_STATUS_LL_EOF) + { + len = (buffer_ptr << 2) -3 + ( (status & PLB_LL_FIFO_STATUS_LL_REM)>>PLB_LL_FIFO_STATUS_LL_REM_SHIFT ); + // printf(">>>>status=0x%08x EOF len = %d \n\r\n\r",status, len); + buffer_ptr = 0; + return len; + } + + } + } } - } - while(!(status & PLB_LL_FIFO_STATUS_EMPTY)); + while(!(status & PLB_LL_FIFO_STATUS_EMPTY)); - return 0; + return 0; } int Local_ctrl_reg_write_mask(struct LocalLinkInterface* ll,unsigned int mask, unsigned int val){ - // printf("Fifo CTRL Reg(1): 0x%08x\n",plb_ll_fifo_ctrl_reg); - ll->ll_fifo_ctrl_reg &= (~mask); - //printf("Fifo CTRL Reg(2): 0x%08x\n",plb_ll_fifo_ctrl_reg); - ll->ll_fifo_ctrl_reg |= ( mask & val); -// printf("Fifo CTRL Reg: 0x%08x\n",plb_ll_fifo_ctrl_reg); - HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); -// printf("Fifo STAT Reg: 0x%08x\n", plb_ll_fifo[PLB_LL_FIFO_REG_STATUS]); - return 1; + // printf("Fifo CTRL Reg(1): 0x%08x\n",plb_ll_fifo_ctrl_reg); + ll->ll_fifo_ctrl_reg &= (~mask); + //printf("Fifo CTRL Reg(2): 0x%08x\n",plb_ll_fifo_ctrl_reg); + ll->ll_fifo_ctrl_reg |= ( mask & val); + // printf("Fifo CTRL Reg: 0x%08x\n",plb_ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + // printf("Fifo STAT Reg: 0x%08x\n", plb_ll_fifo[PLB_LL_FIFO_REG_STATUS]); + return 1; } int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ - int len; - unsigned int rec_buff_len = 4096; - unsigned int rec_buffer[4097]; + int len; + unsigned int rec_buff_len = 4096; + unsigned int rec_buffer[4097]; - Local_Write(ll,buffer_len,buffer); - usleep(10000); + Local_Write(ll,buffer_len,buffer); + usleep(10000); - do{ - len = Local_Read(ll,rec_buff_len,rec_buffer); - printf("receive length: %i\n",len); + do{ + len = Local_Read(ll,rec_buff_len,rec_buffer); + printf("receive length: %i\n",len); - if (len > 0){ - rec_buffer[len]=0; - printf((char*) rec_buffer); - printf("\n"); - } - } while(len > 0); + if (len > 0){ + rec_buffer[len]=0; + printf((char*) rec_buffer); + printf("\n"); + } + } while(len > 0); - printf("\n\n\n\n"); - return 1; + printf("\n\n\n\n"); + return 1; } void Local_llfifo_print_frame(struct LocalLinkInterface* ll,unsigned char* fbuff, int len){ int i; - printf("\n\r----Frame of len : %d Byte\n\r",len); - for(i=0;imasterPosition; if (thisMultiDetector->masterPosition>=0) { if (detectors[i]) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 41d1e0d94..e01ae3dbc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -6190,7 +6190,7 @@ int slsDetector::startReceiver(){ setErrorMask((getErrorMask())|(COULDNOT_START_RECEIVER)); } } - if((ret==OK)&& (thisDetector->myDetectorType != EIGER)) + if((ret==OK))//&& (thisDetector->myDetectorType != EIGER)) ret=detectorSendToReceiver(true); return ret; diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index cbe43b571..250e5f799 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -107,6 +107,8 @@ int calibratePedestal(int frames); #endif + + int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod); int calculateDataBytes(); @@ -127,6 +129,7 @@ enum masterFlags setMaster(enum masterFlags arg); enum synchronizationMode setSynchronization(enum synchronizationMode arg); #ifdef EIGERD +int startReceiver(int d); void setExternalGating(int enable[]); void setAllTrimbits(int val); int getAllTrimbits(); diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 7737e2418..d9f68c314 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -2278,9 +2278,9 @@ int get_run_status(int file_des) { #ifdef VERBOSE printf("Getting status\n"); #endif -#ifdef SLS_DETECTOR_FUNCTION_LIST - s= getRunStatus();printf("status:%d\n"); -#endif +//#ifdef SLS_DETECTOR_FUNCTION_LIST + s= getRunStatus();printf("status:%x\n",s); +//#endif if (ret!=OK) { printf("get status failed\n"); @@ -3269,10 +3269,7 @@ int start_receiver(int file_des) { strcpy(mess,"Could not start receiver\n"); /* execute action if the arguments correctly arri ved*/ -#ifndef GOTTHARDD - ret = FAIL; - strcpy(mess,"Not applicable/implemented for this detector\n"); -#else +#if defined(GOTTHARDD) || defined(EIGERD) #ifdef SLS_DETECTOR_FUNCTION_LIST if (lockStatus==1 && differentClients==1){//necessary??? sprintf(mess,"Detector locked by %s\n", lastClientIP); @@ -3282,6 +3279,9 @@ int start_receiver(int file_des) { ret = startReceiver(1); #endif +#else + ret = FAIL; + strcpy(mess,"Not applicable/implemented for this detector\n"); #endif if(ret==OK && differentClients){