/** * @author Ian Johnson * @version 1.0 */ #include #include //#include //#include //#include //#include #include "xparameters.h" #include "FebInterface.h" using namespace std; FebInterface::FebInterface(){ nfebs = 0; feb_numb = 0; send_ndata = 0; send_buffer_size = 1026; send_data_raw = new unsigned int [send_buffer_size+1]; send_data = &send_data_raw[1]; recv_ndata = 0; recv_buffer_size = 1026; recv_data_raw = new unsigned int [recv_buffer_size+1]; recv_data = &recv_data_raw[1]; ll = new LocalLinkInterface(XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); } FebInterface::~FebInterface(){ delete ll; if(feb_numb) delete [] feb_numb; delete [] send_data_raw; delete [] recv_data_raw; } void FebInterface::SendCompleteList(unsigned int n,unsigned int* list){ if(feb_numb) delete [] feb_numb; nfebs = n; feb_numb = new unsigned int [n]; for(unsigned int i=0;i0xfff) return 0; send_data_raw[0] = 0x8fff0000; if(ll->Write(4,send_data_raw)!=4) return 0; send_data_raw[0] = 0x90000000 | (ch<<16); if(ll->Write(4,send_data_raw)!=4) return 0; send_data_raw[0] = 0xc0000000; return ((send_ndata+1)*4==ll->Write((send_ndata+1)*4,send_data_raw)); } bool FebInterface::ReadFrom(unsigned int ch, unsigned int ntrys){ if(ch>=0xfff) return 0; recv_data_raw[0] = 0xa0000000 | (ch<<16); ll->Write(4,recv_data_raw); usleep(20); recv_ndata=-1; for(unsigned int t=0;tRead(recv_buffer_size*4,recv_data_raw)/4)>0){ recv_ndata--; break; } usleep(1000); } return (recv_ndata>=0); } bool FebInterface::SetByteOrder(){ send_data_raw[0] = 0x8fff0000; if(ll->Write(4,send_data_raw)!=4) return 0; send_ndata = 2; send_data[0] = 0; send_data[1] = 0; unsigned int dst = 0xff; for(unsigned int i=0;isend_buffer_size-2) return 0; send_ndata = nreads+2; send_data[0] = 0x20000000 | nreads << 14; for(unsigned int i=0;isend_buffer_size-2) return 0; //cout<<"Write register : "<send_buffer_size-2) {cout<<"error herer: nwrites:"< write to memory, nwrites, mem number, start address send_data[nwrites+1] = 0; for(unsigned int i=0;i