fnum wrong, need to add file features

This commit is contained in:
Dhanya Maliakal
2017-02-07 08:52:27 +01:00
parent d95aaa2089
commit c89f6e649c
13 changed files with 364 additions and 94 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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