8 #include "otsdaq-components/DetectorHardware/PSI46DigROCDefinitions.h"
9 #include "otsdaq-core/BitManipulator/BitManipulator.h"
11 #include "otsdaq-core/Macros/CoutMacros.h"
20 PSI46DigROCDefinitions::PSI46DigROCDefinitions()
25 PSI46DigROCDefinitions::~PSI46DigROCDefinitions (
void)
29 unsigned int PSI46DigROCDefinitions::getDACRegisterAddress(
const std::string& registerName)
31 if (registerName ==
"PulserData" )
return 1;
32 else if (registerName ==
"PulserControl")
return 2;
33 else if (registerName ==
"IntegratorVbn")
return 3;
34 else if (registerName ==
"ShaperVbp2" )
return 4;
35 else if (registerName ==
"ShaperVbp1" )
return 5;
36 else if (registerName ==
"BLRestorer" )
return 6;
37 else if (registerName ==
"VTn" )
return 7;
38 else if (registerName ==
"VTp0" )
return 8;
39 else if (registerName ==
"VTp1" )
return 9;
40 else if (registerName ==
"VTp2" )
return 10;
41 else if (registerName ==
"VTp3" )
return 11;
42 else if (registerName ==
"VTp4" )
return 12;
43 else if (registerName ==
"VTp5" )
return 13;
44 else if (registerName ==
"VTp6" )
return 14;
45 else if (registerName ==
"VTp7" )
return 15;
46 else if (registerName ==
"ActiveLines" )
return 16;
47 else if (registerName ==
"SendData" )
return 19;
48 else if (registerName ==
"RejectHits" )
return 20;
49 else if (registerName ==
"DigContrReg" )
return 27;
50 else if (registerName ==
"AqBCO" )
return 30;
52 else if (registerName ==
"Kill" )
return 17;
53 else if (registerName ==
"Inject" )
return 18;
56 std::cout << __COUT_HDR_FL__ <<
" Register Name not recognized!" << std::endl;
63 uint64_t PSI46DigROCDefinitions::makeDACWriteHeader(
int chipId,
const std::string& registerName)
65 return makeDACHeader(chipId, registerName, write);
69 uint64_t PSI46DigROCDefinitions::makeDACSetHeader(
int chipId,
const std::string& registerName)
71 return makeDACHeader(chipId, registerName, set);
75 uint64_t PSI46DigROCDefinitions::makeDACResetHeader(
int chipId,
const std::string& registerName)
77 return makeDACHeader(chipId, registerName, reset);
81 uint64_t PSI46DigROCDefinitions::makeDACReadHeader(
int chipId,
const std::string& registerName)
83 return makeDACHeader(chipId, registerName, read);
87 uint64_t PSI46DigROCDefinitions::makeDACHeader(
int chipId,
const std::string& registerName,
unsigned int instruction)
98 uint32_t command = 0x80000000;
99 uint32_t registerAddress = getDACRegisterAddress(registerName);
101 BitManipulator::insertBits(command,chipId,0,5);
103 BitManipulator::insertBits(command,registerAddress,5,5);
105 BitManipulator::insertBits(command,instruction,10,3);
109 unsigned int length = 3;
110 if ( registerAddress < 16 || registerAddress < 27 || registerAddress < 30)
112 else if ( registerAddress == 17 || registerAddress == 18 )
114 else if ( registerAddress == 16 )
116 else if ( registerAddress == 19 || registerAddress == 20 )
119 BitManipulator::insertBits(command,length,24,7);
125 uint64_t PSI46DigROCDefinitions::makeDACWriteCommand(
int chipId,
const std::string& registerName,
unsigned int valueToWrite)
127 std::cout << __COUT_HDR_FL__ <<
"Working on Register " << registerName <<
" Address: " << getDACRegisterAddress(registerName) <<
" Value: " << valueToWrite << std::endl;
128 uint64_t command = 0;
129 if (registerName !=
"SendData" && registerName !=
"RejectHits")
131 command = makeDACWriteHeader(chipId, registerName);
132 BitManipulator::insertBits(command,BitManipulator::reverseBits(valueToWrite,0,8),13,8);
135 if (valueToWrite == 1)
136 command = makeDACSetHeader(chipId, registerName);
138 command = makeDACResetHeader(chipId, registerName);
145 uint64_t PSI46DigROCDefinitions::makeDACReadCommand(
int chipId,
const std::string& registerName)
147 return makeDACHeader(chipId, registerName, read);
151 std::string PSI46DigROCDefinitions::makeMaskWriteCommand (
int chipId,
const std::string& registerName, std::string valueToWrite)
153 std::string command =
"0000000000000000000";
190 uint64_t PSI46DigROCDefinitions::makeMaskReadCommand (
int chipId,
const std::string& registerName)
196 uint64_t PSI46DigROCDefinitions::setSendData(
int chipId)
198 return makeDACWriteCommand(chipId,
"SendData", 1);
202 uint64_t PSI46DigROCDefinitions::resetSendData(
int chipId)
204 return makeDACWriteCommand(chipId,
"SendData", 0);
208 uint64_t PSI46DigROCDefinitions::setRejectHits(
int chipId)
210 return makeDACWriteCommand(chipId,
"RejectHits", 1);
214 uint64_t PSI46DigROCDefinitions::resetRejectHits(
int chipId)
216 return makeDACWriteCommand(chipId,
"RejectHits", 0);