in between

This commit is contained in:
maliakal_d 2018-12-04 10:45:55 +01:00
parent b4b38cb607
commit 6b4a9be870
3 changed files with 39 additions and 68 deletions

View File

@ -119,32 +119,18 @@ public:
/** Destructor */ /** Destructor */
virtual ~GeneralData(){}; virtual ~GeneralData(){};
/**
* Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @param frameNumber frame number
* @param packetNumber packet number
*/
virtual void GetHeaderInfo(int index, char* packetData, uint64_t& frameNumber, uint32_t& packetNumber) const
{
frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
frameNumber++;
packetNumber = frameNumber&packetIndexMask;
frameNumber = (frameNumber & frameIndexMask) >> frameIndexOffset;
}
/** /**
* Get Header Infomation (frame number, packet number) * Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes * @param index thread index for debugging purposes
* @param packetData pointer to data * @param packetData pointer to data
* @param dynamicRange dynamic range to assign subframenumber if 32 bit mode * @param dynamicRange dynamic range to assign subframenumber if 32 bit mode
* @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number * @param frameNumber frame number
* @param packetNumber packet number * @param packetNumber packet number
* @param subFrameNumber sub frame number if applicable * @param subFrameNumber sub frame number if applicable
* @param bunchId bunch id * @param bunchId bunch id
*/ */
virtual void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, virtual void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const
{ {
subFrameNumber = -1; subFrameNumber = -1;
@ -211,10 +197,13 @@ public:
/** /**
* Set odd starting packet (gotthard) * Set odd starting packet (gotthard)
* @param index thread index for debugging purposes
* @param packetData pointer to data * @param packetData pointer to data
* @returns true or false for odd starting packet number
*/ */
virtual void SetOddStartingPacket(char* packetData) { virtual bool SetOddStartingPacket(int index, char* packetData) {
cprintf(RED,"This is a generic function that should be overloaded by a derived class\n"); cprintf(RED,"This is a generic function that should be overloaded by a derived class\n");
return false;
}; };
@ -256,7 +245,6 @@ private:
const static int nChip = 10; const static int nChip = 10;
const static int nChan = 128; const static int nChan = 128;
const static int nChipsPerAdc = 2; const static int nChipsPerAdc = 2;
bool oddStartingPacket;
public: public:
/** Constructor */ /** Constructor */
@ -275,48 +263,28 @@ private:
maxFramesPerFile = MAX_FRAMES_PER_FILE; maxFramesPerFile = MAX_FRAMES_PER_FILE;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_receiver_header); fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_receiver_header);
defaultFifoDepth = 50000; defaultFifoDepth = 50000;
oddStartingPacket = true;
}; };
/**
* Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @param frameNumber frame number
* @param packetNumber packet number
*/
void GetHeaderInfo(int index, char* packetData, uint64_t& frameNumber, uint32_t& packetNumber) const
{
if (nPixelsX == 1280) {
frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
if (oddStartingPacket)
frameNumber++;
packetNumber = frameNumber&packetIndexMask;
frameNumber = (frameNumber & frameIndexMask) >> frameIndexOffset;
} else {
frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
packetNumber = 0;
}
}
/** /**
* Get Header Infomation (frame number, packet number) * Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes * @param index thread index for debugging purposes
* @param packetData pointer to data * @param packetData pointer to data
* @param dynamicRange dynamic range to assign subframenumber if 32 bit mode * @param dynamicRange dynamic range to assign subframenumber if 32 bit mode
* @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number * @param frameNumber frame number
* @param packetNumber packet number * @param packetNumber packet number
* @param subFrameNumber sub frame number if applicable * @param subFrameNumber sub frame number if applicable
* @param bunchId bunch id * @param bunchId bunch id
*/ */
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const
{ {
if (nPixelsX == 1280) { if (nPixelsX == 1280) {
subFrameNumber = -1; subFrameNumber = -1;
bunchId = -1; bunchId = -1;
frameNumber = ((uint32_t)(*((uint32_t*)(packetData)))); frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
cprintf(BLUE,"Listening %d: first fnum:%lu\n", index, frameNumber);
if (oddStartingPacket) if (oddStartingPacket)
frameNumber++; frameNumber++;
packetNumber = frameNumber&packetIndexMask; packetNumber = frameNumber&packetIndexMask;
@ -405,32 +373,37 @@ private:
/** /**
* Set odd starting packet (gotthard) * Set odd starting packet (gotthard)
* @param index thread index for debugging purposes
* @param packetData pointer to data * @param packetData pointer to data
* @returns true or false for odd starting packet number
*/ */
void SetOddStartingPacket(char* packetData) { bool SetOddStartingPacket(int index, char* packetData) {
bool oddStartingPacket = true;
// care only if no roi // care only if no roi
if (nPixelsX == 1280) { if (nPixelsX == 1280) {
uint32_t pnum = ((uint32_t)(*((uint32_t*)(packetData)))); uint32_t fnum = ((uint32_t)(*((uint32_t*)(packetData))));
uint32_t FirstData = ((uint32_t)(*((uint32_t*)(packetData + 4)))); uint32_t firstData = ((uint32_t)(*((uint32_t*)(packetData + 4))));
cprintf(BLUE,"Listening %d: (setoff)fnum:0x%x, firstdata:0x%x\n", index, fnum, firstData);
// first packet // first packet
if (FirstData != 0xCACACACA) { if (firstData != 0xCACACACA) { cprintf(BLUE,"Listening %d: (setoff) first packet\n", index);
// packet number should be 0, but is 1 => so odd starting packet // packet number should be 0, but is 1 => so odd starting packet
if (pnum & packetIndexMask) { if (fnum & packetIndexMask) {
oddStartingPacket = true; oddStartingPacket = true;
} else { } else {
oddStartingPacket = false; oddStartingPacket = false;
} }
} }
// second packet // second packet
else { else {cprintf(BLUE,"Listening %d: (setoff) second packet\n", index);
// packet number should be 1, but is 0 => so odd starting packet // packet number should be 1, but is 0 => so odd starting packet
if (!(pnum & packetIndexMask)) { if (!(fnum & packetIndexMask)) {
oddStartingPacket = true; oddStartingPacket = true;
} else { } else {
oddStartingPacket = false; oddStartingPacket = false;
} }
} }
} }
return oddStartingPacket;
}; };
@ -561,29 +534,18 @@ private:
defaultFifoDepth = 2500; defaultFifoDepth = 2500;
}; };
/**
* Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @param frameNumber frame number
* @param packetNumber packet number
*/
void GetHeaderInfo(int index, char* packetData, uint64_t& frameNumber, uint32_t& packetNumber) const {
jfrauctb_packet_header_t* header = (jfrauctb_packet_header_t*)(packetData);
frameNumber = (uint64_t)((*( (uint32_t*) header->frameNumber)) & frameIndexMask);
packetNumber = (uint32_t)(*( (uint8_t*) header->packetNumber));
}
/** /**
* Get Header Infomation (frame number, packet number) * Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes * @param index thread index for debugging purposes
* @param packetData pointer to data * @param packetData pointer to data
* @param dynamicRange dynamic range to assign subframenumber if 32 bit mode * @param dynamicRange dynamic range to assign subframenumber if 32 bit mode
* @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number * @param packetNumber packet number * @param frameNumber frame number * @param packetNumber packet number
* @param subFrameNumber sub frame number if applicable * @param subFrameNumber sub frame number if applicable
* @param bunchId bunch id * @param bunchId bunch id
*/ */
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const { uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const {
subFrameNumber = -1; subFrameNumber = -1;
jfrauctb_packet_header_t* header = (jfrauctb_packet_header_t*)(packetData); jfrauctb_packet_header_t* header = (jfrauctb_packet_header_t*)(packetData);

View File

@ -311,5 +311,11 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
/** number of images for statistic */ /** number of images for statistic */
uint32_t numFramesStatistic; uint32_t numFramesStatistic;
/**
* starting packet number is odd or evern, accordingly increment frame number
* to get first packet number as 0
* (pecific to gotthard, can vary between modules, hence defined here) */
bool oddStartingPacket;
}; };

View File

@ -54,7 +54,8 @@ Listener::Listener(int ind, detectorType dtype, Fifo*& f, runStatus* s,
listeningPacket(0), listeningPacket(0),
udpSocketAlive(0), udpSocketAlive(0),
numPacketsStatistic(0), numPacketsStatistic(0),
numFramesStatistic(0) numFramesStatistic(0),
oddStartingPacket(true)
{ {
if(ThreadObject::CreateThread() == FAIL) if(ThreadObject::CreateThread() == FAIL)
throw std::exception(); throw std::exception();
@ -429,7 +430,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
// -------------------old header ----------------------------------------------------------------------------- // -------------------old header -----------------------------------------------------------------------------
else { else {
generalData->GetHeaderInfo(index, carryOverPacket + esize, generalData->GetHeaderInfo(index, carryOverPacket + esize,
*dynamicRange, fnum, pnum, snum, bid); *dynamicRange, oddStartingPacket, fnum, pnum, snum, bid);
} }
//------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------
if (fnum != currentFrameIndex) { if (fnum != currentFrameIndex) {
@ -545,11 +546,13 @@ uint32_t Listener::ListenToAnImage(char* buf) {
// -------------------old header ----------------------------------------------------------------------------- // -------------------old header -----------------------------------------------------------------------------
else { else {
// set first packet to be odd or even (check required when switching from roi to no roi) // set first packet to be odd or even (check required when switching from roi to no roi)
if (myDetectorType == GOTTHARD && !measurementStartedFlag) if (myDetectorType == GOTTHARD && !measurementStartedFlag) {
generalData->SetOddStartingPacket(listeningPacket + esize); oddStartingPacket = generalData->SetOddStartingPacket(index, listeningPacket + esize);
cprintf(GREEN,"oddstartingpacket: %d\n", (int)oddStartingPacket);
}
generalData->GetHeaderInfo(index, listeningPacket + esize, generalData->GetHeaderInfo(index, listeningPacket + esize,
*dynamicRange, fnum, pnum, snum, bid); *dynamicRange, oddStartingPacket, fnum, pnum, snum, bid);
} }
//------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------
@ -563,11 +566,11 @@ uint32_t Listener::ListenToAnImage(char* buf) {
lastCaughtFrameIndex = fnum; lastCaughtFrameIndex = fnum;
#ifdef VERBOSE //#ifdef VERBOSE
//if (!index) //if (!index)
cprintf(GREEN,"Listening %d: currentfindex:%lu, fnum:%lu, pnum:%u numpackets:%u\n", cprintf(GREEN,"Listening %d: currentfindex:%lu, fnum:%lu, pnum:%u numpackets:%u\n",
index,currentFrameIndex, fnum, pnum, numpackets); index,currentFrameIndex, fnum, pnum, numpackets);
#endif //#endif
if (!measurementStartedFlag) if (!measurementStartedFlag)
RecordFirstIndices(fnum); RecordFirstIndices(fnum);