Mercurial > code > home > repos > light9
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 |