diff --git a/i2cserv/hba1.py b/i2cserv/hba1.py index 152c6a5850eed4581f4d846317edb05eaa7b8ee5..25b13aff3f5c04ef46a3a155b39aeec01528be5c 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 7376df4c09e49bd111e24876af4e70b99ea96df4..a902c7fe25226fe46a2bbb2053e2b58ae49ddb03 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: