cache _cs_cmd because it never changes
authorDan White <dan@whiteaudio.com>
Fri, 13 Jul 2012 03:42:43 +0000 (22:42 -0500)
committerDan White <dan@whiteaudio.com>
Fri, 13 Jul 2012 03:42:43 +0000 (22:42 -0500)
python-lib/usbio.py

index 9257b936899ca78e5b6fcde1499548a80b120c34..ead50e782533b899527ece5ef6345c3f59f411bf 100644 (file)
@@ -370,6 +370,12 @@ class SPI(object):
         self._mode = mode #hack to get an initial value
         self.set_pins(pinstate, pindir)
         self.set_mode(mode)
+
+        #cs doesn't (shouldn't) change, cache the values for SPEED
+        self._cs_cmd_cache = {}
+        for dev in self.cs.keys():
+            self._cs_cmd_cache[dev] = self._cs_cmd(dev)
+
         self.ftdi.usb_purge_buffers(self.context)
 
     def _raw_write(self, data):
@@ -567,16 +573,17 @@ class SPI(object):
         The device is used to select the desired CS pin state as cs_active =
         self.cs[device].
         """
-        cmd = (self._cs_cmd(device) + self._write_cmd(data) +
-                self._cs_cmd('_idle'))
+        cmd = (self._cs_cmd_cache[device] +
+                self._write_cmd(data) +
+                self._cs_cmd_cache['_idle'])
         self._raw_write(cmd)
 
     def read(self, n, device):
         """Read data from the selected device, DO pin stays in its last
         state.
         """
-        cmd = (self._cs_cmd(device) + self._read_cmd(n) +
-                self._cs_cmd('_idle'))
+        cmd = (self._cs_cmd_cache[device] + self._read_cmd(n) +
+                self._cs_cmd_cache['_idle'])
         self._raw_write(cmd)
         return self._raw_read(n)
 
@@ -585,8 +592,9 @@ class SPI(object):
         the current SPI mode.  The device is used to select the desired CS pin
         state as cs_active = self.cs[device].
         """
-        cmd = (self._cs_cmd(device) + self._exchange_cmd(data) +
-                self._cs_cmd('_idle'))
+        cmd = (self._cs_cmd_cache[device] +
+                self._exchange_cmd(data) +
+                self._cs_cmd_cache['_idle'])
         self._raw_write(cmd)
         return self._raw_read(len(data))
 
@@ -1178,7 +1186,7 @@ class DAC8568(object):
         return b
 
     def send(self):
-        self.bus.exchange(str(self), 'dac')
+        self.bus.write(str(self), 'dac')
 
     #
     # internal functions to help construct a command