jungfrau finally works with new header

This commit is contained in:
Dhanya Maliakal 2017-05-15 17:02:37 +02:00
parent 205a3780d5
commit bd363b2c93
4 changed files with 30 additions and 23 deletions

View File

@ -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;
}; };
}; };

View File

@ -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

View File

@ -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 {

View File

@ -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;