8 #include "otsdaq-components/DetectorHardware/PSI46DigROCDefinitions.h"
9 #include "otsdaq-core/BitManipulator/BitManipulator.h"
14 #include "otsdaq-core/Macros/CoutMacros.h"
19 PSI46DigROCDefinitions::PSI46DigROCDefinitions() {}
22 PSI46DigROCDefinitions::~PSI46DigROCDefinitions(
void) {}
25 unsigned int PSI46DigROCDefinitions::getDACRegisterAddress(
26 const std::string& registerName)
28 if(registerName ==
"PulserData")
30 else if(registerName ==
"PulserControl")
32 else if(registerName ==
"IntegratorVbn")
34 else if(registerName ==
"ShaperVbp2")
36 else if(registerName ==
"ShaperVbp1")
38 else if(registerName ==
"BLRestorer")
40 else if(registerName ==
"VTn")
42 else if(registerName ==
"VTp0")
44 else if(registerName ==
"VTp1")
46 else if(registerName ==
"VTp2")
48 else if(registerName ==
"VTp3")
50 else if(registerName ==
"VTp4")
52 else if(registerName ==
"VTp5")
54 else if(registerName ==
"VTp6")
56 else if(registerName ==
"VTp7")
58 else if(registerName ==
"ActiveLines")
60 else if(registerName ==
"SendData")
62 else if(registerName ==
"RejectHits")
64 else if(registerName ==
"DigContrReg")
66 else if(registerName ==
"AqBCO")
69 else if(registerName ==
"Kill")
71 else if(registerName ==
"Inject")
75 std::cout << __COUT_HDR_FL__ <<
" Register Name not recognized!" << std::endl;
82 uint64_t PSI46DigROCDefinitions::makeDACWriteHeader(
int chipId,
83 const std::string& registerName)
85 return makeDACHeader(chipId, registerName, write);
89 uint64_t PSI46DigROCDefinitions::makeDACSetHeader(
int chipId,
90 const std::string& registerName)
92 return makeDACHeader(chipId, registerName, set);
96 uint64_t PSI46DigROCDefinitions::makeDACResetHeader(
int chipId,
97 const std::string& registerName)
99 return makeDACHeader(chipId, registerName, reset);
103 uint64_t PSI46DigROCDefinitions::makeDACReadHeader(
int chipId,
104 const std::string& registerName)
106 return makeDACHeader(chipId, registerName, read);
110 uint64_t PSI46DigROCDefinitions::makeDACHeader(
int chipId,
111 const std::string& registerName,
112 unsigned int instruction)
123 uint32_t command = 0x80000000;
124 uint32_t registerAddress = getDACRegisterAddress(registerName);
126 BitManipulator::insertBits(command, chipId, 0, 5);
128 BitManipulator::insertBits(command, registerAddress, 5, 5);
130 BitManipulator::insertBits(command, instruction, 10, 3);
134 unsigned int length = 3;
135 if(registerAddress < 16 || registerAddress < 27 || registerAddress < 30)
137 else if(registerAddress == 17 || registerAddress == 18)
139 else if(registerAddress == 16)
141 else if(registerAddress == 19 || registerAddress == 20)
144 BitManipulator::insertBits(command, length, 24, 7);
150 uint64_t PSI46DigROCDefinitions::makeDACWriteCommand(
int chipId,
151 const std::string& registerName,
152 unsigned int valueToWrite)
154 std::cout << __COUT_HDR_FL__ <<
"Working on Register " << registerName
155 <<
" Address: " << getDACRegisterAddress(registerName)
156 <<
" Value: " << valueToWrite << std::endl;
157 uint64_t command = 0;
158 if(registerName !=
"SendData" && registerName !=
"RejectHits")
160 command = makeDACWriteHeader(chipId, registerName);
161 BitManipulator::insertBits(
162 command, BitManipulator::reverseBits(valueToWrite, 0, 8), 13, 8);
164 else if(valueToWrite == 1)
165 command = makeDACSetHeader(chipId, registerName);
167 command = makeDACResetHeader(chipId, registerName);
175 uint64_t PSI46DigROCDefinitions::makeDACReadCommand(
int chipId,
176 const std::string& registerName)
178 return makeDACHeader(chipId, registerName, read);
182 std::string PSI46DigROCDefinitions::makeMaskWriteCommand(
int chipId,
183 const std::string& registerName,
184 std::string valueToWrite)
186 std::string command =
"0000000000000000000";
222 uint64_t PSI46DigROCDefinitions::makeMaskReadCommand(
int chipId,
223 const std::string& registerName)
229 uint64_t PSI46DigROCDefinitions::setSendData(
int chipId)
231 return makeDACWriteCommand(chipId,
"SendData", 1);
235 uint64_t PSI46DigROCDefinitions::resetSendData(
int chipId)
237 return makeDACWriteCommand(chipId,
"SendData", 0);
241 uint64_t PSI46DigROCDefinitions::setRejectHits(
int chipId)
243 return makeDACWriteCommand(chipId,
"RejectHits", 1);
247 uint64_t PSI46DigROCDefinitions::resetRejectHits(
int chipId)
249 return makeDACWriteCommand(chipId,
"RejectHits", 0);