Skip to content

Commit 8fe9702

Browse files
committed
variant that works with pixelbuf
1 parent e9f50cb commit 8fe9702

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

neopixel.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232

3333
import digitalio
3434
from neopixel_write import neopixel_write
35+
try:
36+
from pixelbuf import PixelBuf
37+
except:
38+
PixelBuf = None
39+
3540

3641
__version__ = "0.0.0-auto.0"
3742
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel.git"
@@ -97,12 +102,20 @@ def __init__(self, pin, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_orde
97102
else:
98103
self.order = pixel_order
99104
self.bpp = len(self.order)
100-
self.buf = bytearray(self.n * self.bpp)
101105
# Set auto_write to False temporarily so brightness setter does _not_
102106
# call show() while in __init__.
103107
self.auto_write = False
104-
self.brightness = brightness
105108
self.auto_write = auto_write
109+
if PixelBuf:
110+
print("PB INIT")
111+
self.buf = PixelBuf(self.n, bytearray(self.n * self.bpp),
112+
bpp=self.bpp, brightness=brightness,
113+
rawbuf=bytearray(self.n * self.bpp))
114+
NeoPixel.__setitem__ = NeoPixel.__setitem_pb__
115+
NeoPixel.__getitem__ = NeoPixel.__getitem_pb__
116+
else:
117+
self.buf = bytearray(self.n * self.bpp)
118+
self.brightness = brightness
106119

107120
def deinit(self):
108121
"""Blank out the NeoPixels and release the pin."""
@@ -169,6 +182,15 @@ def __setitem__(self, index, val):
169182
if self.auto_write:
170183
self.show()
171184

185+
def __setitem_pb__(self, index, val):
186+
if isinstance(index, slice):
187+
self.buf[index.start:index.stop:index.step] = val
188+
else:
189+
self.buf[index] = val
190+
191+
if self.auto_write:
192+
self.show()
193+
172194
def __getitem__(self, index):
173195
if isinstance(index, slice):
174196
out = []
@@ -184,18 +206,29 @@ def __getitem__(self, index):
184206
return tuple(self.buf[offset + self.order[i]]
185207
for i in range(self.bpp))
186208

209+
def __getitem_pb__(self, index):
210+
if isinstance(index, slice):
211+
return self.buf[index.start:index.stop:index.step]
212+
else:
213+
return self.buf[index]
214+
187215
def __len__(self):
188216
return len(self.buf) // self.bpp
189217

190218
@property
191219
def brightness(self):
192220
"""Overall brightness of the pixel"""
221+
if PixelBuf:
222+
return self.buf.brightness
193223
return self._brightness
194224

195225
@brightness.setter
196226
def brightness(self, brightness):
197227
# pylint: disable=attribute-defined-outside-init
198-
self._brightness = min(max(brightness, 0.0), 1.0)
228+
if PixelBuf:
229+
self.buf.brightness = brightness
230+
else:
231+
self._brightness = min(max(brightness, 0.0), 1.0)
199232
if self.auto_write:
200233
self.show()
201234

@@ -221,7 +254,9 @@ def show(self):
221254
222255
The colors may or may not be showing after this function returns because
223256
it may be done asynchronously."""
224-
if self.brightness > 0.99:
257+
if PixelBuf:
258+
neopixel_write(self.pin, self.buf.buf)
259+
elif self.brightness > 0.99:
225260
neopixel_write(self.pin, self.buf)
226261
else:
227262
neopixel_write(self.pin, bytearray([int(i * self.brightness) for i in self.buf]))

0 commit comments

Comments
 (0)