59
59
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel_SPI.git"
60
60
61
61
# Pixel color order constants
62
- RGB = ( 0 , 1 , 2 )
62
+ RGB = 'RGB'
63
63
"""Red Green Blue"""
64
- GRB = ( 1 , 0 , 2 )
64
+ GRB = 'GRB'
65
65
"""Green Red Blue"""
66
- RGBW = ( 0 , 1 , 2 , 3 )
66
+ RGBW = 'RGBW'
67
67
"""Red Green Blue White"""
68
- GRBW = ( 1 , 0 , 2 , 3 )
68
+ GRBW = 'GRBW'
69
69
"""Green Red Blue White"""
70
70
71
71
class NeoPixel_SPI (NeoPixel ):
@@ -91,12 +91,45 @@ class NeoPixel_SPI(NeoPixel):
91
91
pixels = neopixel_spi.NeoPixel_SPI(board.SPI(), 10)
92
92
pixels.fill(0xff0000)
93
93
"""
94
- #pylint: disable=invalid-name, super-init-not-called
94
+ #pylint: disable=invalid-name, super-init-not-called, too-many-instance-attributes
95
95
96
96
FREQ = 6400000 # 800kHz * 8, actual may be different
97
97
TRST = 80e-6 # Reset code low level time
98
98
99
99
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
+ #
100
133
from adafruit_bus_device .spi_device import SPIDevice
101
134
self ._spi = SPIDevice (spi , baudrate = self .FREQ )
102
135
with self ._spi as spibus :
@@ -107,25 +140,11 @@ def __init__(self, spi, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_orde
107
140
# use nominal
108
141
freq = self .FREQ
109
142
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 )
124
144
125
145
def deinit (self ):
126
146
"""Blank out the NeoPixels."""
127
- for i in range (len (self .buf )):
128
- self .buf [i ] = 0
147
+ self .fill (0 )
129
148
self .show ()
130
149
131
150
def show (self ):
0 commit comments