Skip to content

Don't allocate packet buf until connected #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions adafruit_ble_midi.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand All @@ -102,6 +103,8 @@ def readinto(self, buf, length):
"""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:
Expand All @@ -119,8 +122,6 @@ def readinto(self, buf, length):
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
Expand Down Expand Up @@ -168,7 +169,7 @@ def write(self, buf, length):
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
Expand Down
7 changes: 7 additions & 0 deletions examples/ble_midi_simpletest.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
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)
Expand Down