aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/rgbkb/mun/halconf.h6
-rw-r--r--keyboards/rgbkb/mun/keymaps/default/config.h7
-rw-r--r--keyboards/rgbkb/mun/keymaps/default/rules.mk1
-rw-r--r--keyboards/rgbkb/mun/keymaps/via/config.h30
-rw-r--r--keyboards/rgbkb/mun/keymaps/via/keymap.c252
-rw-r--r--keyboards/rgbkb/mun/keymaps/via/rules.mk1
-rw-r--r--keyboards/rgbkb/mun/matrix.c190
-rw-r--r--keyboards/rgbkb/mun/mcuconf.h23
-rw-r--r--keyboards/rgbkb/mun/mun.c8
-rw-r--r--keyboards/rgbkb/mun/rev1/rgbkb_mun_rev1_default.json13
-rw-r--r--keyboards/rgbkb/mun/rules.mk4
11 files changed, 334 insertions, 201 deletions
diff --git a/keyboards/rgbkb/mun/halconf.h b/keyboards/rgbkb/mun/halconf.h
index c8d832a81..f5b97499d 100644
--- a/keyboards/rgbkb/mun/halconf.h
+++ b/keyboards/rgbkb/mun/halconf.h
@@ -9,16 +9,10 @@
9 9
10#pragma once 10#pragma once
11 11
12//#define HAL_USE_DAC TRUE
13
14//#define HAL_USE_GPT TRUE
15
16#define HAL_USE_I2C TRUE 12#define HAL_USE_I2C TRUE
17 13
18#define HAL_USE_PWM TRUE 14#define HAL_USE_PWM TRUE
19 15
20#define HAL_USE_SERIAL TRUE 16#define HAL_USE_SERIAL TRUE
21 17
22#define HAL_USE_SERIAL_USB TRUE
23
24#include_next <halconf.h> 18#include_next <halconf.h>
diff --git a/keyboards/rgbkb/mun/keymaps/default/config.h b/keyboards/rgbkb/mun/keymaps/default/config.h
index 967b309f6..9719d1743 100644
--- a/keyboards/rgbkb/mun/keymaps/default/config.h
+++ b/keyboards/rgbkb/mun/keymaps/default/config.h
@@ -20,11 +20,4 @@
20// #define RGB_DISABLE_TIMEOUT 1200000 20// #define RGB_DISABLE_TIMEOUT 1200000
21#define RGB_DISABLE_WHEN_USB_SUSPENDED 21#define RGB_DISABLE_WHEN_USB_SUSPENDED
22 22
23#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
24// 224B per layer right now
25#define DYNAMIC_KEYMAP_LAYER_COUNT 8
26#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
27
28#define VIA_QMK_RGBLIGHT_ENABLE
29
30#define STM32_ONBOARD_EEPROM_SIZE 2048 23#define STM32_ONBOARD_EEPROM_SIZE 2048
diff --git a/keyboards/rgbkb/mun/keymaps/default/rules.mk b/keyboards/rgbkb/mun/keymaps/default/rules.mk
deleted file mode 100644
index 1e5b99807..000000000
--- a/keyboards/rgbkb/mun/keymaps/default/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
1VIA_ENABLE = yes
diff --git a/keyboards/rgbkb/mun/keymaps/via/config.h b/keyboards/rgbkb/mun/keymaps/via/config.h
new file mode 100644
index 000000000..967b309f6
--- /dev/null
+++ b/keyboards/rgbkb/mun/keymaps/via/config.h
@@ -0,0 +1,30 @@
1/*
2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <https://github.com/Legonut> wrote this file. As long as you retain this
5 * notice you can do whatever you want with this stuff. If we meet some day, and
6 * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
7 * ----------------------------------------------------------------------------
8 */
9
10#pragma once
11
12// No need for the single versions when multi performance isn't a problem =D
13#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
14#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
15#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
16#define DISABLE_RGB_MATRIX_SPLASH
17#define DISABLE_RGB_MATRIX_SOLID_SPLASH
18
19// 20m timeout (20m * 60s * 1000mil)
20// #define RGB_DISABLE_TIMEOUT 1200000
21#define RGB_DISABLE_WHEN_USB_SUSPENDED
22
23#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
24// 224B per layer right now
25#define DYNAMIC_KEYMAP_LAYER_COUNT 8
26#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
27
28#define VIA_QMK_RGBLIGHT_ENABLE
29
30#define STM32_ONBOARD_EEPROM_SIZE 2048
diff --git a/keyboards/rgbkb/mun/keymaps/via/keymap.c b/keyboards/rgbkb/mun/keymaps/via/keymap.c
new file mode 100644
index 000000000..b120c3a37
--- /dev/null
+++ b/keyboards/rgbkb/mun/keymaps/via/keymap.c
@@ -0,0 +1,252 @@
1/*
2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <https://github.com/Legonut> wrote this file. As long as you retain this
5 * notice you can do whatever you want with this stuff. If we meet some day, and
6 * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
7 * ----------------------------------------------------------------------------
8 */
9
10#include QMK_KEYBOARD_H
11#include "common_oled.h"
12
13enum keymap_layers {
14 _QWERTY,
15 _COLEMAK,
16 _GAME,
17 _FN,
18 _ADJUST,
19 _VIA1,
20 _VIA2,
21 _VIA3
22};
23
24enum keymap_keycodes {
25 // Disables touch processing
26 TCH_TOG = SAFE_RANGE,
27 MENU_BTN,
28 MENU_UP,
29 MENU_DN
30};
31
32// Default Layers
33#define QWERTY DF(_QWERTY)
34#define COLEMAK DF(_COLEMAK)
35#define GAME DF(_GAME)
36
37// Momentary Layers
38#define FN MO(_FN)
39#define ADJUST MO(_ADJUST)
40
41#define FN_CAPS LT(_FN, KC_CAPS)
42#define FN_ESC LT(_FN, KC_ESC)
43
44/* This keyboard is enabled with an RGB Menu Control system.
45This functionality is enabled, but still requires a little configuration based on your exact setup.
46The RGB Menu will appear on the Right Half's OLED and can be controlled by the MENU keycodes:
47MENU_BTN - Triggers a button action for the menu
48MENU_UP - Triggers an increase action for the menu
49MENU_DN - Triggers a decrease action for the menu
50
51To finish configuration for your board, you will want to change the default keycodes for an encoder on the right half.
52Encoder press keycode should be set to MENU_BTN, Clockwise should be MENU_UP, and Counter Clockwise should be MENU_DN.
53Depending on where you add an encoder to the right half will determin in the default keymap where you should put those keycodes.
54*/
55
56const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
57 /* QWERTY
58 * .--------------------------------------------------------------. .--------------------------------------------------------------.
59 * | `~/ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bckspc |
60 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
61 * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
62 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
63 * | FN/Caps| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' |
64 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
65 * | Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Shft/Ent|
66 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
67 * | Ctrl | Win | Alt | RGBTOG | Adjust | Space | Bksp | | Enter | Space | Left | Down | Up | Right | Ctrl |
68 * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------'
69 * Encoder 1 Encoder 2 Encoder 3 Encoder 4
70 * .-----------------------------------. .-----------------------------------.
71 * | VolUp | VolDn | VolUp | VolDn | | PgUp | PgDn | PgUp | PgDn |
72 * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------|
73 * | VolDn | VolUp | Next | Play | Prev | Touch Encoder Touch Encoder | RgbHuI | RgbHuD | RgbMdD | RgbTog | RgbMdI |
74 * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------'
75 */
76 [_QWERTY] = LAYOUT(
77 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
78 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
79 FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
80 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
81 KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJUST, KC_SPC, KC_DEL, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_RCTL,
82
83 KC_VOLU, KC_VOLD, KC_VOLU, KC_VOLD, KC_PGDN, KC_PGUP, KC_PGDN, KC_PGUP,
84 KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, RGB_HUI, RGB_HUD, RGB_RMOD,RGB_TOG, RGB_MOD
85 ),
86
87 [_COLEMAK] = LAYOUT(
88 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
89 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, _______, _______, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______,
90 _______, KC_A, KC_R, KC_S, KC_T, KC_D, _______, _______, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
91 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
92 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
93
94 _______, _______, _______, _______, _______, _______, _______, _______,
95 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
96 ),
97
98 [_GAME] = LAYOUT(
99 _______, _______, _______, _______, _______, _______, KC_F1, KC_F5, _______, _______, _______, _______, _______, _______,
100 _______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F2, KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, _______,
101 _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F3, KC_F7, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,
102 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F4, KC_F8, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
103 _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
104
105 _______, _______, _______, _______, _______, _______, _______, _______,
106 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
107 ),
108
109 [_FN] = LAYOUT(
110 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
111 _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PSCR, KC_PGUP,
112 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_PGDN,
113 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
114 _______, _______, _______, TCH_TOG, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
115
116 _______, _______, _______, _______, _______, _______, _______, _______,
117 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
118 ),
119
120 [_ADJUST] = LAYOUT(
121 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
122 _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______,
123 _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______,
124 _______, RGB_SPD, _______, RGB_SPI, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, GAME,
125 _______, RGB_RMOD,_______, RGB_MOD, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_NLCK, QWERTY, COLEMAK,
126
127 _______, _______, _______, _______, _______, _______, _______, _______,
128 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
129 ),
130
131 [_VIA1] = LAYOUT(
132 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
133 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
134 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
135 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
136 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
137
138 _______, _______, _______, _______, _______, _______, _______, _______,
139 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
140 ),
141
142 [_VIA2] = LAYOUT(
143 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
144 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
145 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
146 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
147 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
148
149 _______, _______, _______, _______, _______, _______, _______, _______,
150 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
151 ),
152
153 [_VIA3] = LAYOUT(
154 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
155 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
156 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
157 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
158 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
159
160 _______, _______, _______, _______, _______, _______, _______, _______,
161 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
162 ),
163};
164
165bool process_record_user(uint16_t keycode, keyrecord_t *record) {
166 switch (keycode)
167 {
168 case MENU_BTN:
169 if (record->event.pressed) {
170 rgb_menu_selection();
171 }
172 return false;
173 case MENU_UP:
174 if (record->event.pressed) {
175 rgb_menu_action(true);
176 }
177 return false;
178 case MENU_DN:
179 if (record->event.pressed) {
180 rgb_menu_action(false);
181 }
182 return false;
183 case TCH_TOG:
184 if (record->event.pressed) {
185 touch_encoder_toggle();
186 }
187 return false; // Skip all further processing of this key
188 default:
189 return true;
190 }
191}
192
193static void render_layer(void) {
194 // Host Keyboard Layer Status
195 oled_write_P(PSTR("Layer"), false);
196 switch (get_highest_layer(layer_state)) {
197 case _QWERTY:
198 oled_write_ln_P(PSTR("QWRTY"), false);
199 break;
200 case _COLEMAK:
201 oled_write_ln_P(PSTR("Colemk"), false);
202 break;
203 case _GAME:
204 oled_write_ln_P(PSTR("Game "), false);
205 break;
206 case _FN:
207 oled_write_ln_P(PSTR("FN "), false);
208 break;
209 case _ADJUST:
210 oled_write_ln_P(PSTR("Adjst"), false);
211 break;
212 default:
213 oled_write_ln_P(PSTR("Undef"), false);
214 }
215}
216
217static void render_leds(void)
218{
219 // Host Keyboard LED Status
220 led_t led_state = host_keyboard_led_state();
221 oled_write_P(led_state.num_lock ? PSTR("NUMLK") : PSTR(" "), false);
222 oled_write_P(led_state.caps_lock ? PSTR("CAPLK") : PSTR(" "), false);
223 oled_write_P(led_state.scroll_lock ? PSTR("SCRLK") : PSTR(" "), false);
224}
225
226static void render_touch(void)
227{
228 // Host Touch LED Status
229 oled_write_P(!touch_encoder_toggled() ? PSTR("TOUCH") : PSTR(" "), false);
230 oled_write_P(touch_encoder_calibrating() ? PSTR("CLBRT") : PSTR(" "), false);
231}
232
233void oled_task_user(void) {
234 if (is_keyboard_left()) {
235 render_icon();
236 oled_write_P(PSTR(" "), false);
237 render_layer();
238 oled_write_P(PSTR(" "), false);
239 render_leds();
240 oled_write_P(PSTR(" "), false);
241 render_touch();
242 }
243 else {
244 render_icon();
245 oled_write_P(PSTR(" "), false);
246 render_rgb_menu();
247 }
248}
249
250oled_rotation_t oled_init_user(oled_rotation_t rotation) {
251 return OLED_ROTATION_270;
252}
diff --git a/keyboards/rgbkb/mun/keymaps/via/rules.mk b/keyboards/rgbkb/mun/keymaps/via/rules.mk
new file mode 100644
index 000000000..40bded399
--- /dev/null
+++ b/keyboards/rgbkb/mun/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE=yes \ No newline at end of file
diff --git a/keyboards/rgbkb/mun/matrix.c b/keyboards/rgbkb/mun/matrix.c
index 497ab041f..b859847f1 100644
--- a/keyboards/rgbkb/mun/matrix.c
+++ b/keyboards/rgbkb/mun/matrix.c
@@ -7,150 +7,56 @@
7 * ---------------------------------------------------------------------------- 7 * ----------------------------------------------------------------------------
8 */ 8 */
9 9
10#include <stdint.h>
11#include <stdbool.h>
12#include <string.h>
13#include "util.h"
14#include "matrix.h" 10#include "matrix.h"
15#include "debounce.h" 11#include "atomic_util.h"
16#include "quantum.h" 12#include "gpio.h"
17#include "split_util.h" 13
18#include "config.h" 14static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
19#include "transactions.h" 15
20 16void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
21#define ERROR_DISCONNECT_COUNT 5 17 /* Drive row pin low. */
22#define ROWS_PER_HAND (MATRIX_ROWS / 2) 18 ATOMIC_BLOCK_FORCEON { writePinLow(row_pins[current_row]); }
23 19 matrix_output_select_delay();
24static const pin_t row_pins[ROWS_PER_HAND] = MATRIX_ROW_PINS; 20
25static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; 21 /* Read all columns in one go, aka port scanning. */
26 22 uint16_t porta = palReadPort(GPIOA);
27/* matrix state(1:on, 0:off) */ 23 uint16_t portb = palReadPort(GPIOB);
28extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values 24
29extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values 25 /* Order of pins on the mun is: A0, B11, B0, B10, B12, B2, A8
30 26 Pin is active low, therefore we have to invert the result. */
31// row offsets for each hand 27 matrix_row_t cols = ~(((porta & (0x1 << 0)) >> 0) // A0 (0)
32uint8_t thisHand, thatHand; 28 | ((portb & (0x1 << 11)) >> 10) // B11 (1)
33 29 | ((portb & (0x1 << 0)) << 2) // B0 (2)
34// user-defined overridable functions 30 | ((portb & (0x1 << 10)) >> 7) // B10 (3)
35__attribute__((weak)) void matrix_slave_scan_kb(void) { matrix_slave_scan_user(); } 31 | ((portb & (0x1 << 12)) >> 8) // B12 (4)
36__attribute__((weak)) void matrix_slave_scan_user(void) {} 32 | ((portb & (0x1 << 2)) << 3) // B2 (5)
37 33 | ((porta & (0x1 << 8)) >> 2)); // A8 (6)
38static void init_pins(void) { 34
39 for (size_t i = 0; i < MATRIX_COLS; i++) { 35 /* Reverse the order of columns for left hand as the board is flipped. */
40 setPinInputHigh(col_pins[i]); 36 // if (isLeftHand) {
41 } 37 // #if defined(__arm__)
42 for (size_t i = 0; i < ROWS_PER_HAND; i++) { 38 // /* rbit assembly reverses bit order of 32bit registers. */
43 setPinOutput(row_pins[i]); 39 // uint32_t temp = cols;
44 writePinHigh(row_pins[i]); 40 // __asm__("rbit %0, %1" : "=r"(temp) : "r"(temp));
45 } 41 // cols = temp >> 24;
46} 42 // #else
47 43 // /* RISC-V bit manipulation extension not present. Use bit-hack.
48void matrix_init(void) { 44 // https://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits */
49 split_pre_init(); 45 // cols = (matrix_row_t)(((cols * 0x0802LU & 0x22110LU) | (cols * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16);
50 46 // #endif
51 thisHand = isLeftHand ? 0 : (ROWS_PER_HAND); 47 // }
52 thatHand = ROWS_PER_HAND - thisHand; 48
53 49 current_matrix[current_row] = cols;
54 // initialize key pins 50
55 init_pins(); 51 /* Drive row pin high again. */
56 52 ATOMIC_BLOCK_FORCEON { writePinHigh(row_pins[current_row]); }
57 // initialize matrix state: all keys off 53 matrix_output_unselect_delay(current_row, row_pins[current_row] != 0);
58 memset(raw_matrix, 0, sizeof(raw_matrix));
59 memset(matrix, 0, sizeof(matrix));
60
61 debounce_init(ROWS_PER_HAND);
62
63 matrix_init_quantum();
64
65 split_post_init();
66}
67
68bool matrix_post_scan(void) {
69 bool changed = false;
70 if (is_keyboard_master()) {
71 static uint8_t error_count;
72
73 matrix_row_t slave_matrix[ROWS_PER_HAND] = {0};
74 if (!transport_master(matrix + thisHand, slave_matrix)) {
75 error_count++;
76
77 if (error_count > ERROR_DISCONNECT_COUNT) {
78 // reset other half if disconnected
79 memset(&matrix[thatHand], 0, sizeof(slave_matrix));
80 memset(slave_matrix, 0, sizeof(slave_matrix));
81
82 changed = true;
83 }
84 } else {
85 error_count = 0;
86
87 if (memcmp(&matrix[thatHand], slave_matrix, sizeof(slave_matrix)) != 0) {
88 memcpy(&matrix[thatHand], slave_matrix, sizeof(slave_matrix));
89 changed = true;
90 }
91 }
92
93 matrix_scan_quantum();
94 } else {
95 transport_slave(matrix + thatHand, matrix + thisHand);
96
97 matrix_slave_scan_kb();
98 }
99
100 return changed;
101} 54}
102 55
103uint8_t matrix_scan(void) { 56#if defined(BUSY_WAIT)
104 bool local_changed = false; 57void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
105 matrix_row_t current_matrix[ROWS_PER_HAND]; 58 for (int32_t i = 0; i < BUSY_WAIT_INSTRUCTIONS; i++) {
106 59 __asm__ volatile("nop" ::: "memory");
107 for (size_t row_idx = 0; row_idx < ROWS_PER_HAND; row_idx++) {
108 /* Drive row pin low. */
109 ATOMIC_BLOCK_FORCEON { writePinLow(row_pins[row_idx]); }
110 matrix_output_select_delay();
111
112 /* Read all columns in one go, aka port scanning. */
113 uint16_t porta = palReadPort(GPIOA);
114 uint16_t portb = palReadPort(GPIOB);
115
116 /* Order of pins on the mun is: A0, B11, B0, B10, B12, B2, A8
117 Pin is active low, therefore we have to invert the result. */
118 matrix_row_t cols = ~(((porta & (0x1 << 0)) >> 0) // A0 (0)
119 | ((portb & (0x1 << 11)) >> 10) // B11 (1)
120 | ((portb & (0x1 << 0)) << 2) // B0 (2)
121 | ((portb & (0x1 << 10)) >> 7) // B10 (3)
122 | ((portb & (0x1 << 12)) >> 8) // B12 (4)
123 | ((portb & (0x1 << 2)) << 3) // B2 (5)
124 | ((porta & (0x1 << 8)) >> 2)); // A8 (6)
125
126 /* Reverse the order of columns for left hand as the board is flipped. */
127 // if (isLeftHand) {
128 // #if defined(__arm__)
129 // /* rbit assembly reverses bit order of 32bit registers. */
130 // uint32_t temp = cols;
131 // __asm__("rbit %0, %1" : "=r"(temp) : "r"(temp));
132 // cols = temp >> 24;
133 // #else
134 // /* RISC-V bit manipulation extension not present. Use bit-hack.
135 // https://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits */
136 // cols = (matrix_row_t)(((cols * 0x0802LU & 0x22110LU) | (cols * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16);
137 // #endif
138 // }
139
140 current_matrix[row_idx] = cols;
141
142 /* Drive row pin high again. */
143 ATOMIC_BLOCK_FORCEON { writePinHigh(row_pins[row_idx]); }
144 matrix_output_unselect_delay(row_idx, row_pins[row_idx] != 0);
145 } 60 }
146
147 if (memcmp(raw_matrix, current_matrix, sizeof(current_matrix)) != 0) {
148 memcpy(raw_matrix, current_matrix, sizeof(current_matrix));
149 local_changed = true;
150 }
151
152 debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, local_changed);
153
154 bool remote_changed = matrix_post_scan();
155 return (uint8_t)(local_changed || remote_changed);
156} 61}
62#endif
diff --git a/keyboards/rgbkb/mun/mcuconf.h b/keyboards/rgbkb/mun/mcuconf.h
index acc083d8a..dd6e38509 100644
--- a/keyboards/rgbkb/mun/mcuconf.h
+++ b/keyboards/rgbkb/mun/mcuconf.h
@@ -11,32 +11,11 @@
11 11
12#include_next <mcuconf.h> 12#include_next <mcuconf.h>
13 13
14#undef STM32_DAC_USE_DAC1_CH1
15#define STM32_DAC_USE_DAC1_CH1 TRUE
16
17#undef STM32_DAC_USE_DAC1_CH2
18#define STM32_DAC_USE_DAC1_CH2 TRUE
19
20#undef STM32_GPT_USE_TIM6
21#define STM32_GPT_USE_TIM6 TRUE
22
23#undef STM32_GPT_USE_TIM7
24#define STM32_GPT_USE_TIM7 TRUE
25
26#undef STM32_GPT_USE_TIM8
27#define STM32_GPT_USE_TIM8 TRUE
28
29#undef STM32_GPT_USE_TIM15
30#define STM32_GPT_USE_TIM15 TRUE
31
32#undef STM32_I2C_USE_I2C1 14#undef STM32_I2C_USE_I2C1
33#define STM32_I2C_USE_I2C1 TRUE 15#define STM32_I2C_USE_I2C1 TRUE
34 16
35#undef STM32_PWM_USE_TIM3 17#undef STM32_PWM_USE_TIM3
36#define STM32_PWM_USE_TIM3 TRUE 18#define STM32_PWM_USE_TIM3 TRUE
37 19
38#undef STM32_PWM_USE_TIM4
39#define STM32_PWM_USE_TIM4 TRUE
40
41#undef STM32_SERIAL_USE_USART1 20#undef STM32_SERIAL_USE_USART1
42#define STM32_SERIAL_USE_USART1 TRUE \ No newline at end of file 21#define STM32_SERIAL_USE_USART1 TRUE
diff --git a/keyboards/rgbkb/mun/mun.c b/keyboards/rgbkb/mun/mun.c
index 6cc95c46e..f64de3342 100644
--- a/keyboards/rgbkb/mun/mun.c
+++ b/keyboards/rgbkb/mun/mun.c
@@ -23,11 +23,3 @@ void housekeeping_task_kb(void) {
23 touch_encoder_update(TOUCH_ENCODER_SYNC); 23 touch_encoder_update(TOUCH_ENCODER_SYNC);
24 rgb_menu_update(RGB_MENU_SYNC); 24 rgb_menu_update(RGB_MENU_SYNC);
25} 25}
26
27#if defined(BUSY_WAIT)
28void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
29 for (int32_t i = 0; i < BUSY_WAIT_INSTRUCTIONS; i++) {
30 __asm__ volatile("nop" ::: "memory");
31 }
32}
33#endif
diff --git a/keyboards/rgbkb/mun/rev1/rgbkb_mun_rev1_default.json b/keyboards/rgbkb/mun/rev1/rgbkb_mun_rev1_default.json
deleted file mode 100644
index ccf70ef5f..000000000
--- a/keyboards/rgbkb/mun/rev1/rgbkb_mun_rev1_default.json
+++ /dev/null
@@ -1,13 +0,0 @@
1{
2 "keyboard": "rgbkb/mun/rev1",
3 "keymap": "default",
4 "commit": "xxxxxxxxxxxxxxxxxxxxx",
5 "layout": "LAYOUT",
6 "layers": [
7 ["KC_GESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_MINS","KC_EQL","KC_6","KC_7","KC_8","KC_9","KC_0","KC_BSPC","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_LBRC","KC_RBRC","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSLS","LT(3,KC_CAPS)","KC_A","KC_S","KC_D","KC_F","KC_G","KC_LPRN","KC_RPRN","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_LCBR","KC_RCBR","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_SFTENT","KC_LCTL","KC_LGUI","KC_LALT","RGB_TOG","MO(4)","KC_SPC","KC_BSPC","KC_ENT","KC_SPC","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT","KC_RCTL","KC_VOLU","KC_VOLD","KC_VOLU","KC_VOLD","KC_PGUP","KC_PGDN","KC_PGUP","KC_PGDN","KC_VOLD","KC_VOLU","KC_MRWD","KC_MPLY","KC_MFFD","RGB_HUI","RGB_HUD","RGB_RMOD","RGB_TOG","RGB_MOD"],
8 ["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_Q","KC_W","KC_F","KC_P","KC_G","KC_TRNS","KC_TRNS","KC_J","KC_L","KC_U","KC_Y","KC_SCLN","KC_TRNS","KC_TRNS","KC_A","KC_R","KC_S","KC_T","KC_D","KC_TRNS","KC_TRNS","KC_H","KC_N","KC_E","KC_I","KC_O","KC_TRNS","KC_TRNS","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_TRNS","KC_TRNS","KC_K","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],
9 ["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_F1","KC_F5","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_F2","KC_F6","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_TRNS","KC_TRNS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_F3","KC_F7","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_TRNS","KC_TRNS","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_F4","KC_F8","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_TRNS","KC_TRNS","KC_NO","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],
10 ["KC_TRNS","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F11","KC_F12","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_TRNS","KC_TRNS","KC_HOME","KC_UP","KC_END","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_HOME","KC_UP","KC_END","KC_PSCR","KC_PGUP","KC_TRNS","KC_LEFT","KC_DOWN","KC_RGHT","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LEFT","KC_DOWN","KC_RGHT","KC_INS","KC_PGDN","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","ANY(TCH_TOG)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_MPLY","KC_MNXT","KC_MUTE","KC_VOLD","KC_VOLU","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],
11 ["KC_TRNS","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F11","KC_F12","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_P7","KC_P8","KC_P9","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_P4","KC_P5","KC_P6","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_P1","KC_P2","KC_P3","KC_TRNS","DF(2)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_P0","KC_PDOT","KC_NLCK","DF(0)","DF(1)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"]
12 ]
13} \ No newline at end of file
diff --git a/keyboards/rgbkb/mun/rules.mk b/keyboards/rgbkb/mun/rules.mk
index f016c6c71..85ee63346 100644
--- a/keyboards/rgbkb/mun/rules.mk
+++ b/keyboards/rgbkb/mun/rules.mk
@@ -40,7 +40,7 @@ OPT = 3
40OPT_DEFS += -DOLED_FONT_H=\"../common/glcdfont.c\" 40OPT_DEFS += -DOLED_FONT_H=\"../common/glcdfont.c\"
41OPT_DEFS += -Ikeyboards/rgbkb/common 41OPT_DEFS += -Ikeyboards/rgbkb/common
42 42
43CUSTOM_MATRIX = yes 43# matrix optimisations
44SRC += matrix.c matrix_common.c 44SRC += matrix.c
45 45
46DEFAULT_FOLDER = rgbkb/mun/rev1 \ No newline at end of file 46DEFAULT_FOLDER = rgbkb/mun/rev1 \ No newline at end of file