@@ -52,8 +52,10 @@ public class Cm19Manager
5252 private readonly object waitAckMonitor = new object ( ) ;
5353
5454 // Variables used for preventing duplicated messages coming from RF
55+ private const uint RfRepeatGap = 150 ;
5556 private DateTime firstRfReceivedTs = DateTime . Now ;
5657 private DateTime lastRfReceivedTs = DateTime . Now ;
58+ private DateTime lastRfRepeatedTs = DateTime . Now ;
5759 private string lastRfMessage = "" ;
5860
5961 // Read/Write error state variable
@@ -457,22 +459,24 @@ private void ReaderTask()
457459 // Repeated messages check
458460 if ( message . MessageType != RfMessageType . NotSet )
459461 {
460- if ( lastRfMessage == BitConverter . ToString ( readData ) )
462+ if ( lastRfMessage == BitConverter . ToString ( readData ) && ( DateTime . Now - lastRfReceivedTs ) . TotalMilliseconds < RfRepeatGap )
461463 {
462- if ( ( DateTime . Now - lastRfReceivedTs ) . TotalMilliseconds < 150 )
464+ if ( ( DateTime . Now - lastRfRepeatedTs ) . TotalMilliseconds < RfRepeatGap )
463465 {
464- logger . Warn ( "Ignoring repeated message within {0}ms" , 150 ) ;
466+ logger . Warn ( "Ignoring repeated message within {0}ms" , RfRepeatGap ) ;
465467 if ( ( DateTime . Now - firstRfReceivedTs ) . TotalMilliseconds <= MinRfRepeatDelayMs )
466468 {
467- lastRfReceivedTs = DateTime . Now ;
469+ lastRfRepeatedTs = DateTime . Now ;
468470 }
471+ lastRfReceivedTs = DateTime . Now ;
469472 continue ;
470473 }
471474 }
472475 else
473476 {
474- firstRfReceivedTs = lastRfReceivedTs = DateTime . Now ;
477+ firstRfReceivedTs = lastRfRepeatedTs = DateTime . Now ;
475478 }
479+ lastRfReceivedTs = DateTime . Now ;
476480 lastRfMessage = BitConverter . ToString ( readData ) ;
477481 }
478482
0 commit comments