Merge pull request #3 from dhalbert/delay-packet_size

Don't allocate packet buf until connected
This commit is contained in:
Scott Shawcroft 2020-05-04 15:04:28 -07:00 committed by GitHub
commit d7cd19d5bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View file

@ -79,7 +79,8 @@ class MIDIService(Service):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._in_buffer = bytearray(self._raw.packet_size)
# Defer creating _in_buffer until we're definitely connected.
self._in_buffer = None
self._out_buffer = None
shared_buffer = memoryview(bytearray(4))
self._buffers = [
@ -102,6 +103,8 @@ class MIDIService(Service):
"""Reads up to ``length`` bytes into ``buf`` starting at index 0.
Returns the number of bytes written into ``buf``."""
if self._in_buffer is None:
self._in_buffer = bytearray(self._raw.packet_size)
i = 0
while i < length:
if self._in_index < self._in_length:
@ -119,8 +122,6 @@ class MIDIService(Service):
buf[i] = byte
i += 1
else:
if len(self._in_buffer) < self._raw.packet_size:
self._in_buffer = bytearray(self._raw.packet_size)
self._in_length = self._raw.readinto(self._in_buffer)
if self._in_length == 0:
break
@ -168,7 +169,7 @@ class MIDIService(Service):
if self._message_target_length:
self._pending_realtime = b
else:
self._raw.write(b, self._header)
self._raw.write(b, header=self._header)
else:
if (
0x80 <= data <= 0xBF or 0xE0 <= data <= 0xEF or data == 0xF2

View file

@ -33,6 +33,13 @@ while True:
while not ble.connected:
pass
print("Connected")
# Sleep briefly so client can get ready and send setup
# writes to the MIDIService. 0.5secs was insufficient.
time.sleep(1.0)
# Send one unique NoteOn/Off at the beginning to check that the
# delay is sufficient.
midi.send(NoteOn(20, 99))
midi.send(NoteOff(20, 99))
while ble.connected:
midi.send(NoteOn(44, 120)) # G sharp 2nd octave
time.sleep(0.25)