summaryrefslogtreecommitdiffstats
path: root/src/keymaps/soispha/led
diff options
context:
space:
mode:
Diffstat (limited to 'src/keymaps/soispha/led')
-rw-r--r--src/keymaps/soispha/led/ledlayout.h76
-rw-r--r--src/keymaps/soispha/led/ledmap.h16
-rw-r--r--src/keymaps/soispha/led/rgb.c65
-rw-r--r--src/keymaps/soispha/led/translation.h10
4 files changed, 167 insertions, 0 deletions
diff --git a/src/keymaps/soispha/led/ledlayout.h b/src/keymaps/soispha/led/ledlayout.h
new file mode 100644
index 0000000..0ce994b
--- /dev/null
+++ b/src/keymaps/soispha/led/ledlayout.h
@@ -0,0 +1,76 @@
+// clang-format off
+const uint8_t PROGMEM ledmap[][RGB_MATRIX_LED_COUNT][3] = {
+ /* Dvorak */
+ [0] = {
+ RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED,
+ GREEN, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, GREEN,
+ GREEN, GREEN, GREEN, GREEN, YELLOW, GREEN, ORANGE, ORANGE, GREEN, YELLOW, GREEN, GREEN, GREEN, GREEN,
+ BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE,
+ PURPLE, PURPLE, PURPLE, PURPLE, PURPLE, OFF, OFF, PURPLE, PURPLE, PURPLE, PURPLE, BLUE,
+ ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED
+ },
+ /* Modifier */
+ [1] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, BRAIN_FREEZE
+ },
+ /* Symbols */
+ [2] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ BRAIN_FREEZE, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED
+ },
+ /* Numbers */
+ [3] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ ASSASSINS_RED, BRAIN_FREEZE, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED
+ },
+ /* Media */
+ [4] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ BRAIN_FREEZE, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, BRAIN_FREEZE,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, ASSASSINS_RED, ASSASSINS_RED, OFF, OFF, OFF, OFF, OFF,
+ ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED, ASSASSINS_RED
+ },
+ /* German characters */
+ [5] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ BRAIN_FREEZE, PURPLE, PURPLE, OFF, PURPLE, OFF, OFF, OFF, OFF, PURPLE, OFF, PURPLE, PURPLE, BRAIN_FREEZE,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF
+ },
+ /* Swedish characters */
+ [6] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, PURPLE, OFF, OFF, OFF, OFF, BRAIN_FREEZE, BRAIN_FREEZE, OFF, OFF, OFF, OFF, PURPLE, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF
+ },
+ /* Special characters */
+ [7] = {
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, BRAIN_FREEZE, OFF, OFF, OFF, OFF, OFF, OFF, BRAIN_FREEZE, OFF, OFF, OFF,
+ OFF, PURPLE, OFF, OFF, PURPLE, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
+ OFF, OFF, OFF, OFF, OFF, OFF
+ },
+};
+// clang-format on
diff --git a/src/keymaps/soispha/led/ledmap.h b/src/keymaps/soispha/led/ledmap.h
new file mode 100644
index 0000000..c2d1847
--- /dev/null
+++ b/src/keymaps/soispha/led/ledmap.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#define hsv(H, S, V) {H, S, V}
+
+#define OFF hsv(0, 0, 0) // 0x000000
+#define RED hsv(0, 255, 255) // 0xFF0000
+#define ORANGE hsv(27, 255, 255) // 0xFFA500
+#define GREEN hsv(85,255,128) // 0x008000
+#define YELLOW hsv(42,255,255) // 0xFFFF00
+#define BLUE hsv(170,255,255) // 0x0000FF
+#define PURPLE hsv(212,255,128) // 0x800080
+#define ASSASSINS_RED hsv(0,245,245) // 0xF50909
+#define BRAIN_FREEZE hsv(130,255,255) // 0x00F0FF
+
+#include "ledlayout.h"
+#include "translation.h"
diff --git a/src/keymaps/soispha/led/rgb.c b/src/keymaps/soispha/led/rgb.c
new file mode 100644
index 0000000..13ab60f
--- /dev/null
+++ b/src/keymaps/soispha/led/rgb.c
@@ -0,0 +1,65 @@
+#include QMK_KEYBOARD_H
+
+#include "ledmap.h"
+#define MOON_LED_LEVEL LED_LEVEL
+
+extern rgb_config_t rgb_matrix_config;
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_enable();
+}
+
+void set_layer_color(int layer) {
+ int n = sizeof(ledmap[layer]) / sizeof(*ledmap[layer]);
+
+ for (int i = 0; i < n; i++) {
+ /* The rgb index is counted from top to bottom, e.g.:
+ * 0 4
+ * 1 5
+ * 2 6
+ * 3 7 ..
+ *
+ * But we have an index (`i`) which counts from left to right, e.g.:
+ * 0 1 2 3
+ * 4 5 6 7
+ * ..
+ *
+ * Thus we use an translation table for the conversions (`i` -> `rgb_i`).
+ */
+ int rgb_i = translation[i];
+
+ HSV hsv = {
+ .h = pgm_read_byte(&ledmap[layer][i][0]),
+ .s = pgm_read_byte(&ledmap[layer][i][1]),
+ .v = pgm_read_byte(&ledmap[layer][i][2]),
+ };
+
+ if (!hsv.h && !hsv.s && !hsv.v) {
+ rgb_matrix_set_color(rgb_i, 0, 0, 0);
+ } else {
+ RGB rgb = hsv_to_rgb(hsv);
+ float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
+ rgb_matrix_set_color(rgb_i, f * rgb.r, f * rgb.g, f * rgb.b);
+ }
+ }
+}
+
+/* Callback. Is called once every time a new “frame” is rendered */
+bool rgb_matrix_indicators_user(void) {
+ if (keyboard_config.disable_layer_led) {
+ return false;
+ }
+
+ int layer = biton32(layer_state);
+ int defined_layer = sizeof(ledmap) / sizeof(*ledmap);
+
+ if (layer <= (defined_layer - 1)) {
+ set_layer_color(layer);
+ } else {
+ if (rgb_matrix_get_flags() == LED_FLAG_NONE) {
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ }
+
+ return true;
+}
diff --git a/src/keymaps/soispha/led/translation.h b/src/keymaps/soispha/led/translation.h
new file mode 100644
index 0000000..0140b79
--- /dev/null
+++ b/src/keymaps/soispha/led/translation.h
@@ -0,0 +1,10 @@
+// clang-format off
+const uint8_t translation[RGB_MATRIX_LED_COUNT] = {
+ 0, 5, 10, 15, 20, 25, 29, 65, 61, 56, 51, 46, 41, 36,
+ 1, 6, 11, 16, 21, 26, 30, 66, 62, 57, 52, 47, 42, 37,
+ 2, 7, 12, 17, 22, 27, 31, 67, 63, 58, 53, 48, 43, 38,
+ 3, 8, 13, 18, 23, 28, 64, 59, 54, 49, 44, 39,
+ 4, 9, 14, 19, 24, 35, 71, 60, 55, 50, 45, 39,
+ 32, 33, 34, 70, 69, 68
+};
+// clang-format on