mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-08 19:10:42 +02:00
jungfrau finally works with new header
This commit is contained in:
parent
205a3780d5
commit
bd363b2c93
@ -54,6 +54,9 @@ public:
|
|||||||
/** Max Frames per binary file */
|
/** Max Frames per binary file */
|
||||||
uint32_t maxFramesPerFile;
|
uint32_t maxFramesPerFile;
|
||||||
|
|
||||||
|
/** emptybuffer (mainly for jungfrau) */
|
||||||
|
uint32_t emptyHeader;
|
||||||
|
|
||||||
/** Data size that is saved into the fifo buffer at a time*/
|
/** Data size that is saved into the fifo buffer at a time*/
|
||||||
uint32_t fifoBufferSize;
|
uint32_t fifoBufferSize;
|
||||||
|
|
||||||
@ -78,8 +81,7 @@ public:
|
|||||||
/** Streaming (for ROI - mainly short Gotthard) - Image size (in bytes) */
|
/** Streaming (for ROI - mainly short Gotthard) - Image size (in bytes) */
|
||||||
uint32_t imageSize_Streamer;
|
uint32_t imageSize_Streamer;
|
||||||
|
|
||||||
/** emptybuffer (mainly for jungfrau) */
|
|
||||||
uint32_t emptyHeader;
|
|
||||||
|
|
||||||
|
|
||||||
/** Cosntructor */
|
/** Cosntructor */
|
||||||
@ -97,6 +99,7 @@ public:
|
|||||||
packetIndexMask(0),
|
packetIndexMask(0),
|
||||||
packetIndexOffset(0),
|
packetIndexOffset(0),
|
||||||
maxFramesPerFile(0),
|
maxFramesPerFile(0),
|
||||||
|
emptyHeader(0),
|
||||||
fifoBufferSize(0),
|
fifoBufferSize(0),
|
||||||
fifoBufferHeaderSize(0),
|
fifoBufferHeaderSize(0),
|
||||||
defaultFifoDepth(0),
|
defaultFifoDepth(0),
|
||||||
@ -104,8 +107,7 @@ public:
|
|||||||
headerPacketSize(0),
|
headerPacketSize(0),
|
||||||
nPixelsX_Streamer(0),
|
nPixelsX_Streamer(0),
|
||||||
nPixelsY_Streamer(0),
|
nPixelsY_Streamer(0),
|
||||||
imageSize_Streamer(0),
|
imageSize_Streamer(0)
|
||||||
emptyHeader(0)
|
|
||||||
{};
|
{};
|
||||||
|
|
||||||
/** Destructor */
|
/** Destructor */
|
||||||
@ -184,6 +186,7 @@ public:
|
|||||||
"Packet Index Mask: 0x%x\n"
|
"Packet Index Mask: 0x%x\n"
|
||||||
"Packet Index Offset: %u\n"
|
"Packet Index Offset: %u\n"
|
||||||
"Max Frames Per File: %u\n"
|
"Max Frames Per File: %u\n"
|
||||||
|
"Empty Header: %u\n"
|
||||||
"Fifo Buffer Size: %u\n"
|
"Fifo Buffer Size: %u\n"
|
||||||
"Fifo Buffer Header Size: %u\n"
|
"Fifo Buffer Header Size: %u\n"
|
||||||
"Default Fifo Depth: %u\n"
|
"Default Fifo Depth: %u\n"
|
||||||
@ -192,7 +195,7 @@ public:
|
|||||||
"Streamer Pixels X: %u\n"
|
"Streamer Pixels X: %u\n"
|
||||||
"Streamer Pixels Y: %u\n"
|
"Streamer Pixels Y: %u\n"
|
||||||
"Streamer Image Size: %u\n"
|
"Streamer Image Size: %u\n"
|
||||||
"Empty Header: %u\n"
|
|
||||||
,temp.c_str(),//.c_str() modifies, using temp string for thread safety
|
,temp.c_str(),//.c_str() modifies, using temp string for thread safety
|
||||||
nPixelsX,
|
nPixelsX,
|
||||||
nPixelsY,
|
nPixelsY,
|
||||||
@ -450,19 +453,20 @@ class JungfrauData : public GeneralData {
|
|||||||
myDetectorType = slsReceiverDefs::JUNGFRAU;
|
myDetectorType = slsReceiverDefs::JUNGFRAU;
|
||||||
nPixelsX = (256*4);
|
nPixelsX = (256*4);
|
||||||
nPixelsY = 256;
|
nPixelsY = 256;
|
||||||
headerSizeinPacket = 22;
|
headerSizeinPacket = sizeof(slsReceiverDefs::sls_detector_header);
|
||||||
dataSize = 8192;
|
dataSize = 8192;
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
packetsPerFrame = 128;
|
packetsPerFrame = 128;
|
||||||
imageSize = dataSize*packetsPerFrame;
|
imageSize = dataSize*packetsPerFrame;
|
||||||
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
|
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
|
||||||
|
emptyHeader = 6;
|
||||||
fifoBufferSize = imageSize;
|
fifoBufferSize = imageSize;
|
||||||
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
|
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header);
|
||||||
defaultFifoDepth = 2500;
|
defaultFifoDepth = 2500;
|
||||||
nPixelsX_Streamer = nPixelsX;
|
nPixelsX_Streamer = nPixelsX;
|
||||||
nPixelsY_Streamer = nPixelsY;
|
nPixelsY_Streamer = nPixelsY;
|
||||||
imageSize_Streamer = imageSize;
|
imageSize_Streamer = imageSize;
|
||||||
emptyHeader = 6;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -628,7 +628,7 @@ enum communicationProtocol{
|
|||||||
cprintf(BLUE,"%d gonna listen\n", portno); fflush(stdout);
|
cprintf(BLUE,"%d gonna listen\n", portno); fflush(stdout);
|
||||||
#endif
|
#endif
|
||||||
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
|
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
|
||||||
//break out of loop only if read one packets size or read didnt work (cuz of shutdown)
|
//break out of loop only if read one packets size or read didnt work (cuz of shutdown)
|
||||||
if(nsent<=0 || nsent == packet_size)
|
if(nsent<=0 || nsent == packet_size)
|
||||||
break;
|
break;
|
||||||
//incomplete packets or header packets ignored and read buffer again
|
//incomplete packets or header packets ignored and read buffer again
|
||||||
|
@ -224,6 +224,7 @@ void Listener::ShutDownUDPSocket() {
|
|||||||
if(udpSocket){
|
if(udpSocket){
|
||||||
udpSocket->ShutDownSocket();
|
udpSocket->ShutDownSocket();
|
||||||
FILE_LOG(logINFO) << "Shut down of UDP port " << *udpPortNumber;
|
FILE_LOG(logINFO) << "Shut down of UDP port " << *udpPortNumber;
|
||||||
|
fflush(stdout);
|
||||||
delete udpSocket;
|
delete udpSocket;
|
||||||
udpSocket = 0;
|
udpSocket = 0;
|
||||||
}
|
}
|
||||||
@ -314,11 +315,13 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
uint32_t rc = 0;
|
uint32_t rc = 0;
|
||||||
uint64_t fnum = 0, bid = 0;
|
uint64_t fnum = 0, bid = 0;
|
||||||
uint32_t pnum = 0, snum = 0;
|
uint32_t pnum = 0, snum = 0;
|
||||||
|
uint32_t numpackets = 0;
|
||||||
int dsize = generalData->dataSize;
|
int dsize = generalData->dataSize;
|
||||||
bool isHeaderEmpty = true;
|
bool isHeaderEmpty = true;
|
||||||
sls_detector_header* header = 0;
|
sls_detector_header* header = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//reset to -1
|
//reset to -1
|
||||||
memset(buf + generalData->fifoBufferHeaderSize, 0xFF, dsize);
|
memset(buf + generalData->fifoBufferHeaderSize, 0xFF, dsize);
|
||||||
|
|
||||||
@ -351,7 +354,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
if(isHeaderEmpty) {
|
if(isHeaderEmpty) {
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
if (myDetectorType == JUNGFRAU) {
|
if (myDetectorType == JUNGFRAU) {
|
||||||
memcpy(buf + FIFO_HEADER_NUMBYTES, header, sizeof(sls_detector_header));
|
memcpy(buf + FIFO_HEADER_NUMBYTES, (char*)header, sizeof(sls_detector_header));
|
||||||
}
|
}
|
||||||
// -------------------old header ------------------------------------------------------------------------------
|
// -------------------old header ------------------------------------------------------------------------------
|
||||||
else {
|
else {
|
||||||
@ -368,24 +371,24 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
//------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------
|
||||||
isHeaderEmpty = false;
|
isHeaderEmpty = false;
|
||||||
}
|
}
|
||||||
|
numpackets++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//until last packet isHeaderEmpty to account for gotthard short frame, else never entering this loop)
|
//until last packet isHeaderEmpty to account for gotthard short frame, else never entering this loop)
|
||||||
while ( isHeaderEmpty || (pnum < (generalData->packetsPerFrame-1))) {
|
while ( numpackets < (generalData->packetsPerFrame)) {
|
||||||
|
|
||||||
//listen to new packet
|
//listen to new packet
|
||||||
int curr_rc = 0;
|
rc = 0;
|
||||||
if (udpSocket){
|
if (udpSocket){
|
||||||
curr_rc = udpSocket->ReceiveDataOnly(listeningPacket);
|
rc = udpSocket->ReceiveDataOnly(listeningPacket);
|
||||||
}
|
}
|
||||||
if(curr_rc <= 0) {
|
if(rc <= 0) {
|
||||||
if (rc <= 0) return 0; //empty image
|
if (numpackets == 0) return 0; //empty image
|
||||||
return generalData->imageSize; //empty packet now, but not empty image
|
return generalData->imageSize; //empty packet now, but not empty image
|
||||||
}
|
}
|
||||||
rc += curr_rc;
|
numpackets++;
|
||||||
|
|
||||||
//update parameters
|
//update parameters
|
||||||
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
numPacketsCaught++; //record immediately to get more time before socket shutdown
|
||||||
@ -393,8 +396,8 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
|
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
if (myDetectorType == JUNGFRAU) {
|
if (myDetectorType == JUNGFRAU) {
|
||||||
listeningPacket += generalData->emptyHeader;
|
//listeningPacket += generalData->emptyHeader;
|
||||||
header = (sls_detector_header*) (listeningPacket);
|
header = (sls_detector_header*) (listeningPacket + generalData->emptyHeader);
|
||||||
fnum = header->frameNumber;
|
fnum = header->frameNumber;
|
||||||
pnum = header->packetNumber;
|
pnum = header->packetNumber;
|
||||||
}
|
}
|
||||||
@ -407,7 +410,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
lastCaughtFrameIndex = fnum;
|
lastCaughtFrameIndex = fnum;
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
//if (!index)
|
//if (!index)
|
||||||
cprintf(GREEN,"Listening %d: fnum:%lu, pnum:%d\n", index,fnum, pnum);
|
cprintf(GREEN,"Listening %d: currentfindex:%lu, fnum:%lu, pnum:%u numpackets:%u\n", index,currentFrameIndex, fnum, pnum, numpackets);
|
||||||
#endif
|
#endif
|
||||||
if (!measurementStartedFlag)
|
if (!measurementStartedFlag)
|
||||||
RecordFirstIndices(fnum);
|
RecordFirstIndices(fnum);
|
||||||
@ -418,16 +421,16 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
if (fnum != currentFrameIndex) {
|
if (fnum != currentFrameIndex) {
|
||||||
cprintf(RED,"setting carry over flag to true\n");
|
cprintf(RED,"setting carry over flag to true\n");
|
||||||
carryOverFlag = true;
|
carryOverFlag = true;
|
||||||
memcpy(carryOverPacket,listeningPacket, generalData->packetSize);
|
memcpy(carryOverPacket,listeningPacket + generalData->emptyHeader, generalData->packetSize);
|
||||||
return generalData->imageSize;
|
return generalData->imageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
//copy packet
|
//copy packet
|
||||||
memcpy(buf + generalData->fifoBufferHeaderSize + (pnum * dsize), listeningPacket + generalData->headerSizeinPacket, dsize);
|
memcpy(buf + generalData->fifoBufferHeaderSize + (pnum * dsize), listeningPacket + generalData->emptyHeader + generalData->headerSizeinPacket, dsize);
|
||||||
if(isHeaderEmpty) {
|
if(isHeaderEmpty) {
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
if (myDetectorType == JUNGFRAU) {
|
if (myDetectorType == JUNGFRAU) {
|
||||||
memcpy(buf + FIFO_HEADER_NUMBYTES, header, sizeof(sls_detector_header));
|
memcpy(buf + FIFO_HEADER_NUMBYTES, (char*)header, sizeof(sls_detector_header));
|
||||||
}
|
}
|
||||||
// -------------------old header ------------------------------------------------------------------------------
|
// -------------------old header ------------------------------------------------------------------------------
|
||||||
else {
|
else {
|
||||||
|
@ -567,7 +567,7 @@ void UDPStandardImplementation::startReadout(){
|
|||||||
prev,totalP);
|
prev,totalP);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
usleep(1*1000*1000);usleep(1*1000*1000);usleep(1*1000*1000);usleep(1*1000*1000);
|
//usleep(1*1000*1000);usleep(1*1000*1000);usleep(1*1000*1000);usleep(1*1000*1000);
|
||||||
usleep(5*1000);/* Need to find optimal time **/
|
usleep(5*1000);/* Need to find optimal time **/
|
||||||
|
|
||||||
prev = totalP;
|
prev = totalP;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user