Whitespace stuff. Tabs rule!
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Fabian Schlenz 2019-06-07 06:24:16 +02:00
parent b71faa3bcb
commit c5856a6f7a
41 changed files with 877 additions and 876 deletions

View File

@ -1,34 +1,34 @@
/** /**
Animations are structured in AnimationData as follows: Animations are structured in AnimationData as follows:
.colors contains .color_count*3 uint8_t values for R, G and B. .colors contains .color_count*3 uint8_t values for R, G and B.
.offsets contains the frame start offsets within .data + the length of the data. (So .offsets contains the frame start offsets within .data + the length of the data. (So
you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`. you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`.
Accordingly it has a length of .frame_count+1. Accordingly it has a length of .frame_count+1.
.data contains all frames data with a run-length compression with escape char 255. .data contains all frames data with a run-length compression with escape char 255.
This data references the index of one or multiple pixels in .colors. It starts at the This data references the index of one or multiple pixels in .colors. It starts at the
top left pixel and walks each row to the right before starting the next row. top left pixel and walks each row to the right before starting the next row.
To decode it: Start at a frame (indicated by .offsets). Get one byte as x. To decode it: Start at a frame (indicated by .offsets). Get one byte as x.
If x is <255: This is a single pixel of color x. If x is <255: This is a single pixel of color x.
if x is 255: Run-length-encoding. The next byte indicates of often the byte after that if x is 255: Run-length-encoding. The next byte indicates of often the byte after that
will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}. will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}.
A special case that may happen in larger GIFs is that there are more than 255 repetitions A special case that may happen in larger GIFs is that there are more than 255 repetitions
of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10}, of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10},
e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder. e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder.
Regarding colors in .data: Regarding colors in .data:
Color 0 means "keep the color from the previous frame". This color should never appear on frame #0. Color 0 means "keep the color from the previous frame". This color should never appear on frame #0.
Color 1 means "show the background color". Color 1 means "show the background color".
All other color values point to a color in .colors - with an offset of 2. All other color values point to a color in .colors - with an offset of 2.
So if in .data there's a color 3, paint this pixel in .colors[1]. So if in .data there's a color 3, paint this pixel in .colors[1].
.individual_delays contains either 1 or .frame_count delays. They are given in ms and .individual_delays contains either 1 or .frame_count delays. They are given in ms and
indicate how long the matching frame should be displayed. If all times are equal, then indicate how long the matching frame should be displayed. If all times are equal, then
it contains only one entry and .individual_delays will be false. it contains only one entry and .individual_delays will be false.
.w and .h contain the dimensions of the image. .w and .h contain the dimensions of the image.
**/ **/
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>
@ -36,7 +36,7 @@
#include "my_fastled.h" #include "my_fastled.h"
class Animation { class Animation {
protected: protected:
AnimationData* data; AnimationData* data;
unsigned long currentFrameSince; unsigned long currentFrameSince;
uint8_t currentFrame = 0; uint8_t currentFrame = 0;
@ -53,7 +53,7 @@ class Animation {
void drawFrame(uint8_t frame_index); void drawFrame(uint8_t frame_index);
void drawPixel(int index, CRGB* color); void drawPixel(int index, CRGB* color);
uint16_t getFrameDelay(int frame); uint16_t getFrameDelay(int frame);
public: public:
Animation(AnimationData* d); Animation(AnimationData* d);
void setFgColor(CRGB*); void setFgColor(CRGB*);
void setBgColor(CRGB* bg_color); void setBgColor(CRGB* bg_color);

View File

@ -6,9 +6,9 @@
#include <Arduino.h> #include <Arduino.h>
class Effect { class Effect {
protected: protected:
Window window = {0, 0, LED_WIDTH, LED_HEIGHT}; // Use a full screen window per default. Window window = {0, 0, LED_WIDTH, LED_HEIGHT}; // Use a full screen window per default.
public: public:
virtual void loop() = 0; virtual void loop() = 0;
boolean supports_window = false; boolean supports_window = false;
virtual boolean can_be_shown_with_clock() { return false; }; virtual boolean can_be_shown_with_clock() { return false; };

View File

@ -1,34 +1,34 @@
/** /**
Animations are structured in AnimationData as follows: Animations are structured in AnimationData as follows:
.colors contains .color_count*3 uint8_t values for R, G and B. .colors contains .color_count*3 uint8_t values for R, G and B.
.offsets contains the frame start offsets within .data + the length of the data. (So .offsets contains the frame start offsets within .data + the length of the data. (So
you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`. you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`.
Accordingly it has a length of .frame_count+1. Accordingly it has a length of .frame_count+1.
.data contains all frames data with a run-length compression with escape char 255. .data contains all frames data with a run-length compression with escape char 255.
This data references the index of one or multiple pixels in .colors. It starts at the This data references the index of one or multiple pixels in .colors. It starts at the
top left pixel and walks each row to the right before starting the next row. top left pixel and walks each row to the right before starting the next row.
To decode it: Start at a frame (indicated by .offsets). Get one byte as x. To decode it: Start at a frame (indicated by .offsets). Get one byte as x.
If x is <255: This is a single pixel of color x. If x is <255: This is a single pixel of color x.
if x is 255: Run-length-encoding. The next byte indicates of often the byte after that if x is 255: Run-length-encoding. The next byte indicates of often the byte after that
will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}. will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}.
A special case that may happen in larger GIFs is that there are more than 255 repetitions A special case that may happen in larger GIFs is that there are more than 255 repetitions
of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10}, of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10},
e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder. e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder.
Regarding colors in .data: Regarding colors in .data:
Color 0 means "keep the color from the previous frame". This color should never appear on frame #0. Color 0 means "keep the color from the previous frame". This color should never appear on frame #0.
Color 1 means "show the background color". Color 1 means "show the background color".
All other color values point to a color in .colors - with an offset of 2. All other color values point to a color in .colors - with an offset of 2.
So if in .data there's a color 3, paint this pixel in .colors[1]. So if in .data there's a color 3, paint this pixel in .colors[1].
.individual_delays contains either 1 or .frame_count delays. They are given in ms and .individual_delays contains either 1 or .frame_count delays. They are given in ms and
indicate how long the matching frame should be displayed. If all times are equal, then indicate how long the matching frame should be displayed. If all times are equal, then
it contains only one entry and .individual_delays will be false. it contains only one entry and .individual_delays will be false.
.w and .h contain the dimensions of the image. .w and .h contain the dimensions of the image.
**/ **/
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>

View File

@ -6,13 +6,13 @@
#include "Animation.h" #include "Animation.h"
class AnimationEffect : public Effect { class AnimationEffect : public Effect {
private: private:
Animation *animation; Animation *animation;
AnimationData *animation_data; AnimationData *animation_data;
CRGB *bg_color; CRGB *bg_color;
uint16_t xOffset; uint16_t xOffset;
uint16_t yOffset; uint16_t yOffset;
public: public:
AnimationEffect(AnimationData* anim) : AnimationEffect(anim, new CRGB(0x000000), 0, 0) {} AnimationEffect(AnimationData* anim) : AnimationEffect(anim, new CRGB(0x000000), 0, 0) {}
AnimationEffect(AnimationData* anim, CRGB* background_color) : AnimationEffect(anim, background_color, 0, 0) {} AnimationEffect(AnimationData* anim, CRGB* background_color) : AnimationEffect(anim, background_color, 0, 0) {}
AnimationEffect(AnimationData* anim, CRGB* bg_color, int x, int y); AnimationEffect(AnimationData* anim, CRGB* bg_color, int x, int y);

View File

@ -5,11 +5,11 @@
#include "functions.h" #include "functions.h"
class BellEffect : public Effect { class BellEffect : public Effect {
private: private:
CRGB color_on = CRGB(0xFFFF00); CRGB color_on = CRGB(0xFFFF00);
CRGB color_off = CRGB(0x000000); CRGB color_off = CRGB(0x000000);
boolean invert = false; boolean invert = false;
public: public:
void loop(); void loop();
}; };

View File

@ -4,7 +4,7 @@
#include "Effect.h" #include "Effect.h"
class BigClockEffect : public Effect { class BigClockEffect : public Effect {
private: private:
CRGB color_h = CRGB(0xFF0000); CRGB color_h = CRGB(0xFF0000);
CRGB color_m = CRGB(0x00FF00); CRGB color_m = CRGB(0x00FF00);
CRGB color_colon = CRGB(0xFFFF00); CRGB color_colon = CRGB(0xFFFF00);
@ -17,7 +17,7 @@ class BigClockEffect : public Effect {
void drawSprite(const unsigned char* sprite, int xOffset, int yOffset, CRGB color); void drawSprite(const unsigned char* sprite, int xOffset, int yOffset, CRGB color);
public: public:
void loop(); void loop();
}; };

View File

@ -6,10 +6,10 @@
#include <FastLED.h> #include <FastLED.h>
class ClockEffect : public Effect { class ClockEffect : public Effect {
private: private:
Window window = {0, LED_HEIGHT - 6, LED_WIDTH, 6}; Window window = {0, LED_HEIGHT - 6, LED_WIDTH, 6};
public: public:
void loop(); void loop();
void loop(boolean invert, CRGB fg_color, CRGB bg_color); void loop(boolean invert, CRGB fg_color, CRGB bg_color);
}; };

View File

@ -5,11 +5,11 @@
#include "effects.h" #include "effects.h"
class CycleEffect : public Effect { class CycleEffect : public Effect {
private: private:
Effect* effect; Effect* effect;
uint16_t effect_id = -1; uint16_t effect_id = -1;
unsigned long effectSince = 0; unsigned long effectSince = 0;
public: public:
void changeEffect(); void changeEffect();
void start(); void start();
void stop(); void stop();

View File

@ -3,13 +3,13 @@
#include "config.h" #include "config.h"
class SingleDynamicEffect : public Effect { class SingleDynamicEffect : public Effect {
protected: protected:
static const int factor = 2; static const int factor = 2;
static const int tile_count = LED_WIDTH/factor * LED_HEIGHT/factor; static const int tile_count = LED_WIDTH/factor * LED_HEIGHT/factor;
CRGB tiles[tile_count]; CRGB tiles[tile_count];
CRGB old_tiles[tile_count]; CRGB old_tiles[tile_count];
uint8_t blend = 0; uint8_t blend = 0;
public: public:
SingleDynamicEffect(); SingleDynamicEffect();
void init(); void init();
boolean can_be_shown_with_clock(); boolean can_be_shown_with_clock();
@ -18,6 +18,6 @@ class SingleDynamicEffect : public Effect {
}; };
class MultiDynamicEffect : public SingleDynamicEffect { class MultiDynamicEffect : public SingleDynamicEffect {
public: public:
void loop(); void loop();
}; };

View File

@ -3,7 +3,7 @@
#include "my_fastled.h" #include "my_fastled.h"
class FireEffect : public Effect { class FireEffect : public Effect {
private: private:
uint8_t* data; uint8_t* data;
uint8_t spark_temp(); uint8_t spark_temp();
void cooldown(); void cooldown();
@ -12,7 +12,7 @@ class FireEffect : public Effect {
void draw(); void draw();
static CRGBPalette16 palette; static CRGBPalette16 palette;
public: public:
void start(); void start();
void stop(); void stop();
void loop(); void loop();

View File

@ -8,14 +8,14 @@
#include "my_color_palettes.h" #include "my_color_palettes.h"
class MatrixEffectColumn { class MatrixEffectColumn {
private: private:
int x, y; int x, y;
int length; int length;
Window* window; Window* window;
uint16_t speed; uint16_t speed;
boolean running; boolean running;
unsigned long last_move = 0; unsigned long last_move = 0;
public: public:
MatrixEffectColumn(); MatrixEffectColumn();
MatrixEffectColumn(Window* win, int xPos); MatrixEffectColumn(Window* win, int xPos);
@ -29,9 +29,9 @@ class MatrixEffectColumn {
}; };
class MatrixEffect : public Effect { class MatrixEffect : public Effect {
private: private:
MatrixEffectColumn columns[LED_WIDTH]; MatrixEffectColumn columns[LED_WIDTH];
public: public:
boolean can_be_shown_with_clock(); boolean can_be_shown_with_clock();
MatrixEffect(); MatrixEffect();
void loop(); void loop();

View File

@ -6,7 +6,7 @@
#include "Effect.h" #include "Effect.h"
class Sinematrix3Effect : public Effect { class Sinematrix3Effect : public Effect {
private: private:
double pangle = 0; double pangle = 0;
double angle = 0; double angle = 0;
double sx = 0; double sx = 0;
@ -27,7 +27,7 @@ class Sinematrix3Effect : public Effect {
double fy = 1.0 / (LED_HEIGHT / PI); double fy = 1.0 / (LED_HEIGHT / PI);
Matrix rotate; Matrix rotate;
public: public:
boolean supports_window = true; boolean supports_window = true;
boolean can_be_shown_with_clock(); boolean can_be_shown_with_clock();
boolean clock_as_mask(); boolean clock_as_mask();

View File

@ -5,9 +5,9 @@
#include "my_fastled.h" #include "my_fastled.h"
class StaticEffect : public Effect { class StaticEffect : public Effect {
private: private:
CRGB color; CRGB color;
public: public:
StaticEffect(CRGB col); StaticEffect(CRGB col);
boolean supports_window = true; boolean supports_window = true;
void loop(); void loop();

View File

@ -5,11 +5,11 @@
#include <Arduino.h> #include <Arduino.h>
class TwirlEffect : public Effect { class TwirlEffect : public Effect {
private: private:
uint8_t angleOffset = 0; uint8_t angleOffset = 0;
double center_x = 8; double center_x = 8;
double center_y = 8; double center_y = 8;
public: public:
void loop(); void loop();
}; };

View File

@ -1,34 +1,34 @@
/** /**
Animations are structured in AnimationData as follows: Animations are structured in AnimationData as follows:
.colors contains .color_count*3 uint8_t values for R, G and B. .colors contains .color_count*3 uint8_t values for R, G and B.
.offsets contains the frame start offsets within .data + the length of the data. (So .offsets contains the frame start offsets within .data + the length of the data. (So
you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`. you can always do something like `for (int i=anim.offsets[i]; i<anim.offsets[i+1]; i++)`.
Accordingly it has a length of .frame_count+1. Accordingly it has a length of .frame_count+1.
.data contains all frames data with a run-length compression with escape char 255. .data contains all frames data with a run-length compression with escape char 255.
This data references the index of one or multiple pixels in .colors. It starts at the This data references the index of one or multiple pixels in .colors. It starts at the
top left pixel and walks each row to the right before starting the next row. top left pixel and walks each row to the right before starting the next row.
To decode it: Start at a frame (indicated by .offsets). Get one byte as x. To decode it: Start at a frame (indicated by .offsets). Get one byte as x.
If x is <255: This is a single pixel of color x. If x is <255: This is a single pixel of color x.
if x is 255: Run-length-encoding. The next byte indicates of often the byte after that if x is 255: Run-length-encoding. The next byte indicates of often the byte after that
will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}. will be repeated. So, {255, 4, 10} is equal to {10, 10, 10, 10}.
A special case that may happen in larger GIFs is that there are more than 255 repetitions A special case that may happen in larger GIFs is that there are more than 255 repetitions
of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10}, of a color. Those will be split, so 355*color #10 will be: {255, 255, 10, 255, 100, 10},
e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder. e.g. 255*10 + 100*10. Usually this shouldn't need special handling within a decoder.
Regarding colors in .data: Regarding colors in .data:
Color 0 means "keep the color from the previous frame". This color should never appear on frame #0. Color 0 means "keep the color from the previous frame". This color should never appear on frame #0.
Color 1 means "show the background color". Color 1 means "show the background color".
All other color values point to a color in .colors - with an offset of 2. All other color values point to a color in .colors - with an offset of 2.
So if in .data there's a color 3, paint this pixel in .colors[1]. So if in .data there's a color 3, paint this pixel in .colors[1].
.individual_delays contains either 1 or .frame_count delays. They are given in ms and .individual_delays contains either 1 or .frame_count delays. They are given in ms and
indicate how long the matching frame should be displayed. If all times are equal, then indicate how long the matching frame should be displayed. If all times are equal, then
it contains only one entry and .individual_delays will be false. it contains only one entry and .individual_delays will be false.
.w and .h contain the dimensions of the image. .w and .h contain the dimensions of the image.
**/ **/
#include "Animation.h" #include "Animation.h"
#include "functions.h" #include "functions.h"

View File

@ -137,4 +137,3 @@ uint8_t animation_weather_icons_data[] PROGMEM = {
uint16_t animation_weather_icons_delays[] = {0}; uint16_t animation_weather_icons_delays[] = {0};
uint16_t animation_weather_icons_offsets[] = {0,69,210,354,489,621,734,821,925,1061,1216,1359,1479,1627,1772,1841,1954,2060,2166,2308,2421,2551,2681,2763,2845,2927,3009,3093}; uint16_t animation_weather_icons_offsets[] = {0,69,210,354,489,621,734,821,925,1061,1216,1359,1479,1627,1772,1841,1954,2060,2166,2308,2421,2551,2681,2763,2845,2927,3009,3093};
AnimationData animation_weather_icons = {&animation_weather_icons_colors[0], &animation_weather_icons_data[0], &animation_weather_icons_offsets[0], &animation_weather_icons_delays[0], false, 15, 27, 16, 16}; AnimationData animation_weather_icons = {&animation_weather_icons_colors[0], &animation_weather_icons_data[0], &animation_weather_icons_offsets[0], &animation_weather_icons_delays[0], false, 15, 27, 16, 16};

View File

@ -2,11 +2,11 @@
__attribute__ ((aligned(4))) extern const TProgmemRGBGradientPalette_byte palette_fire[] FL_PROGMEM = { __attribute__ ((aligned(4))) extern const TProgmemRGBGradientPalette_byte palette_fire[] FL_PROGMEM = {
0, 0, 0, 0, //black 0, 0, 0, 0, //black
128, 255, 0, 0, //red 128, 255, 0, 0, //red
224, 255,255, 0, //bright yellow 224, 255,255, 0, //bright yellow
255, 255,255,255 }; //full white 255, 255,255,255 }; //full white
__attribute__ ((aligned(4))) extern const TProgmemRGBGradientPalette_byte palette_matrix[] FL_PROGMEM = { __attribute__ ((aligned(4))) extern const TProgmemRGBGradientPalette_byte palette_matrix[] FL_PROGMEM = {
0, 0, 0, 0, // black 0, 0, 0, 0, // black
200, 0,255, 0, // green 200, 0,255, 0, // green
255, 255,255,255 }; // white 255, 255,255,255 }; // white

View File

@ -38,6 +38,6 @@ void BigClockEffect::loop() {
/*if (ntpClient.getSeconds() & 1) { /*if (ntpClient.getSeconds() & 1) {
leds[XYsafe(13, 2)] = color_colon; leds[XYsafe(13, 2)] = color_colon;
leds[XYsafe(13, 5)] = color_colon; leds[XYsafe(13, 5)] = color_colon;
}*/ }*/
drawNumber(ntpClient.getSeconds(), 8, 8, color_colon); drawNumber(ntpClient.getSeconds(), 8, 8, color_colon);
} }

View File

@ -2,15 +2,15 @@
#include "config.h" #include "config.h"
#ifndef MQTT_ENABLE #ifndef MQTT_ENABLE
#pragma message "MQTT_ENABLE is false. Skipping MQTT." #pragma message "MQTT_ENABLE is false. Skipping MQTT."
#else #else
#if defined( ESP8266 ) #if defined( ESP8266 )
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#elif defined( ESP32 ) #elif defined( ESP32 )
#include <WiFi.h> #include <WiFi.h>
#else #else
#error "Neither ESP32 nor ESP8266 set..." #error "Neither ESP32 nor ESP8266 set..."
#endif #endif
#include <PubSubClient.h> #include <PubSubClient.h>
#include "EffectEntry.h" #include "EffectEntry.h"

View File

@ -1,4 +1,5 @@
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#if defined( ESP8266 ) #if defined( ESP8266 )
#include <ESP8266mDNS.h> #include <ESP8266mDNS.h>
#elif defined( ESP32 ) #elif defined( ESP32 )
@ -6,6 +7,7 @@
#else #else
#error Neither ESP32 nor ESP8266 set! #error Neither ESP32 nor ESP8266 set!
#endif #endif
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#include "config.h" #include "config.h"