From d9d5f67f202129d724959e8105b0a307d10f7c6f Mon Sep 17 00:00:00 2001
From: kruger <kruger@astron.nl>
Date: Mon, 14 Mar 2022 15:46:28 +0100
Subject: [PATCH] i2C retry for HBA BF coefficients

---
 i2cserv/hba1.py | 11 +++++++----
 i2cserv/i2c.py  |  6 +++++-
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/i2cserv/hba1.py b/i2cserv/hba1.py
index 152c6a5..25b13af 100644
--- a/i2cserv/hba1.py
+++ b/i2cserv/hba1.py
@@ -57,11 +57,14 @@ class hba1(hwdev):
       logging.debug("SetHba addr=0x%x reg=0x%x",addr,reg)
       I2Ccallback=self.conf['parentcls'].i2csetget
       I2Ccallback(0x40,[0],read=1)#wakeup, do nothing
-      #sleep(0.01) 
-      I2Ccallback(addr,data[:16],reg=reg)
+#      sleep(0.005) 
+      retry=0;
+      while not(I2Ccallback(addr,data[:16],reg=reg)) and (retry<2): retry+=1;
+      if retry==2: logging.warn("uC BF comm error");
       if len(data)>16:
-        #sleep(0.01) 
-        I2Ccallback(addr,data[16:],reg=reg+16)
+#        sleep(0.005) 
+        while not(I2Ccallback(addr,data[16:],reg=reg+16)) and (retry<2): retry+=1;
+        if retry>=2: logging.warn("uC BF comm error2");
       #sleep(0.01) 
       return True
 
diff --git a/i2cserv/i2c.py b/i2cserv/i2c.py
index 7376df4..a902c7f 100644
--- a/i2cserv/i2c.py
+++ b/i2cserv/i2c.py
@@ -41,7 +41,11 @@ class i2c(hwdev):
                             bus.iaddr_bytes=0
                             reg=0;
                      logging.debug(str(("I2C set",addr,reg,bytes(bytearray(data)),read)))
-                     bus.ioctl_write(reg,bytes(bytearray(data)))
+                     TXlen=bus.ioctl_write(reg,bytes(bytearray(data)))
+                     if TXlen<0:
+                          bus.close;
+                          return False;
+                     if (TXlen!=len(data)): logging.warn("I2C write error %i/%i"%(TXlen,len(data)))
               bus.close()
               return True;
        except:
-- 
GitLab