check for udp packets being missed
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user