mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-16 03:20:14 +01:00
fnum wrong, need to add file features
This commit is contained in:
@@ -12,7 +12,11 @@
|
||||
|
||||
#include "ThreadObject.h"
|
||||
|
||||
class GeneralData;
|
||||
class Fifo;
|
||||
class FileWriter;
|
||||
|
||||
#include <vector>
|
||||
|
||||
class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
|
||||
@@ -21,8 +25,10 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
* Constructor
|
||||
* Calls Base Class CreateThread(), sets ErrorMask if error and increments NumberofDataProcessors
|
||||
* @param f address of Fifo pointer
|
||||
* @param s pointer to receiver status
|
||||
* @param m pointer to mutex for status
|
||||
*/
|
||||
DataProcessor(Fifo*& f);
|
||||
DataProcessor(Fifo*& f, runStatus* s, pthread_mutex_t* m);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
@@ -49,6 +55,12 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
static bool GetMeasurementStartedFlag();
|
||||
|
||||
/**
|
||||
* Set GeneralData pointer to the one given
|
||||
* @param g address of GeneralData (Detector Data) pointer
|
||||
*/
|
||||
static void SetGeneralData(GeneralData*& g);
|
||||
|
||||
/**
|
||||
* Get Total Complete Frames Caught for an entire acquisition (including all scans)
|
||||
* @return total number of frames caught for entire acquisition
|
||||
@@ -124,6 +136,13 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
void ThreadExecution();
|
||||
|
||||
/**
|
||||
* Frees dummy buffer,
|
||||
* reset running mask by calling StopRunning()
|
||||
* @param buf address of pointer
|
||||
*/
|
||||
void StopProcessing(char* buf);
|
||||
|
||||
|
||||
|
||||
/** type of thread */
|
||||
@@ -141,6 +160,9 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** mutex to update static items among objects (threads)*/
|
||||
static pthread_mutex_t Mutex;
|
||||
|
||||
/** GeneralData (Detector Data) object */
|
||||
static const GeneralData* generalData;
|
||||
|
||||
/** Fifo structure */
|
||||
Fifo* fifo;
|
||||
|
||||
@@ -152,6 +174,12 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** Measurement Started flag */
|
||||
static bool measurementStartedFlag;
|
||||
|
||||
/** Receiver Status */
|
||||
runStatus* status;
|
||||
|
||||
/** Status mutex */
|
||||
pthread_mutex_t* statusMutex;
|
||||
|
||||
/**Number of complete frames caught for an entire acquisition (including all scans) */
|
||||
uint64_t numTotalFramesCaught;
|
||||
|
||||
@@ -167,6 +195,8 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** Frame Number of latest processed frame number of an entire Acquisition (including all scans) */
|
||||
uint64_t currentFrameIndex;
|
||||
|
||||
/** File writer implemented as binary or hdf5 filewriter */
|
||||
std::vector <FileWriter*> fileWriter;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -8,10 +8,7 @@
|
||||
*@short abstract for setting/getting properties of detector data
|
||||
*/
|
||||
|
||||
|
||||
typedef double double32_t;
|
||||
typedef float float32_t;
|
||||
typedef int int32_t;
|
||||
#include "receiver_defs.h"
|
||||
|
||||
|
||||
class GeneralData {
|
||||
@@ -87,7 +84,7 @@ public:
|
||||
* @param bunchId bunch id
|
||||
*/
|
||||
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange,
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) {
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) const {
|
||||
subFrameNumber = 0;
|
||||
bunchId = 0;
|
||||
frameNumber = ((uint32_t)(*((uint32_t*)(packetData))));
|
||||
@@ -113,6 +110,45 @@ public:
|
||||
virtual void SetTenGigaEnable(bool tgEnable, int dr) {
|
||||
//This is a generic function that is overloaded by a dervied class
|
||||
};
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
printf("\n\nDetector Data Variables:\n");
|
||||
printf( "Pixels X: %d\n"
|
||||
"Pixels Y: %d\n"
|
||||
"Data Size: %d\n"
|
||||
"Packet Size: %d\n"
|
||||
"Packets per Frame: %d\n"
|
||||
"Image Size: %d\n"
|
||||
"Frame Index Mask: 0x%llx\n"
|
||||
"Frame Index Offset: %d\n"
|
||||
"Packet Index Mask: 0x%x\n"
|
||||
"Packet Index Offset: %d\n"
|
||||
"Max Frames Per File: %d\n"
|
||||
"Fifo Buffer Size: %d\n"
|
||||
"Fifo Buffer Header Size: %d\n"
|
||||
"Default Fifo Depth: %d\n"
|
||||
"Threads Per Receiver: %d\n"
|
||||
"Header Packet Size: %d\n",
|
||||
nPixelsX,
|
||||
nPixelsY,
|
||||
dataSize,
|
||||
packetSize,
|
||||
packetsPerFrame,
|
||||
imageSize,
|
||||
(long long int)frameIndexMask,
|
||||
frameIndexOffset,
|
||||
packetIndexMask,
|
||||
packetIndexOffset,
|
||||
maxFramesPerFile,
|
||||
fifoBufferSize,
|
||||
fifoBufferHeaderSize,
|
||||
defaultFifoDepth,
|
||||
threadsPerReceiver,
|
||||
headerPacketSize);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -211,6 +247,14 @@ class Moench02Data : public GeneralData {
|
||||
fifoBufferHeaderSize= FIFO_BUFFER_HEADER_SIZE + FILE_FRAME_HEADER_SIZE;
|
||||
defaultFifoDepth = 2500;
|
||||
};
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
GeneralData::Print();
|
||||
printf("Bytes Per Adc: %d\n",bytesPerAdc);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -237,6 +281,14 @@ class Moench03Data : public GeneralData {
|
||||
fifoBufferHeaderSize= FIFO_BUFFER_HEADER_SIZE + FILE_FRAME_HEADER_SIZE;
|
||||
defaultFifoDepth = 2500;
|
||||
};
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
GeneralData::Print();
|
||||
printf("Packet Header Size: %d\n",packetHeaderSize);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -260,6 +312,14 @@ class JCTBData : public GeneralData {
|
||||
fifoBufferHeaderSize= FIFO_BUFFER_HEADER_SIZE + FILE_FRAME_HEADER_SIZE;
|
||||
defaultFifoDepth = 2500;
|
||||
};
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
GeneralData::Print();
|
||||
printf("Bytes Per Adc: %d\n",bytesPerAdc);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -306,13 +366,21 @@ private:
|
||||
* @param bunchId bunch id
|
||||
*/
|
||||
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange,
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) {
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) const {
|
||||
subFrameNumber = 0;
|
||||
jfrau_packet_header_t* header = (jfrau_packet_header_t*)(packetData);
|
||||
frameNumber = (uint64_t)(*( (uint32_t*) header->frameNumber));
|
||||
packetNumber = (uint32_t)(*( (uint8_t*) header->packetNumber));
|
||||
bunchId = (*((uint64_t*) header->bunchid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
GeneralData::Print();
|
||||
printf("Packet Header Size: %d\n",packetHeaderSize);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -370,7 +438,7 @@ private:
|
||||
* @param bunchId bunch id
|
||||
*/
|
||||
void GetHeaderInfo(int index, char* packetData, uint32_t dynamicRange,
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) {
|
||||
uint64_t& frameNumber, uint32_t& packetNumber, uint32_t& subFrameNumber, uint64_t bunchId) const {
|
||||
bunchId = 0;
|
||||
subFrameNumber = 0;
|
||||
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(packetData + footerOffset);
|
||||
@@ -406,6 +474,17 @@ private:
|
||||
fifoBufferSize = packetSize*packetsPerFrame;
|
||||
footerOffset = packetHeaderSize+dataSize;
|
||||
};
|
||||
|
||||
/**
|
||||
* Print all variables
|
||||
*/
|
||||
void Print() const {
|
||||
GeneralData::Print();
|
||||
printf( "Packet Header Size: %d"
|
||||
"Footer Offset : %d\n",
|
||||
packetHeaderSize,
|
||||
footerOffset);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "ThreadObject.h"
|
||||
|
||||
class GeneralData;
|
||||
class Fifo;
|
||||
class genericSocket;
|
||||
|
||||
@@ -22,8 +23,10 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
* Constructor
|
||||
* Calls Base Class CreateThread(), sets ErrorMask if error and increments NumberofListerners
|
||||
* @param f address of Fifo pointer
|
||||
* @param s pointer to receiver status
|
||||
* @param portno pointer to udp port number
|
||||
*/
|
||||
Listener(Fifo*& f);
|
||||
Listener(Fifo*& f, runStatus* s, uint32_t* portno);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
@@ -50,6 +53,12 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
static bool GetMeasurementStartedFlag();
|
||||
|
||||
/**
|
||||
* Set GeneralData pointer to the one given
|
||||
* @param g address of GeneralData (Detector Data) pointer
|
||||
*/
|
||||
static void SetGeneralData(GeneralData*& g);
|
||||
|
||||
/**
|
||||
* Get Total Packets caught in an acquisition
|
||||
* @return Total Packets caught in an acquisition
|
||||
@@ -71,6 +80,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
void StopRunning();
|
||||
|
||||
|
||||
/**
|
||||
* Set Fifo pointer to the one given
|
||||
* @param f address of Fifo pointer
|
||||
@@ -89,13 +99,10 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
|
||||
/**
|
||||
* Creates UDP Sockets
|
||||
* @param portnumber udp port number
|
||||
* @param packetSize size of one packet
|
||||
* @param eth ethernet interface or null
|
||||
* @param headerPacketSize size of a header packet
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int CreateUDPSockets(uint32_t portnumber, uint32_t packetSize, const char* eth, uint32_t headerPacketSize);
|
||||
int CreateUDPSockets(const char* eth);
|
||||
|
||||
/**
|
||||
* Shuts down and deletes UDP Sockets
|
||||
@@ -126,6 +133,14 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
void ThreadExecution();
|
||||
|
||||
/**
|
||||
* Pushes non empty buffers into fifo/ frees empty buffer,
|
||||
* pushes dummy buffer into fifo
|
||||
* and reset running mask by calling StopRunning()
|
||||
* @param buf address of buffer
|
||||
*/
|
||||
void StopListening(char* buf);
|
||||
|
||||
|
||||
/** type of thread */
|
||||
static const std::string TypeName;
|
||||
@@ -142,6 +157,9 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** Mutex to update static items among objects (threads)*/
|
||||
static pthread_mutex_t Mutex;
|
||||
|
||||
/** GeneralData (Detector Data) object */
|
||||
static const GeneralData* generalData;
|
||||
|
||||
/** Fifo structure */
|
||||
Fifo* fifo;
|
||||
|
||||
@@ -153,6 +171,15 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** Measurement Started flag */
|
||||
static bool measurementStartedFlag;
|
||||
|
||||
/** Receiver Status */
|
||||
runStatus* status;
|
||||
|
||||
/** UDP Sockets - Detector to Receiver */
|
||||
genericSocket* udpSocket;
|
||||
|
||||
/** UDP Port Number */
|
||||
uint32_t* udpPortNumber;
|
||||
|
||||
/**Number of complete Packets caught for an entire acquisition (including all scans) */
|
||||
uint64_t numTotalPacketsCaught;
|
||||
|
||||
@@ -165,8 +192,6 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject {
|
||||
/** Frame Number of First Frame for each real time acquisition (eg. for each scan) */
|
||||
uint64_t firstMeasurementIndex;
|
||||
|
||||
/** UDP Sockets - Detector to Receiver */
|
||||
genericSocket* udpSocket;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -15,7 +15,6 @@ class Listener;
|
||||
class DataProcessor;
|
||||
class DataStreamer;
|
||||
class Fifo;
|
||||
class FileWriter;
|
||||
|
||||
#include <vector>
|
||||
|
||||
@@ -179,6 +178,7 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase
|
||||
*/
|
||||
void closeFiles();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
@@ -243,6 +243,10 @@ private:
|
||||
/** Number of Jobs */
|
||||
int numberofJobs;
|
||||
|
||||
//*** mutex ***
|
||||
/** Status mutex */
|
||||
pthread_mutex_t statusMutex;
|
||||
|
||||
|
||||
//** class objects ***
|
||||
/** General Data Properties */
|
||||
@@ -260,8 +264,6 @@ private:
|
||||
/** Fifo Structure to store addresses of memory writes */
|
||||
std::vector <Fifo*> fifo;
|
||||
|
||||
/** File writer implemented as binary or hdf5 filewriter */
|
||||
std::vector <FileWriter*> fileWriter;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -83,7 +83,11 @@ using namespace std;
|
||||
#define DEFAULT_GUI_PORTNO 65000
|
||||
#define DEFAULT_ZMQ_PORTNO 70001
|
||||
|
||||
|
||||
/** Structure of an eiger packet footer */
|
||||
typedef struct {
|
||||
unsigned char frameNumber[6];
|
||||
unsigned char packetNumber[2];
|
||||
} eiger_packet_footer_t;
|
||||
|
||||
class genericSocket{
|
||||
|
||||
@@ -619,11 +623,19 @@ enum communicationProtocol{
|
||||
while(length>0){
|
||||
nsending = (length>packet_size) ? packet_size:length;
|
||||
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
|
||||
cprintf(CYAN,"nsent:%d\n",nsent);
|
||||
|
||||
if(nsent == header_packet_size)
|
||||
continue;
|
||||
if(nsent != nsending){ //if((nsent != nsending)){ && (nsent < packet_size)){
|
||||
if(nsent && (nsent != header_packet_size) && (nsent != -1))
|
||||
if(nsent && (nsent != -1))
|
||||
cprintf(RED,"Incomplete Packet size %d\n",nsent);
|
||||
break;
|
||||
}
|
||||
eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(buf + 1024+8);
|
||||
cprintf(MAGENTA,"generic fnum:%lld, pnum:%d \n",
|
||||
(long long int)(uint64_t)((*( (uint64_t*) footer)) ),
|
||||
(uint32_t)(*( (uint16_t*) footer->packetNumber)));
|
||||
length-=nsent;
|
||||
total_sent+=nsent;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
#define SAMPLE_TIME_IN_NS 100000000//100ms
|
||||
#define MAX_JOBS_PER_THREAD 1000
|
||||
|
||||
#define DUMMY_PACKET_VALUE 0xFFFFFFFF;
|
||||
|
||||
#define DUMMY_PACKET_VALUE 0xFFFFFFFF
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user