TX = 1
class Decoder(srd.Decoder):
- api_version = 1
+ api_version = 2
id = 'midi'
name = 'MIDI'
longname = 'Musical Instrument Digital Interface'
self.es_block = None
def start(self):
- # self.out_python = self.register(srd.OUTPUT_PYTHON)
self.out_ann = self.register(srd.OUTPUT_ANN)
def putx(self, data):
c = self.cmd
if len(c) < 3:
return
- self.es_block = self.ss
+ self.es_block = self.es
msg, chan, note, velocity = c[0] & 0xf0, (c[0] & 0x0f) + 1, c[1], c[2]
s = 'note off' if (velocity == 0) else status_bytes[msg]
self.putx([0, ['Channel %d: %s (note = %d, velocity = %d)' % \
def handle_sysrealtime_msg(self, newbyte):
# System realtime message: 0b11111ttt (t = message type)
- self.es_block = self.ss
+ self.es_block = self.es
self.putx([0, ['System realtime message: %s' % status_bytes[newbyte]]])
self.cmd, self.state = [], 'IDLE'
self.ss, self.es = ss, es
+ # We're only interested in the byte value (not individual bits).
+ pdata = pdata[0]
+
# Short MIDI overview:
# - Status bytes are 0x80-0xff, data bytes are 0x00-0x7f.
# - Most messages: 1 status byte, 1-2 data bytes.
self.handle_syscommon_msg(pdata)
elif self.state == 'HANDLE SYSREALTIME MSG':
self.handle_sysrealtime_msg(pdata)
- else:
- raise Exception('Invalid state: %s' % self.state)
-