check for udp packets being missed

This commit is contained in:
2025-11-04 17:01:18 +01:00
parent 1ce7f93e95
commit 056b0a5f8a
2 changed files with 29 additions and 6 deletions

View File

@@ -208,7 +208,7 @@ asynStreamGeneratorDriver::asynStreamGeneratorDriver(
/* Create the thread that orders the events and acts as our sinqDaq stand-in
*/
status = (asynStatus)(epicsThreadCreate(
"sinqDAQ", epicsThreadPriorityMedium,
"sinqDAQ", epicsThreadPriorityMax,
epicsThreadGetStackSize(epicsThreadStackMedium),
(EPICSTHREADFUNC)::daqTask, this) == NULL);
if (status) {
@@ -362,7 +362,7 @@ void asynStreamGeneratorDriver::receiveUDP() {
char buffer[bufferSize];
// We have 10 mcpdids
uint64_t lastBufferNumber* = new uint64_t[10];
uint64_t *lastBufferNumber = new uint64_t[10];
for (size_t i = 0; i < 10; ++i) {
lastBufferNumber[i] = 0;
}
@@ -388,6 +388,20 @@ void asynStreamGeneratorDriver::receiveUDP() {
if (received == total_events * 6 + 42) {
if (header->BufferNumber - lastBufferNumber[header->McpdID] >
1 &&
lastBufferNumber[header->McpdID] !=
std::numeric_limits<
decltype(header->BufferNumber)>::max()) {
asynPrint(
pasynUserSelf, ASYN_TRACE_ERROR,
"%s:%s: missed packet on id: %d. Received: %" PRIu64
", last: %" PRIu64 "\n",
driverName, functionName, header->McpdID,
header->BufferNumber, lastBufferNumber[header->McpdID]);
}
lastBufferNumber[header->McpdID] = header->BufferNumber;
for (std::size_t i = 0; i < total_events; ++i) {
char *event = (buffer + 21 * 2 + i * 6);