reorganises and cleans up some parts of the code

This commit is contained in:
2025-10-31 10:16:50 +01:00
parent 750436732c
commit d7bf3977fc
4 changed files with 170 additions and 176 deletions

View File

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