summaryrefslogtreecommitdiffstatshomepage
path: root/drivers/neopixel/neopixel.py
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2021-08-20 21:49:02 +1000
committerDamien George <damien@micropython.org>2021-08-30 23:26:45 +1000
commite9a26791e5be6cda3a173b74087626d3cabafaa8 (patch)
tree6e5f4ab1e773955b60c61cbd9cdb73de072d0bdd /drivers/neopixel/neopixel.py
parentd63b287c851ab6bae7b9912ba20a4b33612958f9 (diff)
downloadmicropython-e9a26791e5be6cda3a173b74087626d3cabafaa8.tar.gz
micropython-e9a26791e5be6cda3a173b74087626d3cabafaa8.zip
drivers/neopixel: Reduce code size of driver.
Saves 71 bytes of bytecode. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'drivers/neopixel/neopixel.py')
-rw-r--r--drivers/neopixel/neopixel.py29
1 files changed, 14 insertions, 15 deletions
diff --git a/drivers/neopixel/neopixel.py b/drivers/neopixel/neopixel.py
index d83b51ebb4..0032d36183 100644
--- a/drivers/neopixel/neopixel.py
+++ b/drivers/neopixel/neopixel.py
@@ -1,15 +1,11 @@
# NeoPixel driver for MicroPython
# MIT license; Copyright (c) 2016 Damien P. George, 2021 Jim Mussared
-from micropython import const
from machine import bitstream
-_BITSTREAM_TYPE_HIGH_LOW = const(0)
-_TIMING_WS2818_800 = (400, 850, 800, 450)
-_TIMING_WS2818_400 = (800, 1700, 1600, 900)
-
class NeoPixel:
+ # G R B W
ORDER = (1, 0, 2, 3)
def __init__(self, pin, n, bpp=3, timing=1):
@@ -18,8 +14,10 @@ class NeoPixel:
self.bpp = bpp
self.buf = bytearray(n * bpp)
self.pin.init(pin.OUT)
+ # Timing arg can either be 1 for 800kHz or 0 for 400kHz,
+ # or a user-specified timing ns tuple (high_0, low_0, high_1, low_1).
self.timing = (
- (_TIMING_WS2818_800 if timing else _TIMING_WS2818_400)
+ ((400, 850, 800, 450) if timing else (800, 1700, 1600, 900))
if isinstance(timing, int)
else timing
)
@@ -27,21 +25,22 @@ class NeoPixel:
def __len__(self):
return self.n
- def __setitem__(self, index, val):
- offset = index * self.bpp
+ def __setitem__(self, i, v):
+ offset = i * self.bpp
for i in range(self.bpp):
- self.buf[offset + self.ORDER[i]] = val[i]
+ self.buf[offset + self.ORDER[i]] = v[i]
- def __getitem__(self, index):
- offset = index * self.bpp
+ def __getitem__(self, i):
+ offset = i * self.bpp
return tuple(self.buf[offset + self.ORDER[i]] for i in range(self.bpp))
- def fill(self, color):
+ def fill(self, v):
+ b = self.buf
for i in range(self.bpp):
- c = color[i]
- b = self.buf
+ c = v[i]
for j in range(self.ORDER[i], len(self.buf), self.bpp):
b[j] = c
def write(self):
- bitstream(self.pin, _BITSTREAM_TYPE_HIGH_LOW, self.timing, self.buf)
+ # BITSTREAM_TYPE_HIGH_LOW = 0
+ bitstream(self.pin, 0, self.timing, self.buf)