DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
WIB_FAKE_CD.cpp
Go to the documentation of this file.
1#include "wibmod/WIB1/WIB.hh"
3
4void WIB::ConfigWIBFakeData(bool enableFakeFEMB1, bool enableFakeFEMB2,
5 bool enableFakeFEMB3, bool enableFakeFEMB4,
6 bool counter) { // counter==true: counter instead of COLDATA frame, else samples in COLDATA frame
7
8 if(DAQMode == FELIX){
9 //Don't allow fake mode on only half of a FELIX link
10 if ((enableFakeFEMB1 ^ enableFakeFEMB2) || (enableFakeFEMB3 ^ enableFakeFEMB4)) {
11 BUException::WIB_FAKE_DATA_ON_HALF_FELIX_LINK e;
12 throw e;
13 }
14 }
15
16 //Setup the FEMBs/Links
17 for(size_t iFEMB = 1; iFEMB <= FEMBCount; iFEMB++){
18 for(size_t iCDA = 1; iCDA <= FEMBCDACount; iCDA++){
19 SetFEMBFakeCOLDATAMode(iFEMB, iCDA, counter);
20 }
21 }
22
23 for(size_t iStream = 1; iStream <= FEMBStreamCount; iStream++){
24 SetFEMBStreamSource(1, iStream, !enableFakeFEMB1);
25 SetFEMBStreamSource(2, iStream, !enableFakeFEMB2);
26 SetFEMBStreamSource(3, iStream, !enableFakeFEMB3);
27 SetFEMBStreamSource(4, iStream, !enableFakeFEMB4);
28 }
29
30 uint64_t enableWord1 = 0;
31 uint64_t enableWord2 = 0;
32 uint64_t enableWord3 = 0;
33 uint64_t enableWord4 = 0;
34 if (enableFakeFEMB1) enableWord1 = 0xF;
35 if (enableFakeFEMB2) enableWord2 = 0xF;
36 if (enableFakeFEMB3) enableWord3 = 0xF;
37 if (enableFakeFEMB4) enableWord4 = 0xF;
38 SourceFEMB(1,enableWord1);
39 SourceFEMB(2,enableWord2);
40 SourceFEMB(3,enableWord3);
41 SourceFEMB(4,enableWord4);
42}
43
44uint8_t WIB::GetFEMBStreamSource(uint8_t iFEMB,uint8_t iStream){
46 std::string base = "FEMB0.DAQ.FAKE_CD.RX_DATA_SOURCE";
47 base[4] = GetFEMBChar(iFEMB);
48 //Read the current settings
49 uint32_t data = Read(base);
50 return (data >> (iStream -1))&0x1;
51}
52void WIB::SetFEMBStreamSource(uint8_t iFEMB,uint8_t iStream,bool real){
54 std::string base = "FEMB0.DAQ.FAKE_CD.RX_DATA_SOURCE";
55 base[4] = GetFEMBChar(iFEMB);
56 //Read the current settings
57 uint32_t data = Read(base);
58 //update the mask
59 iStream--; // iStream is 1-4, but we want bits 0 to 3
60 if(real){
61 data &= ~(0x1<<iStream);
62 }else{
63 data |= 0x1<<iStream;
64 }
65 Write(base,data);
66}
67
68void WIB::SetFEMBFakeCOLDATAMode(uint8_t iFEMB,uint8_t iCD, bool mode){
69 std::string base("FEMB0.DAQ.FAKE_CD.CD0.");
70 base[4] = GetFEMBChar(iFEMB);
71 base[20] = GetFEMBCDChar(iCD);
72
73 //Set this COLDATA ASIC
74 Write(base+"FAKE_MODE",uint32_t(mode));
75}
76
77uint8_t WIB::GetFEMBFakeCOLDATAMode(uint8_t iFEMB,uint8_t iCD){
78 std::string base("FEMB0.DAQ.FAKE_CD.CD0.");
79 base[4] = GetFEMBChar(iFEMB);
80 base[20] = GetFEMBCDChar(iCD);
81
82 return Read(base+"FAKE_MODE");
83}
uint32_t Read(uint16_t address)
Definition WIBBase.cpp:119
void Write(uint16_t address, uint32_t value)
Definition WIBBase.cpp:132
bool CheckFEMBStreamInRange(uint8_t iStream)
Definition WIB.cpp:585
@ FELIX
Definition WIB.hh:208
uint8_t FEMBCDACount
Definition WIB.hh:234
uint8_t GetFEMBFakeCOLDATAMode(uint8_t iFEMB, uint8_t iCD)
char GetFEMBCDChar(uint8_t iCD)
Definition WIB.cpp:603
uint8_t FEMBStreamCount
Definition WIB.hh:233
void SetFEMBStreamSource(uint8_t iFEMB, uint8_t iStream, bool real=true)
uint8_t GetFEMBStreamSource(uint8_t iFEMB, uint8_t iStream)
WIB_DAQ_t DAQMode
Definition WIB.hh:231
void SourceFEMB(uint64_t iDAQLink, uint64_t real)
Definition WIB.cpp:626
void SetFEMBFakeCOLDATAMode(uint8_t iFEMB, uint8_t iCD, bool mode=0)
uint8_t FEMBCount
Definition WIB.hh:232
void ConfigWIBFakeData(bool enableFakeFEMB1, bool enableFakeFEMB2, bool enableFakeFEMB3, bool enableFakeFEMB4, bool counter)
char GetFEMBChar(uint8_t iFEMB)
Definition WIB.cpp:556