From 4e077250d56f7e786af0cdef00f4b41d77e2b85c Mon Sep 17 00:00:00 2001
From: 3araht <69518343+3araht@users.noreply.github.com>
Date: Mon, 27 Dec 2021 19:27:15 +0900
Subject: bandominedoni, Drashna's method is applied to encoder_update_kb.
 (#15287)

* Drashna's method is applied to rotary encoder rotation detection. rgb_matrix_user.inc -> rgb_matrix_kb.inc.

* Disabled some RGB MATRIX effects to shrink the firmware size.

* via # of layers changed from 5 to 4.
---
 keyboards/bandominedoni/bandominedoni.c      |  72 +++++++-----
 keyboards/bandominedoni/bandominedoni.h      |   4 +
 keyboards/bandominedoni/config.h             | 159 ++++++++-------------------
 keyboards/bandominedoni/keymaps/led/keymap.c |  32 +++---
 keyboards/bandominedoni/keymaps/led/rules.mk |   4 +-
 keyboards/bandominedoni/keymaps/via/config.h |   2 +-
 keyboards/bandominedoni/keymaps/via/keymap.c |  32 +++---
 keyboards/bandominedoni/keymaps/via/rules.mk |   3 +-
 keyboards/bandominedoni/rgb_matrix_kb.inc    |  16 +++
 keyboards/bandominedoni/rgb_matrix_user.inc  |  16 ---
 10 files changed, 157 insertions(+), 183 deletions(-)
 create mode 100644 keyboards/bandominedoni/rgb_matrix_kb.inc
 delete mode 100644 keyboards/bandominedoni/rgb_matrix_user.inc

(limited to 'keyboards')

diff --git a/keyboards/bandominedoni/bandominedoni.c b/keyboards/bandominedoni/bandominedoni.c
index 1b0365ac6a..eacbb40fa0 100644
--- a/keyboards/bandominedoni/bandominedoni.c
+++ b/keyboards/bandominedoni/bandominedoni.c
@@ -119,33 +119,53 @@ static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN;
 }
 
 #ifdef ENCODER_ENABLE
-const uint16_t rt_matrix[2][2] = {
-    {5, 5}, {5, 6}
-};
-
-bool encoder_update_kb(uint8_t index, bool clockwise) {
-    if (index == 1) { /* An encoder on the right side */
-        keypos_t key;
-        int cw = 0;
-        cw = clockwise ? 1 : 0;
-        key.row = rt_matrix[cw][0];
-        key.col = rt_matrix[cw][1];
-        uint8_t layer = layer_switch_get_layer(key);
-        uint16_t keycode = keymap_key_to_keycode(layer, key);
-        keyrecord_t record;
-        record.event.key = key;
+#   ifdef ENCODERS
+static uint8_t  encoder_state[ENCODERS] = {0};
+static keypos_t encoder_cw[ENCODERS]    = ENCODERS_CW_KEY;
+static keypos_t encoder_ccw[ENCODERS]   = ENCODERS_CCW_KEY;
+#   endif
 
-        if (keycode < MI_ON){
-            tap_code16(keycode);
-        } else {
-            record.event.pressed = true;
-            process_midi(keycode, &record);
-            wait_ms(TAP_CODE_DELAY);
-            record.event.pressed = false;
-            process_midi(keycode, &record);
+void encoder_action_unregister(void) {
+#   ifdef ENCODERS
+    for (int index = 0; index < ENCODERS; ++index) {
+        if (encoder_state[index]) {
+            keyevent_t encoder_event = (keyevent_t) {
+                .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
+                .pressed = false,
+                .time = (timer_read() | 1)
+            };
+            encoder_state[index] = 0;
+            action_exec(encoder_event);
         }
-
     }
-    return true;
+#   endif
+}
+
+void encoder_action_register(uint8_t index, bool clockwise) {
+#   ifdef ENCODERS
+    keyevent_t encoder_event = (keyevent_t) {
+        .key = clockwise ? encoder_cw[index] : encoder_ccw[index],
+        .pressed = true,
+        .time = (timer_read() | 1)
+    };
+    encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
+#       ifdef CONSOLE_ENABLE
+    uprintf("encoder_action_register index = %u, clockwise = %u, row = %u, col = %u\n", index, clockwise, encoder_event.key.row, encoder_event.key.col);
+#       endif
+    action_exec(encoder_event);
+#   endif
 }
-#endif  // ENCODER_ENABLE
+
+void matrix_scan_kb(void) {
+    encoder_action_unregister();
+    matrix_scan_user();
+}
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    encoder_action_register(index, clockwise);
+    // don't return user actions, because they are in the keymap
+    // encoder_update_user(index, clockwise);
+    return true;
+};
+
+#endif
diff --git a/keyboards/bandominedoni/bandominedoni.h b/keyboards/bandominedoni/bandominedoni.h
index 8e2470826c..1eca4f8d98 100644
--- a/keyboards/bandominedoni/bandominedoni.h
+++ b/keyboards/bandominedoni/bandominedoni.h
@@ -82,3 +82,7 @@
 //  reason: bandoMIneDonI has no space on right hand side to use "SPLIT_HAND_MATRIX_GRID".
 //          However, It enables to decide the handedness by the HW by adding one condition: "not to press any keys (especially r30) dusing startup."
 bool is_keyboard_left(void);
+
+void encoder_action_unregister(void);
+
+void encoder_action_register(uint8_t index, bool clockwise);
diff --git a/keyboards/bandominedoni/config.h b/keyboards/bandominedoni/config.h
index 629c6af884..e1e4d87405 100644
--- a/keyboards/bandominedoni/config.h
+++ b/keyboards/bandominedoni/config.h
@@ -133,120 +133,54 @@
 //  Enable suspend mode.
 #   define RGB_DISABLE_WHEN_USB_SUSPENDED true
 
-// //  enable below to shrink the firmware size ( -1974 bytes )
-// #    define REDUCE_RGB_MATRIX_EFFECTS
-
-//  enable below to shrink the firmware size ( -1574 bytes )
-// #    define REDUCE_RGB_MATRIX_EFFECTS_2
-
-// #    ifdef AUDIO_ENABLE
-#    ifdef CONSOLE_ENABLE
-#        define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-#    else
+#   ifdef CONSOLE_ENABLE
+#       define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#   else
 // #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_PINWHEEL_SAT
-// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-// #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_FRACTAL
-#        define ENABLE_RGB_MATRIX_PIXEL_RAIN
-
-#        if !defined(REDUCE_RGB_MATRIX_EFFECTS) && !defined(VIA_ENABLE)
-// #       ifdef REDUCE_RGB_MATRIX_EFFECTS
-#            define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-#            define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-#            define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#            define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-#            define ENABLE_RGB_MATRIX_DUAL_BEACON
-#            define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-#            define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-#        endif
-
-// #define ENABLE_RGB_MATRIX_HUE_BREATHING
-// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
-// #define ENABLE_RGB_MATRIX_HUE_WAVE
-// #define ENABLE_RGB_MATRIX_FRACTAL
-// #define ENABLE_RGB_MATRIX_PIXEL_RAIN
-// #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
-
-#        if !defined(REDUCE_RGB_MATRIX_EFFECTS_2) && !defined(VIA_ENABLE)
-// #       ifdef REDUCE_RGB_MATRIX_EFFECTS_2
-#            define ENABLE_RGB_MATRIX_BAND_VAL
-#            define ENABLE_RGB_MATRIX_CYCLE_ALL
-#            define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-#            define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-#            define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-#            define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-#            define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-#            define ENABLE_RGB_MATRIX_MULTISPLASH
-#            define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-#        endif
-#            define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-// #define ENABLE_RGB_MATRIX_SPLASH
-// #define ENABLE_RGB_MATRIX_SOLID_SPLASH
-#    endif  // AUDIO_ENABLE
-
-// #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_GRADIENT_UP_DOWN
+#       define ENABLE_RGB_MATRIX_BREATHING
+#       define ENABLE_RGB_MATRIX_BAND_SAT
+#       define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#       define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#       define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#       define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#       define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+#       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_MULTICROSS
+#       define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#       define ENABLE_RGB_MATRIX_SPLASH
+#       define ENABLE_RGB_MATRIX_SOLID_SPLASH
+//  RAINDROPS don't match well with layer LED indicator (oc) using rgb_matrix_set_color().
 // #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_FRACTAL
-// #define ENABLE_RGB_MATRIX_PIXEL_RAIN
-
-// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-
-// #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
-
+//  Recommendend not to use these.
+#       ifndef VIA_ENABLE
+#           define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#           define ENABLE_RGB_MATRIX_BAND_VAL
+#           define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#           define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#           define ENABLE_RGB_MATRIX_CYCLE_ALL
+#           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_HUE_BREATHING
+#           define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#           define ENABLE_RGB_MATRIX_HUE_WAVE
+#           define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#           define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#           define ENABLE_RGB_MATRIX_MULTISPLASH
+#           define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#           define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#       endif
+#   endif  // CONSOLE_ENABLE
 #endif  // RGB_MATRIX_ENABLE
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
@@ -330,4 +264,7 @@
 #   define ENCODERS_PAD_B_RIGHT { F4 }
 #   define ENCODER_RESOLUTION 4
 #   define TAP_CODE_DELAY 10
+#   define ENCODERS 2
+#   define ENCODERS_CW_KEY  { {4, 5}, {6, 5} }
+#   define ENCODERS_CCW_KEY { {3, 5}, {5, 5} }
 #endif  // ENCODER_ENABLE
diff --git a/keyboards/bandominedoni/keymaps/led/keymap.c b/keyboards/bandominedoni/keymaps/led/keymap.c
index 7693557df3..305756b5b1 100644
--- a/keyboards/bandominedoni/keymaps/led/keymap.c
+++ b/keyboards/bandominedoni/keymaps/led/keymap.c
@@ -141,7 +141,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 
      _______,        MI_OCTD, MI_OCTU, MI_VELD, MI_VELU,         _______,
-                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX,
+                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  RGB_RMOD, RGB_MOD,
                 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
      _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
             RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
@@ -149,23 +149,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     )
 };
 
-void eeconfig_init_user(void) {  // EEPROM is getting reset!
-  #ifdef RGB_MATRIX_ENABLE
-  rgb_matrix_enable();
-  rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD);
-  rgb_matrix_sethsv(HSV_BLUE);
-
-  rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
-  // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-  #endif
-}
-
-void keyboard_post_init_user(void) {
+void my_init(void){
     //  Set octave to MI_OCT_0
     midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
 
     // avoid using 127 since it is used as a special number in some sound sources.
     midi_config.velocity = MIDI_INITIAL_VELOCITY;
+}
+
+void eeconfig_init_user(void) {  // EEPROM is getting reset!
+    midi_init();
+    my_init();
+#ifdef RGB_MATRIX_ENABLE
+    rgb_matrix_enable();
+    rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD);
+    rgb_matrix_sethsv(HSV_BLUE);
+
+    rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
+    // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
+#endif
+}
+
+void keyboard_post_init_user(void) {
+    my_init();
 
     //  party mode (for LED soldering test. Enable rainbow color effect, and disable led_indicator to check all LEDs)
     rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
diff --git a/keyboards/bandominedoni/keymaps/led/rules.mk b/keyboards/bandominedoni/keymaps/led/rules.mk
index a7583d38c8..08ed472ad6 100644
--- a/keyboards/bandominedoni/keymaps/led/rules.mk
+++ b/keyboards/bandominedoni/keymaps/led/rules.mk
@@ -1,2 +1,2 @@
-RGB_MATRIX_ENABLE = yes       # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
-RGB_MATRIX_CUSTOM_USER = yes  # 
+RGB_MATRIX_ENABLE = yes      # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
+RGB_MATRIX_CUSTOM_KB = yes   #
diff --git a/keyboards/bandominedoni/keymaps/via/config.h b/keyboards/bandominedoni/keymaps/via/config.h
index 99e39626ce..4dcac5104f 100644
--- a/keyboards/bandominedoni/keymaps/via/config.h
+++ b/keyboards/bandominedoni/keymaps/via/config.h
@@ -15,4 +15,4 @@
  */
  #pragma once
 
-#define DYNAMIC_KEYMAP_LAYER_COUNT 5
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
diff --git a/keyboards/bandominedoni/keymaps/via/keymap.c b/keyboards/bandominedoni/keymaps/via/keymap.c
index 59e074228b..ad6833d692 100644
--- a/keyboards/bandominedoni/keymaps/via/keymap.c
+++ b/keyboards/bandominedoni/keymaps/via/keymap.c
@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 
      _______,        MI_OCTD, MI_OCTU, MI_VELD, MI_VELU,         _______,
-                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
                 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
      _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
             RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
@@ -90,23 +90,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     )
 };
 
-void eeconfig_init_user(void) {  // EEPROM is getting reset!
-  #ifdef RGB_MATRIX_ENABLE
-  rgb_matrix_enable();
-  rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD);
-  rgb_matrix_sethsv(HSV_BLUE);
-
-  rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
-  // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-  #endif
-}
-
-void keyboard_post_init_user(void) {
+void my_init(void){
     //  Set octave to MI_OCT_0
     midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
 
     // avoid using 127 since it is used as a special number in some sound sources.
     midi_config.velocity = MIDI_INITIAL_VELOCITY;
+}
+
+void eeconfig_init_user(void) {  // EEPROM is getting reset!
+    midi_init();
+    my_init();
+#ifdef RGB_MATRIX_ENABLE
+    rgb_matrix_enable();
+    rgb_matrix_set_speed(RGB_MATRIX_STARTUP_SPD);
+    rgb_matrix_sethsv(HSV_BLUE);
+
+    rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
+    // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
+#endif
+}
+
+void keyboard_post_init_user(void) {
+    my_init();
 };
 
 #ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/bandominedoni/keymaps/via/rules.mk b/keyboards/bandominedoni/keymaps/via/rules.mk
index 925056c3dc..95d7690567 100644
--- a/keyboards/bandominedoni/keymaps/via/rules.mk
+++ b/keyboards/bandominedoni/keymaps/via/rules.mk
@@ -1,3 +1,4 @@
-RGB_MATRIX_ENABLE = yes       # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
+RGB_MATRIX_ENABLE = yes      # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
+RGB_MATRIX_CUSTOM_KB = yes   #
 VIA_ENABLE = yes
 MOUSEKEY_ENABLE = yes        # Mouse keys
diff --git a/keyboards/bandominedoni/rgb_matrix_kb.inc b/keyboards/bandominedoni/rgb_matrix_kb.inc
new file mode 100644
index 0000000000..77ad22c1ce
--- /dev/null
+++ b/keyboards/bandominedoni/rgb_matrix_kb.inc
@@ -0,0 +1,16 @@
+#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
+RGB_MATRIX_EFFECT(my_party_rocks)
+
+#    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+bool my_party_rocks(effect_params_t* params) {
+    RGB_MATRIX_USE_LIMITS(led_min, led_max);
+    HSV hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v};
+    RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
+    // rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+    rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b);
+    return rgb_matrix_check_finished_leds(led_max);
+}
+
+#    endif  // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif      // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/keyboards/bandominedoni/rgb_matrix_user.inc b/keyboards/bandominedoni/rgb_matrix_user.inc
deleted file mode 100644
index 77ad22c1ce..0000000000
--- a/keyboards/bandominedoni/rgb_matrix_user.inc
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
-RGB_MATRIX_EFFECT(my_party_rocks)
-
-#    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-
-bool my_party_rocks(effect_params_t* params) {
-    RGB_MATRIX_USE_LIMITS(led_min, led_max);
-    HSV hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v};
-    RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
-    // rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
-    rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b);
-    return rgb_matrix_check_finished_leds(led_max);
-}
-
-#    endif  // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-#endif      // RGB_MATRIX_KEYREACTIVE_ENABLED
-- 
cgit v1.2.3