Permalink
Commits on Oct 14, 2018
  1. Merge branch 'master' of https://github.com/FastLED/FastLED

    Daniel Garcia
    Daniel Garcia committed Oct 14, 2018
Commits on Sep 20, 2018
  1. Add global brightness support for ADA102 and SK9822 (#653)

    extesy authored and focalintent committed Sep 20, 2018
    * Add global brightness support for ADA102 and SK9822
    
    * Move brightness computation outside of the loop
  2. Suggest to `#define FASTLED_RMT_BUILTIN_DRIVER 1` (#654)

    johannesmaibaum authored and focalintent committed Sep 20, 2018
    The documentation for FASTLED_RMT_BUILTIN_DRIVER says that you should
    
        #define FASTLED_RMT_BUILTIN_DRIVER
    
    before `#include`ing FastLED if you have custom RMT applications running.
    Without any non-zero value, this results in the following compile error:
    
        /path/to/Arduino/libraries/FastLED/platforms/esp/32/clockless_esp32.h: In member function 'void ClocklessController<DATA_PIN, T1, T2, T3, RGB_ORDER, XTRA0, FLIP, WAIT_TIME>::initRMT()':
        /path/to/Arduino/libraries/FastLED/platforms/esp/32/clockless_esp32.h:253:43: error: expected primary-expression before ')' token
                 if (FASTLED_RMT_BUILTIN_DRIVER) {
                                               ^
Commits on Sep 8, 2018
  1. Bumping version number to 3.2.1

    Daniel Garcia
    Daniel Garcia committed Sep 8, 2018
  2. Fix apa102 output for esp32 where the compiler is optimizing some of …

    Daniel Garcia
    Daniel Garcia committed Sep 8, 2018
    …our pin writes out a little too aggressively
Commits on Aug 31, 2018
  1. stm32duino port (Maple, Blue Pill etc.) (#568)

    kolyshkin authored and focalintent committed Aug 31, 2018
    This mostly builds on previous work for SparkCore STM32103 (Cortex M3),
    and patches from Evey Quirk.
    
    Unfortunately, stm32duino distribution does not include a header
    with definitions for CoreDebug registers and flags etc. (used in )
    so they were added to a newly created cm3_regs.h from
    https://github.com/ARM-software/CMSIS/blob/master/CMSIS/Include/core_cm3.h
    
    [v2: changed PIN numbers to be int]
    
    Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
  2. Remove str and xstr macros (#644)

    ChristofKaufmann authored and focalintent committed Aug 31, 2018
    `str` macro conflicts with any function or method that has the same
    name ignoring namespaces and class names. Most noticeably it conflicts
    with `std::basic_stringstream::str()`. Also there is no usage of the
    `str` macro in the library.
  3. Add some missing keywords for Arduino (#645)

    ChristofKaufmann authored and focalintent committed Aug 31, 2018
    This adds the following keywords:
    
    *  `CRGBArray`
    *  `clearData`
    *  `setMaxPowerInMilliWatts`
    *  `setMaxPowerInVoltsAndMilliamps`
    *  `setMaxRefreshRate`
    
    This fixes #642.
  4. only handle own rmt interrupts (#647)

    h3ndrik authored and focalintent committed Aug 31, 2018
    Exit early if the interrupt is for another channel which is used by something else than FastLED.
    
    This is needed if we use FASTLED_RMT_BUILTIN_DRIVER and lower FASTLED_RMT_MAX_CHANNELS in order to free some rmt channels for something else.
    In this case doneOnChannel() is called for all rmt channels even if they don't belong to FastLED. So exit early in this case before the esp32 notices and reboots on its own.
Commits on Aug 26, 2018
  1. Merge branch 'master' of https://github.com/FastLED/FastLED

    Daniel Garcia
    Daniel Garcia committed Aug 26, 2018
  2. Bump version to 3.2

    Daniel Garcia
    Daniel Garcia committed Aug 26, 2018
  3. Rewrite of fastpin_esp32.h -- take 2 (#625)

    samguyer authored and focalintent committed Aug 26, 2018
    * Support for ESP32
    
    Credit to Rina Shkrabova for the first cut.
    
    * Clean up interrupt handling
    
    I think there was actually an error in the interrupt enabling/disabling, but I also cleaned it up so that it is more clear how interrupts are handled.
    
    * Better interrupt handling
    
    * Added RMT version
    
    Not fully portable yet, though. The timing numbers are hard-wired for WS2812, and the RMT channel is also hard-wired.
    
    * Fixed the timing
    
    Timing is now computed from T1, T2, amd T3 instead of being hard-wired.
    
    * Better buffer management
    
    The RMT signal is sent in 10-pixel chunks, using double-buffering to hide the latency when possible. Also: assign RMT channels sequentially.
    
    * Total rewrite using Martin's code
    
    * Better comments
    
    * Fixed the timing calculation
    
    We were not doing the conversion from ESP32 cycles to RMT cycles correctly. Now it all works!
    
    * Added Martin's changes
    
    * Removed confusing comments
    
    * Added my name!
    
    * Fixed ESP32 compile problem
    
    On ESP platforms the dev kit provides the function __cxa_pure_virtual, so there is no need to define it.
    
    * honor WAIT_TIME
    
    for chipsets that need it (for example TM1829)
    
    * Better interrupt handling
    
    Suggested by @h3ndrik : allocated the interrupt once at the initialization and then just turn it on and off. This is the strategy that the ESP32 core uses also.
    
    * Major refactoring
    
    Two major changes to the RMT driver. First, I realized that we can have only one interrupt handler attached to the RMT peripheral, so it needs to be able to handle all of the attached strips. To accomplish this, I store each ClocklessController in an array indexed by its RMT channel. The interrupt handler can then take the channel that triggered it and index into the array to get the right controller.
    
    The second major change is that I replaced all of the explicit bit twiddling of the RMT configurartion with calls to the proper functions in ESP32 core. That should make the code more stable if the core changes.
    
    * Fixed the interrupt dispatch
    
    Since the interrupt handler is global for all channels, we need to store not just the controller, but also the buffer refill function for each strip.
    
    * Added a demo
    
    This version of DemoReel100 spins off a separate task on core 0 that just performs the FastLED.show() operations. Regular code running on core 1 (the default for Arduino) signals this task to request a show().
    
    * Avoid unnecessary timeouts
    
    Replaced a 500ms delay in the show task with MAX_DELAY. There's really no point in timing out (and crashing the program) just because the application hasn't called show.
    
    * Parallel output
    
    Reworked the code again in order to support parallel output, which is now the default mode. You can also now ask it to use the built-in RMT driver if you have other parts of your code that need the RMT peripheral.
    
    Two #defines control choices -- put either or both of these before including FastLED.h:
    
    #define FASTLED_RMT_CORE_DRIVER
    
    Uses the ESP core RMT driver. To do this, though, it allocates a big buffer to hold all of the pixel bits, so there is a memory and compute cost.
    
    #define FASTLED_RMT_SERIAL_OUTPUT
    
    Force serial output of each strip.
    
    * Documentation
    
    Describing the implementation and the compile-time switches
    
    * Removing files that should not be there
    
    * Fixed synchronization
    
    The previous checkin had bugs in the syncronization that caused problems in parallel mode when strips are different lengths.
    
    * Fixed a stupid bug
    
    Made the code bullet-proof in a few ways, but most importantly fixed a terrible integer underflow bug in the code that fills the RMT buffer.
    
    * Another major overhaul
    
    The big change in this version is the ability to support more than 8 controllers. Instead of assigning RMT channels to controllers in a fixed mapping, channels are assigned on the fly, allowing the driver to reuse channels as they become available.
    
    * Oops
    
    Didn't mean to check these in.
    
    * Fixed built-in driver mode
    
    Fixed the code so that it works with the built-in RMT driver. There's nothing special to do to enable it -- just #define FASTLED_RMT_BUILTIN_DRIVER true
    
    * Cleanup
    
    Fixing some documentation and configuration stuff
    
    * Rewrite of fastpin
    
    I've been needing to rewrite fastpin_esp32.h for the ESP32 ports and masks. This file also makes sure we don't use pins that won't work, even with clockless chips like the WS2812.
    
    * Got rid of tabs
    
    Which were making the code ugly.
    
    * Minor tweaks
    
    Added proper definitions for port() and toggle() to use the GPIO.out register. Changed the pin number test to avoid unnecessary conditions.
    
    * Allow TX and RX pins
    
    * Fixed pin access methods
    
    This should be the right set of definitions -- consistent with the other platforms.
    
    * Experimental
    
    Do not merge this code
    
    * Change pixel buffering
    
    The previous version of this code saved a copy of the PixelController every time show() is called. It appears that this causes massive memory fragmentation, eventually locking up the processor. This new version saves the pixel data is a separate buffer that is allocated only one time.
    
    * Some rearranging of the code
    
    Nothing major here. Added comments and put the functions is a better order. Added some defensive programming.
Commits on Jul 15, 2018
  1. Use a single tab field separator in keywords.txt (#628)

    per1234 authored and focalintent committed Jul 15, 2018
    Each field of keywords.txt is separated by a single true tab. When you use multiple tabs it causes the field to be interpreted as empty. On Arduino IDE 1.6.5 and newer an empty KEYWORD_TOKENTYPE causes the default editor.function.style coloration to be used (as with KEYWORD2, KEYWORD3, LITERAL2). On Arduino IDE 1.6.4 and older it causes the keyword to not be recognized for any special coloration.
    
    Reference:
    https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification#keywords
Commits on Jun 23, 2018
  1. WAIT_TIME=50 to allow interrupts without breaking matrix output. (#596)

    marcmerlin authored and focalintent committed Jun 23, 2018
    * WAIT_TIME=50 to allow interrupts without breaking matrix output.
    
    WAIT_TIME set to 5 was too short and FastLED aborted frames too early
    and restarted them incorrectly.
    (as explained by Daniel Garcia in
    https://plus.google.com/communities/109127054924227823508 )
    
    Tested on ESP8266 with 768 LED matrix in both serialized output
    and 3x 256 output.
    
    * Update clockless_block_esp8266.h
    
    * Update clockless_esp8266.h
Commits on May 19, 2018
  1. Range adjustments for 8-bit noise functions, now preserving a (very) …

    kriegsman committed May 19, 2018
    …slight bit more precision, too.
Commits on May 17, 2018
Commits on May 16, 2018
  1. Fix discontinuties in noise functions, both 8- and 16- bit versions. …

    kriegsman committed May 16, 2018
    …If you need the old behavior, you can edit fastled_config.h and change FASTLED_NOISE_FIXED to 0. Fixes #416.  Thanks to everyone who reported this and helped track it down.
Commits on May 8, 2018
  1. ESP32 support using the RMT peripheral device (#522)

    samguyer authored and focalintent committed May 8, 2018
    * Support for ESP32
    
    Credit to Rina Shkrabova for the first cut.
    
    * Clean up interrupt handling
    
    I think there was actually an error in the interrupt enabling/disabling, but I also cleaned it up so that it is more clear how interrupts are handled.
    
    * Better interrupt handling
    
    * Added RMT version
    
    Not fully portable yet, though. The timing numbers are hard-wired for WS2812, and the RMT channel is also hard-wired.
    
    * Fixed the timing
    
    Timing is now computed from T1, T2, amd T3 instead of being hard-wired.
    
    * Better buffer management
    
    The RMT signal is sent in 10-pixel chunks, using double-buffering to hide the latency when possible. Also: assign RMT channels sequentially.
    
    * Total rewrite using Martin's code
    
    * Better comments
    
    * Fixed the timing calculation
    
    We were not doing the conversion from ESP32 cycles to RMT cycles correctly. Now it all works!
    
    * Added Martin's changes
    
    * Removed confusing comments
    
    * Added my name!
    
    * Fixed ESP32 compile problem
    
    On ESP platforms the dev kit provides the function __cxa_pure_virtual, so there is no need to define it.
    
    * honor WAIT_TIME
    
    for chipsets that need it (for example TM1829)
    
    * Better interrupt handling
    
    Suggested by @h3ndrik : allocated the interrupt once at the initialization and then just turn it on and off. This is the strategy that the ESP32 core uses also.
    
    * Major refactoring
    
    Two major changes to the RMT driver. First, I realized that we can have only one interrupt handler attached to the RMT peripheral, so it needs to be able to handle all of the attached strips. To accomplish this, I store each ClocklessController in an array indexed by its RMT channel. The interrupt handler can then take the channel that triggered it and index into the array to get the right controller.
    
    The second major change is that I replaced all of the explicit bit twiddling of the RMT configurartion with calls to the proper functions in ESP32 core. That should make the code more stable if the core changes.
    
    * Fixed the interrupt dispatch
    
    Since the interrupt handler is global for all channels, we need to store not just the controller, but also the buffer refill function for each strip.
    
    * Added a demo
    
    This version of DemoReel100 spins off a separate task on core 0 that just performs the FastLED.show() operations. Regular code running on core 1 (the default for Arduino) signals this task to request a show().
    
    * Avoid unnecessary timeouts
    
    Replaced a 500ms delay in the show task with MAX_DELAY. There's really no point in timing out (and crashing the program) just because the application hasn't called show.
    
    * Parallel output
    
    Reworked the code again in order to support parallel output, which is now the default mode. You can also now ask it to use the built-in RMT driver if you have other parts of your code that need the RMT peripheral.
    
    Two #defines control choices -- put either or both of these before including FastLED.h:
    
    #define FASTLED_RMT_CORE_DRIVER
    
    Uses the ESP core RMT driver. To do this, though, it allocates a big buffer to hold all of the pixel bits, so there is a memory and compute cost.
    
    #define FASTLED_RMT_SERIAL_OUTPUT
    
    Force serial output of each strip.
    
    * Documentation
    
    Describing the implementation and the compile-time switches
    
    * Removing files that should not be there
    
    * Fixed synchronization
    
    The previous checkin had bugs in the syncronization that caused problems in parallel mode when strips are different lengths.
    
    * Fixed a stupid bug
    
    Made the code bullet-proof in a few ways, but most importantly fixed a terrible integer underflow bug in the code that fills the RMT buffer.
    
    * Another major overhaul
    
    The big change in this version is the ability to support more than 8 controllers. Instead of assigning RMT channels to controllers in a fixed mapping, channels are assigned on the fly, allowing the driver to reuse channels as they become available.
    
    * Oops
    
    Didn't mean to check these in.
    
    * Fixed built-in driver mode
    
    Fixed the code so that it works with the built-in RMT driver. There's nothing special to do to enable it -- just #define FASTLED_RMT_BUILTIN_DRIVER true
    
    * Cleanup
    
    Fixing some documentation and configuration stuff
Commits on Apr 18, 2018
  1. Use consistent include syntax (#571)

    per1234 authored and focalintent committed Apr 18, 2018
    - Angle brackets for external includes
    - Space after #include directive
Commits on Mar 24, 2018
  1. Merge pull request #570 from per1234/relative-include

    kriegsman committed Mar 24, 2018
    Use relative paths for internal includes
Commits on Feb 17, 2018
  1. Use relative paths for internal includes

    per1234 committed Feb 16, 2018
    This change allows the library to be used outside of the standard libraries folders. An example of when this is useful is bundling the library with a sketch so that it can be distributed as a self-contained package.
Commits on Feb 7, 2018
Commits on Feb 1, 2018
  1. AttinyCore support (#558)

    keyos1 authored and focalintent committed Feb 1, 2018
    Arduino timer0_millis is called millis_timer_millis in AttinyCore from Spence Konde (https://github.com/SpenceKonde/ATTinyCore)
Commits on Jan 13, 2018
Commits on Jan 12, 2018
  1. MEK: bumping version number to do a release picking up numerous commu…

    kriegsman committed Jan 12, 2018
    …nity contributions -- thank you!
Commits on Nov 30, 2017
  1. Fix typo in fastpin_esp32 header (#533)

    tullo-x86 authored and focalintent committed Nov 30, 2017
    Bottom of file should expand FASTLED_NAMESPACE_END macro, not #define it
Commits on Nov 27, 2017
  1. Add support for Circuit Playground Express (#530)

    ladyada authored and focalintent committed Nov 27, 2017
    * fixed gemma and trinket m0 support - tested all pins on both boards w/NeoPixels
    
    * add support for CPX on all pads + neopix
Commits on Nov 2, 2017
  1. Makefile Compilation Fix (#490)

    NicoHood authored and focalintent committed Nov 2, 2017
    * renamed boolean to bool
    
    * Rename byte to uint8_t
    
    * Fix compilation error: 'NULL' was not declared in this scope
    
    * Always typedef RoReg and RwReg for the AVR platform
    
    * Include stdlib.h if abs() is not available
    This is required as Arduino.h #define's its own abs() makro. Outside of Arduino environments stdlib is required.
    Also see: arduino/Arduino#6684
    
    * Replace digitalWrite() with Pin Class by FastLed
    
    * Include string.h for memset function
    This include is normally done by Arduino.h but still required for makefile environments
    $ grep string.h . -r
    ./Arduino.h:#include <string.h>
    
    * Include math.h for pow()
    math.h is normally included by Arduino.h but required for a makefile build
    $ grep math.h . -r
    ./Arduino.h:#include <math.h>