From deb72feb912fcc62a49acf719e45e949e0ee499d Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 19 Jan 2016 14:39:58 +0100 Subject: [PATCH] still not resolved altho some changes --- .../src/UDPStandardImplementation.cpp | 347 ++++++++++++++---- 1 file changed, 285 insertions(+), 62 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 39d25e1ef..682d82e19 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -1964,7 +1964,10 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){ blankframe[i] = new char[onePacketSize]; //set missing packet to 0xff eiger_packet_header_t* blankframe_header = (eiger_packet_header_t*) blankframe[i]; + eiger_packet_footer_t* blankframe_footer = (eiger_packet_footer_t*)(blankframe[i] + footerOffset); *( (uint16_t*) blankframe_header->missingPacket) = missingPacketValue; + *( (uint16_t*) blankframe_footer->packetNumber) = i+1; + //set each value inside blank frame to 0xff for(int j=0;j<(oneDataSize);++j){ unsigned char* blankframe_data = (unsigned char*)blankframe[i] + sizeof(eiger_packet_header_t) + j; @@ -1980,11 +1983,29 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){ //until mask unset (udp sockets shut down by client) while((1 << ithread) & writerThreadsMask){ + /* for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber); + cprintf(MAGENTA,"Fifo %d: threadframenumber original-1:%d currentpacketnumber real:%d\n", + i,threadFrameNumber[i],currentPacketNumber[i]); } - + /* for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<missingPacket)!= missingPacketValue){ eiger_packet_header_t* blankframe_header = (eiger_packet_header_t*) blankframe[blankoffset]; - cprintf(BG_RED, "Fifo %d: Missing Packet Error: Adding blank packets mismatch " + cprintf(BG_RED, "Fifo %d: Add Missing Packet Error: " "pnum_offset %d, pnum %d, fnum_thread %d, missingpacket_buffer 0x%x, missingpacket_blank 0x%x\n", i,frameBufferoffset[i],currentPacketNumber[i],threadFrameNumber[i], *( (uint16_t*) frameBuffer_header->missingPacket), *( (uint16_t*) blankframe_header->missingPacket)); exit(-1); }else{ -#ifdef DEBUG4 - cprintf(RED, "Fifo %d: Missing Packet: Adding blank packets success " - "pnum_offset %d, pnum %d, fnum_thread %d, missingpacket_buffer 0x%x\n", +//#ifdef DEBUG4 + cprintf(RED, "Fifo %d: Add Missing Packet success: " + "pnum_offset %d, pnum_got %d, fnum_thread %d, missingpacket_buffer 0x%x\n", i,frameBufferoffset[i],currentPacketNumber[i],threadFrameNumber[i], *( (uint16_t*) frameBuffer_header->missingPacket)); -#endif - frameBufferoffset[i]++; - blankoffset++; +//#endif + frameBufferoffset[i]=frameBufferoffset[i]+1; + //blankoffset++; } } + popReady[i] = false; + if((numPackets[i] == dummyPacketValue) ||(threadFrameNumber[i] != presentFrameNumber)) + fullframe[i] = true; + else + fullframe[i] = false; + if(threadFrameNumber[i] != presentFrameNumber) + threadFrameNumber[i] = presentFrameNumber; + //missed packets/future packet: do not pop over and determine fullframe-------------------- if(numberofMissingPackets[i]){ - popReady[i] = false; - if((numPackets[i] == dummyPacketValue) ||(threadFrameNumber[i] != presentFrameNumber)) - fullframe[i] = true; - else{ - fullframe[i] = false; + //popReady[i] = false; + //if((numPackets[i] == dummyPacketValue) ||(threadFrameNumber[i] != presentFrameNumber)) + // fullframe[i] = true; + //else{ + // fullframe[i] = false; //update last packet - lastPacketNumber[i] = currentPacketNumber[i] - 1; - } - if(threadFrameNumber[i] != presentFrameNumber) - threadFrameNumber[i] = presentFrameNumber; + //lastPacketNumber[i] = currentPacketNumber[i] - 1; + //} + //if(threadFrameNumber[i] != presentFrameNumber) + // threadFrameNumber[i] = presentFrameNumber; numMissingPackets += numberofMissingPackets[i]; } - //no missed packet: add current packet-------------------------------------------------------------- - else{ + /*for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber),threadFrameNumber[i], *( (uint16_t*) frameBuffer_header->missingPacket)); -#endif - frameBufferoffset[i]++; +//#endif + frameBufferoffset[i]=frameBufferoffset[i]+1; //update last packet lastPacketNumber[i] = currentPacketNumber[i]; popReady[i] = true; fullframe[i] = false; if(currentPacketNumber[i] == LAST_PACKET_VALUE){ -#ifdef DEBUG4 +//#ifdef DEBUG4 cprintf(GREEN, "Fifo %d: Got last packet\n",i); -#endif +//#endif popReady[i] = false; fullframe[i] = true; } @@ -2121,15 +2243,31 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){ } } + /* for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<isEmpty()){ @@ -2173,24 +2345,57 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){ if((numPackets[i] != dummyPacketValue) && (currentPacketNumber[i] == LAST_PACKET_VALUE)) popReady[i] = true; frameBufferoffset[i] = (i*packetsPerFrame/numberofListeningThreads); - blankoffset = 0; + //blankoffset = 0; lastPacketNumber[i] = 0; currentPacketNumber[i] = 0; numberofMissingPackets[i] = 0; } + } + /* for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), (void*)(packetBuffer[i])); + i,popReady[i],(uint32_t)(*( (uint64_t*) wbuf_footer1)), + *( (uint16_t*) wbuf_footer1->packetNumber), (void*)(packetBuffer[i])); } #endif + /*for(int iloop=0;ilooppacketNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + cout<packetNumber)); } -#endif +//#endif if(myDetectorType == EIGER){ while(!fifoTempFree[i]->push(wbuffer[i])); } @@ -2548,14 +2753,21 @@ void UDPStandardImplementation::createHeaders(char* wbuffer[]){ int port = 0, missingPacket; + bool exitVal = 0; + cprintf(GREEN,"packetsperframe:%d\n",packetsPerFrame); for (uint32_t i = 0; i < packetsPerFrame; i++){ eiger_packet_header_t* wbuf_header = (eiger_packet_header_t*) wbuffer[i]; eiger_packet_footer_t* wbuf_footer = (eiger_packet_footer_t*)(wbuffer[i] + footerOffset); #ifdef DEBUG4 - cprintf(GREEN, "Loop index:%d Pnum:%d\n",i,*( (uint16_t*) wbuf_footer->packetNumber)); + cprintf(GREEN, "Loop index:%d Pnum:%d real fnum %d,missingPacket 0x%x\n", + i, + *( (uint16_t*) wbuf_footer->packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket) + ); cout <missingPacket)== missingPacketValue){ #ifdef DEBUG4 - cprintf(GREEN,"Missing packet at %d\n", i+1); + cprintf(RED,"-Missing packet at Loop Index %d\n", i); #endif missingPacket = 1; - //add frame and packet numbers - *( (uint64_t*) wbuf_footer) = (uint64_t)((currentFrameNumber+1)); - *( (uint16_t*) wbuf_footer->packetNumber) = (i+1); + //add frame number + *( (uint64_t*) wbuf_footer) = (currentFrameNumber+1) | (((uint64_t)(*( (uint16_t*) wbuf_footer->packetNumber)))<<0x30); + //*( (uint16_t*) wbuf_footer->packetNumber) = (i+1); +#ifdef DEBUG4 + cprintf(RED, "Missing Packet Loop index:%d fnum:%d Pnum:%d\n",i, + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_footer->packetNumber)); +#endif } //normal packet else{ @@ -2579,14 +2796,20 @@ void UDPStandardImplementation::createHeaders(char* wbuffer[]){ //DEBUGGING if(*( (uint16_t*) wbuf_footer->packetNumber) != (i+1)){ cprintf(BG_RED, "Writing_Thread: Packet Number Mismatch! " - "i %d, pnum %d, fnum %lld, missingPacket 0x%x\n", - i,*( (uint16_t*) wbuf_footer->packetNumber),(long long int)currentFrameNumber,*( (uint16_t*) wbuf_header->missingPacket)); - exit(-1); + "i %d, real pnum %d, real fnum %d, missingPacket 0x%x\n", + i, + *( (uint16_t*) wbuf_footer->packetNumber), + (uint32_t)(*( (uint64_t*) wbuf_footer)), + *( (uint16_t*) wbuf_header->missingPacket)); + exitVal =1; } //overwriting port number and dynamic range *( (uint8_t*) wbuf_header->portIndex) = port; *( (uint8_t*) wbuf_header->dynamicRange) = dynamicRange; } + + if(exitVal){exit(-1);} + }