From 2d05c7fc2500582fd0605569fe929e04bb8cc8ae Mon Sep 17 00:00:00 2001
From: ziptyze <mwcordier@gmail.com>
Date: Wed, 13 Apr 2022 02:04:38 -0400
Subject: [PATCH] [Keyboard] super16 update (#16494)

---
 keyboards/1upkeyboards/super16v2/config.h     | 81 ++++++++++++++-----
 .../super16v2/keymaps/default/keymap.c        | 18 ++++-
 .../super16v2/keymaps/mouse/keymap.c          | 50 ++++++++++++
 .../super16v2/keymaps/mouse/readme.md         |  1 +
 keyboards/1upkeyboards/super16v2/rules.mk     |  5 +-
 keyboards/1upkeyboards/super16v2/super16v2.c  | 24 ++++++
 6 files changed, 156 insertions(+), 23 deletions(-)
 create mode 100644 keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
 create mode 100644 keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md

diff --git a/keyboards/1upkeyboards/super16v2/config.h b/keyboards/1upkeyboards/super16v2/config.h
index 4685e66b2d..9832c28bef 100644
--- a/keyboards/1upkeyboards/super16v2/config.h
+++ b/keyboards/1upkeyboards/super16v2/config.h
@@ -22,6 +22,8 @@
 #define MATRIX_ROWS 4
 #define MATRIX_COLS 4
 
+#define MOUSEKEY_MOVE_DELTA 25
+
 /*
  * Keyboard Matrix Assignments
  *
@@ -37,6 +39,9 @@
 #define MATRIX_ROW_PINS { D1, D2, D3, D4 }
 #define MATRIX_COL_PINS { D5, D6, C2, D0 }
 
+#define ENCODERS_PAD_A { B1, B3 }
+#define ENCODERS_PAD_B { B2, B4 }
+
 #define UNUSED_PINS
 
 /* COL2ROW, ROW2COL */
@@ -58,28 +63,62 @@
 //#define BACKLIGHT_BREATHING
 
 #define RGB_DI_PIN B5
+#define DRIVER_LED_TOTAL 20
 #ifdef RGB_DI_PIN
-#    define RGBLED_NUM 20
-#    define RGBLIGHT_HUE_STEP 8
-#    define RGBLIGHT_SAT_STEP 8
-#    define RGBLIGHT_VAL_STEP 8
-#    define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-#    define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-#    define RGBLIGHT_EFFECT_BREATHING
-#    define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#    define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#    define RGBLIGHT_EFFECT_SNAKE
-#    define RGBLIGHT_EFFECT_KNIGHT
-#    define RGBLIGHT_EFFECT_CHRISTMAS
-#    define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#    define RGBLIGHT_EFFECT_RGB_TEST
-#    define RGBLIGHT_EFFECT_ALTERNATING
-/*== customize breathing effect ==*/
-/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
-//#    define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
-/*==== use exp() and sin() ====*/
-//#    define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
-//#    define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+#    define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+#    define RGBLIGHT_LIMIT_VAL 255
+#endif
+#ifdef RGB_MATRIX_ENABLE
+#    define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#    define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#    define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#    define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#    define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#    define ENABLE_RGB_MATRIX_BREATHING
+#    define ENABLE_RGB_MATRIX_BAND_SAT
+#    define ENABLE_RGB_MATRIX_BAND_VAL
+#    define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#    define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#    define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#    define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#    define ENABLE_RGB_MATRIX_CYCLE_ALL
+#    define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#    define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#    define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#    define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#    define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#    define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#    define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#    define ENABLE_RGB_MATRIX_DUAL_BEACON
+#    define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#    define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#    define ENABLE_RGB_MATRIX_RAINDROPS
+#    define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#    define ENABLE_RGB_MATRIX_HUE_BREATHING
+#    define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#    define ENABLE_RGB_MATRIX_HUE_WAVE
+#    define ENABLE_RGB_MATRIX_PIXEL_RAIN
+#    define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#    define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+//#    define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+//#    define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#    define ENABLE_RGB_MATRIX_SPLASH
+//#    define ENABLE_RGB_MATRIX_MULTISPLASH
+//#    define ENABLE_RGB_MATRIX_SOLID_SPLASH
+//#    define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
 #endif
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c b/keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c
index dc58023a37..b80db58bae 100644
--- a/keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c
@@ -27,8 +27,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [1] = LAYOUT_ortho_4x4( /* Fn Layer */
     RGB_TOG,   RGB_HUI,    RGB_SAI,    RGB_VAI,
     RGB_MOD,   RGB_HUD,    RGB_SAD,    RGB_VAD,
-    KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS,
+    RGB_SPD,   RGB_SPI,    KC_TRNS,    KC_TRNS,
     KC_TRNS,   KC_TRNS,    KC_TRNS,    RESET
   ),
 };
 
+bool encoder_update_user(uint8_t index, bool clockwise) {
+    if (index == 0) { /* First encoder */
+        if (clockwise) {
+            tap_code_delay(KC_VOLU, 10);
+        } else {
+            tap_code_delay(KC_VOLD, 10);
+        }
+    } else if (index == 1) { /* Second encoder */
+        if (clockwise) {
+            rgb_matrix_increase_hue();
+        } else {
+            rgb_matrix_decrease_hue();
+        }
+    }
+    return false;
+}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c b/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
new file mode 100644
index 0000000000..86ea58e8a5
--- /dev/null
+++ b/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2022 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_ortho_4x4( /* Base */
+    KC_TRNS,    KC_DELETE,    KC_BACKSPACE,    KC_MUTE,
+    KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
+    KC_P1,    KC_P2,    KC_P3,    KC_PSLS,
+    MO(1),    KC_P0,    KC_PDOT,  KC_BTN3
+  ),
+
+  [1] = LAYOUT_ortho_4x4( /* Fn Layer */
+    RGB_TOG,   RGB_HUI,    RGB_SAI,    RGB_VAI,
+    RGB_MOD,   RGB_HUD,    RGB_SAD,    RGB_VAD,
+    RGB_SPD,   RGB_SPI,    KC_TRNS,    KC_TRNS,
+    KC_TRNS,   KC_TRNS,    KC_TRNS,    RESET
+  ),
+};
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+    if (index == 0) { /* First encoder */
+        if (clockwise) {
+            tap_code_delay(KC_MS_RIGHT, 10);
+        } else {
+            tap_code_delay(KC_MS_LEFT, 10);
+        }
+    } else if (index == 1) { /* Second encoder */
+        if (clockwise) {
+            tap_code_delay(KC_AUDIO_VOL_UP, 10);
+        } else {
+            tap_code_delay(KC_AUDIO_VOL_DOWN, 10);
+        }
+    }
+    return false;
+}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md b/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md
new file mode 100644
index 0000000000..e229fcba74
--- /dev/null
+++ b/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md
@@ -0,0 +1 @@
+# The default keymap for Super 16 V2
diff --git a/keyboards/1upkeyboards/super16v2/rules.mk b/keyboards/1upkeyboards/super16v2/rules.mk
index d31d53cead..3e20247dff 100644
--- a/keyboards/1upkeyboards/super16v2/rules.mk
+++ b/keyboards/1upkeyboards/super16v2/rules.mk
@@ -14,5 +14,8 @@ CONSOLE_ENABLE = no         # Console for debug
 COMMAND_ENABLE = no         # Commands for debug and configuration
 NKRO_ENABLE = no            # Enable N-Key Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
 AUDIO_ENABLE = no           # Audio output
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = WS2812
+ENCODER_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/super16v2/super16v2.c b/keyboards/1upkeyboards/super16v2/super16v2.c
index fc73f700c4..ff7ce33c84 100644
--- a/keyboards/1upkeyboards/super16v2/super16v2.c
+++ b/keyboards/1upkeyboards/super16v2/super16v2.c
@@ -15,3 +15,27 @@
  */
 
 #include "super16v2.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+    // Key Matrix to LED Index
+    { 3, 2, 1, 0 },
+    { 7, 6, 5, 4 },
+    { 11, 10, 9, 8 },
+    { 15, 14, 13, 12 }
+}, {
+    // LED Index to Physical Position
+    { 28, 12 }, { 84, 12 }, { 140, 12 }, { 196, 12 },
+    { 28, 28 }, { 84, 28 }, { 140, 28 }, { 196, 28 },
+    { 28, 44 }, { 84, 44 }, { 140, 44 }, { 196, 44 },
+    { 28, 60 }, { 84, 60 }, { 140, 60 }, { 196, 60 },
+    { 168, 48 }, { 168, 16 }, { 58, 16 }, { 56, 48 }
+}, {
+    // LED Index to Flag
+    4, 4, 4, 4,
+    4, 4, 4, 4,
+    4, 4, 4, 4,
+    4, 4, 4, 4,
+    2, 2, 2, 2,
+} };
+#endif