#include <stdio.h>
#include <inttypes.h>
#include <unistd.h>
inline void Delay( unsigned long ms )
{
usleep( ms * 1000 );
}
typedef struct
{
/* colors */
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t white;
/* efects */
uint8_t fi;
uint8_t fo;
uint16_t delay;
} SColorRGBW;
uint8_t GetColorByIndex(SColorRGBW *s, uint8_t i) {
switch(i) {
case 0: return s->red;
case 1: return s->green;
case 2: return s->blue;
case 3: return s->white;
}
return 0;
}
void PrintColors2(uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_w){
printf("Colors: r:%d, g:%d, b:%d, w:%d\n", color_r
,color_g
,color_b
,color_w
); }
// Efects
void FadeOut(SColorRGBW *s){
uint8_t i=0, r=0, g=0, b=0, w=0;
r = s->red;
g = s->green;
b = s->blue;
w = s->white;
PrintColors2(r,g,b,w);
Delay(s->delay);
for (i = s->fo-1; i > 0; --i) {
if (r > 0) r--;
if (g > 0) g--;
if (b > 0) b--;
if (w > 0) w--;
PrintColors2(r,g,b,w);
Delay(s->delay);
}
}
void FadeIn(SColorRGBW *s){
uint8_t i=0, r=0, g=0, b=0, w=0, m=0;
r = s->red - (s->fi-1);
g = s->green - (s->fi-1);
b = s->blue - (s->fi-1);
w = s->white - (s->fi-1);
m = s->fi;
for (i = 0; i < m; i++) {
PrintColors2(r, g, b, w);
if (r > 0) r++;
if (g > 0) g++;
if (b > 0) b++;
if (w > 0) w++;
Delay(s->delay);
}
}
void SetColorRGBW(SColorRGBW *s, uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_w, uint8_t fi, uint8_t fo, uint16_t delay)
{
s->red = color_r;
s->green = color_g;
s->blue = color_b;
s->white = color_w;
s->delay = delay;
s->fi = fi;
s->fo = fo;
}
int main(){
SColorRGBW a,b;
// R G B W Fi Fo d
SetColorRGBW(&a, 255, 10, 15, 11, 10, 10, 1);
SetColorRGBW(&b, 255, 10, 15, 11, 10, 10, 1);
//printf("FadeOut:\n");
FadeOut(&a);
FadeIn(&b);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgppbmxpbmUgdm9pZCBEZWxheSggdW5zaWduZWQgbG9uZyBtcyApCnsKICAgIHVzbGVlcCggbXMgKiAxMDAwICk7Cn0KCnR5cGVkZWYgc3RydWN0CnsKICAgIC8qIGNvbG9ycyAqLwogICAgdWludDhfdCByZWQ7CiAgICB1aW50OF90IGdyZWVuOwogICAgdWludDhfdCBibHVlOwogICAgdWludDhfdCB3aGl0ZTsKCiAgICAvKiBlZmVjdHMgKi8KICAgIHVpbnQ4X3QgZmk7CiAgICB1aW50OF90IGZvOwogICAgdWludDE2X3QgZGVsYXk7Cn0gU0NvbG9yUkdCVzsKCnVpbnQ4X3QgR2V0Q29sb3JCeUluZGV4KFNDb2xvclJHQlcgKnMsIHVpbnQ4X3QgaSkgewogICBzd2l0Y2goaSkgewoJICAgY2FzZSAwOiByZXR1cm4gcy0+cmVkOwoJICAgY2FzZSAxOiByZXR1cm4gcy0+Z3JlZW47CgkgICBjYXNlIDI6IHJldHVybiBzLT5ibHVlOwoJICAgY2FzZSAzOiByZXR1cm4gcy0+d2hpdGU7CiAgIH0KICAgcmV0dXJuIDA7Cn0KCgoKdm9pZCBQcmludENvbG9yczIodWludDhfdCBjb2xvcl9yLCB1aW50OF90IGNvbG9yX2csIHVpbnQ4X3QgY29sb3JfYiwgdWludDhfdCBjb2xvcl93KXsKICAgICAgICBwcmludGYoIkNvbG9yczogcjolZCwgZzolZCwgYjolZCwgdzolZFxuIiwgY29sb3Jfcixjb2xvcl9nLGNvbG9yX2IsY29sb3Jfdyk7Cn0KCi8vIEVmZWN0cwp2b2lkIEZhZGVPdXQoU0NvbG9yUkdCVyAqcyl7Cgl1aW50OF90IGk9MCwgcj0wLCBnPTAsIGI9MCwgdz0wOwogICAgciA9IHMtPnJlZDsKICAgIGcgPSBzLT5ncmVlbjsKICAgIGIgPSBzLT5ibHVlOwogICAgdyA9IHMtPndoaXRlOwogICAgUHJpbnRDb2xvcnMyKHIsZyxiLHcpOwogICAgRGVsYXkocy0+ZGVsYXkpOwoJZm9yIChpID0gcy0+Zm8tMTsgaSA+IDA7IC0taSkgewoJCWlmIChyID4gMCkgci0tOwoJCWlmIChnID4gMCkgZy0tOwoJCWlmIChiID4gMCkgYi0tOwoJCWlmICh3ID4gMCkgdy0tOwogICAgICAgIFByaW50Q29sb3JzMihyLGcsYix3KTsKICAgICAgICBEZWxheShzLT5kZWxheSk7Cgl9Cn0KCnZvaWQgRmFkZUluKFNDb2xvclJHQlcgKnMpewogICAgdWludDhfdCBpPTAsIHI9MCwgZz0wLCBiPTAsIHc9MCwgbT0wOwogICAgciA9IHMtPnJlZCAgIC0gKHMtPmZpLTEpOwogICAgZyA9IHMtPmdyZWVuIC0gKHMtPmZpLTEpOwogICAgYiA9IHMtPmJsdWUgIC0gKHMtPmZpLTEpOwogICAgdyA9IHMtPndoaXRlIC0gKHMtPmZpLTEpOwoKICAgIG0gPSBzLT5maTsKICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgICBQcmludENvbG9yczIociwgZywgYiwgdyk7CiAgICAgICAgaWYgKHIgPiAwKSByKys7CiAgICAgICAgaWYgKGcgPiAwKSBnKys7CiAgICAgICAgaWYgKGIgPiAwKSBiKys7CiAgICAgICAgaWYgKHcgPiAwKSB3Kys7CiAgICAgICAgRGVsYXkocy0+ZGVsYXkpOwogICAgfQp9Cgp2b2lkIFNldENvbG9yUkdCVyhTQ29sb3JSR0JXICpzLCB1aW50OF90IGNvbG9yX3IsIHVpbnQ4X3QgY29sb3JfZywgdWludDhfdCBjb2xvcl9iLCB1aW50OF90IGNvbG9yX3csIHVpbnQ4X3QgZmksIHVpbnQ4X3QgZm8sIHVpbnQxNl90IGRlbGF5KQp7CiAgICBzLT5yZWQgICA9IGNvbG9yX3I7CiAgICBzLT5ncmVlbiA9IGNvbG9yX2c7CiAgICBzLT5ibHVlICA9IGNvbG9yX2I7CiAgICBzLT53aGl0ZSA9IGNvbG9yX3c7CiAgICBzLT5kZWxheSA9IGRlbGF5OwogICAgcy0+ZmkgICAgPSBmaTsKICAgIHMtPmZvICAgID0gZm87Cn0KCmludCBtYWluKCl7CiAgICBTQ29sb3JSR0JXIGEsYjsKICAgIC8vICAgICAgICAgICBSICAgIEcgICBCICAgVyAgIEZpICAgRm8gIGQKICAgIFNldENvbG9yUkdCVygmYSwgMjU1LCAxMCwgMTUsIDExLCAxMCwgIDEwLCAxKTsgICAKICAgIFNldENvbG9yUkdCVygmYiwgMjU1LCAxMCwgMTUsIDExLCAxMCwgIDEwLCAxKTsKICAgIC8vcHJpbnRmKCJGYWRlT3V0OlxuIik7CglGYWRlT3V0KCZhKTsKICAgIHByaW50ZigiRmFkZUluOlxuIik7CglGYWRlSW4oJmIpOwoJcmV0dXJuIDA7Cn0K
Colors: r:255, g:10, b:15, w:11
Colors: r:254, g:9, b:14, w:10
Colors: r:253, g:8, b:13, w:9
Colors: r:252, g:7, b:12, w:8
Colors: r:251, g:6, b:11, w:7
Colors: r:250, g:5, b:10, w:6
Colors: r:249, g:4, b:9, w:5
Colors: r:248, g:3, b:8, w:4
Colors: r:247, g:2, b:7, w:3
Colors: r:246, g:1, b:6, w:2
FadeIn:
Colors: r:246, g:1, b:6, w:2
Colors: r:247, g:2, b:7, w:3
Colors: r:248, g:3, b:8, w:4
Colors: r:249, g:4, b:9, w:5
Colors: r:250, g:5, b:10, w:6
Colors: r:251, g:6, b:11, w:7
Colors: r:252, g:7, b:12, w:8
Colors: r:253, g:8, b:13, w:9
Colors: r:254, g:9, b:14, w:10
Colors: r:255, g:10, b:15, w:11