-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Description
I was using USB-device-midi to send MTC to the host, which is essentially SysEx. But was slowed by the missing helper function to send the packet of SysEx. Anyhow, I wrote one...
Full example script here:
https://github.com/orgs/micropython/discussions/18450#discussioncomment-15043069
Happy to share with the project
def send_sysex(self, p):
# start of SysEx packet
if len(p) > 3:
w = self._tx.pend_write()
if len(w) < 4:
return False # TX buffer is full. TODO: block here?
w[0] = 0x4 # _CIN_SYSEX_START
w[1] = p[0]
w[2] = p[1]
w[3] = p[2]
self._tx.finish_write(4)
self._tx_xfer()
p = p[3:]
# play out til end
while p:
if len(p) > 2:
w = self._tx.pend_write()
if len(w) < 4:
return False # TX buffer is full. TODO: block here?
w[0] = 0x7 # _CIN_SYSEX_END_3BYTE
w[1] = p[0]
w[2] = p[1]
w[3] = p[2]
self._tx.finish_write(4)
self._tx_xfer()
p = p[3:]
elif len(p) > 1:
w = self._tx.pend_write()
if len(w) < 4:
return False # TX buffer is full. TODO: block here?
w[0] = 0x6 # _CIN_SYSEX_END_2BYTE
w[1] = p[0]
w[2] = p[1]
w[3] = 0
self._tx.finish_write(4)
self._tx_xfer()
p = p[2:]
else:
w = self._tx.pend_write()
if len(w) < 4:
return False # TX buffer is full. TODO: block here?
w[0] = 0x5 # _CIN_SYSEX_END_1BYTE
w[1] = p[0]
w[2] = 0
w[3] = 0
self._tx.finish_write(4)
self._tx_xfer()
p = p[1:]
return True
Metadata
Metadata
Assignees
Labels
No labels