]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - util/rgblight_breathing_table_calc.c
If RGBLIGHT_EFFECT_BREATHE_CENTER is undefined, use fixed breathe table instead of...
[qmk_firmware.git] / util / rgblight_breathing_table_calc.c
diff --git a/util/rgblight_breathing_table_calc.c b/util/rgblight_breathing_table_calc.c
new file mode 100644 (file)
index 0000000..fc4d49e
--- /dev/null
@@ -0,0 +1,49 @@
+//
+// calculate rgblight_effect_breathe_table[] values
+//
+// this is host program for quantum/rgblight.c:void rgblight_effect_breathing();
+//
+// example:
+//  $ edit util/rgblight_breathing_table_calc.c
+//  $ cc -o util/rgblight_breathing_table_calc util/rgblight_breathing_table_calc.c
+//  $ ./util/rgblight_breathing_table_calc > keyboards/KEYBOARD_NAME/keymaps/KEYMAP_NAME/rgblight_breathe_table.h
+//
+#include <stdio.h>
+#include <math.h>
+#include <stdint.h>
+
+/// customize breeathing effect part ///////////////////////////
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
+#define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+////////////////////////////////////////////////////////////////
+
+int main(void) {
+    int pos, step;
+    int table[256];
+    for (pos = 0; pos < 256; pos ++ ) {
+        table[pos] = (uint8_t)(
+              (exp(sin((pos/255.0)*M_PI))- RGBLIGHT_EFFECT_BREATHE_CENTER/M_E)
+              * (RGBLIGHT_EFFECT_BREATHE_MAX/(M_E-1/M_E))
+              );
+    }
+    printf("#ifndef RGBLIGHT_EFFECT_BREATHE_TABLE\n");
+    printf("#define RGBLIGHT_EFFECT_BREATHE_TABLE\n\n");
+    printf("const uint8_t rgblight_effect_breathe_table[] PROGMEM = {\n");
+    printf("  /* #define RGBLIGHT_EFFECT_BREATHE_CENTER   %.2f */\n", RGBLIGHT_EFFECT_BREATHE_CENTER);
+    printf("  /* #define RGBLIGHT_EFFECT_BREATHE_MAX      %d */\n", RGBLIGHT_EFFECT_BREATHE_MAX);
+
+    for (int s = 0, step = (1<<s); s < 3 ; s += 1, step = (1<<s) ) {
+        printf("\n #if RGBLIGHT_BREATHE_TABLE_SIZE == %d\n",
+               s == 0 ? 256:(s== 1 ? 128: 64));
+        for (pos = 0; pos < 256; pos += step ) {
+            printf("  0x%x%s", table[pos], (pos+step)>=256?"":"," );
+            if ((pos+step) % 8 == 0)
+                printf("\n");
+        }
+        printf(" #endif /* %d bytes table */\n", s == 0 ? 256:(s== 1 ? 128: 64));
+    }
+    printf("};\n");
+    printf("\nstatic const int table_scale = 256/sizeof(rgblight_effect_breathe_table);\n");
+    printf("\n#endif /* RGBLIGHT_EFFECT_BREATHE_TABLE */\n");
+    return 0;
+}