neopixel: Support arbitrary RGBW strings in color_order config

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2022-04-06 09:27:36 -04:00
parent 92de6e91dc
commit dc7b02f329
2 changed files with 6 additions and 6 deletions

View File

@ -2557,8 +2557,9 @@ pin:
# provided pin. The default is 1 (which indicates only a single
# Neopixel is connected to the pin).
#color_order: GRB
# Set the pixel order required by the LED hardware. Options are GRB,
# RGB, BRG, BGR, GRBW, or RGBW. The default is GRB.
# Set the pixel order required by the LED hardware (using a string
# containing the letters R, G, B, W with W optional). The default is
# GRB.
#initial_RED: 0.0
#initial_GREEN: 0.0
#initial_BLUE: 0.0

View File

@ -12,8 +12,6 @@ RESET_MIN_TIME=.000050
MAX_MCU_SIZE = 500 # Sanity check on LED chain length
COLOR_FORMATS = ["RGB", "GRB", "BRG", "BGR", "RGBW", "GRBW"]
class PrinterNeoPixel:
def __init__(self, config):
self.printer = printer = config.get_printer()
@ -25,8 +23,9 @@ class PrinterNeoPixel:
self.oid = self.mcu.create_oid()
self.pin = pin_params['pin']
self.mcu.register_config_callback(self.build_config)
formats = {v: v for v in COLOR_FORMATS}
color_order = config.getchoice("color_order", formats, "GRB")
color_order = config.get("color_order", "GRB")
if sorted(color_order) not in (sorted("RGB"), sorted("RGBW")):
raise config.error("Invalid color_order '%s'" % (color_order,))
if 'W' in color_order:
color_index = [color_order.index(c) for c in "RGBW"]
else: