#ifndef __INC_WS2812SERIAL_CONTROLLER_H #define __INC_WS2812SERIAL_CONTROLLER_H #ifdef USE_WS2812SERIAL FASTLED_NAMESPACE_BEGIN template class CWS2812SerialController : public CPixelLEDController { 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 & 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