diff options
author | Paul Stoffregen <paul@pjrc.com> | 2017-11-02 19:13:19 +0300 |
---|---|---|
committer | Daniel Garcia <danielgarcia@gmail.com> | 2017-11-02 19:13:19 +0300 |
commit | 65a563f58fbfe66fa3ff3d62a19c4ee821c59d28 (patch) | |
tree | 6b40f8eaa036d7d783fd792a721deacaac2f05b3 | |
parent | af2beed1f1a0027b6765852c6850de44262634a1 (diff) |
Add WS2812Serial driver (#517)
* Update Pintest example
* Use arm/k66 platform for Teensy 3.5
* Add WS2812Serial driver
-rw-r--r-- | FastLED.h | 10 | ||||
-rw-r--r-- | examples/Pintest/Pintest.ino | 4 | ||||
-rw-r--r-- | keywords.txt | 5 | ||||
-rw-r--r-- | led_sysdefs.h | 2 | ||||
-rw-r--r-- | platforms.h | 2 | ||||
-rw-r--r-- | platforms/arm/k20/fastled_arm_k20.h | 1 | ||||
-rw-r--r-- | platforms/arm/k20/ws2812serial_controller.h | 46 | ||||
-rw-r--r-- | platforms/arm/k66/fastled_arm_k66.h | 1 | ||||
-rw-r--r-- | platforms/arm/kl26/fastled_arm_kl26.h | 1 |
9 files changed, 68 insertions, 4 deletions
@@ -84,6 +84,7 @@ enum ESPIChipsets { enum ESM { SMART_MATRIX }; enum OWS2811 { OCTOWS2811,OCTOWS2811_400, OCTOWS2813}; +enum SWS2812 { WS2812SERIAL }; #ifdef HAS_PIXIE template<uint8_t DATA_PIN, EOrder RGB_ORDER> class PIXIE : public PixieController<DATA_PIN, RGB_ORDER> {}; @@ -373,6 +374,15 @@ public: #endif +#ifdef USE_WS2812SERIAL + template<SWS2812 CHIPSET, int DATA_PIN, EOrder RGB_ORDER> + static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) + { + static CWS2812SerialController<DATA_PIN,RGB_ORDER> controller; + return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); + } +#endif + #ifdef SmartMatrix_h template<ESM CHIPSET> static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) diff --git a/examples/Pintest/Pintest.ino b/examples/Pintest/Pintest.ino index 727341e7..a63f0d46 100644 --- a/examples/Pintest/Pintest.ino +++ b/examples/Pintest/Pintest.ino @@ -1,5 +1,5 @@ -#include <FastSPI_LED2.h> +#include <FastSPI_LED.h> const char *getPort(void *portPtr) { #ifdef PORTA @@ -102,4 +102,4 @@ void setup() { void loop() { CheckPin<MAX_PIN>(); delay(10000); -}
\ No newline at end of file +} diff --git a/keywords.txt b/keywords.txt index 509c806c..a735cb52 100644 --- a/keywords.txt +++ b/keywords.txt @@ -313,6 +313,11 @@ UCS1903B LITERAL1 GW6205 LITERAL1 GW6205B LITERAL1 LPD1886 LITERAL1 +OCTOWS2811 LITERAL1 +OCTOWS2811_400 LITERAL1 +OCTOWS2813 LITERAL1 +WS2812SERIAL LITERAL1 +SMART_MATRIX LITERAL1 # RGB orderings RGB LITERAL1 diff --git a/led_sysdefs.h b/led_sysdefs.h index 93d878ac..24b9bc20 100644 --- a/led_sysdefs.h +++ b/led_sysdefs.h @@ -10,7 +10,7 @@ #elif defined(__MK20DX128__) || defined(__MK20DX256__) // Include k20/T3 headers #include "platforms/arm/k20/led_sysdefs_arm_k20.h" -#elif defined(__MK66FX1M0__) +#elif defined(__MK66FX1M0__) || defined(__MK64FX512__) // Include k66/T3.6 headers #include "platforms/arm/k66/led_sysdefs_arm_k66.h" #elif defined(__MKL26Z64__) diff --git a/platforms.h b/platforms.h index 9fb4fcb9..5a536371 100644 --- a/platforms.h +++ b/platforms.h @@ -10,7 +10,7 @@ #elif defined(__MK20DX128__) || defined(__MK20DX256__) // Include k20/T3 headers #include "platforms/arm/k20/fastled_arm_k20.h" -#elif defined(__MK66FX1M0__) +#elif defined(__MK66FX1M0__) || defined(__MK64FX512__) // Include k66/T3.6 headers #include "platforms/arm/k66/fastled_arm_k66.h" #elif defined(__MKL26Z64__) diff --git a/platforms/arm/k20/fastled_arm_k20.h b/platforms/arm/k20/fastled_arm_k20.h index 8b338fcb..06c5c8e8 100644 --- a/platforms/arm/k20/fastled_arm_k20.h +++ b/platforms/arm/k20/fastled_arm_k20.h @@ -5,6 +5,7 @@ #include "fastpin_arm_k20.h" #include "fastspi_arm_k20.h" #include "octows2811_controller.h" +#include "ws2812serial_controller.h" #include "smartmatrix_t3.h" #include "clockless_arm_k20.h" #include "clockless_block_arm_k20.h" diff --git a/platforms/arm/k20/ws2812serial_controller.h b/platforms/arm/k20/ws2812serial_controller.h new file mode 100644 index 00000000..0bca7d5e --- /dev/null +++ b/platforms/arm/k20/ws2812serial_controller.h @@ -0,0 +1,46 @@ +#ifndef __INC_WS2812SERIAL_CONTROLLER_H +#define __INC_WS2812SERIAL_CONTROLLER_H + +#ifdef USE_WS2812SERIAL + +FASTLED_NAMESPACE_BEGIN + +template<int DATA_PIN, EOrder RGB_ORDER> +class CWS2812SerialController : public CPixelLEDController<RGB_ORDER, 8, 0xFF> { + WS2812Serial *pserial; + uint8_t *drawbuffer,*framebuffer; + + void _init(int nLeds) { + if (pserial == NULL) { + drawbuffer = (uint8_t*)malloc(nLeds * 3); + framebuffer = (uint8_t*)malloc(nLeds * 12); + pserial = new WS2812Serial(nLeds, framebuffer, drawbuffer, DATA_PIN, WS2812_RGB); + pserial->begin(); + } + } +public: + CWS2812SerialController() { pserial = NULL; } + + virtual void init() { /* do nothing yet */ } + + virtual void showPixels(PixelController<RGB_ORDER, 8, 0xFF> & pixels) { + _init(pixels.size()); + + uint8_t *p = drawbuffer; + + while(pixels.has(1)) { + *p++ = pixels.loadAndScale0(); + *p++ = pixels.loadAndScale1(); + *p++ = pixels.loadAndScale2(); + pixels.stepDithering(); + pixels.advanceData(); + } + pserial->show(); + } + +}; + +FASTLED_NAMESPACE_END + +#endif // USE_WS2812SERIAL +#endif // __INC_WS2812SERIAL_CONTROLLER_H diff --git a/platforms/arm/k66/fastled_arm_k66.h b/platforms/arm/k66/fastled_arm_k66.h index 239e4d5c..2113e10e 100644 --- a/platforms/arm/k66/fastled_arm_k66.h +++ b/platforms/arm/k66/fastled_arm_k66.h @@ -5,6 +5,7 @@ #include "fastpin_arm_k66.h" #include "fastspi_arm_k66.h" #include "../k20/octows2811_controller.h" +#include "../k20/ws2812serial_controller.h" #include "../k20/smartmatrix_t3.h" #include "clockless_arm_k66.h" #include "clockless_block_arm_k66.h" diff --git a/platforms/arm/kl26/fastled_arm_kl26.h b/platforms/arm/kl26/fastled_arm_kl26.h index 1e7c2e30..a0ef0ff7 100644 --- a/platforms/arm/kl26/fastled_arm_kl26.h +++ b/platforms/arm/kl26/fastled_arm_kl26.h @@ -5,5 +5,6 @@ #include "fastpin_arm_kl26.h" #include "fastspi_arm_kl26.h" #include "clockless_arm_kl26.h" +#include "../k20/ws2812serial_controller.h" #endif |