From 08aa6505581b852964eb72c5a68a11935c76c3d6 Mon Sep 17 00:00:00 2001
From: Gijs Schoonderbeek <schoonderbeek@astron.nl>
Date: Fri, 20 Jan 2023 17:50:33 +0100
Subject: [PATCH] update during testing APSPU from production

---
 APSPU_I2C.py      |  3 ++-
 I2C_serial_pi.py  | 28 +++++++++++++++-------------
 I2C_serial_pi2.py | 17 ++++++++++++++++-
 apspu_lib.py      | 11 +++++++++--
 4 files changed, 42 insertions(+), 17 deletions(-)

diff --git a/APSPU_I2C.py b/APSPU_I2C.py
index 7d3584d..4362f40 100644
--- a/APSPU_I2C.py
+++ b/APSPU_I2C.py
@@ -56,7 +56,8 @@ LP_VOUT_UV_LIMIT = 0x44
 LP_STORE_USER_ALL = 0x15
 LP_ON_OFF_CONFIG = 0x02
 LP_OPERATION = 0x01
-
+LP_WRITE_PROTECT = 0x10
+LP_STORE_DEFAULT_ALL = 0x12
 #
 # Central I2C Devices
 #
diff --git a/I2C_serial_pi.py b/I2C_serial_pi.py
index 6aaa3f5..010041a 100644
--- a/I2C_serial_pi.py
+++ b/I2C_serial_pi.py
@@ -42,11 +42,11 @@ class I2C:
             ret_ack = 1
             if SLOW:
                 sleep(0.2)
-        except IOError, err:
+        except IOError:
             ret_ack = 0
             ret_value = 'ffff'
             if DEBUG:
-                print("Reading error")
+                print("Reading IO-error")
         return ret_ack, ret_value
 
     
@@ -60,27 +60,29 @@ class I2C:
                 ret_ack = 1
                 if SLOW:
                     sleep(0.2)
-            except IOError, err:
+            except IOError:
                 ret_ack = 0
                 rd_value.append(0)
                 if DEBUG:
-                    print("Reading error")
+                    print("IO-Reading error")
         for cnt in range(bytes_to_read):
             ret_value += (hex(rd_value[cnt])[2:])
         return ret_ack,ret_value
   
     def write_bytes(self, register, data):
         bus = smbus.SMBus(self.bus_nr)
+        if type(data) is not list:
+            data = [data]
         try:
-            bus.write_i2c_block_data(self.I2C_Address, register, [data])
+            bus.write_i2c_block_data(self.I2C_Address, register, data)
             ret_ack = 1
             if SLOW:
                 sleep(0.3)
-        except IOError, err:
+        except IOError:
             ret_ack = 0
             ret_value = 0
             if DEBUG:
-                print("Write error")
+                print("Write IO-error")
         return ret_ack
 
     def write_register(self, register):
@@ -90,11 +92,11 @@ class I2C:
             ret_ack = 1
             if SLOW:
                 sleep(0.3)
-        except IOError, err:
+        except IOError:
             ret_ack = 0
             ret_value = 0
             if DEBUG:
-                print("Write error")
+                print("Write IO-error")
         return ret_ack
 
     def write_pointer(self, register):
@@ -104,11 +106,11 @@ class I2C:
             ret_ack = 1
             if SLOW:
                 sleep(0.3)
-        except IOError, err:
+        except IOError:
             ret_ack = 0
             ret_value = 0
             if DEBUG:
-                print("Write error")
+                print("Write IO-error")
         return ret_ack
 
     def ack_check(self):
@@ -119,11 +121,11 @@ class I2C:
             ret_ack = 1
             if SLOW:
                 sleep(0.3)
-        except IOError, err:
+        except IOError:
             ret_ack = 0
             ret_value = 0
             if DEBUG:
-                print("No ACK")
+                print("No ACK IO-Error")
         return ret_ack
 
 if __name__ == "__main__":
diff --git a/I2C_serial_pi2.py b/I2C_serial_pi2.py
index 5ae5af3..4da3bf4 100644
--- a/I2C_serial_pi2.py
+++ b/I2C_serial_pi2.py
@@ -97,7 +97,8 @@ class I2C:
     def write_pointer(self, register):
         bus = pi.i2c_open(self.bus_nr, self.I2C_Address)
         try:
-            pi.i2c_read_device(bus, 1)
+#            pi.i2c_read_device(bus, 1)
+            pi.i2c_read_device(bus, register)
             ret_ack = 1
             if SLOW:
                 sleep(0.3)
@@ -109,6 +110,20 @@ class I2C:
         pi.i2c_close(bus)
         return ret_ack
 
+    def write_register(self, register):
+        bus = pi.i2c_open(self.bus_nr, self.I2C_Address)
+        try:
+            ret_value = pi.i2c_write_device(bus, [register])
+            ret_ack = 1
+            if SLOW:
+                sleep(0.3)
+        except IOError:
+            ret_ack = 0
+            ret_value = 0
+            if DEBUG:
+                print("No ACK")
+        return ret_ack
+
     def ack_check(self):
         bus = smbus.SMBus(self.bus_nr)
         try:
diff --git a/apspu_lib.py b/apspu_lib.py
index 4cb45a8..57e76c9 100644
--- a/apspu_lib.py
+++ b/apspu_lib.py
@@ -25,7 +25,7 @@ from APSPU_I2C import *
 
 
 if os.name == "posix":
-    from I2C_serial_pi2 import *
+    from I2C_serial_pi import *
 else:
     from I2C_serial import *
 
@@ -84,6 +84,7 @@ class ApspuClass:
                       f"set {1.2*VOUT_POLS[pol.name]} read back {ov_out}")
                 exit()
             pol.set_on_off_config()
+            pol.on_off(True)
             pol.write_to_nvm()
         print("Done")
     
@@ -269,6 +270,7 @@ class PolClass:
         #
         ret_ack = False
         if self.status:
+            ret_ack = self.pol_dev.write_bytes(LP_WRITE_PROTECT, [0])
             set_value = int(value * (2**11))
             hex_set_value = hex(set_value)
             wr_value = (hex_set_value[4:6] + hex_set_value[2:4])
@@ -306,7 +308,12 @@ class PolClass:
         #
         # return is always True
         #
-        ret_ack = self.pol_dev.write_bytes(LP_STORE_USER_ALL, 0)
+        ret_ack = self.pol_dev.write_register(0x15) 
+#        command = f"i2cset -y 1 0x{CTR_POLS[self.name]:02X} 0x15 cp" 
+#        print(command)
+#        os.system(command)
+#        os.system(command)
+        sleep(5)
         return True
 
     def read_vin(self):
-- 
GitLab