comparison bcf2000.py @ 2012:0bb08e887166

bcf2000 python 3 support Ignore-this: 2f78d9c590846a357876afc5116aaa5d
author drewp@bigasterisk.com
date Mon, 10 Jun 2019 02:19:59 +0000
parents f001d689b3e2
children 02eb0e99bba5
comparison
equal deleted inserted replaced
2011:9b5e313d6dfc 2012:0bb08e887166
36 once as C0D0. It should be autodetected""" 36 once as C0D0. It should be autodetected"""
37 self.devPath = dev 37 self.devPath = dev
38 self.dev = None 38 self.dev = None
39 self.lastValue: Dict[str, int] = {} # control name : value 39 self.lastValue: Dict[str, int] = {} # control name : value
40 self.reopen() 40 self.reopen()
41 self.packet = "" 41 self.packet = b""
42 loop = LoopingCall(self.poll) 42 loop = LoopingCall(self.poll)
43 loop.start(.01) 43 loop.start(.01)
44 44
45 def poll(self): 45 def poll(self):
46 try: 46 try:
47 bytes = self.dev.read(3) 47 newData = self.dev.read(3)
48 except (IOError, AttributeError): 48 except (IOError, AttributeError):
49 return 49 return
50 if len(bytes) == 0: 50 if newData is None:
51 print("midi stall, reopen slider device")
52 self.reopen()
53 return 51 return
54 self.packet += bytes 52 self.packet += newData
55 if len(self.packet) == 3: 53 if len(self.packet) == 3:
56 p = self.packet 54 p = self.packet
57 self.packet = "" 55 self.packet = b""
58 self.packetReceived(p) 56 self.packetReceived(p)
59 57
60 def packetReceived(self, packet): 58 def packetReceived(self, packet):
61 b0, which, value = [ord(b) for b in packet] 59 b0, which, value = packet
62 if b0 != 0xb0: 60 if b0 != 0xb0:
63 return 61 return
64 if which in self.control: 62 if which in self.control:
65 name = self.control[which] 63 name = self.control[which]
66 if name.startswith("button-"): 64 if name.startswith("button-"):
76 self.dev.close() 74 self.dev.close()
77 except IOError: 75 except IOError:
78 pass 76 pass
79 77
80 self.lastValue.clear() 78 self.lastValue.clear()
81 self.dev = open(self.devPath, "r+") 79 self.dev = open(self.devPath, "rb+", buffering=0)
82 twisted.internet.fdesc.setNonBlocking(self.dev) 80 twisted.internet.fdesc.setNonBlocking(self.dev)
83 81
84 def valueIn(self, name, value): 82 def valueIn(self, name, value):
85 """override this with your handler for when events come in 83 """override this with your handler for when events come in
86 from the hardware""" 84 from the hardware"""
105 which = [k for k,v in list(self.control.items()) if v == name] 103 which = [k for k,v in list(self.control.items()) if v == name]
106 assert len(which) == 1, "unknown control name %r" % name 104 assert len(which) == 1, "unknown control name %r" % name
107 if name.startswith('button-'): 105 if name.startswith('button-'):
108 value = value * 127 106 value = value * 127
109 #print "bcf: write %s %s" % (name, value) 107 #print "bcf: write %s %s" % (name, value)
110 self.dev.write(chr(0xb0) + chr(which[0]) + chr(int(value))) 108 self.dev.write(bytes([0xb0, which[0], int(value)]))
111 109
112 def close(self): 110 def close(self):
113 self.dev.close() 111 self.dev.close()
114 self.dev = None 112 self.dev = None
115 113