aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/newbs.md2
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h3
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c37
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md3
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk4
-rw-r--r--keyboards/hineybush/h88/keymaps/default/keymap.c2
-rw-r--r--keyboards/maartenwut/plain60/keymaps/default/keymap.c16
-rw-r--r--keyboards/maartenwut/plain60/rules.mk12
-rw-r--r--keyboards/xd68/config.h110
-rw-r--r--keyboards/xd68/keymaps/default/config.h5
-rw-r--r--keyboards/xd68/keymaps/default/keymap.c48
-rw-r--r--keyboards/xd68/keymaps/default/readme.md5
-rw-r--r--keyboards/xd68/keymaps/default_iso/config.h4
-rw-r--r--keyboards/xd68/keymaps/default_iso/keymap.c48
-rw-r--r--keyboards/xd68/keymaps/default_iso/readme.md5
-rw-r--r--keyboards/xd68/readme.md53
-rw-r--r--keyboards/xd68/rules.mk32
-rwxr-xr-xkeyboards/xd68/xd68.c22
-rwxr-xr-xkeyboards/xd68/xd68.h69
-rw-r--r--keyboards/ymdk/ymd67/config.h46
-rw-r--r--keyboards/ymdk/ymd67/info.json81
-rw-r--r--keyboards/ymdk/ymd67/keymaps/default/keymap.c17
-rw-r--r--keyboards/ymdk/ymd67/keymaps/default/readme.md5
-rw-r--r--keyboards/ymdk/ymd67/readme.md15
-rw-r--r--keyboards/ymdk/ymd67/rules.mk26
-rw-r--r--keyboards/ymdk/ymd67/ymd67.c1
-rw-r--r--keyboards/ymdk/ymd67/ymd67.h17
-rw-r--r--quantum/backlight/backlight_soft.c37
-rw-r--r--quantum/keymap_common.c2
-rw-r--r--quantum/split_common/split_util.c4
-rw-r--r--tmk_core/common/keyboard.c9
-rw-r--r--tmk_core/protocol/serial_soft.c3
32 files changed, 717 insertions, 26 deletions
diff --git a/docs/newbs.md b/docs/newbs.md
index 904a52945..775bba2ca 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md) 13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
14* [Flashing Firmware](newbs_flashing.md) 14* [Flashing Firmware](newbs_flashing.md)
15* [Testing and Debugging](newbs_testing_debugging.md) 15* [Testing and Debugging](newbs_testing_debugging.md)
16* [Git Best Practices](newbs_best_practices.md) 16* [Best Git Practices](newbs_git_best_practices.md)
17* [Learn More with these Resources](newbs_learn_more_resources.md) 17* [Learn More with these Resources](newbs_learn_more_resources.md)
18 18
19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md). 19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h
new file mode 100644
index 000000000..4af97ded2
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h
@@ -0,0 +1,3 @@
1#pragma once
2
3#define ENCODER_RESOLUTION 2
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
new file mode 100644
index 000000000..1680f90dc
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
@@ -0,0 +1,37 @@
1/*
2Copyright 2019 Boy_314
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
20const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 [0] = LAYOUT_2x2(
22 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
23 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, ENC_PRESS,
24 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
25 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_END,
26 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
27 KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
28 ),
29 [1] = LAYOUT_2x2(
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 NK_TOGG, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, OLED_TOGG,
32 _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, RESET, CLOCK_SET,
33 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
34 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
35 _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
36 )
37};
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md
new file mode 100644
index 000000000..65984873c
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md
@@ -0,0 +1,3 @@
1# Boy_314's Satisfaction75 Layout
2
3This is Boy_314's Satisfaction75 Layout. It can be used on VIA. It features a QWERTY layout on the base, along with missing TKL keys on layer 1. Right side 3 keys from top down are: Home, End, Delete. The encoder resolution has been reduced from the default of 4 down to 2 so that it no longer needs to click twice, but now only once, before triggering an action.
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk
new file mode 100644
index 000000000..0dcaa7318
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk
@@ -0,0 +1,4 @@
1# rules.mk overrides to enable VIA
2
3RAW_ENABLE = yes
4DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/hineybush/h88/keymaps/default/keymap.c b/keyboards/hineybush/h88/keymaps/default/keymap.c
index 17035b472..2e0251ee2 100644
--- a/keyboards/hineybush/h88/keymaps/default/keymap.c
+++ b/keyboards/hineybush/h88/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, 23 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
24 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, 24 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
25 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, 25 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), 26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
27 27
28 [1] = LAYOUT_all( 28 [1] = LAYOUT_all(
29 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, 29 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC,
diff --git a/keyboards/maartenwut/plain60/keymaps/default/keymap.c b/keyboards/maartenwut/plain60/keymaps/default/keymap.c
index 7e8cfff35..2e23dece0 100644
--- a/keyboards/maartenwut/plain60/keymaps/default/keymap.c
+++ b/keyboards/maartenwut/plain60/keymaps/default/keymap.c
@@ -4,7 +4,10 @@
4// The underscores don't mean anything - you can have a layer called STUFF or any other name. 4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them 5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers. 6// entirely and just use numbers.
7#define _MA 0 7enum _layer {
8 _MA,
9 _FN
10};
8 11
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 13
@@ -12,6 +15,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, \ 15 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, \
13 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ 16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
14 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, \ 17 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, \
15 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ 18 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, LT(_FN, KC_UP), \
16 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTRL) 19 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTRL),
20
21[_FN] = LAYOUT(
22 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
23 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
24 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
25 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
26 _______, _______, _______, _______, _______, _______, _______, _______)
17}; 27};
diff --git a/keyboards/maartenwut/plain60/rules.mk b/keyboards/maartenwut/plain60/rules.mk
index 77b5a3eb9..398b59227 100644
--- a/keyboards/maartenwut/plain60/rules.mk
+++ b/keyboards/maartenwut/plain60/rules.mk
@@ -14,14 +14,14 @@ BOOTLOADER = qmk-dfu
14# Build Options 14# Build Options
15# comment out to disable the options. 15# comment out to disable the options.
16# 16#
17BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) 17BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = no # Mouse keys(+4700) 18MOUSEKEY_ENABLE = no # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control(+450) 19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = no # Console for debug(+400) 20CONSOLE_ENABLE = no # Console for debug
21COMMAND_ENABLE = no # Commands for debug and configuration 21COMMAND_ENABLE = no # Commands for debug and configuration
22NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 22NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
23RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) 23RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
24BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) 24BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
25MIDI_ENABLE = no # MIDI controls 25MIDI_ENABLE = no # MIDI controls
26AUDIO_ENABLE = no 26AUDIO_ENABLE = no
27UNICODE_ENABLE = no # Unicode 27UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/xd68/config.h b/keyboards/xd68/config.h
new file mode 100644
index 000000000..41ede7b6c
--- /dev/null
+++ b/keyboards/xd68/config.h
@@ -0,0 +1,110 @@
1/*
2Copyright 2019 Michael Campbell
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 0xCDCD
24#define PRODUCT_ID 0x6868
25#define DEVICE_VER 0x0001
26#define MANUFACTURER xiudi
27#define PRODUCT XD68
28#define DESCRIPTION XD68 65pc keyboard
29
30/* key matrix size */
31#define MATRIX_ROWS 5
32#define MATRIX_COLS 15
33
34/*
35 * Keyboard Matrix Assignments
36 *
37 * Change this to how you wired your keyboard
38 * COLS: AVR pins used for columns, left to right
39 * ROWS: AVR pins used for rows, top to bottom
40 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
41 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
42 *
43*/
44#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
45#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3, F7 }
46#define UNUSED_PINS
47
48/* COL2ROW, ROW2COL*/
49#define DIODE_DIRECTION COL2ROW
50
51#define BACKLIGHT_PIN F5
52#define BACKLIGHT_LEVELS 6
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
103
104// ws2812 options
105#define RGB_DI_PIN F6 // pin the DI on the ws2812 is hooked-up to
106#define RGBLIGHT_ANIMATIONS // run RGB animations
107#define RGBLED_NUM 12 // number of LEDs
108#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
109#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
110#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
diff --git a/keyboards/xd68/keymaps/default/config.h b/keyboards/xd68/keymaps/default/config.h
new file mode 100644
index 000000000..9ff66e3cf
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/config.h
@@ -0,0 +1,5 @@
1
2#pragma once
3
4#define BACKLIGHT_BREATHING
5#define BREATHING_PERIOD 6 \ No newline at end of file
diff --git a/keyboards/xd68/keymaps/default/keymap.c b/keyboards/xd68/keymaps/default/keymap.c
new file mode 100644
index 000000000..5ce09cde5
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
1#include QMK_KEYBOARD_H
2
3#define _BL 0
4#define _FL 1
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /* Keymap _BL: (Base Layer) Default Layer
8 * ,----------------------------------------------------------------.
9 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
10 * |----------------------------------------------------------------|
11 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
12 * |----------------------------------------------------------------|
13 * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
14 * |----------------------------------------------------------------|
15 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
16 * |----------------------------------------------------------------|
17 * |Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
18 * `----------------------------------------------------------------'
19 */
20[_BL] = LAYOUT_65_ansi(
21 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_PGUP,
23 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGDN,
24 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_END,
25 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_APP, KC_RCTRL, MO(_FL), KC_LEFT,KC_DOWN,KC_RGHT
26 ),
27
28 /* Keymap _FL: Function Layer
29 * ,----------------------------------------------------------------.
30 * |~ `| F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
31 * |----------------------------------------------------------------|
32 * |RESET| |Up | | | | | | | | | | | | |
33 * |----------------------------------------------------------------|
34 * | |<- |Dn | ->| | | | | | | | | | |
35 * |----------------------------------------------------------------|
36 * |HUI |SAI|VAI|RGBMOD|BL-|BL |BL+| | | | |Play |V+ |Mut |
37 * |----------------------------------------------------------------|
38 * |HUD |SAD |VAD | RGB_Tog | | | | <M|V- |M> |
39 * `----------------------------------------------------------------'
40 */
41[_FL] = LAYOUT_65_ansi(
42 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
43 RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
46 RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
47),
48};
diff --git a/keyboards/xd68/keymaps/default/readme.md b/keyboards/xd68/keymaps/default/readme.md
new file mode 100644
index 000000000..f26e1bd63
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/readme.md
@@ -0,0 +1,5 @@
1# XD68 layout for Default ANSI
2
3```
4make xd68:default
5```
diff --git a/keyboards/xd68/keymaps/default_iso/config.h b/keyboards/xd68/keymaps/default_iso/config.h
new file mode 100644
index 000000000..0d0636536
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/config.h
@@ -0,0 +1,4 @@
1#pragma once
2
3#define BACKLIGHT_BREATHING
4#define BREATHING_PERIOD 6 \ No newline at end of file
diff --git a/keyboards/xd68/keymaps/default_iso/keymap.c b/keyboards/xd68/keymaps/default_iso/keymap.c
new file mode 100644
index 000000000..6edcf748f
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/keymap.c
@@ -0,0 +1,48 @@
1#include QMK_KEYBOARD_H
2
3#define _BL 0
4#define _FL 1
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /* Keymap _BL: (Base Layer) Default Layer
8 * ,----------------------------------------------------------------.
9 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
10 * |----------------------------------------------------------------|
11 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
12 * |------------------------------------------------------- -----|
13 * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
14 * |----------------------------------------------------------------|
15 * |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
16 * |----------------------------------------------------------------|
17 * |Ctrl|Win |Alt | Space |App|Ctrl |Fn|Lef|Dow|Rig |
18 * `----------------------------------------------------------------'
19 */
20 [_BL] = LAYOUT_65_iso(
21 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
23 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
24 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27
28 /* Keymap _FL1: Function Layer 1
29 * ,----------------------------------------------------------------.
30 * |~ `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete| Ins|
31 * |----------------------------------------------------------------|
32 * |RESET| | ↑ | | | | | | | | | | | | |
33 * |------------------------------------------------------- -----|
34 * | | ← | ↓ | → | | | | | | | | | | | |
35 * |----------------------------------------------------------------|
36 * |HUI |SAI|VAI |RGBMOD| L+|LED| L-| | | | | |Play|V+|Mut|
37 * |----------------------------------------------------------------|
38 * |HUD |SAD |VAD | RGB_Tog | | | | <M | V-| M> |
39 * `----------------------------------------------------------------'
40 */
41 [_FL] = LAYOUT_65_iso(
42 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
43 RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
46 RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
47 )
48};
diff --git a/keyboards/xd68/keymaps/default_iso/readme.md b/keyboards/xd68/keymaps/default_iso/readme.md
new file mode 100644
index 000000000..d61877e77
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/readme.md
@@ -0,0 +1,5 @@
1# XD68 layout for Default ISO
2
3```
4make xd68:default_iso
5```
diff --git a/keyboards/xd68/readme.md b/keyboards/xd68/readme.md
new file mode 100644
index 000000000..a62d9c7c5
--- /dev/null
+++ b/keyboards/xd68/readme.md
@@ -0,0 +1,53 @@
1# XD68
2
3![Kitteh](https://i.imgur.com/qkA5Of5.jpg)
4
565% board with USB-C, RGB underglow and backlight. Powered by ATM32U4.
6
7![Top View of XD68 Keyboard](https://i.imgur.com/OLkQQ17.jpg)
8
9* Keyboard Maintainer: QMK Community
10* Hardware Supported: XD68
11* Hardware Availability: [KPRepublic on AliExpress](http://kprepublic.com/products/xiudi-xd68-pcb-65-custom-mechanical-keyboard-support-tkg-tools-underglow-rgb-pcb-programmed-kle-lots-of-layouts)
12
13Make example for this keyboard (after setting up your build environment):
14
15 make xd68:default
16 make xd68:default_iso # default ISO UK layout
17
18## Layouts
19
20### ANSI
21
22```
23,----------------------------------------------------------------.
24|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
25|----------------------------------------------------------------|
26|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
27|----------------------------------------------------------------|
28|CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
29|----------------------------------------------------------------|
30|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
31|----------------------------------------------------------------|
32|Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
33`----------------------------------------------------------------'
34```
35
36### ISO-UK
37
38```
39,----------------------------------------------------------------.
40|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
41|----------------------------------------------------------------|
42|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
43|------------------------------------------------------- -----|
44|CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
45|----------------------------------------------------------------|
46|Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
47|----------------------------------------------------------------|
48|Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
49`----------------------------------------------------------------'
50```
51
52See 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).
53
diff --git a/keyboards/xd68/rules.mk b/keyboards/xd68/rules.mk
new file mode 100644
index 000000000..91f9a48f3
--- /dev/null
+++ b/keyboards/xd68/rules.mk
@@ -0,0 +1,32 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14# QMK Build Options
15# change to "no" to disable the options, or define them in the Makefile in
16# the appropriate keymap folder that will get included automatically
17#
18BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
19MOUSEKEY_ENABLE = yes # Mouse keys
20EXTRAKEY_ENABLE = yes # Audio control and System control
21CONSOLE_ENABLE = no # Console for debug
22COMMAND_ENABLE = yes # Commands for debug and configuration
23NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
24BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
25MIDI_ENABLE = no # MIDI support
26AUDIO_ENABLE = no # Audio output on port C6
27UNICODE_ENABLE = no # Unicode
28BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
29RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
30SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
31
32LAYOUTS = 65_ansi 65_iso \ No newline at end of file
diff --git a/keyboards/xd68/xd68.c b/keyboards/xd68/xd68.c
new file mode 100755
index 000000000..2a5a52bda
--- /dev/null
+++ b/keyboards/xd68/xd68.c
@@ -0,0 +1,22 @@
1#include "xd68.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6 matrix_init_user();
7 led_init_ports();
8}
9
10void led_init_ports(void) {
11 // * Set our LED pins as output
12 setPinOutput(B2);
13 writePinHigh(B2);
14}
15
16bool led_update_kb(led_t led_state) {
17 if(led_update_user(led_state)) {
18 writePin(B2, !led_state.caps_lock);
19 }
20 return true;
21}
22
diff --git a/keyboards/xd68/xd68.h b/keyboards/xd68/xd68.h
new file mode 100755
index 000000000..2916d72d4
--- /dev/null
+++ b/keyboards/xd68/xd68.h
@@ -0,0 +1,69 @@
1
2#pragma once
3
4#include "quantum.h"
5
6// readability
7#define XXX KC_NO
8
9/* XD68 ANSI layout
10 * ,----------------------------------------------------------------.
11 * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
12 * |----------------------------------------------------------------|
13 * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
14 * |----------------------------------------------------------------|
15 * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e |
16 * |----------------------------------------------------------------|
17 * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
18 * |----------------------------------------------------------------|
19 * | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
20 * `----------------------------------------------------------------'
21 */
22// The first section contains all of the arguments
23// The second converts the arguments into a two-dimensional array
24
25#define LAYOUT_65_ansi( \
26 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
27 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
28 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
29 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
30 k40, k41, k42, k45, k48, k4a, k4b, k4c, k4d, k4e \
31) \
32{ \
33 {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
34 {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
35 {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
36 {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
37 {k40, k41, k42, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
38}
39
40/* XD68 ISO layout
41 * ,----------------------------------------------------------------.
42 * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
43 * |----------------------------------------------------------------|
44 * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| | 1e |
45 * |------------------------------------------------------. -----|
46 * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| 2e |
47 * |----------------------------------------------------------------|
48 * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
49 * |----------------------------------------------------------------|
50 * | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
51 * `----------------------------------------------------------------'
52 */
53// The first section contains all of the arguments
54// The second converts the arguments into a two-dimensional array
55
56#define LAYOUT_65_iso( \
57 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
58 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
59 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
60 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
61 k40, k41, k42, k45, k48, k4a, k4b, k4c, k4d, k4e \
62) \
63{ \
64 {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
65 {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e}, \
66 {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
67 {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
68 {k40, k41, k42, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
69}
diff --git a/keyboards/ymdk/ymd67/config.h b/keyboards/ymdk/ymd67/config.h
new file mode 100644
index 000000000..05963e57e
--- /dev/null
+++ b/keyboards/ymdk/ymd67/config.h
@@ -0,0 +1,46 @@
1#pragma once
2
3#include "config_common.h"
4
5/* USB Device descriptor parameter */
6#define VENDOR_ID 0xFEED
7#define PRODUCT_ID 0x6060
8#define DEVICE_VER 0x0001
9#define MANUFACTURER YMDK
10#define PRODUCT YMD67
11#define DESCRIPTION Keyboard
12
13/* key matrix size */
14#define MATRIX_ROWS 5
15#define MATRIX_COLS 15
16
17/* key matrix pins */
18#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
19#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, F7, B5, B4, D7, D6, B3, B2 }
20#define UNUSED_PINS
21
22/* COL2ROW or ROW2COL */
23#define DIODE_DIRECTION COL2ROW
24
25/* number of backlight levels */
26#define BACKLIGHT_PIN B7
27#ifdef BACKLIGHT_PIN
28#define BACKLIGHT_LEVELS 5
29#endif
30
31/* Set 0 if debouncing isn't needed */
32#define DEBOUNCE 5
33
34/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
35#define LOCKING_SUPPORT_ENABLE
36
37/* prevent stuck modifiers */
38
39#define RGB_DI_PIN E2
40#ifdef RGB_DI_PIN
41#define RGBLIGHT_ANIMATIONS
42#define RGBLED_NUM 12
43#define RGBLIGHT_HUE_STEP 8
44#define RGBLIGHT_SAT_STEP 8
45#define RGBLIGHT_VAL_STEP 8
46#endif
diff --git a/keyboards/ymdk/ymd67/info.json b/keyboards/ymdk/ymd67/info.json
new file mode 100644
index 000000000..e027b173c
--- /dev/null
+++ b/keyboards/ymdk/ymd67/info.json
@@ -0,0 +1,81 @@
1{
2 "keyboard_name": "ymd67",
3 "url": "https://www.aliexpress.com/item/4000311811121.html",
4 "maintainer": "SwiftLawnGnome",
5 "width": 15,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "key_count": 67,
10 "layout": [
11 {"label": "Esc", "x": 0, "y": 0},
12 {"label": "!", "x": 1, "y": 0},
13 {"label": "@", "x": 2, "y": 0},
14 {"label": "#", "x": 3, "y": 0},
15 {"label": "$", "x": 4, "y": 0},
16 {"label": "%", "x": 5, "y": 0},
17 {"label": "^", "x": 6, "y": 0},
18 {"label": "&amp;", "x": 7, "y": 0},
19 {"label": "*", "x": 8, "y": 0},
20 {"label": "(", "x": 9, "y": 0},
21 {"label": ")", "x": 10, "y": 0},
22 {"label": "_", "x": 11, "y": 0},
23 {"label": "+", "x": 12, "y": 0},
24 {"label": "~", "x": 13, "y": 0},
25 {"label": "Bs", "x": 14, "y": 0},
26 {"label": "Tab", "x": 0, "y": 1, "w": 1.5},
27 {"label": "Q", "x": 1.5, "y": 1},
28 {"label": "W", "x": 2.5, "y": 1},
29 {"label": "E", "x": 3.5, "y": 1},
30 {"label": "R", "x": 4.5, "y": 1},
31 {"label": "T", "x": 5.5, "y": 1},
32 {"label": "Y", "x": 6.5, "y": 1},
33 {"label": "U", "x": 7.5, "y": 1},
34 {"label": "I", "x": 8.5, "y": 1},
35 {"label": "O", "x": 9.5, "y": 1},
36 {"label": "P", "x": 10.5, "y": 1},
37 {"label": "{", "x": 11.5, "y": 1},
38 {"label": "}", "x": 12.5, "y": 1},
39 {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
40 {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75},
41 {"label": "A", "x": 1.75, "y": 2},
42 {"label": "S", "x": 2.75, "y": 2},
43 {"label": "D", "x": 3.75, "y": 2},
44 {"label": "F", "x": 4.75, "y": 2},
45 {"label": "G", "x": 5.75, "y": 2},
46 {"label": "H", "x": 6.75, "y": 2},
47 {"label": "J", "x": 7.75, "y": 2},
48 {"label": "K", "x": 8.75, "y": 2},
49 {"label": "L", "x": 9.75, "y": 2},
50 {"label": ":", "x": 10.75, "y": 2},
51 {"label": "\"", "x": 11.75, "y": 2},
52 {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
53 {"label": "Shift", "x": 0, "y": 3, "w": 2},
54 {"label": "Z", "x": 2, "y": 3},
55 {"label": "X", "x": 3, "y": 3},
56 {"label": "C", "x": 4, "y": 3},
57 {"label": "V", "x": 5, "y": 3},
58 {"label": "B", "x": 6, "y": 3},
59 {"label": "N", "x": 7, "y": 3},
60 {"label": "M", "x": 8, "y": 3},
61 {"label": "&lt;", "x": 9, "y": 3},
62 {"label": "&gt;", "x": 10, "y": 3},
63 {"label": "?", "x": 11, "y": 3},
64 {"label": "Shift", "x": 12, "y": 3},
65 {"label": "Up", "x": 13, "y": 3},
66 {"label": "Del", "x": 14, "y": 3},
67 {"label": "Ctrl", "x": 0, "y": 4, "w": 1.75},
68 {"label": "Win", "x": 1.75, "y": 4, "w": 1.25},
69 {"label": "Alt", "x": 3, "y": 4, "w": 1.25},
70 {"x": 4.25, "y": 4, "w": 1.25},
71 {"x": 5.5, "y": 4, "w": 3},
72 {"label": "Alt", "x": 8.5, "y": 4, "w": 1.25},
73 {"label": "Ctrl", "x": 9.75, "y": 4, "w": 1.25},
74 {"x": 11, "y": 4},
75 {"label": "Left", "x": 12, "y": 4},
76 {"label": "Down", "x": 13, "y": 4},
77 {"label": "Right", "x": 14, "y": 4}
78 ]
79 }
80 }
81}
diff --git a/keyboards/ymdk/ymd67/keymaps/default/keymap.c b/keyboards/ymdk/ymd67/keymaps/default/keymap.c
new file mode 100644
index 000000000..7ce144d62
--- /dev/null
+++ b/keyboards/ymdk/ymd67/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 [0] = LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
6 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
7 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
8 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
9 KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
10
11 [1] = LAYOUT(RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
12 KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
13 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
14 KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
15 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
16
17};
diff --git a/keyboards/ymdk/ymd67/keymaps/default/readme.md b/keyboards/ymdk/ymd67/keymaps/default/readme.md
new file mode 100644
index 000000000..511cc94dd
--- /dev/null
+++ b/keyboards/ymdk/ymd67/keymaps/default/readme.md
@@ -0,0 +1,5 @@
1# Default YMD67 layout
2
3![YMD67 layout image](https://i.imgur.com/YghD1LH.png)
4
5This is the default layout the keyboard comes with.
diff --git a/keyboards/ymdk/ymd67/readme.md b/keyboards/ymdk/ymd67/readme.md
new file mode 100644
index 000000000..f8c10168e
--- /dev/null
+++ b/keyboards/ymdk/ymd67/readme.md
@@ -0,0 +1,15 @@
1# YMD67
2
3![YMD67](https://ae01.alicdn.com/kf/Hbb4b59f9ab94484ab396a8e0200968ecd.jpg)
4
5A low-profile minila keyboard kit by [YMDK](https://ymdk.aliexpress.com/store/429151?spm=2114.10010108.0.0.3ab23641lIkgzm). Available in multiple colors and has RGB side-lighting.
6
7* Keyboard Maintainer: [Zach Shaftel](https://github.com/swiftlawngnome)
8* Hardware Supported: YMD67
9* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/4000311811121.html)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make ymdk/ymd67: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/ymdk/ymd67/rules.mk b/keyboards/ymdk/ymd67/rules.mk
new file mode 100644
index 000000000..891c7739a
--- /dev/null
+++ b/keyboards/ymdk/ymd67/rules.mk
@@ -0,0 +1,26 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14# Build Options
15# comment out to disable the options.
16#
17BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = no # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = no # Console for debug
21COMMAND_ENABLE = yes # Commands for debug and configuration
22SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
23NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
24BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
25AUDIO_ENABLE = no
26RGBLIGHT_ENABLE = yes
diff --git a/keyboards/ymdk/ymd67/ymd67.c b/keyboards/ymdk/ymd67/ymd67.c
new file mode 100644
index 000000000..f6d40ea0c
--- /dev/null
+++ b/keyboards/ymdk/ymd67/ymd67.c
@@ -0,0 +1 @@
#include "ymd67.h"
diff --git a/keyboards/ymdk/ymd67/ymd67.h b/keyboards/ymdk/ymd67/ymd67.h
new file mode 100644
index 000000000..5e7d84669
--- /dev/null
+++ b/keyboards/ymdk/ymd67/ymd67.h
@@ -0,0 +1,17 @@
1#pragma once
2
3#include "quantum.h"
4
5#define LAYOUT( \
6 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
7 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
8 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
9 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
10 K40, K41, K42, K43, K47, K48, K49, K4A, K4B, K4C, K4D \
11) { \
12 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
13 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
14 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
15 { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
16 { K40, K41, K42, K43, KC_NO, KC_NO, KC_NO, K47, K48, K49, K4A, K4B, K4C, K4D, KC_NO } \
17}
diff --git a/quantum/backlight/backlight_soft.c b/quantum/backlight/backlight_soft.c
index a6aba7782..096b41d91 100644
--- a/quantum/backlight/backlight_soft.c
+++ b/quantum/backlight/backlight_soft.c
@@ -10,7 +10,7 @@
10#endif 10#endif
11 11
12#ifndef BACKLIGHT_ON_STATE 12#ifndef BACKLIGHT_ON_STATE
13# define BACKLIGHT_ON_STATE 0 13# define BACKLIGHT_ON_STATE 1
14#endif 14#endif
15 15
16#ifdef BACKLIGHT_PINS 16#ifdef BACKLIGHT_PINS
@@ -20,6 +20,7 @@
20 { BACKLIGHT_PIN } 20 { BACKLIGHT_PIN }
21#endif 21#endif
22 22
23static uint16_t s_duty_pattern = 0;
23static const pin_t backlight_pins[] = BACKLIGHT_PIN_INIT; 24static const pin_t backlight_pins[] = BACKLIGHT_PIN_INIT;
24#define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t)) 25#define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t))
25 26
@@ -46,14 +47,38 @@ void backlight_off(pin_t backlight_pin) {
46} 47}
47 48
48void backlight_init_ports(void) { 49void backlight_init_ports(void) {
49 // Setup backlight pin as output and output to on state. 50 // Setup backlight pin as output and output to off state.
50 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);) 51 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_off(backlight_pin);)
51} 52}
52 53
54// clang-format off
55
56/** \brief PWM duty patterns
57 *
58 * We scale the current backlight level to an index within this array. This allows
59 * backlight_task to focus on just switching LEDs on/off, and we can predict the duty pattern
60 */
61static uint16_t backlight_duty_table[] = {
62 0b0000000000000000,
63 0b1000000000000000,
64 0b1000000010000000,
65 0b1000001000010000,
66 0b1000100010001000,
67 0b1001001001001000,
68 0b1010101010101010,
69 0b1110111011101110,
70 0b1111111111111111,
71};
72#define backlight_duty_table_size (sizeof(backlight_duty_table) / sizeof(backlight_duty_table[0]))
73
74// clang-format on
75
76static uint8_t scale_backlight(uint8_t v) { return v * (backlight_duty_table_size - 1) / BACKLIGHT_LEVELS; }
77
53void backlight_task(void) { 78void backlight_task(void) {
54 static uint8_t backlight_tick = 0; 79 static uint8_t backlight_tick = 0;
55 80
56 if ((0xFFFF >> (get_backlight_level() * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) { 81 if (s_duty_pattern & ((uint16_t)1 << backlight_tick)) {
57 FOR_EACH_LED(backlight_on(backlight_pin);) 82 FOR_EACH_LED(backlight_on(backlight_pin);)
58 } else { 83 } else {
59 FOR_EACH_LED(backlight_off(backlight_pin);) 84 FOR_EACH_LED(backlight_off(backlight_pin);)
@@ -61,6 +86,4 @@ void backlight_task(void) {
61 backlight_tick = (backlight_tick + 1) % 16; 86 backlight_tick = (backlight_tick + 1) % 16;
62} 87}
63 88
64void backlight_set(uint8_t level) { 89void backlight_set(uint8_t level) { s_duty_pattern = backlight_duty_table[scale_backlight(level)]; }
65 // noop as backlight_task uses get_backlight_level()
66}
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 587727393..c82c44639 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -48,7 +48,7 @@ action_t action_for_key(uint8_t layer, keypos_t key) {
48 // keycode remapping 48 // keycode remapping
49 keycode = keycode_config(keycode); 49 keycode = keycode_config(keycode);
50 50
51 action_t action; 51 action_t action = {};
52 uint8_t action_layer, when, mod; 52 uint8_t action_layer, when, mod;
53 53
54 switch (keycode) { 54 switch (keycode) {
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c
index 9366c3297..076f18664 100644
--- a/quantum/split_common/split_util.c
+++ b/quantum/split_common/split_util.c
@@ -33,9 +33,11 @@ bool waitForUsb(void) {
33 wait_ms(100); 33 wait_ms(100);
34 } 34 }
35 35
36#if defined(__AVR__)
37 // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow 36 // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
37#if defined(__AVR__)
38 (USBCON &= ~(_BV(USBE) | _BV(OTGPADE))); 38 (USBCON &= ~(_BV(USBE) | _BV(OTGPADE)));
39#else
40 usbStop(&USBD1);
39#endif 41#endif
40 42
41 return false; 43 return false;
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index 125f00ccf..af2b2fd48 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -297,13 +297,14 @@ void keyboard_task(void) {
297 } 297 }
298#endif 298#endif
299 if (debug_matrix) matrix_print(); 299 if (debug_matrix) matrix_print();
300 for (uint8_t c = 0; c < MATRIX_COLS; c++) { 300 matrix_row_t col_mask = 1;
301 if (matrix_change & ((matrix_row_t)1 << c)) { 301 for (uint8_t c = 0; c < MATRIX_COLS; c++, col_mask <<= 1) {
302 if (matrix_change & col_mask) {
302 action_exec((keyevent_t){ 303 action_exec((keyevent_t){
303 .key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & ((matrix_row_t)1 << c)), .time = (timer_read() | 1) /* time should not be 0 */ 304 .key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & col_mask), .time = (timer_read() | 1) /* time should not be 0 */
304 }); 305 });
305 // record a processed key 306 // record a processed key
306 matrix_prev[r] ^= ((matrix_row_t)1 << c); 307 matrix_prev[r] ^= col_mask;
307#ifdef QMK_KEYS_PER_SCAN 308#ifdef QMK_KEYS_PER_SCAN
308 // only jump out if we have processed "enough" keys. 309 // only jump out if we have processed "enough" keys.
309 if (++keys_processed >= QMK_KEYS_PER_SCAN) 310 if (++keys_processed >= QMK_KEYS_PER_SCAN)
diff --git a/tmk_core/protocol/serial_soft.c b/tmk_core/protocol/serial_soft.c
index b40907995..8624ef733 100644
--- a/tmk_core/protocol/serial_soft.c
+++ b/tmk_core/protocol/serial_soft.c
@@ -68,7 +68,6 @@ POSSIBILITY OF SUCH DAMAGE.
68#endif 68#endif
69 69
70/* debug for signal timing, see debug pin with oscilloscope */ 70/* debug for signal timing, see debug pin with oscilloscope */
71#define SERIAL_SOFT_DEBUG
72#ifdef SERIAL_SOFT_DEBUG 71#ifdef SERIAL_SOFT_DEBUG
73# define SERIAL_SOFT_DEBUG_INIT() (DDRD |= 1 << 7) 72# define SERIAL_SOFT_DEBUG_INIT() (DDRD |= 1 << 7)
74# define SERIAL_SOFT_DEBUG_TGL() (PORTD ^= 1 << 7) 73# define SERIAL_SOFT_DEBUG_TGL() (PORTD ^= 1 << 7)
@@ -169,7 +168,7 @@ void serial_send(uint8_t data) {
169/* detect edge of start bit */ 168/* detect edge of start bit */
170ISR(SERIAL_SOFT_RXD_VECT) { 169ISR(SERIAL_SOFT_RXD_VECT) {
171 SERIAL_SOFT_DEBUG_TGL(); 170 SERIAL_SOFT_DEBUG_TGL();
172 SERIAL_SOFT_RXD_INT_ENTER() 171 SERIAL_SOFT_RXD_INT_ENTER();
173 172
174 uint8_t data = 0; 173 uint8_t data = 0;
175 174