1#ifndef __INC_FASTSPI_LED2_H
2#define __INC_FASTSPI_LED2_H
7#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
8#define FASTLED_HAS_PRAGMA_MESSAGE
16#define FASTLED_VERSION 3006000
17#ifndef FASTLED_INTERNAL
18# ifdef FASTLED_SHOW_VERSION
19# ifdef FASTLED_HAS_PRAGMA_MESSAGE
20# pragma message "FastLED version 3.006.000"
22# warning FastLED version 3.006.000 (Not really a warning, just telling you here.)
27#ifndef __PROG_TYPES_COMPAT__
31#define __PROG_TYPES_COMPAT__
35#include <SmartMatrix.h>
78FASTLED_NAMESPACE_BEGIN
95enum ESM { SMART_MATRIX };
100enum OWS2811 { OCTOWS2811,OCTOWS2811_400, OCTOWS2813};
108template<u
int8_t DATA_PIN, EOrder RGB_ORDER>
class PIXIE :
public PixieController<DATA_PIN, RGB_ORDER> {};
111#ifdef FASTLED_HAS_CLOCKLESS
147#if defined(DmxSimple_h) || defined(FASTLED_DOXYGEN)
151#if defined(DmxSerial_h) || defined(FASTLED_DOXYGEN)
162#ifdef PORTA_FIRST_PIN
169#ifdef PORTB_FIRST_PIN
176#ifdef PORTC_FIRST_PIN
183#ifdef PORTD_FIRST_PIN
199#if defined(LIB8_ATTINY)
200#define NUM_CONTROLLERS 2
204#define NUM_CONTROLLERS 8
225 uint32_t m_nMinMicros;
226 uint32_t m_nPowerData;
267 template<ESPIChipsets CHIPSET, u
int8_t DATA_PIN, u
int8_t CLOCK_PIN, EOrder RGB_ORDER, u
int32_t SPI_DATA_RATE >
CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
282 template<ESPIChipsets CHIPSET, u
int8_t DATA_PIN, u
int8_t CLOCK_PIN >
static CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
297 template<ESPIChipsets CHIPSET, u
int8_t DATA_PIN, u
int8_t CLOCK_PIN, EOrder RGB_ORDER >
static CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
312 template<ESPIChipsets CHIPSET>
static CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
313 return addLeds<CHIPSET, SPI_DATA, SPI_CLOCK, RGB>(data, nLedsOrOffset, nLedsIfOffset);
316 template<ESPIChipsets CHIPSET, EOrder RGB_ORDER>
static CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
317 return addLeds<CHIPSET, SPI_DATA, SPI_CLOCK, RGB_ORDER>(data, nLedsOrOffset, nLedsIfOffset);
320 template<ESPIChipsets CHIPSET, EOrder RGB_ORDER, u
int32_t SPI_DATA_RATE>
static CLEDController &
addLeds(
struct CRGB *data,
int nLedsOrOffset,
int nLedsIfOffset = 0) {
321 return addLeds<CHIPSET, SPI_DATA, SPI_CLOCK, RGB_ORDER, SPI_DATA_RATE>(data, nLedsOrOffset, nLedsIfOffset);
327#ifdef FASTLED_HAS_CLOCKLESS
350 template<
template<u
int8_t DATA_PIN, EOrder RGB_ORDER>
class CHIPSET, uint8_t DATA_PIN,
EOrder RGB_ORDER>
352 static CHIPSET<DATA_PIN, RGB_ORDER> c;
353 return addLeds(&c, data, nLedsOrOffset, nLedsIfOffset);
357 template<
template<u
int8_t DATA_PIN, EOrder RGB_ORDER>
class CHIPSET, uint8_t DATA_PIN>
359 static CHIPSET<DATA_PIN, RGB> c;
360 return addLeds(&c, data, nLedsOrOffset, nLedsIfOffset);
364 template<
template<u
int8_t DATA_PIN>
class CHIPSET, uint8_t DATA_PIN>
366 static CHIPSET<DATA_PIN> c;
367 return addLeds(&c, data, nLedsOrOffset, nLedsIfOffset);
370#if defined(__FASTLED_HAS_FIBCC) && (__FASTLED_HAS_FIBCC == 1)
371 template<u
int8_t NUM_LANES,
template<u
int8_t DATA_PIN, EOrder RGB_ORDER>
class CHIPSET, uint8_t DATA_PIN,
EOrder RGB_ORDER=
RGB>
373 static __FIBCC<CHIPSET, DATA_PIN, NUM_LANES, RGB_ORDER> c;
374 return addLeds(&c, data, nLeds);
378 #ifdef FASTSPI_USE_DMX_SIMPLE
379 template<EClocklessChipsets CHIPSET, u
int8_t DATA_PIN, EOrder RGB_ORDER=RGB>
383 case DMX: {
static DMXController<DATA_PIN> controller;
return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); }
412 template<
template<EOrder RGB_ORDER>
class CHIPSET,
EOrder RGB_ORDER>
414 static CHIPSET<RGB_ORDER> c;
415 return addLeds(&c, data, nLedsOrOffset, nLedsIfOffset);
419 template<
template<EOrder RGB_ORDER>
class CHIPSET>
421 static CHIPSET<RGB> c;
422 return addLeds(&c, data, nLedsOrOffset, nLedsIfOffset);
429 template<OWS2811 CHIPSET, EOrder RGB_ORDER>
433 case OCTOWS2811: {
static COctoWS2811Controller<RGB_ORDER,WS2811_800kHz> controller;
return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); }
434 case OCTOWS2811_400: {
static COctoWS2811Controller<RGB_ORDER,WS2811_400kHz> controller;
return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); }
436 case OCTOWS2813: {
static COctoWS2811Controller<RGB_ORDER,WS2813_800kHz> controller;
return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); }
444 template<OWS2811 CHIPSET>
447 return addLeds<CHIPSET,GRB>(data,nLedsOrOffset,nLedsIfOffset);
452#ifdef USE_WS2812SERIAL
456 template<SWS2812 CHIPSET,
int DATA_PIN, EOrder RGB_ORDER>
459 static CWS2812SerialController<DATA_PIN,RGB_ORDER> controller;
460 return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset);
467 template<ESM CHIPSET>
471 case SMART_MATRIX: {
static CSmartMatrixController controller;
return addLeds(&controller, data, nLedsOrOffset, nLedsIfOffset); }
478#ifdef FASTLED_HAS_BLOCKLESS
502 template<EBlockChipsets CHIPSET,
int NUM_LANES, EOrder RGB_ORDER>
505 #ifdef PORTA_FIRST_PIN
506 case WS2811_PORTA:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTA_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
507 case WS2811_400_PORTA:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTA_FIRST_PIN,
NS(800),
NS(800),
NS(900), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
508 case WS2813_PORTA:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTA_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER, 0,
false, 300>(), data, nLedsOrOffset, nLedsIfOffset);
509 case TM1803_PORTA:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTA_FIRST_PIN,
NS(700),
NS(1100),
NS(700), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
510 case UCS1903_PORTA:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTA_FIRST_PIN,
NS(500),
NS(1500),
NS(500), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
512 #ifdef PORTB_FIRST_PIN
513 case WS2811_PORTB:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTB_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
514 case WS2811_400_PORTB:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTB_FIRST_PIN,
NS(800),
NS(800),
NS(900), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
515 case WS2813_PORTB:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTB_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER, 0,
false, 300>(), data, nLedsOrOffset, nLedsIfOffset);
516 case TM1803_PORTB:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTB_FIRST_PIN,
NS(700),
NS(1100),
NS(700), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
517 case UCS1903_PORTB:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTB_FIRST_PIN,
NS(500),
NS(1500),
NS(500), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
519 #ifdef PORTC_FIRST_PIN
520 case WS2811_PORTC:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTC_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
521 case WS2811_400_PORTC:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTC_FIRST_PIN,
NS(800),
NS(800),
NS(900), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
522 case WS2813_PORTC:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTC_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER, 0,
false, 300>(), data, nLedsOrOffset, nLedsIfOffset);
523 case TM1803_PORTC:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTC_FIRST_PIN,
NS(700),
NS(1100),
NS(700), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
524 case UCS1903_PORTC:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTC_FIRST_PIN,
NS(500),
NS(1500),
NS(500), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
526 #ifdef PORTD_FIRST_PIN
527 case WS2811_PORTD:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTD_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
528 case WS2811_400_PORTD:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTD_FIRST_PIN,
NS(800),
NS(800),
NS(900), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
529 case WS2813_PORTD:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTD_FIRST_PIN,
NS(320),
NS(320),
NS(640), RGB_ORDER, 0,
false, 300>(), data, nLedsOrOffset, nLedsIfOffset);
530 case TM1803_PORTD:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTD_FIRST_PIN,
NS(700),
NS(1100),
NS(700), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
531 case UCS1903_PORTD:
return addLeds(
new InlineBlockClocklessController<NUM_LANES, PORTD_FIRST_PIN,
NS(500),
NS(1500),
NS(500), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
534 case WS2811_PORTDC:
return addLeds(
new SixteenWayInlineBlockClocklessController<NUM_LANES,
NS(320),
NS(320),
NS(640), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
535 case WS2811_400_PORTDC:
return addLeds(
new SixteenWayInlineBlockClocklessController<NUM_LANES,
NS(800),
NS(800),
NS(900), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
536 case WS2813_PORTDC:
return addLeds(
new SixteenWayInlineBlockClocklessController<NUM_LANES,
NS(320),
NS(320),
NS(640), RGB_ORDER, 0,
false, 300>(), data, nLedsOrOffset, nLedsIfOffset);
537 case TM1803_PORTDC:
return addLeds(
new SixteenWayInlineBlockClocklessController<NUM_LANES,
NS(700),
NS(1100),
NS(700), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
538 case UCS1903_PORTDC:
return addLeds(
new SixteenWayInlineBlockClocklessController<NUM_LANES,
NS(500),
NS(1500),
NS(500), RGB_ORDER>(), data, nLedsOrOffset, nLedsIfOffset);
544 template<EBlockChipsets CHIPSET,
int NUM_LANES>
546 return addLeds<CHIPSET,NUM_LANES,GRB>(data,nLedsOrOffset,nLedsIfOffset);
570 void show(uint8_t scale);
578 void clear(
bool writeData =
false);
596 void delay(
unsigned long ms);
642 int size() {
return (*
this)[0].size(); }
650#define FastSPI_LED FastLED
652#define FastSPI_LED2 FastLED
664#ifndef HAS_HARDWARE_PIN_SUPPORT
665#warning "No pin/port mappings found, pin access will be slightly slower. See fastpin.h for info."
666#define NO_HARDWARE_PIN_SUPPORT
SWS2812
WS2812Serial Library controller type.
OWS2811
Octo WS2811 LED Library controller types.
CFastLED FastLED
Global LED strip management instance.
uint8_t(* power_func)(uint8_t scale, uint32_t data)
Typedef for a power consumption calculation function.
ESPIChipsets
LED chipsets with SPI interface.
@ P9813
P9813 LED chipset.
@ SK9822
SK9822 LED chipset.
@ WS2803
WS2803 LED chipset.
@ WS2801
WS2801 LED chipset.
@ DOTSTAR
APA102 LED chipset alias.
@ APA102
APA102 LED chipset.
@ LPD8806
LPD8806 LED chipset.
@ LPD6803
LPD6803 LED chipset.
@ SM16716
SM16716 LED chipset.
ESM
Smart Matrix Library controller type.
EBlockChipsets
Blockless output port enum.
Functions for doing a rotation of bits/bytes used by parallel output.
Contains the bulk of the definitions for the various LED chipsets supported.
High level controller interface for FastLED.
int size()
Get the number of leds in the first controller.
void setMaxRefreshRate(uint16_t refresh, bool constrain=false)
Set the maximum refresh rate.
CRGB * leds()
Get a pointer to led data for the first controller.
void setTemperature(const struct CRGB &temp)
Set a global color temperature.
static CLEDController & addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add an SPI based CLEDController instance to the world.
void show()
Update all our controllers with the current led colors.
static CLEDController & addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add an SPI based CLEDController instance to the world.
void showColor(const struct CRGB &color)
Set all leds on all controllers to the given color.
void countFPS(int nFrames=25)
For debugging, this will keep track of time between calls to countFPS().
CLEDController & operator[](int x)
Get a reference to a registered controller.
void delay(unsigned long ms)
Delay for the given number of milliseconds.
void setBrightness(uint8_t scale)
Set the global brightness scaling.
void showColor(const struct CRGB &color, uint8_t scale)
Set all leds on all controllers to the given color/scale.
void setDither(uint8_t ditherMode=BINARY_DITHER)
Set the dithering mode.
void setMaxPowerInVoltsAndMilliamps(uint8_t volts, uint32_t milliamps)
Set the maximum power to be used, given in volts and milliamps.
uint16_t getFPS()
Get the number of frames/second being written out.
void setMaxPowerInMilliWatts(uint32_t milliwatts)
Set the maximum power to be used, given in milliwatts.
uint8_t getBrightness()
Get the current global brightness setting.
void clearData()
Clear out the local data array.
void setCorrection(const struct CRGB &correction)
Set a global color correction.
CLEDController & addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add an SPI based CLEDController instance to the world.
int count()
Get how many controllers have been registered.
static CLEDController & addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add a 3rd party library based CLEDController instance to the world.
void clear(bool writeData=false)
Clear the leds, wiping the local array of data.
static CLEDController & addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add a clockless based CLEDController instance to the world.
static CLEDController & addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add a CLEDController instance to the world.
Base definition for an LED controller.
DMX512 based LED controller class, using the DMXSerial library.
DMX512 based LED controller class, using the DmxSimple library.
DMX512 based LED controller class, using the DMXSerial library.
DMX512 based LED controller class, using the DmxSimple library.
GE8822 controller class. "
GW6205 controller class @ 400 KHz. "
GW6205 controller class @ 400 KHz.
UCS1904 controller class @ 800 KHz.
UCS1904 controller class @ 800 KHz. "
LPD1886 controller class. "
LPD1886 controller class.
LPD1886 controller class.
LPD1886 controller class. "
LPD6803 controller class (LPD1101).
LPD8806 controller class.
LED controller for WS2812 LEDs with GRB color order.
PL9823 controller class. "
SK6812 controller class. "
SM16703 controller class.
SM16703 controller class. "
SM16716 controller class.
TM1803 controller class. "
TM1809 controller class. "
TM1829 controller class. "
UCS1903B controller class.
UCS1903B controller class. "
UCS1903 controller class @ 400 KHz.
UCS1903 controller class @ 400 KHz. "
UCS1904 controller class.
UCS1904 controller class. "
UCS2903 controller class.
UCS2903 controller class. "
WS2811 controller class @ 400 KHz. "
WS2811 controller class @ 400 KHz.
WS2811 controller class @ 800 KHz.
WS2811 controller class @ 800 KHz. "
WS2812B controller class.
WS2812 controller class @ 800 KHz.
WS2812 controller class @ 800 KHz. "
WS2813 controller class. "
Declarations for the predefined color palettes supplied by FastLED.
Utility functions for color fill, palettes, blending, and more.
base definitions used by led controllers for writing out led data
#define BINARY_DITHER
Enable dithering using binary dithering (only option)
Compatibility functions based on C++ version.
Defines the DMX512-based LED controllers.
Contains definitions that can be used to configure FastLED at compile time.
Utility functions and classes for managing delay cycles.
#define NS(_NS)
Convert from nanoseconds to number of clock cycles.
Wrapper definitions to allow seamless use of PROGMEM in environments that have it.
Class base definitions for defining fast pin access.
Serial peripheral interface (SPI) definitions per platform.
Data types and constants used by SPI interfaces.
EOrder
RGB color channel orderings, used when instantiating controllers to determine what order the controll...
@ RGB
Red, Green, Blue (0012)
uint8_t calculate_max_brightness_for_power_mW(const CRGB *ledbuffer, uint16_t numLeds, uint8_t target_brightness, uint32_t max_power_mW)
Determines the highest brightness level you can use and still stay under the specified power budget f...
Functions to convert from the HSV colorspace to the RGB colorspace.
Determines which platform system definitions to include.
Fast, efficient 8-bit math functions specifically designed for high-performance LED programming.
Functions to generate and fill arrays with noise.
Declares classes for managing logical groups of LEDs.
Definitions for pixel color data structs.
Functions to limit the power used by FastLED.
Representation of an RGB pixel (Red, Green, Blue)