@@ -72,33 +72,32 @@ def __init__(self, clock, data, n, brightness=1.0, auto_write=True):
72
72
self .cpin .direction = digitalio .Direction .OUTPUT
73
73
self .cpin .value = False
74
74
self .n = n
75
- self .start_header = 4
75
+ self .start_header_size = 4
76
76
# Supply one extra clock cycle for each two pixels in the strip.
77
- self .end_header = n // 16
77
+ self .end_header_size = n // 16
78
78
if n % 16 != 0 :
79
- self .end_header += 1
80
- self .buf = bytearray (n * 4 + self .start_header + self .end_header )
79
+ self .end_header_size += 1
80
+ self .buf = bytearray (n * 4 + self .start_header_size + self .end_header_size )
81
+ self .end_header_index = len (self .buf ) - self .end_header_size ;
81
82
82
83
# Four empty bytes to start.
83
- for i in range (self .start_header ):
84
+ for i in range (self .start_header_size ):
84
85
self .buf [i ] = 0x00
85
86
# Mark the beginnings of each pixel.
86
- for i in range (n ):
87
- self .buf [self . start_header + 4 * i ] = 0xff
87
+ for i in range (self . start_header_size , self . end_header_index , 4 ):
88
+ self .buf [i ] = 0xff
88
89
# 0xff bytes at the end.
89
- for i in range (self .end_header ):
90
- self .buf [len ( self . buf ) - 1 - i ] = 0xff
90
+ for i in range (self .end_header_index , len ( self . buf ) ):
91
+ self .buf [i ] = 0xff
91
92
self .brightness = brightness
92
93
self .auto_write = auto_write
93
94
94
95
def deinit (self ):
95
96
"""Blank out the DotStars and release the resources."""
96
97
self .auto_write = False
97
- for i in range (self .start_header , len (self .buf ) - self .end_header ):
98
- # Preserve the pixel markers.
99
- if i % 4 == 0 :
100
- continue
101
- self .buf [i ] = 0
98
+ for i in range (self .start_header_size , self .end_header_index ):
99
+ if i % 4 != 0 :
100
+ self .buf [i ] = 0
102
101
self .show ()
103
102
if self .spi :
104
103
self .spi .deinit ()
@@ -116,7 +115,7 @@ def __repr__(self):
116
115
return "[" + ", " .join ([str (x ) for x in self ]) + "]"
117
116
118
117
def _set_item (self , index , value ):
119
- offset = index * 4 + self .start_header
118
+ offset = index * 4 + self .start_header_size
120
119
r = 0
121
120
g = 0
122
121
b = 0
@@ -130,7 +129,7 @@ def _set_item(self, index, value):
130
129
# sheet suggests using a global brightness in the first byte, we don't
131
130
# do that because it causes further issues with persistence of vision
132
131
# projects.
133
- self .buf [offset ] = 0xff
132
+ self .buf [offset ] = 0xff # redundant; should already be set
134
133
self .buf [offset + 1 ] = b
135
134
self .buf [offset + 2 ] = g
136
135
self .buf [offset + 3 ] = r
@@ -154,16 +153,16 @@ def __setitem__(self, index, val):
154
153
def __getitem__ (self , index ):
155
154
if isinstance (index , slice ):
156
155
out = []
157
- for in_i in range (* index .indices (len (self .buf ) // self . bpp )):
158
- out .append (tuple (self .buf [in_i * 4 + (3 - i ) + self .start_header ]
156
+ for in_i in range (* index .indices (len (self .buf ) // 4 )):
157
+ out .append (tuple (self .buf [in_i * 4 + (3 - i ) + self .start_header_size ]
159
158
for i in range (3 )))
160
159
return out
161
160
if index < 0 :
162
161
index += len (self )
163
162
if index >= self .n or index < 0 :
164
163
raise IndexError
165
164
offset = index * 4
166
- return tuple (self .buf [offset + (3 - i ) + self .start_header ]
165
+ return tuple (self .buf [offset + (3 - i ) + self .start_header_size ]
167
166
for i in range (3 ))
168
167
169
168
def __len__ (self ):
@@ -205,18 +204,15 @@ def show(self):
205
204
# Create a second output buffer if we need to compute brightness
206
205
buf = self .buf
207
206
if self .brightness < 1.0 :
208
- buf = bytearray (self .n * 4 + self . start_header + self . end_header )
207
+ buf = bytearray (self .buf )
209
208
# Four empty bytes to start.
210
- for i in range (self .start_header ):
209
+ for i in range (self .start_header_size ):
211
210
buf [i ] = 0x00
212
- for i in range (self .start_header , len (self .buf ) - self .end_header - 1 ):
213
- if i % 4 == 0 :
214
- buf [i ] = self .buf [i ]
215
- continue
216
- buf [i ] = int (self .buf [i ] * self ._brightness )
211
+ for i in range (self .start_header_size , self .end_header_index ):
212
+ buf [i ] = self .buf [i ] if i % 4 == 0 else int (self .buf [i ] * self ._brightness )
217
213
# Four 0xff bytes at the end.
218
- for i in range (self .end_header ):
219
- buf [len ( self . buf ) - 4 + i ] = 0xff
214
+ for i in range (self .end_header_index , len ( buf ) ):
215
+ buf [i ] = 0xff
220
216
221
217
if self .spi :
222
218
self .spi .write (buf )
0 commit comments