veto header smaller size

This commit is contained in:
maliakal_d 2020-05-25 12:20:40 +02:00
parent 9592d1760f
commit 6bdc506a34
4 changed files with 51 additions and 19 deletions

View File

@ -2274,7 +2274,7 @@ void *start_timer(void *arg) {
int datasize = imagesize; int datasize = imagesize;
int packetsize = datasize + sizeof(sls_detector_header); int packetsize = datasize + sizeof(sls_detector_header);
int vetodatasize = VETO_DATA_SIZE; int vetodatasize = VETO_DATA_SIZE;
int vetopacketsize = vetodatasize + sizeof(sls_detector_header); int vetopacketsize = vetodatasize + VETO_HEADER_SIZE;
// Generate data // Generate data
char imageData[imagesize]; char imageData[imagesize];
@ -2331,21 +2331,16 @@ void *start_timer(void *arg) {
sendUDPPacket(0, packetData, packetsize); sendUDPPacket(0, packetData, packetsize);
// second interface (veto) // second interface (veto)
char packetData2[packetsize]; char packetData2[vetopacketsize];
memset(packetData2, 0, packetsize); memset(packetData2, 0, vetopacketsize);
if (numInterfaces == 2) { if (numInterfaces == 2) {
// set header // set header
sls_detector_header *header = veto_header *header = (veto_header *)(packetData2);
(sls_detector_header *)(packetData2);
header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
header->frameNumber = frameHeaderNr; header->frameNumber = frameHeaderNr;
header->packetNumber = 0; header->bunchId = 0;
header->modId = 0; header->reserved = 0;
header->row = detPos[X];
header->column = detPos[Y];
// fill data // fill data
memcpy(packetData2 + sizeof(sls_detector_header), vetoData, memcpy(packetData2 + VETO_HEADER_SIZE, vetoData,
vetodatasize); vetodatasize);
// send 1 packet = 1 frame // send 1 packet = 1 frame
sendUDPPacket(1, packetData2, vetopacketsize); sendUDPPacket(1, packetData2, vetopacketsize);

View File

@ -57,6 +57,13 @@
#define READOUT_PLL_VCO_FREQ_HZ (866666688) // 866 MHz #define READOUT_PLL_VCO_FREQ_HZ (866666688) // 866 MHz
#define SYSTEM_PLL_VCO_FREQ_HZ (722222224) // 722 MHz #define SYSTEM_PLL_VCO_FREQ_HZ (722222224) // 722 MHz
#define VETO_DATA_SIZE (160) #define VETO_DATA_SIZE (160)
#define VETO_HEADER_SIZE (24)
typedef struct {
uint64_t frameNumber;
uint64_t bunchId;
uint64_t reserved;
} veto_header;
/** Other Definitions */ /** Other Definitions */
#define BIT16_MASK (0xFFFF) #define BIT16_MASK (0xFFFF)

View File

@ -50,6 +50,7 @@ class GeneralData {
uint32_t vetoDataSize{0}; uint32_t vetoDataSize{0};
uint32_t vetoPacketSize{0}; uint32_t vetoPacketSize{0};
uint32_t vetoImageSize{0}; uint32_t vetoImageSize{0};
uint32_t vetoHsize{0};
GeneralData(){}; GeneralData(){};
virtual ~GeneralData(){}; virtual ~GeneralData(){};
@ -61,14 +62,17 @@ class GeneralData {
* @param oddStartingPacket odd starting packet (gotthard) * @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number * @param frameNumber frame number
* @param packetNumber packet number * @param packetNumber packet number
* @param bunchId bunch Id
*/ */
virtual void GetHeaderInfo(int index, char *packetData, virtual void GetHeaderInfo(int index, char *packetData,
bool oddStartingPacket, uint64_t &frameNumber, bool oddStartingPacket, uint64_t &frameNumber,
uint32_t &packetNumber) const { uint32_t &packetNumber,
uint64_t &bunchId) const {
frameNumber = ((uint32_t)(*((uint32_t *)(packetData)))); frameNumber = ((uint32_t)(*((uint32_t *)(packetData))));
frameNumber++; frameNumber++;
packetNumber = frameNumber & packetIndexMask; packetNumber = frameNumber & packetIndexMask;
frameNumber = (frameNumber & frameIndexMask) >> frameIndexOffset; frameNumber = (frameNumber & frameIndexMask) >> frameIndexOffset;
bunchId = -1;
} }
/** /**
@ -194,9 +198,11 @@ class GotthardData : public GeneralData {
* @param oddStartingPacket odd starting packet (gotthard) * @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number * @param frameNumber frame number
* @param packetNumber packet number * @param packetNumber packet number
* @param bunchId bunch Id
*/ */
void GetHeaderInfo(int index, char *packetData, bool oddStartingPacket, void GetHeaderInfo(int index, char *packetData, bool oddStartingPacket,
uint64_t &frameNumber, uint32_t &packetNumber) const { uint64_t &frameNumber, uint32_t &packetNumber,
uint64_t &bunchId) const {
if (nPixelsX == 1280) { if (nPixelsX == 1280) {
frameNumber = *reinterpret_cast<uint32_t *>(packetData); frameNumber = *reinterpret_cast<uint32_t *>(packetData);
if (oddStartingPacket) if (oddStartingPacket)
@ -207,6 +213,7 @@ class GotthardData : public GeneralData {
frameNumber = *reinterpret_cast<uint32_t *>(packetData); frameNumber = *reinterpret_cast<uint32_t *>(packetData);
packetNumber = 0; packetNumber = 0;
} }
bunchId = -1;
} }
/** /**
@ -490,6 +497,7 @@ class Gotthard2Data : public GeneralData {
vetoDataSize = 160; vetoDataSize = 160;
vetoPacketSize = headerSizeinPacket + vetoDataSize; vetoPacketSize = headerSizeinPacket + vetoDataSize;
vetoImageSize = vetoDataSize * packetsPerFrame; vetoImageSize = vetoDataSize * packetsPerFrame;
vetoHsize = 24;
}; };
/** /**
@ -506,6 +514,23 @@ class Gotthard2Data : public GeneralData {
threadsPerReceiver = 1; threadsPerReceiver = 1;
} }
}; };
/**
* Get Header Infomation (frame number, packet number) for veto packets
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @param oddStartingPacket odd starting packet (gotthard)
* @param frameNumber frame number
* @param packetNumber packet number
* @param bunchId bunch Id
*/
void GetHeaderInfo(int index, char *packetData, bool oddStartingPacket,
uint64_t &frameNumber, uint32_t &packetNumber,
uint64_t &bunchId) const {
frameNumber = *reinterpret_cast<uint64_t *>(packetData);
bunchId = *reinterpret_cast<uint64_t *>(packetData + 8);
packetNumber = 0;
}
}; };
class ChipTestBoardData : public GeneralData { class ChipTestBoardData : public GeneralData {

View File

@ -270,22 +270,25 @@ uint32_t Listener::ListenToAnImage(char *buf) {
int rc = 0; int rc = 0;
uint64_t fnum = 0; uint64_t fnum = 0;
uint32_t pnum = 0; uint32_t pnum = 0;
uint64_t bnum = 0;
uint32_t numpackets = 0; uint32_t numpackets = 0;
uint32_t dsize = generalData->dataSize; uint32_t dsize = generalData->dataSize;
uint32_t imageSize = generalData->imageSize; uint32_t imageSize = generalData->imageSize;
uint32_t packetSize = generalData->packetSize; uint32_t packetSize = generalData->packetSize;
uint32_t hsize = generalData->headerSizeinPacket;
uint32_t fifohsize = generalData->fifoBufferHeaderSize;
bool standardheader = generalData->standardheader;
if (myDetectorType == GOTTHARD2 && index != 0) { if (myDetectorType == GOTTHARD2 && index != 0) {
dsize = generalData->vetoDataSize; dsize = generalData->vetoDataSize;
imageSize = generalData->vetoImageSize; imageSize = generalData->vetoImageSize;
packetSize = generalData->vetoPacketSize; packetSize = generalData->vetoPacketSize;
hsize = generalData->vetoHsize;
standardheader = false;
} }
uint32_t hsize = generalData->headerSizeinPacket;
uint32_t fifohsize = generalData->fifoBufferHeaderSize;
uint32_t pperFrame = generalData->packetsPerFrame; uint32_t pperFrame = generalData->packetsPerFrame;
bool isHeaderEmpty = true; bool isHeaderEmpty = true;
sls_detector_header *old_header = nullptr; sls_detector_header *old_header = nullptr;
sls_receiver_header *new_header = nullptr; sls_receiver_header *new_header = nullptr;
bool standardheader = generalData->standardheader;
uint32_t corrected_dsize = dsize - ((pperFrame * dsize) - imageSize); uint32_t corrected_dsize = dsize - ((pperFrame * dsize) - imageSize);
// reset to -1 // reset to -1
@ -329,7 +332,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
else { else {
generalData->GetHeaderInfo(index, &carryOverPacket[0], generalData->GetHeaderInfo(index, &carryOverPacket[0],
oddStartingPacket, fnum, pnum); oddStartingPacket, fnum, pnum, bnum);
} }
//------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------
if (fnum != currentFrameIndex) { if (fnum != currentFrameIndex) {
@ -403,6 +406,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
else { else {
new_header->detHeader.frameNumber = fnum; new_header->detHeader.frameNumber = fnum;
new_header->detHeader.bunchId = bnum;
new_header->detHeader.row = row; new_header->detHeader.row = row;
new_header->detHeader.column = column; new_header->detHeader.column = column;
new_header->detHeader.detType = new_header->detHeader.detType =
@ -470,7 +474,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
} }
generalData->GetHeaderInfo(index, &listeningPacket[0], generalData->GetHeaderInfo(index, &listeningPacket[0],
oddStartingPacket, fnum, pnum); oddStartingPacket, fnum, pnum, bnum);
} }
//------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------
@ -569,6 +573,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
else { else {
new_header->detHeader.frameNumber = fnum; new_header->detHeader.frameNumber = fnum;
new_header->detHeader.bunchId = bnum;
new_header->detHeader.row = row; new_header->detHeader.row = row;
new_header->detHeader.column = column; new_header->detHeader.column = column;
new_header->detHeader.detType = new_header->detHeader.detType =