reorganises and cleans up some parts of the code
This commit is contained in:
@@ -5,6 +5,51 @@
|
||||
#include <epicsRingPointer.h>
|
||||
#include <librdkafka/rdkafka.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* UDP Packet Definitions
|
||||
*/
|
||||
struct __attribute__((__packed__)) UDPHeader {
|
||||
uint16_t BufferLength;
|
||||
uint16_t BufferType;
|
||||
uint16_t HeaderLength;
|
||||
uint16_t BufferNumber;
|
||||
uint16_t RunCmdID;
|
||||
uint16_t Status : 8;
|
||||
uint16_t McpdID : 8;
|
||||
uint16_t TimeStamp[3];
|
||||
uint16_t Parameter0[3];
|
||||
uint16_t Parameter1[3];
|
||||
uint16_t Parameter2[3];
|
||||
uint16_t Parameter3[3];
|
||||
|
||||
inline uint64_t nanosecs() {
|
||||
uint64_t nsec{((uint64_t)TimeStamp[2]) << 32 |
|
||||
((uint64_t)TimeStamp[1]) << 16 | (uint64_t)TimeStamp[0]};
|
||||
return nsec * 100;
|
||||
}
|
||||
};
|
||||
|
||||
struct __attribute__((__packed__)) DetectorEvent {
|
||||
uint64_t TimeStamp : 19;
|
||||
uint16_t XPosition : 10;
|
||||
uint16_t YPosition : 10;
|
||||
uint16_t Amplitude : 8;
|
||||
uint16_t Id : 1;
|
||||
inline uint32_t nanosecs() { return TimeStamp * 100; }
|
||||
};
|
||||
|
||||
struct __attribute__((__packed__)) MonitorEvent {
|
||||
uint64_t TimeStamp : 19;
|
||||
uint64_t Data : 21;
|
||||
uint64_t DataID : 4;
|
||||
uint64_t TriggerID : 3;
|
||||
uint64_t Id : 1;
|
||||
inline uint32_t nanosecs() { return TimeStamp * 100; }
|
||||
};
|
||||
|
||||
/*******************************************************************************
|
||||
* Simplified Event Struct Definition
|
||||
*/
|
||||
struct __attribute__((__packed__)) NormalisedMonitorEvent {
|
||||
uint64_t TimeStamp;
|
||||
uint8_t DataID : 4;
|
||||
@@ -15,27 +60,34 @@ struct __attribute__((__packed__)) NormalisedDetectorEvent {
|
||||
uint32_t PixID;
|
||||
};
|
||||
|
||||
/* These are the drvInfo strings that are used to identify the parameters. */
|
||||
#define P_CountsString "COUNTS%d" /* asynInt32, r/w */
|
||||
/*******************************************************************************
|
||||
* Parameters for use in DB records
|
||||
*
|
||||
* i.e.e drvInfo strings that are used to identify the parameters
|
||||
*/
|
||||
|
||||
#define P_CountsString "COUNTS%d"
|
||||
|
||||
/*******************************************************************************
|
||||
* Stream Generator Coordinating Class
|
||||
*/
|
||||
class asynStreamGeneratorDriver : public asynPortDriver {
|
||||
public:
|
||||
asynStreamGeneratorDriver(const char *portName, const char *ipPortName,
|
||||
const int numChannels);
|
||||
virtual ~asynStreamGeneratorDriver();
|
||||
|
||||
// virtual asynStatus readInt64(asynUser *pasynUser, epicsInt64 *value);
|
||||
// virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
|
||||
|
||||
void receiveUDP();
|
||||
void produceMonitor();
|
||||
void produceDetector();
|
||||
|
||||
protected:
|
||||
// Parameter Identifying IDs
|
||||
int *P_Counts;
|
||||
|
||||
private:
|
||||
asynUser *pasynUDPUser;
|
||||
|
||||
int num_channels;
|
||||
|
||||
epicsRingPointer<NormalisedMonitorEvent> monitorQueue;
|
||||
@@ -43,6 +95,8 @@ class asynStreamGeneratorDriver : public asynPortDriver {
|
||||
|
||||
epicsRingPointer<NormalisedDetectorEvent> detectorQueue;
|
||||
rd_kafka_t *detectorProducer;
|
||||
|
||||
constexpr static char *driverName = "StreamGenerator";
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user