Skip to content

Commit d7cd19d

Browse files
authored
Merge pull request #3 from dhalbert/delay-packet_size
Don't allocate packet buf until connected
2 parents 0f54db3 + cda65d3 commit d7cd19d

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

adafruit_ble_midi.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ class MIDIService(Service):
7979

8080
def __init__(self, **kwargs):
8181
super().__init__(**kwargs)
82-
self._in_buffer = bytearray(self._raw.packet_size)
82+
# Defer creating _in_buffer until we're definitely connected.
83+
self._in_buffer = None
8384
self._out_buffer = None
8485
shared_buffer = memoryview(bytearray(4))
8586
self._buffers = [
@@ -102,6 +103,8 @@ def readinto(self, buf, length):
102103
"""Reads up to ``length`` bytes into ``buf`` starting at index 0.
103104
104105
Returns the number of bytes written into ``buf``."""
106+
if self._in_buffer is None:
107+
self._in_buffer = bytearray(self._raw.packet_size)
105108
i = 0
106109
while i < length:
107110
if self._in_index < self._in_length:
@@ -119,8 +122,6 @@ def readinto(self, buf, length):
119122
buf[i] = byte
120123
i += 1
121124
else:
122-
if len(self._in_buffer) < self._raw.packet_size:
123-
self._in_buffer = bytearray(self._raw.packet_size)
124125
self._in_length = self._raw.readinto(self._in_buffer)
125126
if self._in_length == 0:
126127
break
@@ -168,7 +169,7 @@ def write(self, buf, length):
168169
if self._message_target_length:
169170
self._pending_realtime = b
170171
else:
171-
self._raw.write(b, self._header)
172+
self._raw.write(b, header=self._header)
172173
else:
173174
if (
174175
0x80 <= data <= 0xBF or 0xE0 <= data <= 0xEF or data == 0xF2

examples/ble_midi_simpletest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@
3333
while not ble.connected:
3434
pass
3535
print("Connected")
36+
# Sleep briefly so client can get ready and send setup
37+
# writes to the MIDIService. 0.5secs was insufficient.
38+
time.sleep(1.0)
39+
# Send one unique NoteOn/Off at the beginning to check that the
40+
# delay is sufficient.
41+
midi.send(NoteOn(20, 99))
42+
midi.send(NoteOff(20, 99))
3643
while ble.connected:
3744
midi.send(NoteOn(44, 120)) # G sharp 2nd octave
3845
time.sleep(0.25)

0 commit comments

Comments
 (0)