|
- #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
|