diff options
author | Raptor Engineering Development Team <support@raptorengineering.com> | 2018-02-19 12:48:13 -0600 |
---|---|---|
committer | Raptor Engineering Development Team <support@raptorengineering.com> | 2019-04-19 10:28:12 +0000 |
commit | ab6ce4f51fce943f28bdc3bd0f5e9c463d04e8aa (patch) | |
tree | 0e90821832137fc22974356e39ae96f89a8df899 | |
parent | 5a6be4bf4a770861168ad510c89c382d5fa2b882 (diff) | |
download | blackbird-skeleton-ab6ce4f51fce943f28bdc3bd0f5e9c463d04e8aa.tar.gz blackbird-skeleton-ab6ce4f51fce943f28bdc3bd0f5e9c463d04e8aa.zip |
Fix IPL monitor failure
The I2C bus on which the FPGA resides is somewhat noisy / high traffic. This leads to frequent i2cget failures.
Retry a failed FPGA register access up to 16 times before aborting.
-rw-r--r-- | pyiplledmonitor/ipl_status_led_monitor.py | 36 |
1 files changed, 9 insertions, 27 deletions
diff --git a/pyiplledmonitor/ipl_status_led_monitor.py b/pyiplledmonitor/ipl_status_led_monitor.py index ac3d6ad..a67186a 100644 --- a/pyiplledmonitor/ipl_status_led_monitor.py +++ b/pyiplledmonitor/ipl_status_led_monitor.py @@ -67,34 +67,11 @@ class IPLStatusLEDMonitor(DbusProperties, DbusObjectManager): print "IPLStatusLEDMonitor Init Done" def IPLLEDReadI2CByte(self, byte): + retry_number = 0 retval = 0 - comm_fail = False; - try: - proc = subprocess.Popen(["i2cget", "-y", "12", "0x31", str(byte)], stdout=subprocess.PIPE, stderr=open(os.devnull, 'wb'), shell=False) - (out, err) = proc.communicate() - if (proc.returncode != 0): - comm_fail = True - else: - retval = int(out, 16) - except: - comm_fail = True; - pass - if (comm_fail == True): - comm_fail = False - time.sleep(1) - try: - proc = subprocess.Popen(["i2cget", "-y", "12", "0x31", str(byte)], stdout=subprocess.PIPE, stderr=open(os.devnull, 'wb'), shell=False) - (out, err) = proc.communicate() - if (proc.returncode != 0): - comm_fail = True - else: - retval = int(out, 16) - except: - comm_fail = True; - pass - if (comm_fail == True): - comm_fail = False - time.sleep(1) + comm_fail = True; + while (comm_fail == True): + comm_fail = False; try: proc = subprocess.Popen(["i2cget", "-y", "12", "0x31", str(byte)], stdout=subprocess.PIPE, stderr=open(os.devnull, 'wb'), shell=False) (out, err) = proc.communicate() @@ -105,6 +82,11 @@ class IPLStatusLEDMonitor(DbusProperties, DbusObjectManager): except: comm_fail = True; pass + if (comm_fail == True): + retry_number += 1 + if (retry_number > 16): + break + time.sleep(0.1) return retval def IPLLEDCheckSystem(self): |