Skip to content

Commit adca4fa

Browse files
committed
pre-allocate spi buffer
1 parent 1b9b340 commit adca4fa

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

neopixel.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ def __init__(self, spi, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_orde
283283
self.order = pixel_order
284284
self.bpp = len(self.order)
285285
self.buf = bytearray(self.n * self.bpp)
286+
self.spibuf = bytearray(8*len(self.buf))
286287
# Set auto_write to False temporarily so brightness setter does _not_
287288
# call show() while in __init__.
288289
self.auto_write = False
@@ -298,19 +299,20 @@ def deinit(self):
298299
def show(self):
299300
"""Shows the new colors on the pixels themselves if they haven't already
300301
been autowritten."""
302+
self._transmogrify()
301303
with self._spi as spi:
302304
# write out special byte sequence surrounded by RESET
303305
# leading RESET needed for cases where MOSI rests HI
304-
spi.write(self.RESET + self._transmogrify() + self.RESET)
306+
spi.write(self.RESET + self.spibuf + self.RESET)
305307

306308
def _transmogrify(self):
307309
"""Turn every BIT of buf into a special BYTE pattern."""
308-
out_buf = bytearray()
310+
k = 0
309311
for byte in self.buf:
310312
# MSB first
311313
for i in range(7, -1, -1):
312314
if byte >> i & 0x01:
313-
out_buf.append(0b11110000) # A NeoPixel 1 bit
315+
self.spibuf[k] = 0b11110000 # A NeoPixel 1 bit
314316
else:
315-
out_buf.append(0b11000000) # A NeoPixel 0 bit
316-
return out_buf
317+
self.spibuf[k] = 0b11000000 # A NeoPixel 0 bit
318+
k += 1

0 commit comments

Comments
 (0)