From 981fa23676c3b98fefab8efe78a8b4cf17723369 Mon Sep 17 00:00:00 2001 From: ladyada Date: Sat, 1 Dec 2018 01:39:15 -0500 Subject: [PATCH] add RGBW support --- .../microcontroller/raspi_23/neopixel.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/adafruit_blinka/microcontroller/raspi_23/neopixel.py b/src/adafruit_blinka/microcontroller/raspi_23/neopixel.py index 3993cee..3d670c7 100644 --- a/src/adafruit_blinka/microcontroller/raspi_23/neopixel.py +++ b/src/adafruit_blinka/microcontroller/raspi_23/neopixel.py @@ -69,12 +69,20 @@ def neopixel_write(gpio, buf): if gpio._pin.id != ws.ws2811_channel_t_gpionum_get(channel): raise RuntimeError("Raspberry Pi neopixel support is for one strip only!") + if ws.ws2811_channel_t_strip_type_get(channel) == ws.WS2811_STRIP_RGB: + bpp = 3 + else: + bpp = 4 # assign all colors! - for i in range(len(buf) // 3): - r = buf[3*i] - g = buf[3*i+1] - b = buf[3*i+2] - pixel = (r << 16) | (g << 8) | b + for i in range(len(buf) // bpp): + r = buf[bpp*i] + g = buf[bpp*i+1] + b = buf[bpp*i+2] + if bpp == 3: + pixel = (r << 16) | (g << 8) | b + else: + w = buf[bpp*i+3] + pixel = (w << 24) | (r << 16) | (g << 8) | b ws.ws2811_led_set(channel, i, pixel) resp = ws.ws2811_render(_led_strip) -- 2.49.0