Skip to content

Commit

Permalink
Merge pull request #3552 from TripleWhy/seedRandom16
Browse files Browse the repository at this point in the history
Seed FastLED's RNG
  • Loading branch information
blazoncek authored Nov 29, 2023
2 parents 8e0809c + 25c5e82 commit bf4b29b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 12 deletions.
24 changes: 12 additions & 12 deletions wled00/FX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1714,7 +1714,7 @@ uint16_t mode_multi_comet(void) {
}
comets[i]++;
} else {
if(!random(SEGLEN)) {
if(!random16(SEGLEN)) {
comets[i] = 0;
}
}
Expand Down Expand Up @@ -1990,7 +1990,7 @@ uint16_t mode_fire_2012() {

// Step 1. Cool down every cell a little
for (int i = 0; i < SEGLEN; i++) {
uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(4);
uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random8(4);
uint8_t minTemp = (i<ignition) ? (ignition-i)/4 + 16 : 0; // should not become black in ignition area
uint8_t temp = qsub8(heat[i], cool);
heat[i] = temp<minTemp ? minTemp : temp;
Expand Down Expand Up @@ -4566,15 +4566,15 @@ class AuroraWave {

public:
void init(uint32_t segment_length, CRGB color) {
ttl = random(500, 1501);
ttl = random16(500, 1501);
basecolor = color;
basealpha = random(60, 101) / (float)100;
basealpha = random8(60, 101) / (float)100;
age = 0;
width = random(segment_length / 20, segment_length / W_WIDTH_FACTOR); //half of width to make math easier
width = random16(segment_length / 20, segment_length / W_WIDTH_FACTOR); //half of width to make math easier
if (!width) width = 1;
center = random(101) / (float)100 * segment_length;
goingleft = random(0, 2) == 0;
speed_factor = (random(10, 31) / (float)100 * W_MAX_SPEED / 255);
center = random8(101) / (float)100 * segment_length;
goingleft = random8(0, 2) == 0;
speed_factor = (random8(10, 31) / (float)100 * W_MAX_SPEED / 255);
alive = true;
}

Expand Down Expand Up @@ -4659,7 +4659,7 @@ uint16_t mode_aurora(void) {
waves = reinterpret_cast<AuroraWave*>(SEGENV.data);

for (int i = 0; i < SEGENV.aux1; i++) {
waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random(0, 3))));
waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random8(0, 3))));
}
} else {
waves = reinterpret_cast<AuroraWave*>(SEGENV.data);
Expand All @@ -4671,7 +4671,7 @@ uint16_t mode_aurora(void) {

if(!(waves[i].stillAlive())) {
//If a wave dies, reinitialize it starts over.
waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random(0, 3))));
waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random8(0, 3))));
}
}

Expand Down Expand Up @@ -5883,7 +5883,7 @@ uint16_t mode_2Dghostrider(void) {
if (lighter->reg[i]) {
lighter->lightersPosY[i] = lighter->gPosY;
lighter->lightersPosX[i] = lighter->gPosX;
lighter->Angle[i] = lighter->gAngle + random(-10, 10);
lighter->Angle[i] = lighter->gAngle + ((int)random8(20) - 10);
lighter->time[i] = 0;
lighter->reg[i] = false;
} else {
Expand Down Expand Up @@ -6744,7 +6744,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline.

uint16_t size = 0;
uint8_t fadeVal = map(SEGMENT.speed,0,255, 224, 254);
uint16_t pos = random(SEGLEN); // Set a random starting position.
uint16_t pos = random16(SEGLEN); // Set a random starting position.

um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
Expand Down
10 changes: 10 additions & 0 deletions wled00/wled.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,16 @@ void WLED::setup()
initServer();
DEBUG_PRINT(F("heap ")); DEBUG_PRINTLN(ESP.getFreeHeap());

// Seed FastLED random functions with an esp random value, which already works properly at this point.
#if defined(ARDUINO_ARCH_ESP32)
const uint32_t seed32 = esp_random();
#elif defined(ARDUINO_ARCH_ESP8266)
const uint32_t seed32 = RANDOM_REG32;
#else
const uint32_t seed32 = random(std::numeric_limits<long>::max());
#endif
random16_set_seed((uint16_t)((seed32 & 0xFFFF) ^ (seed32 >> 16)));

#if WLED_WATCHDOG_TIMEOUT > 0
enableWatchdog();
#endif
Expand Down

0 comments on commit bf4b29b

Please sign in to comment.