bug fix command line patnloops should print in decimal, receiver ctb: added p option to print data for debugging, fixed initializing of result in memory

This commit is contained in:
maliakal_d 2019-04-25 17:39:46 +02:00
parent 67eef8ba75
commit 18558e1288
3 changed files with 30 additions and 19 deletions

View File

@ -5381,7 +5381,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
} }
auto r = myDet->getPatternLoops(0, detPos); auto r = myDet->getPatternLoops(0, detPos);
os << std::hex << r[2]; os << std::dec << r[2];
} else if (cmd == "patnloop1") { } else if (cmd == "patnloop1") {
start = -1; start = -1;
@ -5398,7 +5398,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
} }
auto r = myDet->getPatternLoops(1, detPos); auto r = myDet->getPatternLoops(1, detPos);
os << std::hex << r[2]; os << std::dec << r[2];
} else if (cmd == "patnloop2") { } else if (cmd == "patnloop2") {
@ -5416,7 +5416,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
} }
auto r = myDet->getPatternLoops(2, detPos); auto r = myDet->getPatternLoops(2, detPos);
os << std::hex << r[2]; os << std::dec << r[2];
} else if (cmd == "patwait0") { } else if (cmd == "patwait0") {

View File

@ -18,7 +18,7 @@
bool keeprunning; bool keeprunning;
int ctbOffset = 0; int ctbOffset = 0;
bool printData = false;
void sigInterruptHandler(int p){ void sigInterruptHandler(int p){
keeprunning = false; keeprunning = false;
@ -32,13 +32,12 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
constexpr int numCounters = numSamples * 2; // 2 strips constexpr int numCounters = numSamples * 2; // 2 strips
// validate datasize // validate datasize
{ {
FILE_LOG(logDEBUG) << "Datasize after removing offset:" << datasize; FILE_LOG(logDEBUG) << "Datasize:" << datasize;
const double dataNumSamples = int wordsCaught = (datasize / sizeof(uint64_t)) - ctbOffset;
((double)(datasize - (ctbOffset * sizeof(uint64_t)))/ // datasize without offset int expectedWordSize = numSamples * dynamicRange;
(double)sizeof(uint64_t)) / (double)dynamicRange; // 2304 / 24 = 96 if (expectedWordSize != wordsCaught) {
if (dataNumSamples - numSamples) { FILE_LOG(logWARNING) << "Number of words do not match, Expected "
FILE_LOG(logERROR) << "Number of samples do not match, Expected " << expectedWordSize << ", got " << wordsCaught;
<< numSamples << ", got " << dataNumSamples;
} }
} }
@ -48,6 +47,7 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
ptr += ctbOffset; ptr += ctbOffset;
// destination // destination
auto result = new int[numCounters]; auto result = new int[numCounters];
memset((char*)result, 0, numCounters * sizeof(int));
auto strip0 = result; auto strip0 = result;
auto strip1 = strip0 + numSamples; auto strip1 = strip0 + numSamples;
constexpr int bit_index0 = 17; constexpr int bit_index0 = 17;
@ -56,8 +56,8 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
constexpr int mask0 = (1 << bit_index0); constexpr int mask0 = (1 << bit_index0);
constexpr int mask1 = (1 << bit_index1); constexpr int mask1 = (1 << bit_index1);
for (int j = 0; j != numSamples; ++j) { for (int j = 0; j < numSamples; ++j) {
for (int i = 0; i != dynamicRange; ++i) { for (int i = 0; i < dynamicRange; ++i) {
int bit0 = (*ptr & mask0) >> bit_index0; int bit0 = (*ptr & mask0) >> bit_index0;
int bit1 = (*ptr++ & mask1) >> bit_index1; int bit1 = (*ptr++ & mask1) >> bit_index1;
*strip0 |= bit0 << i; *strip0 |= bit0 << i;
@ -67,11 +67,16 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
strip1++; strip1++;
} }
/* for (int i = 0; i < numCounters; ++i) { if (printData) {
cprintf(RED, "%d:%u\t", i, result[i]); slsDetectorDefs::sls_receiver_header* header = (slsDetectorDefs::sls_receiver_header*)metadata;
slsDetectorDefs::sls_detector_header detectorHeader = header->detHeader;
FILE_LOG(logINFO) << "Frame Number: " << detectorHeader.frameNumber;
for (int i = 0; i < numCounters; ++i) {
cprintf(MAGENTA, "%d:%u\t", i, result[i]);
}
std::cout << std::endl;
} }
std::cout << std::endl;
*/
// update the size to be written to file & overwrite data in memory // update the size to be written to file & overwrite data in memory
datasize = numCounters * sizeof(int); datasize = numCounters * sizeof(int);
memcpy(datapointer, (char*)result, datasize); memcpy(datapointer, (char*)result, datasize);
@ -88,6 +93,7 @@ int main(int argc, char *argv[]) {
//parse command line for config //parse command line for config
static struct option long_options[] = { static struct option long_options[] = {
{"ctb_offset", required_argument, nullptr, 'o'}, {"ctb_offset", required_argument, nullptr, 'o'},
{"print_data", no_argument, nullptr, 'p'},
{nullptr, 0, nullptr, 0} {nullptr, 0, nullptr, 0}
}; };
//initialize global optind variable (required when instantiating multiple receivers in the same process) //initialize global optind variable (required when instantiating multiple receivers in the same process)
@ -96,7 +102,7 @@ int main(int argc, char *argv[]) {
int option_index = 0; int option_index = 0;
int c = 0; int c = 0;
while ( c != -1 ) { while ( c != -1 ) {
c = getopt_long (argc, argv, "hvf:t:o:", long_options, &option_index); c = getopt_long (argc, argv, "hvf:t:o:p", long_options, &option_index);
// Detect the end of the options. // Detect the end of the options.
if (c == -1) if (c == -1)
break; break;
@ -104,6 +110,9 @@ int main(int argc, char *argv[]) {
case 'o': case 'o':
sscanf(optarg, "%d", &ctbOffset); sscanf(optarg, "%d", &ctbOffset);
break; break;
case 'p':
printData = true;
break;
default: default:
break; break;
} }
@ -112,6 +121,7 @@ int main(int argc, char *argv[]) {
#ifdef MYTHEN302 #ifdef MYTHEN302
FILE_LOG(logINFOGREEN) << "Mythen 302 Receiver"; FILE_LOG(logINFOGREEN) << "Mythen 302 Receiver";
FILE_LOG(logINFO) << "CTB Offset: " << ctbOffset; FILE_LOG(logINFO) << "CTB Offset: " << ctbOffset;
FILE_LOG(logINFO) << "Print Data: " << printData;
#endif #endif
keeprunning = true; keeprunning = true;

View File

@ -44,7 +44,7 @@ slsReceiver::slsReceiver(int argc, char *argv[]):
int c = 0; int c = 0;
while ( c != -1 ){ while ( c != -1 ){
c = getopt_long (argc, argv, "hvf:t:o:", long_options, &option_index); c = getopt_long (argc, argv, "hvf:t:o:p", long_options, &option_index);
// Detect the end of the options. // Detect the end of the options.
if (c == -1) if (c == -1)
@ -53,6 +53,7 @@ slsReceiver::slsReceiver(int argc, char *argv[]):
switch(c){ switch(c){
// reserved for ctb receiver users // reserved for ctb receiver users
case 'o': case 'o':
case 'p':
break; break;
case 't': case 't':