Skip to content

Commit c8ec8d8

Browse files
authored
Merge pull request #9 from caternuson/iss8
Updates for pypixelbuf
2 parents f832410 + 23456e6 commit c8ec8d8

File tree

1 file changed

+40
-21
lines changed

1 file changed

+40
-21
lines changed

neopixel_spi.py

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@
5959
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel_SPI.git"
6060

6161
# Pixel color order constants
62-
RGB = (0, 1, 2)
62+
RGB = 'RGB'
6363
"""Red Green Blue"""
64-
GRB = (1, 0, 2)
64+
GRB = 'GRB'
6565
"""Green Red Blue"""
66-
RGBW = (0, 1, 2, 3)
66+
RGBW = 'RGBW'
6767
"""Red Green Blue White"""
68-
GRBW = (1, 0, 2, 3)
68+
GRBW = 'GRBW'
6969
"""Green Red Blue White"""
7070

7171
class NeoPixel_SPI(NeoPixel):
@@ -91,12 +91,45 @@ class NeoPixel_SPI(NeoPixel):
9191
pixels = neopixel_spi.NeoPixel_SPI(board.SPI(), 10)
9292
pixels.fill(0xff0000)
9393
"""
94-
#pylint: disable=invalid-name, super-init-not-called
94+
#pylint: disable=invalid-name, super-init-not-called, too-many-instance-attributes
9595

9696
FREQ = 6400000 # 800kHz * 8, actual may be different
9797
TRST = 80e-6 # Reset code low level time
9898

9999
def __init__(self, spi, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_order=None):
100+
# We can't call super().__init__() since we don't actually
101+
# have a pin to supply it. So setup is done manually.
102+
#
103+
# neopixel stuff
104+
#
105+
self.bpp = bpp
106+
self.n = n
107+
if not pixel_order:
108+
pixel_order = GRB if bpp == 3 else GRBW
109+
else:
110+
self.bpp = bpp = len(pixel_order)
111+
#
112+
# pypixelbuf stuff
113+
#
114+
bpp, byteorder_tuple, has_white, _ = self.parse_byteorder(pixel_order)
115+
self._pixels = n
116+
self._bytes = bpp * n
117+
self._byteorder = byteorder_tuple
118+
self._byteorder_string = pixel_order
119+
self._has_white = has_white
120+
self._bpp = bpp
121+
self._bytearray = bytearray(n * bpp)
122+
self._two_buffers = True
123+
self._rawbytearray = bytearray(n * bpp)
124+
self._offset = 0
125+
self._dotstar_mode = False
126+
self._pixel_step = bpp
127+
self.auto_write = False
128+
self.brightness = min(1.0, max(0, brightness))
129+
self.auto_write = auto_write
130+
#
131+
# neopixel_spi stuff
132+
#
100133
from adafruit_bus_device.spi_device import SPIDevice
101134
self._spi = SPIDevice(spi, baudrate=self.FREQ)
102135
with self._spi as spibus:
@@ -107,25 +140,11 @@ def __init__(self, spi, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_orde
107140
# use nominal
108141
freq = self.FREQ
109142
self.RESET = bytes([0]*round(freq * self.TRST / 8))
110-
self.n = n
111-
if pixel_order is None:
112-
self.order = GRBW
113-
self.bpp = bpp
114-
else:
115-
self.order = pixel_order
116-
self.bpp = len(self.order)
117-
self.buf = bytearray(self.n * self.bpp)
118-
self.spibuf = bytearray(8*len(self.buf))
119-
# Set auto_write to False temporarily so brightness setter does _not_
120-
# call show() while in __init__.
121-
self.auto_write = False
122-
self.brightness = brightness
123-
self.auto_write = auto_write
143+
self.spibuf = bytearray(8 * n * bpp)
124144

125145
def deinit(self):
126146
"""Blank out the NeoPixels."""
127-
for i in range(len(self.buf)):
128-
self.buf[i] = 0
147+
self.fill(0)
129148
self.show()
130149

131150
def show(self):

0 commit comments

Comments
 (0)