/** * @author Ian Johnson * @version 1.0 */ //return reversed 1 means good, 0 means failed #include #include //#include //#include //#include //#include #include "xparameters.h" #include "Feb.h" using namespace std; Feb::Feb(){ 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); } Feb::~Feb(){ delete ll; if(feb_numb) delete [] feb_numb; delete [] send_data_raw; delete [] recv_data_raw; } void Feb::SendCompleteFebList(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] = 0x90000000 | (ch<<16); //we if(ll->Write(4,send_data_raw)!=4) return 0; send_data_raw[0] = 0xc0000000; //data return ((send_ndata+1)*4==ll->Write((send_ndata+1)*4,send_data_raw)); } bool Feb::ReadFrom(unsigned int ch, unsigned int ntrys){ if(ch>=0xfff) return 0; recv_data_raw[0] = 0xa0000000 | (ch<<16); //read data 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; } cout<<"\t Read try number: "<=0); } void Feb::PrintData(){ cout<<"Sent data: "<1&&recv_ndata>1){ cout<<"\t\t Tail sent: "<Write(4,send_data_raw)!=4) return 0; cout<<"Feb::CheckingCommunication ...."<Read(recv_buffer_size*4,recv_data_raw)/4)>0) cout<<"\t) Cleanning buffer ..."<=nfebs){ cout<<"Error invalid sub number "<send_buffer_size-2) return 0; send_ndata = nreads+2; send_data[0] = 0x20000000 | nreads << 14; //cmd -> read "00" , nreads for(unsigned int i=0;isend_buffer_size-2) return 0; //cout<<"Write register : "< write nwrites and how many send_data[2*nwrites+1] = 0; //tail for(unsigned int i=0;isend_buffer_size-2) return 0; send_ndata = nwrites+2; send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address send_data[nwrites+1] = 0; //tail for(unsigned int i=0;i