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
7171class 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