forked from FastLED/FastLED
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tweak 4-way parallel output to work on pins 12-15 on esp8266 - keep b…
…locked out for now, needs some more testing.
- Loading branch information
1 parent
a448d5c
commit 20e5042
Showing
1 changed file
with
28 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#define FASTLED_INTERNAL | ||
#include "FastLED.h" | ||
|
||
/// Simplified form of bits rotating function. Based on code found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt - rotating | ||
/// data into LSB for a faster write (the code using this data can happily walk the array backwards) | ||
void transpose8x1_noinline(unsigned char *A, unsigned char *B) { | ||
uint32_t x, y, t; | ||
|
||
// Load the array and pack it into x and y. | ||
y = *(unsigned int*)(A); | ||
x = *(unsigned int*)(A+4); | ||
|
||
// pre-transform x | ||
t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7); | ||
t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14); | ||
|
||
// pre-transform y | ||
t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7); | ||
t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14); | ||
|
||
// final transform | ||
t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F); | ||
y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F); | ||
x = t; | ||
|
||
*((uint32_t*)B) = y; | ||
*((uint32_t*)(B+4)) = x; | ||
} |