diff --git a/db/daq_common.db b/db/daq_common.db index ef9f2ee..2f359f1 100644 --- a/db/daq_common.db +++ b/db/daq_common.db @@ -211,6 +211,17 @@ record(ai,"$(INSTR)$(NAME):ELAPSED-TIME") ################################################################################ # Stream Generator Status PVs +record(longin,"$(INSTR)$(NAME):UDP_DROPPED") +{ + field(DESC, "Max Events in Queue") + field(EGU, "Events") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),0,$(TIMEOUT=1)) DROP") + # field(SCAN, "I/O Intr") + field(SCAN, "1 second") + field(PINI, "YES") +} + record(longin,"$(INSTR)$(NAME):UDP_WATERMARK") { field(DESC, "Max Events in Queue") diff --git a/src/asynStreamGeneratorDriver.cpp b/src/asynStreamGeneratorDriver.cpp index 290361f..af9dffd 100644 --- a/src/asynStreamGeneratorDriver.cpp +++ b/src/asynStreamGeneratorDriver.cpp @@ -167,6 +167,7 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver( status = createInt32Param(status, pv_name_buffer, P_ClearCounts + i); } + status = createInt32Param(status, P_UdpDroppedString, &P_UdpDropped); status = createInt32Param(status, P_UdpQueueHighWaterMarkString, &P_UdpQueueHighWaterMark); status = createInt32Param(status, P_SortedQueueHighWaterMarkString, @@ -438,6 +439,8 @@ void asynStreamGeneratorDriver::receiveUDP() { lastBufferNumber[i] = 0; } + epicsInt32 droppedMessages = 0; + NormalisedEvent ne; while (true) { @@ -472,6 +475,7 @@ void asynStreamGeneratorDriver::receiveUDP() { ", last: %" PRIu64 "\n", driverName, functionName, header->McpdID, header->BufferNumber, lastBufferNumber[header->McpdID]); + setIntegerParam(P_UdpDropped, ++droppedMessages); } lastBufferNumber[header->McpdID] = header->BufferNumber; diff --git a/src/asynStreamGeneratorDriver.h b/src/asynStreamGeneratorDriver.h index f4d61b8..f1c5cf4 100644 --- a/src/asynStreamGeneratorDriver.h +++ b/src/asynStreamGeneratorDriver.h @@ -96,6 +96,7 @@ struct __attribute__((__packed__)) NormalisedEvent { #define P_RateString "RATE%d" #define P_ClearCountsString "C_%d" +#define P_UdpDroppedString "DROP" #define P_UdpQueueHighWaterMarkString "UDP" #define P_SortedQueueHighWaterMarkString "SORT" @@ -139,6 +140,7 @@ class asynStreamGeneratorDriver : public asynPortDriver { int *P_ClearCounts; // System Status Parameter Identifying IDs + int P_UdpDropped; int P_UdpQueueHighWaterMark; int P_SortedQueueHighWaterMark;