merge resolved

This commit is contained in:
2019-08-21 14:25:21 +02:00
31 changed files with 600 additions and 207 deletions

View File

@ -18,6 +18,7 @@ class File;
class DataStreamer;
#include <vector>
#include <atomic>
class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
@ -305,7 +306,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
static const std::string TypeName;
/** Object running status */
bool runningFlag;
std::atomic<bool> runningFlag;
/** GeneralData (Detector Data) object */
const GeneralData* generalData;

View File

@ -120,18 +120,13 @@ public:
* Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @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 subFrameNumber sub frame number if applicable
* @param bunchId bunch id
*/
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
virtual void GetHeaderInfo(int index, char* packetData, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber) const
{
subFrameNumber = -1;
bunchId = -1;
frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
frameNumber++;
packetNumber = frameNumber&packetIndexMask;
@ -280,27 +275,20 @@ private:
* Get Header Infomation (frame number, packet number)
* @param index thread index for debugging purposes
* @param packetData pointer to data
* @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 subFrameNumber sub frame number if applicable
* @param bunchId bunch id
*/
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t& bunchId) const
void GetHeaderInfo(int index, char* packetData, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber) const
{
if (nPixelsX == 1280) {
subFrameNumber = -1;
bunchId = -1;
frameNumber = *reinterpret_cast<uint32_t*>(packetData);
if (oddStartingPacket)
frameNumber++;
packetNumber = frameNumber&packetIndexMask;
frameNumber = (frameNumber & frameIndexMask) >> frameIndexOffset;
} else {
subFrameNumber = -1;
bunchId = -1;
frameNumber = *reinterpret_cast<uint32_t *>(packetData);
packetNumber = 0;
}
@ -548,6 +536,14 @@ private:
const int NCHAN_DIGITAL = 64;
/** Number of bytes per analog channel */
const int NUM_BYTES_PER_ANALOG_CHANNEL = 2;
struct ctb_10g_packet_header {
unsigned char emptyHeader[6];
unsigned char reserved[4];
uint32_t packetFrameNumber;
uint64_t bunchid;
} __attribute__((packed));
public:
@ -561,6 +557,9 @@ public:
packetSize = headerSizeinPacket + dataSize;
//packetsPerFrame = 1;
imageSize = nPixelsX * nPixelsY * 2;
frameIndexMask = 0xFFFFFF; // 10g
frameIndexOffset = 8; // 10g
packetIndexMask = 0xFF; //10g
packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES);
maxFramesPerFile = CTB_MAX_FRAMES_PER_FILE;
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header);
@ -612,12 +611,20 @@ public:
nPixelsY = 1;
// 10G
if (t) {
/*
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
dataSize = UDP_PACKET_DATA_BYTES;
packetSize = headerSizeinPacket + dataSize;
imageSize = adatabytes + ddatabytes;
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
standardheader = true;
*/
headerSizeinPacket = 22;
dataSize = 8192;
packetSize = headerSizeinPacket + dataSize;
imageSize = adatabytes + ddatabytes;
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
standardheader = false;
}
// 1g udp (via fifo readout)
else {
@ -631,6 +638,22 @@ public:
return adatabytes;
}
/**
* Get Header Infomation (frame number, packet number)
* @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
*/
void GetHeaderInfo(int index, char* packetData, bool oddStartingPacket,
uint64_t& frameNumber, uint32_t& packetNumber) const
{
auto header = reinterpret_cast<ctb_10g_packet_header*>(packetData);
frameNumber = (header->packetFrameNumber >> frameIndexOffset) & frameIndexMask;
packetNumber = header->packetFrameNumber & packetIndexMask;
}
};

View File

@ -10,7 +10,7 @@
*/
#include <memory>
#include <atomic>
#include "ThreadObject.h"
class GeneralData;
@ -39,7 +39,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
* @param depaden pointer to deactivated padding enable
* @param sm pointer to silent mode
*/
Listener(int ind, detectorType dtype, Fifo* f, runStatus* s,
Listener(int ind, detectorType dtype, Fifo* f, std::atomic<runStatus>* s,
uint32_t* portno, char* e, uint64_t* nf, uint32_t* dr,
int64_t* us, int64_t* as, uint32_t* fpf,
frameDiscardPolicy* fdp, bool* act, bool* depaden, bool* sm);
@ -151,7 +151,6 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
void SetHardCodedPosition(uint16_t r, uint16_t c);
private:
/**
@ -201,7 +200,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
static const std::string TypeName;
/** Object running status */
bool runningFlag;
std::atomic<bool> runningFlag;
/** GeneralData (Detector Data) object */
GeneralData* generalData;
@ -214,7 +213,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
detectorType myDetectorType;
/** Receiver Status */
runStatus* status;
std::atomic<runStatus>* status;
/** UDP Socket - Detector to Receiver */
std::unique_ptr<genericSocket> udpSocket;
@ -264,10 +263,10 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
// acquisition start
/** Aquisition Started flag */
bool acquisitionStartedFlag;
std::atomic<bool> acquisitionStartedFlag;
/** Measurement Started flag */
bool measurementStartedFlag;
std::atomic<bool> measurementStartedFlag;
/** Frame Number of First Frame of an entire Acquisition (including all scans) */
uint64_t firstAcquisitionIndex;
@ -278,10 +277,10 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
// for acquisition summary
/** Number of complete Packets caught for each real time acquisition (eg. for each scan (start& stop of receiver)) */
volatile uint64_t numPacketsCaught;
std::atomic<uint64_t> numPacketsCaught;
/** Last Frame Index caught from udp network */
uint64_t lastCaughtFrameIndex;
std::atomic<uint64_t> lastCaughtFrameIndex;
// parameters to acquire image
@ -300,12 +299,11 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
std::unique_ptr<char []> listeningPacket;
/** if the udp socket is connected */
bool udpSocketAlive;
std::atomic<bool> udpSocketAlive;
/** Semaphore to synchonize deleting udp socket */
sem_t semaphore_socket;
// for print progress during acqusition
/** number of packets for statistic */
uint32_t numPacketsStatistic;

View File

@ -21,6 +21,7 @@ class DataStreamer;
class Fifo;
class slsDetectorDefs;
#include <atomic>
#include <exception>
#include <memory>
#include <vector>
@ -910,7 +911,7 @@ class slsReceiverImplementation : private virtual slsDetectorDefs {
/** Maximum Number of Listening Threads/ UDP Ports */
const static int MAX_NUMBER_OF_LISTENING_THREADS = 2;
/** Receiver Status */
runStatus status;
std::atomic<runStatus> status;
/** Activated/Deactivated */
bool activated;
/** Deactivated padding enable */