]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Add a singleton Connection class to get the same object instance of the binho nova...
authorFrancis Guevarra <francis@binho.io>
Fri, 22 Nov 2019 00:23:37 +0000 (16:23 -0800)
committerFrancis Guevarra <francis@binho.io>
Tue, 3 Dec 2019 01:23:47 +0000 (17:23 -0800)
src/adafruit_blinka/microcontroller/nova/__init__.py
src/adafruit_blinka/microcontroller/nova/i2c.py
src/adafruit_blinka/microcontroller/nova/pin.py
src/adafruit_blinka/microcontroller/nova/pwmout.py
src/adafruit_blinka/microcontroller/nova/spi.py

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c3aec31641d139a9caa1b3b6d79a71c6da7f003c 100644 (file)
@@ -0,0 +1,24 @@
+class Connection:
+    __instance = None
+    @staticmethod
+    def getInstance():
+        """ Static access method. """
+        if Connection.__instance == None:
+            Connection()
+        return Connection.__instance
+
+    def __init__(self):
+        """ Virtually private constructor. """
+        if Connection.__instance != None:
+            raise Exception("This class is a singleton!")
+        else:
+            from binhoHostAdapter import binhoHostAdapter
+            from binhoHostAdapter import binhoUtilities
+
+            utilities = binhoUtilities.binhoUtilities()
+            devices = utilities.listAvailableDevices()
+
+            if len(devices) > 0:
+                Connection.__instance = binhoHostAdapter.binhoHostAdapter(devices[0])
+            else:
+                raise RuntimeError('No Binho host adapter found!')
\ No newline at end of file
index bf36e2acd455b630e346b536d33d827159a0d283..f5ee718edaca00682ff64c25d08ae129189e88c0 100644 (file)
@@ -1,25 +1,12 @@
-#from adafruit_blinka.microcontroller.nova.pin import Pin
-
 class I2C:
 
     def __init__(self):
 class I2C:
 
     def __init__(self):
-        # change GPIO controller to I2C
-        from binhoHostAdapter import binhoHostAdapter
-        from binhoHostAdapter import binhoUtilities
-
-        utilities = binhoUtilities.binhoUtilities()
-        devices = utilities.listAvailableDevices()
-
-        if len(devices) > 0:
-
-            self._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
-            self._nova.setNumericalBase(10)
-            self._nova.setOperationMode(0, "I2C")
-            self._nova.setPullUpStateI2C(0, "EN")
-            self._nova.setClockI2C(0, 400000)
-
-        else:
-            raise RuntimeError('No Binho host adapter found!')
+        from adafruit_blinka.microcontroller.nova import Connection
+        self._nova = Connection.getInstance()
+        self._nova.setNumericalBase(10)
+        self._nova.setOperationMode(0, "I2C")
+        self._nova.setPullUpStateI2C(0, "EN")
+        self._nova.setClockI2C(0, 400000)
 
     def scan(self):
 
 
     def scan(self):
 
index 320e67ba7394f428dc33373dcb8c990741b9bf64..5a58372150b7929f1fca72f602f3b5202f9a7767 100644 (file)
@@ -13,14 +13,8 @@ class Pin:
 
     def __init__(self, pin_id=None):
         if not Pin._nova:
 
     def __init__(self, pin_id=None):
         if not Pin._nova:
-            from binhoHostAdapter import binhoHostAdapter
-            from binhoHostAdapter import binhoUtilities
-
-            utilities = binhoUtilities.binhoUtilities()
-            devices = utilities.listAvailableDevices()
-
-            if len(devices) > 0:
-                Pin._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
+            from adafruit_blinka.microcontroller.nova import Connection
+            Pin._nova = Connection.getInstance()
         # check if pin is valid
         if pin_id > 4:
             raise ValueError("Invalid pin {}.".format(pin_id))
         # check if pin is valid
         if pin_id > 4:
             raise ValueError("Invalid pin {}.".format(pin_id))
@@ -55,9 +49,9 @@ IO3 = Pin(3)
 IO4 = Pin(4)
 
 PWM0 = IO0
 IO4 = Pin(4)
 
 PWM0 = IO0
-PWM1 = IO1
+# No PWM support on IO1
 PWM2 = IO2
 PWM2 = IO2
-# No PWM support on IO3
+PWM3 = IO3
 PWM4 = IO4
 
 PWM4 = IO4
 
-pwmOuts = ( ((1, 0), PWM0), ((1, 1), PWM1), ((1, 2), PWM2), ((1, 4), PWM4) )
\ No newline at end of file
+pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) )
\ No newline at end of file
index 57aa0e514d561a1425f052001f24b28fe8eaea23..2f4e4b563672578ac050f9159d69e56e5cd8ddd3 100644 (file)
@@ -38,20 +38,8 @@ class PWMOut(object):
 
         """
         if PWMOut._nova is None:
 
         """
         if PWMOut._nova is None:
-            if Pin._nova is not None:
-                # check if Pin already connected to Binho Nova
-                PWMOut._nova = Pin._nova
-            else:
-                from binhoHostAdapter import binhoHostAdapter
-                from binhoHostAdapter import binhoUtilities
-
-                utilities = binhoUtilities.binhoUtilities()
-                devices = utilities.listAvailableDevices()
-
-                if len(devices) > 0:
-                    PWMOut._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
-                else:
-                    raise RuntimeError('No Binho Host Adapter found!')
+            from adafruit_blinka.microcontroller.nova import Connection
+            PWMOut._nova = Connection.getInstance()
 
         self._pwmpin = None
         self._open(pin, duty_cycle, frequency, variable_frequency)
 
         self._pwmpin = None
         self._open(pin, duty_cycle, frequency, variable_frequency)
@@ -80,7 +68,6 @@ class PWMOut(object):
 
         # set frequency
         self.frequency = freq
 
         # set frequency
         self.frequency = freq
-        PWMOut._nova.setIOpinPWMFreq(self._pwmpin, self.frequency)
         # set period
         self._period = self._get_period()
 
         # set period
         self._period = self._get_period()
 
@@ -95,14 +82,7 @@ class PWMOut(object):
         if self._channel is not None:
             #self.duty_cycle = 0
             self._set_enabled(False) # make to disable before unexport
         if self._channel is not None:
             #self.duty_cycle = 0
             self._set_enabled(False) # make to disable before unexport
-            """
-            try:
-                #unexport_path = os.path.join(channel_path, self._unexport_path)
-                with open(os.path.join(channel_path, self._unexport_path), "w") as f_unexport:
-                    f_unexport.write("%d\n" % self._pwmpin)
-            except IOError as e:
-                raise PWMError(e.errno, "Unexporting PWM pin: " + e.strerror)
-                """
+
       except Exception as e:
           # due to a race condition for which I have not yet been
           # able to find the root cause, deinit() often fails
       except Exception as e:
           # due to a race condition for which I have not yet been
           # able to find the root cause, deinit() often fails
index d92d2d7698eaf877d6468a5d6191302b9012e3b0..0088ef250adbdcef5856833ac52e026718a2603e 100644 (file)
@@ -1,32 +1,21 @@
-#from adafruit_blinka.microcontroller.nova.pin import Pin
-
 class SPI:
     PAYLOAD_MAX_LENGTH = 64
 
     def __init__(self, clock):
 class SPI:
     PAYLOAD_MAX_LENGTH = 64
 
     def __init__(self, clock):
-        from binhoHostAdapter import binhoHostAdapter
-        from binhoHostAdapter import binhoUtilities
-
-        utilities = binhoUtilities.binhoUtilities()
-        devices = utilities.listAvailableDevices()
-
-        if len(devices) > 0:
-            self._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
-            self._nova.setOperationMode(0, 'SPI')
-            self._nova.setClockSPI(0, clock)
-            self._nova.setModeSPI(0, 0)
-            self._nova.setIOpinMode(0, 'DOUT')
-            self._nova.setIOpinValue(0, 'HIGH')
-            self._nova.beginSPI(0)
-            # Cpol and Cpha set by mode
-            # Mode  Cpol Cpha
-            #  0     0    0
-            #  1     0    1
-            #  2     1    0
-            #  3     1    1
-
-        else:
-            raise RuntimeError('No Binho host adapter found!')
+        from adafruit_blinka.microcontroller.nova import Connection
+        self._nova = Connection.getInstance()
+        self._nova.setOperationMode(0, 'SPI')
+        self._nova.setClockSPI(0, clock)
+        self._nova.setModeSPI(0, 0)
+        self._nova.setIOpinMode(0, 'DOUT')
+        self._nova.setIOpinValue(0, 'HIGH')
+        self._nova.beginSPI(0)
+        # Cpol and Cpha set by mode
+        # Mode  Cpol Cpha
+        #  0     0    0
+        #  1     0    1
+        #  2     1    0
+        #  3     1    1
 
     def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
                   firstbit=MSB, sck=None, mosi=None, miso=None):
 
     def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
                   firstbit=MSB, sck=None, mosi=None, miso=None):