From 79e7238c7352a2e7e135ce66eb63078f62204682 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 30 Apr 2020 00:03:18 -0400 Subject: [PATCH] defer buffer creations until MTU known --- adafruit_ble_ibbq.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/adafruit_ble_ibbq.py b/adafruit_ble_ibbq.py index 4729258..f252e5b 100644 --- a/adafruit_ble_ibbq.py +++ b/adafruit_ble_ibbq.py @@ -94,12 +94,9 @@ class IBBQService(Service): def __init__(self, service=None): super().__init__(service=service) - self._settings_result_buf = bytearray( - self.settings_result.packet_size # pylint: disable=no-member - ) - self._realtime_data_buf = bytearray( - self.realtime_data.packet_size # pylint: disable=no-member - ) + # Defer creating buffers until needed, since MTU is not known yet. + self._settings_result_buf = None + self._realtime_data_buf = None uuid = StandardUUID(0xFFF0) @@ -151,6 +148,10 @@ def temperatures(self): """Return a tuple of temperatures for all the possible temperature probes on the device. Temperatures are in degrees Celsius. Unconnected probes return 0.0. """ + if self._realtime_data_buf is None: + self._realtime_data_buf = bytearray( + self.realtime_data.packet_size # pylint: disable=no-member + ) data = self._realtime_data_buf length = self.realtime_data.readinto(data) # pylint: disable=no-member if length > 0: @@ -167,6 +168,11 @@ def battery_level(self): Results are approximate and may differ from the actual battery voltage by 0.1v or so. """ + if self._settings_result_buf is None: + self._settings_result_buf = bytearray( + self.settings_result.packet_size # pylint: disable=no-member + ) + self.settings_data = self._REQUEST_BATTERY_LEVEL_MSG results = self._settings_result_buf length = self.settings_result.readinto(results) # pylint: disable=no-member