From c60e598b135f6094e3ac40300e926c147332a007 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Wed, 29 Apr 2020 23:36:57 -0400 Subject: [PATCH 1/2] Don't allocate packet buf until connected --- adafruit_ble_midi.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/adafruit_ble_midi.py b/adafruit_ble_midi.py index d348352..da97452 100644 --- a/adafruit_ble_midi.py +++ b/adafruit_ble_midi.py @@ -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 @@ 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: @@ -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 From cda65d34d5dbb83e7a4048abf4c28b872a58feb5 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 4 May 2020 15:01:27 -0400 Subject: [PATCH 2/2] fix one arg error; add delay to startup in example --- adafruit_ble_midi.py | 2 +- examples/ble_midi_simpletest.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/adafruit_ble_midi.py b/adafruit_ble_midi.py index da97452..c38d0ea 100644 --- a/adafruit_ble_midi.py +++ b/adafruit_ble_midi.py @@ -169,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 diff --git a/examples/ble_midi_simpletest.py b/examples/ble_midi_simpletest.py index 7f77bcd..0e63371 100644 --- a/examples/ble_midi_simpletest.py +++ b/examples/ble_midi_simpletest.py @@ -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)