diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2021-08-20 21:49:02 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-08-30 23:26:45 +1000 |
commit | e9a26791e5be6cda3a173b74087626d3cabafaa8 (patch) | |
tree | 6e5f4ab1e773955b60c61cbd9cdb73de072d0bdd /drivers/neopixel/neopixel.py | |
parent | d63b287c851ab6bae7b9912ba20a4b33612958f9 (diff) | |
download | micropython-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.py | 29 |
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) |