From 77ed74a203dbbeba599ac7499099227133338da4 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Fri, 7 Nov 2025 14:05:37 +0100 Subject: [PATCH] returns elapsed time as a double --- db/daq_common.db | 2 +- src/asynStreamGeneratorDriver.cpp | 17 ++++++++++++----- src/asynStreamGeneratorDriver.h | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/db/daq_common.db b/db/daq_common.db index 2f359f1..f564816 100644 --- a/db/daq_common.db +++ b/db/daq_common.db @@ -200,7 +200,7 @@ record(ai,"$(INSTR)$(NAME):ELAPSED-TIME") { field(DESC, "DAQ Measured Time") field(EGU, "sec") - field(DTYP, "asynInt32") + field(DTYP, "asynFloat64") field(INP, "@asyn($(PORT),0,$(TIMEOUT=1)) TIME") # field(SCAN, "I/O Intr") field(SCAN, ".5 second") diff --git a/src/asynStreamGeneratorDriver.cpp b/src/asynStreamGeneratorDriver.cpp index af9dffd..767a108 100644 --- a/src/asynStreamGeneratorDriver.cpp +++ b/src/asynStreamGeneratorDriver.cpp @@ -90,12 +90,19 @@ static void detectorProducerTask(void *drvPvt) { */ asynStatus asynStreamGeneratorDriver::createInt32Param( - // TODO should show error if there is one asynStatus status, char *name, int *variable, epicsInt32 initialValue) { + // TODO should show error if there is one return (asynStatus)(status | createParam(name, asynParamInt32, variable) | setIntegerParam(*variable, initialValue)); } +asynStatus asynStreamGeneratorDriver::createFloat64Param( + asynStatus status, char *name, int *variable, double initialValue) { + // TODO should show error if there is one + return (asynStatus)(status | createParam(name, asynParamFloat64, variable) | + setDoubleParam(*variable, initialValue)); +} + /******************************************************************************* * Stream Generator Methods */ @@ -106,9 +113,9 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver( const char *detectorTopic, const int kafkaQueueSize, const int kafkaMaxPacketSize) : asynPortDriver(portName, 1, /* maxAddr */ - asynInt32Mask | asynInt64Mask | + asynInt32Mask | asynFloat64Mask | asynDrvUserMask, /* Interface mask */ - asynInt32Mask | asynInt64Mask, /* Interrupt mask */ + asynInt32Mask, // | asynFloat64Mask, /* Interrupt mask */ 0, /* asynFlags. This driver does not block and it is not multi-device, but has a destructor ASYN_DESTRUCTIBLE our version of the Asyn @@ -139,7 +146,7 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver( status = createInt32Param(status, P_StopString, &P_Stop); status = createInt32Param(status, P_CountPresetString, &P_CountPreset); status = createInt32Param(status, P_TimePresetString, &P_TimePreset); - status = createInt32Param(status, P_ElapsedTimeString, &P_ElapsedTime); + status = createFloat64Param(status, P_ElapsedTimeString, &P_ElapsedTime); status = createInt32Param(status, P_ClearElapsedTimeString, &P_ClearElapsedTime); status = @@ -688,7 +695,7 @@ void asynStreamGeneratorDriver::processEvents() { for (size_t i = 0; i < num_channels; ++i) { setIntegerParam(P_Counts[i], counts[i]); } - setIntegerParam(P_ElapsedTime, (epicsInt32)elapsedSeconds); + setDoubleParam(P_ElapsedTime, elapsedSeconds); if ((countPreset && counts[presetChannel] >= countPreset) || (timePreset && elapsedSeconds > (double)timePreset)) { diff --git a/src/asynStreamGeneratorDriver.h b/src/asynStreamGeneratorDriver.h index f1c5cf4..d986b02 100644 --- a/src/asynStreamGeneratorDriver.h +++ b/src/asynStreamGeneratorDriver.h @@ -168,6 +168,8 @@ class asynStreamGeneratorDriver : public asynPortDriver { asynStatus createInt32Param(asynStatus status, char *name, int *variable, epicsInt32 initialValue = 0); + asynStatus createFloat64Param(asynStatus status, char *name, int *variable, double initialValue = 0); + inline void queueForKafka(NormalisedEvent &ne); void produce(epicsRingBytesId eventQueue, rd_kafka_t *kafkaProducer,