#include "FebInterface.h" #include "LocalLinkInterface.h" #include "xparameters.h" #include "logger.h" #include struct LocalLinkInterface ll_local,* ll; unsigned int Feb_Interface_nfebs; unsigned int* Feb_Interface_feb_numb; int Feb_Interface_send_ndata; unsigned int Feb_Interface_send_buffer_size; unsigned int* Feb_Interface_send_data_raw; unsigned int* Feb_Interface_send_data; int Feb_Interface_recv_ndata; unsigned int Feb_Interface_recv_buffer_size; unsigned int* Feb_Interface_recv_data_raw; unsigned int* Feb_Interface_recv_data; void Feb_Interface_FebInterface() { ll = &ll_local; Feb_Interface_nfebs = 0; Feb_Interface_feb_numb = 0; Feb_Interface_send_ndata = 0; Feb_Interface_send_buffer_size = 1026; Feb_Interface_send_data_raw = malloc((Feb_Interface_send_buffer_size+1) * sizeof(unsigned int)); Feb_Interface_send_data = &Feb_Interface_send_data_raw[1]; Feb_Interface_recv_ndata = 0; Feb_Interface_recv_buffer_size = 1026; Feb_Interface_recv_data_raw = malloc((Feb_Interface_recv_buffer_size+1) * sizeof(unsigned int)); Feb_Interface_recv_data = &Feb_Interface_recv_data_raw[1]; Local_LocalLinkInterface1(ll,XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); } void Feb_Interface_SendCompleteList(unsigned int n,unsigned int* list) { unsigned int i; if (Feb_Interface_feb_numb) free(Feb_Interface_feb_numb); Feb_Interface_nfebs = n; Feb_Interface_feb_numb = malloc(n * sizeof(unsigned int)); for(i=0;i0xfff) return 0; FILE_LOG(logDEBUG1, ("FIW ch %d\n", ch)); Feb_Interface_send_data_raw[0] = 0x8fff0000; if (Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_data_raw[0] = 0x90000000 | (ch<<16); if (Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_data_raw[0] = 0xc0000000; return ((Feb_Interface_send_ndata+1)*4==Local_Write(ll,(Feb_Interface_send_ndata+1)*4,Feb_Interface_send_data_raw)); } int Feb_Interface_ReadFrom(unsigned int ch, unsigned int ntrys) { unsigned int t; if (ch>=0xfff) return 0; Feb_Interface_recv_data_raw[0] = 0xa0000000 | (ch<<16); Local_Write(ll,4,Feb_Interface_recv_data_raw); usleep(20); Feb_Interface_recv_ndata=-1; for(t=0;t0) { Feb_Interface_recv_ndata--; break; } usleep(1000); } return (Feb_Interface_recv_ndata>=0); } int Feb_Interface_SetByteOrder() { Feb_Interface_send_data_raw[0] = 0x8fff0000; if (Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_ndata = 2; Feb_Interface_send_data[0] = 0; Feb_Interface_send_data[1] = 0; unsigned int i; unsigned int dst = 0xff; for(i=0;iFeb_Interface_send_buffer_size-2) return 0; Feb_Interface_send_ndata = nreads+2; Feb_Interface_send_data[0] = 0x20000000 | nreads << 14; for(i=0;iFeb_Interface_send_buffer_size-2) return 0; //cout<<"Write register : "<0) { n_to_send = ndata_countdownFeb_Interface_send_buffer_size-2) { FILE_LOG(logERROR, ("invalid nwrites:%d\n",nwrites)); return 0; }//*d-1026 Feb_Interface_send_ndata = nwrites+2;//*d-1026 Feb_Interface_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address Feb_Interface_send_data[nwrites+1] = 0; for(i=0;i