From 6c15ff7724d29fccd411717c622cd7b2714b5d0d Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 4 Aug 2020 09:44:33 -0400 Subject: [PATCH 1/3] Fix packet sizes for pixel and tone --- README.rst | 1 + .../addressable_pixel_service.py | 32 +++++++++++-------- adafruit_ble_adafruit/tone_service.py | 3 +- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.rst b/README.rst index eee7f50..b087d74 100644 --- a/README.rst +++ b/README.rst @@ -25,6 +25,7 @@ Dependencies This driver depends on: * `Adafruit CircuitPython `_ + **CircuitPython must be at least version 6.0.0.** Please ensure all dependencies are available on the CircuitPython filesystem. This is easily achieved by downloading diff --git a/adafruit_ble_adafruit/addressable_pixel_service.py b/adafruit_ble_adafruit/addressable_pixel_service.py index 1b5cf64..af0afb9 100644 --- a/adafruit_ble_adafruit/addressable_pixel_service.py +++ b/adafruit_ble_adafruit/addressable_pixel_service.py @@ -34,13 +34,13 @@ from collections import namedtuple import struct -import _bleio - from adafruit_ble.attributes import Attribute from adafruit_ble.characteristics import Characteristic, ComplexCharacteristic -from adafruit_ble.characteristics.int import Uint8Characteristic +from adafruit_ble.characteristics.int import Uint8Characteristic, Uint16Characteristic from adafruit_ble_adafruit.adafruit_service import AdafruitService +import _bleio + PixelValues = namedtuple("PixelValues", ("start", "write_now", "data"),) """Namedtuple for pixel data and instructions. @@ -67,19 +67,19 @@ class _PixelPacket(ComplexCharacteristic): data: raw array of data for all pixels, in proper color order for type of pixel """ + MAX_LENGTH = 512 + uuid = AdafruitService.adafruit_service_uuid(0x903) def __init__(self): super().__init__( properties=Characteristic.WRITE, read_perm=Attribute.NO_ACCESS, - max_length=512, + max_length=self.MAX_LENGTH, ) def bind(self, service): """Binds the characteristic to the given Service.""" - # Set Characteristic's max length, based on value from AddressablePixelService. - # + 3 is for size of start and flags bound_characteristic = super().bind(service) return _bleio.PacketBuffer(bound_characteristic, buffer_size=1) @@ -98,15 +98,22 @@ class AddressablePixelService(AdafruitService): uuid=AdafruitService.adafruit_service_uuid(0x902), properties=(Characteristic.READ | Characteristic.WRITE), ) + + pixel_buffer_size = Uint16Characteristic( + uuid=AdafruitService.adafruit_service_uuid(0x904), + properties=(Characteristic.READ | Characteristic.WRITE), + initial_value=_PixelPacket.MAX_LENGTH, + ) + """ 0 = WS2812 (NeoPixel), 800kHz 1 = SPI (APA102: DotStar) """ _pixel_packet = _PixelPacket() - """Pixel-setting data. max_length is supplied on binding.""" + """Pixel-setting data.""" def __init__(self, service=None): - self._pixel_packet_buf = None + self._pixel_packet_buf = bytearray(_PixelPacket.MAX_LENGTH) super().__init__(service=service) @property @@ -114,15 +121,12 @@ def values(self): """Return a tuple (start, write_now, data) corresponding to the different parts of ``_pixel_packet``. """ - if self._pixel_packet_buf is None: - self._pixel_packet_buf = bytearray( - self._pixel_packet.packet_size # pylint: disable=no-member - ) buf = self._pixel_packet_buf - if self._pixel_packet.readinto(buf) == 0: # pylint: disable=no-member + num_read = self._pixel_packet.readinto(buf) # pylint: disable=no-member + if num_read == 0: # No new values available return None return PixelValues( - struct.unpack_from(" Date: Tue, 4 Aug 2020 10:02:57 -0400 Subject: [PATCH 2/3] black reformat --- adafruit_ble_adafruit/addressable_pixel_service.py | 2 +- adafruit_ble_adafruit/tone_service.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/adafruit_ble_adafruit/addressable_pixel_service.py b/adafruit_ble_adafruit/addressable_pixel_service.py index af0afb9..3dc199c 100644 --- a/adafruit_ble_adafruit/addressable_pixel_service.py +++ b/adafruit_ble_adafruit/addressable_pixel_service.py @@ -122,7 +122,7 @@ def values(self): different parts of ``_pixel_packet``. """ buf = self._pixel_packet_buf - num_read = self._pixel_packet.readinto(buf) # pylint: disable=no-member + num_read = self._pixel_packet.readinto(buf) # pylint: disable=no-member if num_read == 0: # No new values available return None diff --git a/adafruit_ble_adafruit/tone_service.py b/adafruit_ble_adafruit/tone_service.py index 4e76147..f8989cc 100644 --- a/adafruit_ble_adafruit/tone_service.py +++ b/adafruit_ble_adafruit/tone_service.py @@ -39,6 +39,7 @@ from _bleio import PacketBuffer + class _TonePacket(ComplexCharacteristic): uuid = AdafruitService.adafruit_service_uuid(0xC01) From 57094b0128f9a0d1e71d83b93b66e14c73f76b53 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 4 Aug 2020 10:07:18 -0400 Subject: [PATCH 3/3] pylint --- adafruit_ble_adafruit/addressable_pixel_service.py | 4 ++-- adafruit_ble_adafruit/tone_service.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/adafruit_ble_adafruit/addressable_pixel_service.py b/adafruit_ble_adafruit/addressable_pixel_service.py index 3dc199c..fbc63b2 100644 --- a/adafruit_ble_adafruit/addressable_pixel_service.py +++ b/adafruit_ble_adafruit/addressable_pixel_service.py @@ -34,13 +34,13 @@ from collections import namedtuple import struct +import _bleio + from adafruit_ble.attributes import Attribute from adafruit_ble.characteristics import Characteristic, ComplexCharacteristic from adafruit_ble.characteristics.int import Uint8Characteristic, Uint16Characteristic from adafruit_ble_adafruit.adafruit_service import AdafruitService -import _bleio - PixelValues = namedtuple("PixelValues", ("start", "write_now", "data"),) """Namedtuple for pixel data and instructions. diff --git a/adafruit_ble_adafruit/tone_service.py b/adafruit_ble_adafruit/tone_service.py index f8989cc..f62261e 100644 --- a/adafruit_ble_adafruit/tone_service.py +++ b/adafruit_ble_adafruit/tone_service.py @@ -33,12 +33,12 @@ import struct +from _bleio import PacketBuffer + from adafruit_ble.attributes import Attribute from adafruit_ble.characteristics import Characteristic, ComplexCharacteristic from adafruit_ble_adafruit.adafruit_service import AdafruitService -from _bleio import PacketBuffer - class _TonePacket(ComplexCharacteristic): uuid = AdafruitService.adafruit_service_uuid(0xC01)