From 9ee75b7c591c985a656100f7febbd6da0f9caa79 Mon Sep 17 00:00:00 2001
From: Lucio Zambon <lucio.zambon@elettra.eu>
Date: Wed, 19 Jan 2022 03:05:33 +0100
Subject: [PATCH] purge spurious read

---
 src/Fug.cpp       |  4 ++--
 src/Fug.h         |  1 +
 src/fugthread.cpp | 10 ++++++++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/Fug.cpp b/src/Fug.cpp
index fed09d0..5fc8e20 100644
--- a/src/Fug.cpp
+++ b/src/Fug.cpp
@@ -402,10 +402,10 @@ void Fug::read_MaxDiffVoltage(Tango::Attribute &attr) {
       << "Fug::read_MaxDiffVoltage(Tango::Attribute &attr) entering... "
       << endl;
 
-  if (*attr_MaxDiffVoltage_read == -1) {
+  if (*attr_MaxDiffVoltage_read < -1*MAX_RETRY) {
     Tango::Except::throw_exception(
         static_cast<const char *>("Error reading max diff voltage"),
-        static_cast<const char *>("Buffer not ready"),
+        static_cast<const char *>("Error reading max voltage"),
         static_cast<const char *>("Fug::read_MaxDiffVoltage"), Tango::ERR);
   }
 
diff --git a/src/Fug.h b/src/Fug.h
index 55ed007..ca2293d 100644
--- a/src/Fug.h
+++ b/src/Fug.h
@@ -36,6 +36,7 @@
 #define FUG_SER_TOUT 150 //ms.
 #define FUG_SER_SLEEP 80 //ms.
 #define FUG_MSG_LEN 80
+#define MAX_RETRY 50
 
 #define FUG_MAX_DIFF_BUFFER 1000
 
diff --git a/src/fugthread.cpp b/src/fugthread.cpp
index 4da9b7c..661830c 100644
--- a/src/fugthread.cpp
+++ b/src/fugthread.cpp
@@ -206,7 +206,10 @@ int fugthread::MaxVoltageDiff(void)
 			*myfug->attr_MaxDiffVoltage_read = max_tmp_diff;
 		}
 		else {
-			*myfug->attr_MaxDiffVoltage_read = -1; /* invalid value */
+			if (*myfug->attr_MaxDiffVoltage_read < 0) 
+				*myfug->attr_MaxDiffVoltage_read--;
+			else
+				*myfug->attr_MaxDiffVoltage_read = -1; /* invalid value */
 		}
 
 		myfug->fug_buf_idx++;
@@ -216,7 +219,10 @@ int fugthread::MaxVoltageDiff(void)
 		
 	}
 	else {
-		*myfug->attr_MaxDiffVoltage_read = -1; /* invalid value */
+		if (*myfug->attr_MaxDiffVoltage_read < 0) 
+			*myfug->attr_MaxDiffVoltage_read--;
+		else
+			*myfug->attr_MaxDiffVoltage_read = -1; /* invalid value */
 	}
 		
 	return 0;
-- 
GitLab