changeset 2012:0bb08e887166

bcf2000 python 3 support Ignore-this: 2f78d9c590846a357876afc5116aaa5d
author drewp@bigasterisk.com
date Mon, 10 Jun 2019 02:19:59 +0000
parents 9b5e313d6dfc
children 02eb0e99bba5
files bcf2000.py
diffstat 1 files changed, 8 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/bcf2000.py	Mon Jun 10 02:14:25 2019 +0000
+++ b/bcf2000.py	Mon Jun 10 02:19:59 2019 +0000
@@ -38,27 +38,25 @@
         self.dev = None
         self.lastValue: Dict[str, int] = {} # control name : value
         self.reopen()
-        self.packet = ""
+        self.packet = b""
         loop = LoopingCall(self.poll)
         loop.start(.01)
 
     def poll(self):
         try:
-            bytes = self.dev.read(3)
+            newData = self.dev.read(3)
         except (IOError, AttributeError):
             return
-        if len(bytes) == 0:
-            print("midi stall, reopen slider device")
-            self.reopen()
+        if newData is None:
             return
-        self.packet += bytes
+        self.packet += newData
         if len(self.packet) == 3:
             p = self.packet
-            self.packet = ""
+            self.packet = b""
             self.packetReceived(p)
 
     def packetReceived(self, packet):
-        b0, which, value = [ord(b) for b in packet]
+        b0, which, value = packet
         if b0 != 0xb0:
             return
         if which in self.control:
@@ -78,7 +76,7 @@
                 pass
 
         self.lastValue.clear()
-        self.dev = open(self.devPath, "r+")
+        self.dev = open(self.devPath, "rb+", buffering=0)
         twisted.internet.fdesc.setNonBlocking(self.dev)
                     
     def valueIn(self, name, value):
@@ -107,7 +105,7 @@
         if name.startswith('button-'):
             value = value * 127
         #print "bcf: write %s %s" % (name, value)
-        self.dev.write(chr(0xb0) + chr(which[0]) + chr(int(value)))
+        self.dev.write(bytes([0xb0, which[0], int(value)]))
 
     def close(self):
         self.dev.close()