aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfauxpark <fauxpark@gmail.com>2021-06-17 17:22:01 +1000
committerfauxpark <fauxpark@gmail.com>2021-06-17 17:22:01 +1000
commitd04f7bc1608d3acbf1008ae5fd7bf51ddb860ba2 (patch)
tree2f80fbe3f516acdf50050579b87a23beb9091680
parent9956ff4e031b33c5e1fe1ff6ee44885f1080d966 (diff)
parent2f08a343948c6db3c67505f8fca5fdbfed41831b (diff)
downloadqmk_firmware-d04f7bc1608d3acbf1008ae5fd7bf51ddb860ba2.tar.gz
qmk_firmware-d04f7bc1608d3acbf1008ae5fd7bf51ddb860ba2.zip
Merge remote-tracking branch 'upstream/master' into develop
-rw-r--r--docs/feature_audio.md4
-rw-r--r--docs/feature_oled_driver.md30
-rw-r--r--drivers/oled/oled_driver.c9
-rw-r--r--drivers/oled/oled_driver.h12
-rw-r--r--keyboards/babyv/keymaps/melonbred/keymap.c62
-rw-r--r--keyboards/kmac_pad/config.h102
-rw-r--r--keyboards/kmac_pad/info.json35
-rw-r--r--keyboards/kmac_pad/keymaps/default/keymap.c143
-rw-r--r--keyboards/kmac_pad/keymaps/default/readme.md61
-rw-r--r--keyboards/kmac_pad/kmac_pad.c29
-rw-r--r--keyboards/kmac_pad/kmac_pad.h37
-rw-r--r--keyboards/kmac_pad/matrix.c111
-rw-r--r--keyboards/kmac_pad/readme.md56
-rw-r--r--keyboards/kmac_pad/rules.mk29
-rw-r--r--keyboards/mb44/config.h61
-rw-r--r--keyboards/mb44/info.json202
-rw-r--r--keyboards/mb44/keymaps/2u1u_space/keymap.c59
-rw-r--r--keyboards/mb44/keymaps/2u_space/keymap.c59
-rw-r--r--keyboards/mb44/keymaps/3u_space/keymap.c67
-rw-r--r--keyboards/mb44/keymaps/default/keymap.c61
-rw-r--r--keyboards/mb44/keymaps/via/keymap.c58
-rw-r--r--keyboards/mb44/keymaps/via/rules.mk1
-rw-r--r--keyboards/mb44/mb44.c17
-rw-r--r--keyboards/mb44/mb44.h84
-rw-r--r--keyboards/mb44/readme.md15
-rw-r--r--keyboards/mb44/rules.mk23
-rw-r--r--keyboards/thevankeyboards/minivan/rules.mk1
27 files changed, 1401 insertions, 27 deletions
diff --git a/docs/feature_audio.md b/docs/feature_audio.md
index b7b572974..9ffbc2cba 100644
--- a/docs/feature_audio.md
+++ b/docs/feature_audio.md
@@ -131,12 +131,14 @@ You can override the default songs by doing something like this in your `config.
131 131
132```c 132```c
133#ifdef AUDIO_ENABLE 133#ifdef AUDIO_ENABLE
134 #define STARTUP_SONG SONG(STARTUP_SOUND) 134# define STARTUP_SONG SONG(STARTUP_SOUND)
135#endif 135#endif
136``` 136```
137 137
138A full list of sounds can be found in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) - feel free to add your own to this list! All available notes can be seen in [quantum/audio/musical_notes.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/musical_notes.h). 138A full list of sounds can be found in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) - feel free to add your own to this list! All available notes can be seen in [quantum/audio/musical_notes.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/musical_notes.h).
139 139
140Additionally, if you with to maintain your own list of songs (such as ones that may be copyrighted) and not have them added to the repo, you can create a `user_song_list.h` file and place it in your keymap (or userspace) folder. This file will be automatically included, it just needs to exist.
141
140To play a custom sound at a particular time, you can define a song like this (near the top of the file): 142To play a custom sound at a particular time, you can define a song like this (near the top of the file):
141 143
142```c 144```c
diff --git a/docs/feature_oled_driver.md b/docs/feature_oled_driver.md
index d2dc6103a..f3b659b1b 100644
--- a/docs/feature_oled_driver.md
+++ b/docs/feature_oled_driver.md
@@ -263,22 +263,11 @@ void oled_write(const char *data, bool invert);
263void oled_write_ln(const char *data, bool invert); 263void oled_write_ln(const char *data, bool invert);
264 264
265// Pans the buffer to the right (or left by passing true) by moving contents of the buffer 265// Pans the buffer to the right (or left by passing true) by moving contents of the buffer
266// Useful for moving the screen in preparation for new drawing 266// Useful for moving the screen in preparation for new drawing
267// oled_scroll_left or oled_scroll_right should be preferred for all cases of moving a static 267// oled_scroll_left or oled_scroll_right should be preferred for all cases of moving a static
268// image such as a logo or to avoid burn-in as it's much, much less cpu intensive 268// image such as a logo or to avoid burn-in as it's much, much less cpu intensive
269void oled_pan(bool left); 269void oled_pan(bool left);
270 270
271// Writes a PROGMEM string to the buffer at current cursor position
272// Advances the cursor while writing, inverts the pixels if true
273// Remapped to call 'void oled_write(const char *data, bool invert);' on ARM
274void oled_write_P(const char *data, bool invert);
275
276// Writes a PROGMEM string to the buffer at current cursor position
277// Advances the cursor while writing, inverts the pixels if true
278// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
279// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
280void oled_write_ln_P(const char *data, bool invert);
281
282// Returns a pointer to the requested start index in the buffer plus remaining 271// Returns a pointer to the requested start index in the buffer plus remaining
283// buffer length as struct 272// buffer length as struct
284oled_buffer_reader_t oled_read_raw(uint16_t start_index); 273oled_buffer_reader_t oled_read_raw(uint16_t start_index);
@@ -289,13 +278,24 @@ void oled_write_raw(const char *data, uint16_t size);
289// Writes a single byte into the buffer at the specified index 278// Writes a single byte into the buffer at the specified index
290void oled_write_raw_byte(const char data, uint16_t index); 279void oled_write_raw_byte(const char data, uint16_t index);
291 280
292// Writes a PROGMEM string to the buffer at current cursor position
293void oled_write_raw_P(const char *data, uint16_t size);
294
295// Sets a specific pixel on or off 281// Sets a specific pixel on or off
296// Coordinates start at top-left and go right and down for positive x and y 282// Coordinates start at top-left and go right and down for positive x and y
297void oled_write_pixel(uint8_t x, uint8_t y, bool on); 283void oled_write_pixel(uint8_t x, uint8_t y, bool on);
298 284
285// Writes a PROGMEM string to the buffer at current cursor position
286// Advances the cursor while writing, inverts the pixels if true
287// Remapped to call 'void oled_write(const char *data, bool invert);' on ARM
288void oled_write_P(const char *data, bool invert);
289
290// Writes a PROGMEM string to the buffer at current cursor position
291// Advances the cursor while writing, inverts the pixels if true
292// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
293// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
294void oled_write_ln_P(const char *data, bool invert);
295
296// Writes a PROGMEM string to the buffer at current cursor position
297void oled_write_raw_P(const char *data, uint16_t size);
298
299// Can be used to manually turn on the screen if it is off 299// Can be used to manually turn on the screen if it is off
300// Returns true if the screen was on or turns on 300// Returns true if the screen was on or turns on
301bool oled_on(void); 301bool oled_on(void);
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c
index 082115d53..8e5ed5f07 100644
--- a/drivers/oled/oled_driver.c
+++ b/drivers/oled/oled_driver.c
@@ -115,7 +115,7 @@ bool oled_initialized = false;
115bool oled_active = false; 115bool oled_active = false;
116bool oled_scrolling = false; 116bool oled_scrolling = false;
117uint8_t oled_brightness = OLED_BRIGHTNESS; 117uint8_t oled_brightness = OLED_BRIGHTNESS;
118uint8_t oled_rotation = 0; 118oled_rotation_t oled_rotation = 0;
119uint8_t oled_rotation_width = 0; 119uint8_t oled_rotation_width = 0;
120uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values 120uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values
121uint8_t oled_scroll_start = 0; 121uint8_t oled_scroll_start = 0;
@@ -158,7 +158,7 @@ static void InvertCharacter(uint8_t *cursor) {
158 } 158 }
159} 159}
160 160
161bool oled_init(uint8_t rotation) { 161bool oled_init(oled_rotation_t rotation) {
162#if defined(USE_I2C) && defined(SPLIT_KEYBOARD) 162#if defined(USE_I2C) && defined(SPLIT_KEYBOARD)
163 if (!is_keyboard_master()) { 163 if (!is_keyboard_master()) {
164 return true; 164 return true;
@@ -491,8 +491,9 @@ void oled_write_raw(const char *data, uint16_t size) {
491 uint16_t cursor_start_index = oled_cursor - &oled_buffer[0]; 491 uint16_t cursor_start_index = oled_cursor - &oled_buffer[0];
492 if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index; 492 if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index;
493 for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) { 493 for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) {
494 if (oled_buffer[i] == data[i]) continue; 494 uint8_t c = *data++;
495 oled_buffer[i] = data[i]; 495 if (oled_buffer[i] == c) continue;
496 oled_buffer[i] = c;
496 oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE)); 497 oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
497 } 498 }
498} 499}
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h
index cbf5380ee..a6b85f37e 100644
--- a/drivers/oled/oled_driver.h
+++ b/drivers/oled/oled_driver.h
@@ -226,13 +226,17 @@ void oled_write(const char *data, bool invert);
226void oled_write_ln(const char *data, bool invert); 226void oled_write_ln(const char *data, bool invert);
227 227
228// Pans the buffer to the right (or left by passing true) by moving contents of the buffer 228// Pans the buffer to the right (or left by passing true) by moving contents of the buffer
229// Useful for moving the screen in preparation for new drawing
229void oled_pan(bool left); 230void oled_pan(bool left);
230 231
231// Returns a pointer to the requested start index in the buffer plus remaining 232// Returns a pointer to the requested start index in the buffer plus remaining
232// buffer length as struct 233// buffer length as struct
233oled_buffer_reader_t oled_read_raw(uint16_t start_index); 234oled_buffer_reader_t oled_read_raw(uint16_t start_index);
234 235
236// Writes a string to the buffer at current cursor position
235void oled_write_raw(const char *data, uint16_t size); 237void oled_write_raw(const char *data, uint16_t size);
238
239// Writes a single byte into the buffer at the specified index
236void oled_write_raw_byte(const char data, uint16_t index); 240void oled_write_raw_byte(const char data, uint16_t index);
237 241
238// Sets a specific pixel on or off 242// Sets a specific pixel on or off
@@ -251,17 +255,11 @@ void oled_write_P(const char *data, bool invert);
251// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM 255// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
252void oled_write_ln_P(const char *data, bool invert); 256void oled_write_ln_P(const char *data, bool invert);
253 257
258// Writes a PROGMEM string to the buffer at current cursor position
254void oled_write_raw_P(const char *data, uint16_t size); 259void oled_write_raw_P(const char *data, uint16_t size);
255#else 260#else
256// Writes a string to the buffer at current cursor position
257// Advances the cursor while writing, inverts the pixels if true
258# define oled_write_P(data, invert) oled_write(data, invert) 261# define oled_write_P(data, invert) oled_write(data, invert)
259
260// Writes a string to the buffer at current cursor position
261// Advances the cursor while writing, inverts the pixels if true
262// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
263# define oled_write_ln_P(data, invert) oled_write(data, invert) 262# define oled_write_ln_P(data, invert) oled_write(data, invert)
264
265# define oled_write_raw_P(data, size) oled_write_raw(data, size) 263# define oled_write_raw_P(data, size) oled_write_raw(data, size)
266#endif // defined(__AVR__) 264#endif // defined(__AVR__)
267 265
diff --git a/keyboards/babyv/keymaps/melonbred/keymap.c b/keyboards/babyv/keymaps/melonbred/keymap.c
new file mode 100644
index 000000000..ea62241e9
--- /dev/null
+++ b/keyboards/babyv/keymaps/melonbred/keymap.c
@@ -0,0 +1,62 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 LAYER0,
21 LAYER1,
22 LAYER2,
23};
24
25
26// Tap Dance Declarations
27enum {
28 TD_M_D = 0,
29 TD_P_M
30};
31
32// Tap Dance Definition
33qk_tap_dance_action_t tap_dance_actions[] = {
34 //Tap once for minus, tap twice for divide
35 [TD_M_D] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_PSLS),
36 //Tap once for plus, tap twice for multiply
37 [TD_P_M] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_PAST)
38};
39
40
41const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42 [LAYER0] = LAYOUT_2u(
43 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
44 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
45 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
46 MO(LAYER2), KC_LALT, LT(LAYER1, KC_SPC), KC_SPC, KC_RALT, KC_LGUI
47 ),
48
49 [LAYER1] = LAYOUT_2u(
50 KC_GRV, KC_QUOT, _______, KC_UP, _______, _______, KC_7, KC_8, KC_9, KC_PMNS, KC_PSLS, KC_DEL,
51 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_4, KC_5, KC_6, KC_PPLS, KC_PAST, KC_ENT,
52 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_1, KC_2, KC_3, XXXXXXX, XXXXXXX, KC_RSFT,
53 XXXXXXX, _______, _______, KC_0, KC_PDOT, _______
54 ),
55
56 [LAYER2] = LAYOUT_2u(
57 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
58 KC_VOLU, KC_MPLY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
59 KC_VOLD, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, KC_RCTL, KC_RALT, KC_DEL, XXXXXXX,
60 _______, KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
61 ),
62};
diff --git a/keyboards/kmac_pad/config.h b/keyboards/kmac_pad/config.h
new file mode 100644
index 000000000..eb33a994b
--- /dev/null
+++ b/keyboards/kmac_pad/config.h
@@ -0,0 +1,102 @@
1/*
2Copyright 2021 talsu <talsu84@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x4B4D // KM
24#define PRODUCT_ID 0x4143 // AC
25#define DEVICE_VER 0x0104
26#define MANUFACTURER KBDMania
27#define PRODUCT KMAC PAD
28
29/* key matrix size */
30#define MATRIX_ROWS 6
31#define MATRIX_COLS 4
32
33/*
34 * Keyboard Matrix Assignments
35 * The KMAC uses demultiplexers for the cols, they are only included here as documentation.
36 * See matrix.c for more details.
37 */
38#define MATRIX_ROW_PINS { E2, D0, D1, D2, D3, D5 }
39#define MATRIX_COL_PINS { C7, C6, B6, B5 }
40#define UNUSED_PINS
41
42/* COL2ROW, ROW2COL*/
43// #define DIODE_DIRECTION COL2ROW
44
45// #define LED_CAPS_LOCK_PIN B0
46// #define LED_SCROLL_LOCK_PIN E6
47// #define LED_PIN_ON_STATE 0
48
49/* number of backlight levels */
50// #define BACKLIGHT_LEVELS 3
51// #define BACKLIGHT_PIN B7
52// #define BACKLIGHT_BREATHING
53
54/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
55#define DEBOUNCE 5
56
57/* define if matrix has ghost (lacks anti-ghosting diodes) */
58//#define MATRIX_HAS_GHOST
59
60/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
61#define LOCKING_SUPPORT_ENABLE
62/* Locking resynchronize hack */
63#define LOCKING_RESYNC_ENABLE
64
65/*
66 * Force NKRO
67 *
68 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
69 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
70 * makefile for this to work.)
71 *
72 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
73 * until the next keyboard reset.
74 *
75 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
76 * fully operational during normal computer usage.
77 *
78 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
79 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
80 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
81 * power-up.
82 *
83 */
84//#define FORCE_NKRO
85
86/*
87 * Feature disable options
88 * These options are also useful to firmware size reduction.
89 */
90
91/* disable debug print */
92//#define NO_DEBUG
93
94/* disable print */
95//#define NO_PRINT
96
97/* disable action features */
98//#define NO_ACTION_LAYER
99//#define NO_ACTION_TAPPING
100//#define NO_ACTION_ONESHOT
101//#define NO_ACTION_MACRO
102//#define NO_ACTION_FUNCTION
diff --git a/keyboards/kmac_pad/info.json b/keyboards/kmac_pad/info.json
new file mode 100644
index 000000000..6a17b3d45
--- /dev/null
+++ b/keyboards/kmac_pad/info.json
@@ -0,0 +1,35 @@
1{
2 "keyboard_name": "KMAC PAD",
3 "maintainer": "talsu",
4 "width": 4,
5 "height": 6.5,
6 "layouts": {
7 "LAYOUT": {
8 "layout": [
9 {"label":"K00", "x":3, "y":0},
10
11 {"label":"K10", "x":0, "y":1.25},
12 {"label":"K11", "x":1, "y":1.25},
13 {"label":"K12", "x":2, "y":1.25},
14 {"label":"K13", "x":3, "y":1.25},
15
16 {"label":"K20", "x":0, "y":2.25},
17 {"label":"K21", "x":1, "y":2.25},
18 {"label":"K22", "x":2, "y":2.25},
19 {"label":"K23", "x":3, "y":2.25, "h":2},
20
21 {"label":"K30", "x":0, "y":3.25},
22 {"label":"K31", "x":1, "y":3.25},
23 {"label":"K32", "x":2, "y":3.25},
24
25 {"label":"K40", "x":0, "y":4.25},
26 {"label":"K41", "x":1, "y":4.25},
27 {"label":"K42", "x":2, "y":4.25},
28 {"label":"K43", "x":3, "y":4.25, "h":2},
29
30 {"label":"K50", "x":0, "y":5.25, "w":2},
31 {"label":"K52", "x":2, "y":5.25}
32 ]
33 }
34 }
35}
diff --git a/keyboards/kmac_pad/keymaps/default/keymap.c b/keyboards/kmac_pad/keymaps/default/keymap.c
new file mode 100644
index 000000000..b9b9f823f
--- /dev/null
+++ b/keyboards/kmac_pad/keymaps/default/keymap.c
@@ -0,0 +1,143 @@
1/*
2Copyright 2021 talsu <talsu84@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include QMK_KEYBOARD_H
19
20enum kmac_pad_keycodes {
21 MD_BOOT = SAFE_RANGE,
22 MCR1,
23 MCR2,
24 MCR3,
25 MCR4,
26 MCR5,
27 MCR6,
28 MCR7,
29 MCR8,
30 MCR9,
31 MCR10,
32 MCR11,
33 MCR12
34};
35
36const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
37 [0] = LAYOUT( /* Base */
38 TG(1),
39 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
40 KC_P7, KC_P8, KC_P9, KC_PPLS,
41 KC_P4, KC_P5, KC_P6,
42 KC_P1, KC_P2, KC_P3, KC_PENT,
43 KC_P0, KC_PDOT ),
44 [1] = LAYOUT( /* FN */
45 KC_TRNS,
46 MCR1, MCR2, MCR3, KC_TRNS,
47 MCR4, MCR5, MCR6, KC_TRNS,
48 MCR7, MCR8, MCR9,
49 MCR10, MCR11, MCR12, KC_TRNS,
50 KC_TRNS, MD_BOOT )
51};
52
53bool process_record_user(uint16_t keycode, keyrecord_t *record) {
54
55 switch (keycode) {
56 case MD_BOOT:
57 {
58 static uint32_t key_timer;
59 if (record->event.pressed) {
60 key_timer = timer_read32();
61 } else {
62 if (timer_elapsed32(key_timer) >= 2000) {
63 reset_keyboard();
64 }
65 }
66 return false;
67 }
68 case MCR1:
69 if (record->event.pressed) {
70 SEND_STRING("Macro 1");
71 }
72 return false;
73 case MCR2:
74 if (record->event.pressed) {
75 SEND_STRING("Macro 2");
76 }
77 return false;
78 case MCR3:
79 if (record->event.pressed) {
80 SEND_STRING("Macro 3");
81 }
82 return false;
83 case MCR4:
84 if (record->event.pressed) {
85 SEND_STRING("Macro 4");
86 }
87 return false;
88 case MCR5:
89 if (record->event.pressed) {
90 SEND_STRING("Macro 5");
91 }
92 return false;
93 case MCR6:
94 if (record->event.pressed) {
95 SEND_STRING("Macro 6");
96 }
97 return false;
98 case MCR7:
99 if (record->event.pressed) {
100 SEND_STRING("Macro 7");
101 }
102 return false;
103 case MCR8:
104 if (record->event.pressed) {
105 SEND_STRING("Macro 8");
106 }
107 return false;
108 case MCR9:
109 if (record->event.pressed) {
110 SEND_STRING("Macro 9");
111 }
112 return false;
113 case MCR10:
114 if (record->event.pressed) {
115 SEND_STRING("Macro 10");
116 }
117 return false;
118 case MCR11:
119 if (record->event.pressed) {
120 SEND_STRING("Macro 12");
121 }
122 return false;
123 case MCR12:
124 if (record->event.pressed) {
125 SEND_STRING("Macro 12");
126 }
127 return false;
128 default:
129 return true;
130 }
131
132}
133
134bool led_update_user(led_t led_state) {
135 writePin(B1, led_state.num_lock);
136 return false;
137}
138
139
140layer_state_t layer_state_set_user(layer_state_t state) {
141 writePin(B3, !IS_LAYER_ON_STATE(state, 0));
142 return state;
143}
diff --git a/keyboards/kmac_pad/keymaps/default/readme.md b/keyboards/kmac_pad/keymaps/default/readme.md
new file mode 100644
index 000000000..3b9b739a2
--- /dev/null
+++ b/keyboards/kmac_pad/keymaps/default/readme.md
@@ -0,0 +1,61 @@
1# The default keymap for KMAC PAD
2
3This is the default keymap. It implements the same features as the official default KMAC PAD firmware.
4
5## Layers
6
7The keymap has two layers. Press the 'FN' key to toggle the Default layer and Function layer.
8
9### Layer 1: Default Layer
10
11 ,---.
12 |TG1|
13 `---'
14 ,---------------.
15 |NUM| / | * | - |
16 |---------------|
17 | 7 | 8 | 9 | |
18 |-----------| + |
19 | 4 | 5 | 6 | |
20 |---------------|
21 | 1 | 2 | 3 | |
22 |-----------|Ent|
23 | 0 | . | |
24 '---------------'
25
26### Layer 2: Function Layer
27
28 ,---.
29 |TG1|
30 `---'
31 ,---------------.
32 |M1 |M2 |M3 | |
33 |---------------|
34 |M4 |M5 |M6 | |
35 |-----------| |
36 |M7 |M8 |M9 | |
37 |---------------|
38 |M10|M11|M12| |
39 |-----------| |
40 | | | |
41 '---------------'
42
43## Macros
44
45The default macro is typed with meaningless strings that exist as samples.
46
47
48| Macro | Action |
49|:-----:| -------------------------------------- |
50| 1 | Types `Macro 1` |
51| 2 | Types `Macro 2` |
52| 3 | Types `Macro 3` |
53| 4 | Types `Macro 4` |
54| 5 | Types `Macro 5` |
55| 6 | Types `Macro 6` |
56| 7 | Types `Macro 7` |
57| 8 | Types `Macro 8` |
58| 9 | Types `Macro 9` |
59| 10 | Types `Macro 10` |
60| 11 | Types `Macro 11` |
61| 12 | Types `Macro 12` |
diff --git a/keyboards/kmac_pad/kmac_pad.c b/keyboards/kmac_pad/kmac_pad.c
new file mode 100644
index 000000000..87083668c
--- /dev/null
+++ b/keyboards/kmac_pad/kmac_pad.c
@@ -0,0 +1,29 @@
1/*
2Copyright 2021 talsu <talsu84@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include "kmac_pad.h"
19
20void keyboard_pre_init_kb(void) {
21
22 /* Set Backlight pin as output
23 * FN Pin PB3
24 * PAD Pin PB1
25 */
26 setPinOutput(B3);
27 setPinOutput(B1);
28 keyboard_pre_init_user();
29}
diff --git a/keyboards/kmac_pad/kmac_pad.h b/keyboards/kmac_pad/kmac_pad.h
new file mode 100644
index 000000000..997960833
--- /dev/null
+++ b/keyboards/kmac_pad/kmac_pad.h
@@ -0,0 +1,37 @@
1/*
2Copyright 2021 talsu <talsu84@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "quantum.h"
21
22#define LAYOUT( \
23 K00, \
24 K10, K11, K12, K13, \
25 K20, K21, K22, K23, \
26 K30, K31, K32, \
27 K40, K41, K42, K43, \
28 K50, K52 \
29) \
30{ \
31 { K00, KC_NO, KC_NO, KC_NO }, \
32 { K10, K11, K12, K13 }, \
33 { K20, K21, K22, K23 }, \
34 { K30, K31, K32, KC_NO }, \
35 { K40, K41, K42, K43 }, \
36 { K50, KC_NO, K52, KC_NO } \
37}
diff --git a/keyboards/kmac_pad/matrix.c b/keyboards/kmac_pad/matrix.c
new file mode 100644
index 000000000..476e40f51
--- /dev/null
+++ b/keyboards/kmac_pad/matrix.c
@@ -0,0 +1,111 @@
1/*
2Copyright 2021 talsu <talsu84@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include "wait.h"
19#include "matrix.h"
20#include "quantum.h"
21
22static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
23static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
24
25/* Columns 0 - 3
26 * col / pin:
27 * 0: C7
28 * 1: C6
29 * 2: B6
30 * 3: B5
31 */
32static void unselect_cols(void) {
33 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
34 setPinOutput(col_pins[col]);
35 writePinLow(col_pins[col]);
36 }
37}
38
39static void select_col(uint8_t col) {
40 writePinHigh(col_pins[col]);
41}
42
43static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
44 bool matrix_changed = false;
45
46 // Select col and wait for col selecton to stabilize
47 select_col(current_col);
48 wait_us(30);
49
50 // row:0 , col:0 FN key is DIRECT_PIN
51 if (current_col == 0) {
52
53 matrix_row_t last_row_value = current_matrix[0];
54 if (readPin(row_pins[0]) == 0) {
55 // Pin LO, set col bit
56 current_matrix[0] |= (1 << current_col);
57 } else {
58 // Pin HI, clear col bit
59 current_matrix[0] &= ~(1 << current_col);
60 }
61
62 // Determine if the matrix changed state
63 if ((last_row_value != current_matrix[0]) && !(matrix_changed)) {
64 matrix_changed = true;
65 }
66 }
67
68 // other row use MATRIX
69 for (uint8_t row_index = 1; row_index < MATRIX_ROWS; row_index++) {
70
71 matrix_row_t last_row_value = current_matrix[row_index];
72 if (readPin(row_pins[row_index]) == 0) {
73 // Pin HI, clear col bit
74 current_matrix[row_index] &= ~(1 << current_col);
75 } else {
76 // Pin LO, set col bit
77 current_matrix[row_index] |= (1 << current_col);
78 }
79
80 // Determine if the matrix changed state
81 if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) {
82 matrix_changed = true;
83 }
84 }
85
86
87 // Unselect cols
88 unselect_cols();
89
90 return matrix_changed;
91}
92
93void matrix_init_custom(void) {
94 // initialize hardware and global matrix state here
95 unselect_cols();
96
97 // initialize key pins
98 for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
99 setPinInputHigh(row_pins[row_index]);
100 }
101}
102
103bool matrix_scan_custom(matrix_row_t current_matrix[]) {
104 bool changed = false;
105
106 for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
107 changed |= read_rows_on_col(current_matrix, current_col);
108 }
109
110 return changed;
111}
diff --git a/keyboards/kmac_pad/readme.md b/keyboards/kmac_pad/readme.md
new file mode 100644
index 000000000..7605501f3
--- /dev/null
+++ b/keyboards/kmac_pad/readme.md
@@ -0,0 +1,56 @@
1# KMAC PAD
2
3![kmac_pad](https://i.imgur.com/4P1ybgNl.jpg)
4
5KMAC PAD is a num pad keyboard.
6It can be used independently, but can also be used by connecting with KMAC keyboard case.
7
8* Keyboard Maintainer: [talsu](https://github.com/talsu)
9* Hardware Supported: KMAC PAD
10* Hardware Availability: http://www.kbdmania.net/xe/news/5232321
11
12Make example for this keyboard (after setting up your build environment):
13
14 make kmac_pad:default
15
16Flashing example for this keyboard:
17
18 make kmac_pad:default:flash
19
20See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
21
22## Bootloader
23
24The PCB is hardwired to run the bootloader if the key at the `FN` position (the only key in first row) is held down when connecting the keyboard.
25
26## PCB
27
28![Imgur](https://i.imgur.com/ML66cvfl.jpg)
29![Imgur](https://i.imgur.com/Kr2Wdtkl.jpg)
30
31### Switch Pins
32
33The FN key in the `Row 0` is directly connected to the E2 pin.
34The rest of the rows below that use MATRIX. (`Row 1 ~ Row 5`)
35| Row | Pin |
36|:-----:| ---------------------- |
37| 0 | x (Not in Matrix) |
38| 1 | D0 |
39| 2 | D1 |
40| 3 | D2 |
41| 4 | D3 |
42| 5 | D5 |
43
44| Column | Pin |
45|:------:| --------------------- |
46| 0 | C7 |
47| 1 | C6 |
48| 2 | B6 |
49| 3 | B5 |
50
51### Backlight Pins
52
53There are 2 pins for backlight.
54
55The LED of the FN key uses pin `B3`.
56All other keys are connected to the `B1` pin.
diff --git a/keyboards/kmac_pad/rules.mk b/keyboards/kmac_pad/rules.mk
new file mode 100644
index 000000000..3f63076c4
--- /dev/null
+++ b/keyboards/kmac_pad/rules.mk
@@ -0,0 +1,29 @@
1# MCU name
2MCU = atmega32u4
3
4# Processor frequency
5F_CPU = 8000000
6
7# Bootloader selection
8BOOTLOADER = atmel-dfu
9
10# Build Options
11# change yes to no to disable
12#
13BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration
14MOUSEKEY_ENABLE = yes # Mouse keys
15EXTRAKEY_ENABLE = yes # Audio control and System control
16CONSOLE_ENABLE = no # Console for debug
17COMMAND_ENABLE = no # Commands for debug and configuration
18# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
19SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
20# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
21NKRO_ENABLE = yes # USB Nkey Rollover
22BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
23RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
24BLUETOOTH_ENABLE = no # Enable Bluetooth
25AUDIO_ENABLE = no # Audio output
26CUSTOM_MATRIX = lite # Custom matrix file
27
28# Project specific files
29SRC += matrix.c
diff --git a/keyboards/mb44/config.h b/keyboards/mb44/config.h
new file mode 100644
index 000000000..013efa857
--- /dev/null
+++ b/keyboards/mb44/config.h
@@ -0,0 +1,61 @@
1/*
2Copyright 2021 melonbred
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x6d62
24#define PRODUCT_ID 0x6d62
25#define DEVICE_VER 0x0001
26#define MANUFACTURER melonbred
27
28
29/* key matrix size */
30#define MATRIX_ROWS 4
31#define MATRIX_COLS 12
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42 */
43#define MATRIX_ROW_PINS { D1, D6, D5, D4 }
44#define MATRIX_COL_PINS { C4, C5, C6, C7, B7, B6, B5, B4, B3, B2, B1, B0 }
45#define UNUSED_PINS { C2 }
46
47/* COL2ROW, ROW2COL*/
48#define DIODE_DIRECTION COL2ROW
49
50/*Encoder Definition*/
51#define ENCODERS_PAD_A { D3 }
52#define ENCODERS_PAD_B { D2 }
53
54/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
55#define DEBOUNCE 5
56
57
58/* disable these deprecated features by default */
59#define NO_ACTION_MACRO
60#define NO_ACTION_FUNCTION
61
diff --git a/keyboards/mb44/info.json b/keyboards/mb44/info.json
new file mode 100644
index 000000000..d18a0b014
--- /dev/null
+++ b/keyboards/mb44/info.json
@@ -0,0 +1,202 @@
1{
2 "keyboard_name": "MB-44",
3 "url": "",
4 "maintainer": "melonbred",
5 "width": 3,
6 "height": 2,
7 "layouts": {
8 "LAYOUT_default": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12 {"x":2, "y":0},
13 {"x":3, "y":0},
14 {"x":4, "y":0},
15 {"x":5, "y":0},
16 {"x":6, "y":0},
17 {"x":7, "y":0},
18 {"x":8, "y":0},
19 {"x":9, "y":0},
20 {"x":10, "y":0},
21 {"x":11, "y":0, "w":1.75},
22 {"x":0, "y":1, "w":1.25},
23 {"x":1.25, "y":1},
24 {"x":2.25, "y":1},
25 {"x":3.25, "y":1},
26 {"x":4.25, "y":1},
27 {"x":5.25, "y":1},
28 {"x":6.25, "y":1},
29 {"x":7.25, "y":1},
30 {"x":8.25, "y":1},
31 {"x":9.25, "y":1},
32 {"x":10.25, "y":1},
33 {"x":11.25, "y":1, "w":1.5},
34 {"x":0, "y":2, "w":1.75},
35 {"x":1.75, "y":2},
36 {"x":2.75, "y":2},
37 {"x":3.75, "y":2},
38 {"x":4.75, "y":2},
39 {"x":5.75, "y":2},
40 {"x":6.75, "y":2},
41 {"x":7.75, "y":2},
42 {"x":8.75, "y":2},
43 {"x":9.75, "y":2},
44 {"x":10.75, "y":2},
45 {"x":11.75, "y":2},
46 {"x":0, "y":3},
47 {"x":1, "y":3},
48 {"x":2, "y":3},
49 {"x":3, "y":3, "w":6.25},
50 {"x":9.75, "y":3},
51 {"x":10.75, "y":3},
52 {"x":11.75, "y":3}
53 ]
54 },
55 "LAYOUT_2u_split": {
56 "layout": [
57 {"x":0, "y":0},
58 {"x":1, "y":0},
59 {"x":2, "y":0},
60 {"x":3, "y":0},
61 {"x":4, "y":0},
62 {"x":5, "y":0},
63 {"x":6, "y":0},
64 {"x":7, "y":0},
65 {"x":8, "y":0},
66 {"x":9, "y":0},
67 {"x":10, "y":0},
68 {"x":11, "y":0, "w":1.75},
69 {"x":0, "y":1, "w":1.25},
70 {"x":1.25, "y":1},
71 {"x":2.25, "y":1},
72 {"x":3.25, "y":1},
73 {"x":4.25, "y":1},
74 {"x":5.25, "y":1},
75 {"x":6.25, "y":1},
76 {"x":7.25, "y":1},
77 {"x":8.25, "y":1},
78 {"x":9.25, "y":1},
79 {"x":10.25, "y":1},
80 {"x":11.25, "y":1, "w":1.5},
81 {"x":0, "y":2, "w":1.75},
82 {"x":1.75, "y":2},
83 {"x":2.75, "y":2},
84 {"x":3.75, "y":2},
85 {"x":4.75, "y":2},
86 {"x":5.75, "y":2},
87 {"x":6.75, "y":2},
88 {"x":7.75, "y":2},
89 {"x":8.75, "y":2},
90 {"x":9.75, "y":2},
91 {"x":10.75, "y":2},
92 {"x":11.75, "y":2},
93 {"x":0, "y":3},
94 {"x":1, "y":3, "w":1.25},
95 {"x":2.25, "y":3},
96 {"x":3.25, "y":3, "w":2.25},
97 {"x":5.5, "y":3},
98 {"x":6.5, "y":3, "w":2.75},
99 {"x":9.75, "y":3},
100 {"x":10.75, "y":3},
101 {"x":11.75, "y":3}
102 ]
103 },
104 "LAYOUT_2u1u_split": {
105 "layout": [
106 {"x":0, "y":0},
107 {"x":1, "y":0},
108 {"x":2, "y":0},
109 {"x":3, "y":0},
110 {"x":4, "y":0},
111 {"x":5, "y":0},
112 {"x":6, "y":0},
113 {"x":7, "y":0},
114 {"x":8, "y":0},
115 {"x":9, "y":0},
116 {"x":10, "y":0},
117 {"x":11, "y":0, "w":1.75},
118 {"x":0, "y":1, "w":1.25},
119 {"x":1.25, "y":1},
120 {"x":2.25, "y":1},
121 {"x":3.25, "y":1},
122 {"x":4.25, "y":1},
123 {"x":5.25, "y":1},
124 {"x":6.25, "y":1},
125 {"x":7.25, "y":1},
126 {"x":8.25, "y":1},
127 {"x":9.25, "y":1},
128 {"x":10.25, "y":1},
129 {"x":11.25, "y":1, "w":1.5},
130 {"x":0, "y":2, "w":1.75},
131 {"x":1.75, "y":2},
132 {"x":2.75, "y":2},
133 {"x":3.75, "y":2},
134 {"x":4.75, "y":2},
135 {"x":5.75, "y":2},
136 {"x":6.75, "y":2},
137 {"x":7.75, "y":2},
138 {"x":8.75, "y":2},
139 {"x":9.75, "y":2},
140 {"x":10.75, "y":2},
141 {"x":11.75, "y":2},
142 {"x":0, "y":3},
143 {"x":1, "y":3, "w":1.25},
144 {"x":2.25, "y":3},
145 {"x":3.25, "y":3, "w":2.75},
146 {"x":6, "y":3, "w":2.25},
147 {"x":8.25, "y":3},
148 {"x":9.75, "y":3},
149 {"x":10.75, "y":3},
150 {"x":11.75, "y":3}
151 ]
152 },
153 "LAYOUT_3u_split": {
154 "layout": [
155 {"x":0, "y":0},
156 {"x":1, "y":0},
157 {"x":2, "y":0},
158 {"x":3, "y":0},
159 {"x":4, "y":0},
160 {"x":5, "y":0},
161 {"x":6, "y":0},
162 {"x":7, "y":0},
163 {"x":8, "y":0},
164 {"x":9, "y":0},
165 {"x":10, "y":0},
166 {"x":11, "y":0, "w":1.75},
167 {"x":0, "y":1, "w":1.25},
168 {"x":1.25, "y":1},
169 {"x":2.25, "y":1},
170 {"x":3.25, "y":1},
171 {"x":4.25, "y":1},
172 {"x":5.25, "y":1},
173 {"x":6.25, "y":1},
174 {"x":7.25, "y":1},
175 {"x":8.25, "y":1},
176 {"x":9.25, "y":1},
177 {"x":10.25, "y":1},
178 {"x":11.25, "y":1, "w":1.5},
179 {"x":0, "y":2, "w":1.75},
180 {"x":1.75, "y":2},
181 {"x":2.75, "y":2},
182 {"x":3.75, "y":2},
183 {"x":4.75, "y":2},
184 {"x":5.75, "y":2},
185 {"x":6.75, "y":2},
186 {"x":7.75, "y":2},
187 {"x":8.75, "y":2},
188 {"x":9.75, "y":2},
189 {"x":10.75, "y":2},
190 {"x":11.75, "y":2},
191 {"x":0, "y":3},
192 {"x":1, "y":3, "w":1.25},
193 {"x":2.25, "y":3},
194 {"x":3.25, "y":3, "w":3},
195 {"x":6.25, "y":3, "w":3},
196 {"x":9.75, "y":3},
197 {"x":10.75, "y":3},
198 {"x":11.75, "y":3}
199 ]
200 }
201 }
202}
diff --git a/keyboards/mb44/keymaps/2u1u_space/keymap.c b/keyboards/mb44/keymaps/2u1u_space/keymap.c
new file mode 100644
index 000000000..437a90c7b
--- /dev/null
+++ b/keyboards/mb44/keymaps/2u1u_space/keymap.c
@@ -0,0 +1,59 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER1,
22 _LAYER2
23
24};
25
26
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28 [_BASE] = LAYOUT_2u1u_space(
29 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
30 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
31 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
32 MO(_LAYER2), KC_LGUI, KC_LALT, LT(_LAYER1, KC_SPC), KC_RALT, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT
33 ),
34
35 [_LAYER1] = LAYOUT_2u1u_space(
36 KC_GRV, KC_QUOT, _______, KC_UP, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_DEL,
37 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PSLS, KC_PMNS, KC_4, KC_5, KC_6, KC_ENT,
38 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PAST, KC_PPLS, KC_1, KC_2, KC_3, KC_RSFT,
39 _______, KC_LGUI, KC_LALT, XXXXXXX, KC_RALT, KC_SPC, KC_0, KC_PDOT, XXXXXXX
40 ),
41
42 [_LAYER2] = LAYOUT_2u1u_space(
43 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
44 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
45 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
46 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
47 ),
48};
49
50// Rotary Encoder Functions
51void encoder_update_user(uint8_t index, bool clockwise) {
52 if (index == 0) { /* First encoder */
53 if (clockwise) {
54 tap_code(KC_VOLD);
55 } else {
56 tap_code(KC_VOLU);
57 }
58 }
59}
diff --git a/keyboards/mb44/keymaps/2u_space/keymap.c b/keyboards/mb44/keymaps/2u_space/keymap.c
new file mode 100644
index 000000000..b2f1fb64b
--- /dev/null
+++ b/keyboards/mb44/keymaps/2u_space/keymap.c
@@ -0,0 +1,59 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER1,
22 _LAYER2
23
24};
25
26
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28 [_BASE] = LAYOUT_2u_space(
29 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
30 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
31 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
32 MO(_LAYER2), KC_LGUI, KC_LALT, LT(_LAYER1, KC_SPC), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
33 ),
34
35 [_LAYER1] = LAYOUT_2u_space(
36 KC_GRV, KC_QUOT, _______, KC_UP, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_DEL,
37 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PSLS, KC_PMNS, KC_4, KC_5, KC_6, KC_ENT,
38 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PAST, KC_PPLS, KC_1, KC_2, KC_3, KC_RSFT,
39 _______, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC, KC_RALT, KC_0, KC_PDOT, XXXXXXX
40 ),
41
42 [_LAYER2] = LAYOUT_2u_space(
43 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
44 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
45 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
46 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
47 ),
48};
49
50// Rotary Encoder Functions
51void encoder_update_user(uint8_t index, bool clockwise) {
52 if (index == 0) { /* First encoder */
53 if (clockwise) {
54 tap_code(KC_VOLD);
55 } else {
56 tap_code(KC_VOLU);
57 }
58 }
59}
diff --git a/keyboards/mb44/keymaps/3u_space/keymap.c b/keyboards/mb44/keymaps/3u_space/keymap.c
new file mode 100644
index 000000000..bfd01c6ea
--- /dev/null
+++ b/keyboards/mb44/keymaps/3u_space/keymap.c
@@ -0,0 +1,67 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER1,
22 _LAYER2,
23 _LAYER3
24
25};
26
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [_BASE] = LAYOUT_3u_space(
30 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
31 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
32 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
33 MO(_LAYER2), KC_LGUI, KC_LALT, LT(_LAYER1, KC_SPC), LT(_LAYER3, KC_SPC), KC_LEFT, KC_DOWN, KC_RGHT
34 ),
35
36 [_LAYER1] = LAYOUT_3u_space(
37 KC_GRV, KC_QUOT, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_DEL,
38 KC_CAPS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_PSLS, KC_PMNS, KC_4, KC_5, KC_6, KC_ENT,
39 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PAST, KC_PPLS, KC_1, KC_2, KC_3, KC_RSFT,
40 XXXXXXX, KC_LGUI, KC_LALT, _______, XXXXXXX, KC_0, KC_PDOT, KC_PEQL
41 ),
42
43 [_LAYER2] = LAYOUT_3u_space(
44 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
45 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
46 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, KC_RCTL, KC_RALT, KC_DEL, KC_VOLD,
47 XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
48 ),
49
50 [_LAYER3] = LAYOUT_3u_space(
51 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
52 XXXXXXX, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, _______,
53 _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
54 _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
55 ),
56};
57
58// Rotary Encoder Functions
59void encoder_update_user(uint8_t index, bool clockwise) {
60 if (index == 0) { /* First encoder */
61 if (clockwise) {
62 tap_code(KC_VOLD);
63 } else {
64 tap_code(KC_VOLU);
65 }
66 }
67} \ No newline at end of file
diff --git a/keyboards/mb44/keymaps/default/keymap.c b/keyboards/mb44/keymaps/default/keymap.c
new file mode 100644
index 000000000..1659661f3
--- /dev/null
+++ b/keyboards/mb44/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER1,
22 _LAYER2
23
24};
25
26
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [_BASE] = LAYOUT_default(
30 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
31 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
32 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
33 MO(_LAYER2), KC_LGUI, KC_LALT, LT(_LAYER1, KC_SPC), KC_LEFT, KC_DOWN, KC_RGHT
34 ),
35
36 [_LAYER1] = LAYOUT_default(
37 KC_GRV, KC_QUOT, _______, KC_UP, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_DEL,
38 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PSLS, KC_PMNS, KC_4, KC_5, KC_6, KC_ENT,
39 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PAST, KC_PPLS, KC_1, KC_2, KC_3, KC_RSFT,
40 _______, KC_LGUI, KC_LALT, _______, KC_0, KC_PDOT, XXXXXXX
41 ),
42
43 [_LAYER2] = LAYOUT_default(
44 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
45 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
46 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
47 _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_RALT, KC_RCTL
48 ),
49};
50
51
52// Rotary Encoder Functions
53void encoder_update_user(uint8_t index, bool clockwise) {
54 if (index == 0) { /* First encoder */
55 if (clockwise) {
56 tap_code(KC_VOLD);
57 } else {
58 tap_code(KC_VOLU);
59 }
60 }
61}
diff --git a/keyboards/mb44/keymaps/via/keymap.c b/keyboards/mb44/keymaps/via/keymap.c
new file mode 100644
index 000000000..9a998ba0a
--- /dev/null
+++ b/keyboards/mb44/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
1/* Copyright 2020 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER1,
22 _LAYER2,
23 _LAYER3
24
25};
26
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [_BASE] = LAYOUT_default(
30 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
31 CTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
32 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
33 MO(_LAYER2), KC_LGUI, KC_LALT, LT(_LAYER1, KC_SPC), KC_LEFT, KC_RGHT, KC_DOWN
34 ),
35
36 [_LAYER1] = LAYOUT_default(
37 KC_GRV, KC_QUOT, _______, KC_UP, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_DEL,
38 KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PSLS, KC_PMNS, KC_4, KC_5, KC_6, KC_ENT,
39 KC_LSFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_PAST, KC_PPLS, KC_1, KC_2, KC_3, KC_RSFT,
40 _______, KC_LGUI, KC_LALT, _______, KC_0, KC_PDOT, XXXXXXX
41 ),
42
43 [_LAYER2] = LAYOUT_default(
44 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
45 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
46 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
47 _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_RALT, KC_RCTL
48 ),
49
50 [_LAYER3] = LAYOUT_default(
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
53 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
54 _______, _______, _______, _______, _______, _______, _______
55 ),
56
57};
58
diff --git a/keyboards/mb44/keymaps/via/rules.mk b/keyboards/mb44/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/mb44/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/mb44/mb44.c b/keyboards/mb44/mb44.c
new file mode 100644
index 000000000..16f68705f
--- /dev/null
+++ b/keyboards/mb44/mb44.c
@@ -0,0 +1,17 @@
1/* Copyright 2021 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "mb44.h" \ No newline at end of file
diff --git a/keyboards/mb44/mb44.h b/keyboards/mb44/mb44.h
new file mode 100644
index 000000000..a0664d8b8
--- /dev/null
+++ b/keyboards/mb44/mb44.h
@@ -0,0 +1,84 @@
1/* Copyright 2021 melonbred
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21/* This is a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29
30#define XXX KC_NO
31
32
33
34#define LAYOUT_default( \
35 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
36 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
37 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
38 K30, K31, K32, K35, K39, K3A, K3B \
39) \
40{ \
41 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
42 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
43 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
44 { K30, K31, K32, XXX, XXX, K35, XXX, XXX, XXX, K39, K3A, K3B } \
45}
46
47#define LAYOUT_2u_space( \
48 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
49 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
50 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
51 K30, K31, K32, K33, K36, K37, K39, K3A, K3B \
52) \
53{ \
54 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
55 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
56 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
57 { K30, K31, K32, K33, XXX, XXX, K36, K37, XXX, K39, K3A, K3B } \
58}
59
60#define LAYOUT_2u1u_space( \
61 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
62 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
63 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
64 K30, K31, K32, K33, K35, K36, K39, K3A, K3B \
65) \
66{ \
67 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
68 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
69 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
70 { K30, K31, K32, K33, XXX, K35, K36, XXX, XXX, K39, K3A, K3B } \
71}
72
73#define LAYOUT_3u_space( \
74 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
75 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
76 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
77 K30, K31, K32, K33, K36, K39, K3A, K3B \
78) \
79{ \
80 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
81 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
82 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
83 { K30, K31, K32, K33, XXX, XXX, K36, XXX, XXX, K39, K3A, K3B } \
84}
diff --git a/keyboards/mb44/readme.md b/keyboards/mb44/readme.md
new file mode 100644
index 000000000..3cd59ecdb
--- /dev/null
+++ b/keyboards/mb44/readme.md
@@ -0,0 +1,15 @@
1# MB-44
2
3![MB-44](https://imgur.com/sECiIHR.jpg)
4
5To reset and put into bootloader mode, please use the hardware reset button on the botton of the PCB. If the PCB is on the default firmware, software reset is available by holding the bottom left corner key and pressing `B` in the standard qwerty layout.
6
7* Keyboard Maintainer: [melonbred](https://github.com/melonbred)
8* Hardware Supported: The PCBs, controllers supported
9* Hardware Availability: Links to where you can find this hardware
10
11Make example for this keyboard (after setting up your build environment):
12
13 make mb44:default
14
15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mb44/rules.mk b/keyboards/mb44/rules.mk
new file mode 100644
index 000000000..ba7e249c9
--- /dev/null
+++ b/keyboards/mb44/rules.mk
@@ -0,0 +1,23 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23ENCODER_ENABLE = yes # Enable rotary encoder
diff --git a/keyboards/thevankeyboards/minivan/rules.mk b/keyboards/thevankeyboards/minivan/rules.mk
index 4e1320815..82a739c69 100644
--- a/keyboards/thevankeyboards/minivan/rules.mk
+++ b/keyboards/thevankeyboards/minivan/rules.mk
@@ -28,3 +28,4 @@ MIDI_ENABLE = no # MIDI controls
28UNICODE_ENABLE = no # Unicode 28UNICODE_ENABLE = no # Unicode
29BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 29BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
30AUDIO_ENABLE = no # Audio output on port C6 30AUDIO_ENABLE = no # Audio output on port C6
31RGBLIGHT_ENABLE = yes # Enable support for RGB LEDs