aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/s60-x-rgb/Makefile3
-rw-r--r--keyboards/s60-x-rgb/config.h58
-rw-r--r--keyboards/s60-x-rgb/keymaps/dbroqua/keymap.c194
-rw-r--r--keyboards/s60-x-rgb/keymaps/default/keymap.c48
-rw-r--r--keyboards/s60-x-rgb/keymaps/default/readme.md27
-rw-r--r--keyboards/s60-x-rgb/rules.mk56
-rw-r--r--keyboards/s60-x-rgb/s60-x-rgb.c1
-rw-r--r--keyboards/s60-x-rgb/s60-x-rgb.h37
8 files changed, 424 insertions, 0 deletions
diff --git a/keyboards/s60-x-rgb/Makefile b/keyboards/s60-x-rgb/Makefile
new file mode 100644
index 000000000..57b2ef62e
--- /dev/null
+++ b/keyboards/s60-x-rgb/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../Makefile
3endif
diff --git a/keyboards/s60-x-rgb/config.h b/keyboards/s60-x-rgb/config.h
new file mode 100644
index 000000000..1b98a51d6
--- /dev/null
+++ b/keyboards/s60-x-rgb/config.h
@@ -0,0 +1,58 @@
1#ifndef CONFIG_H
2#define CONFIG_H
3
4#include "config_common.h"
5
6/* USB Device descriptor parameter */
7#define VENDOR_ID 0xFEED
8#define PRODUCT_ID 0x6060
9#define DEVICE_VER 0x0001
10#define MANUFACTURER Massdrop
11#define PRODUCT S60-X RGB
12#define DESCRIPTION q.m.k. keyboard firmware for S60-X RGB
13
14/* key matrix size */
15#define MATRIX_ROWS 5
16#define MATRIX_COLS 15
17
18/* key matrix pins */
19#define MATRIX_ROW_PINS { B5, B4, D7, D6, D4 }
20#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, B6, C6, C7, F1, F0, E6, B3, B2, B1, B0 }
21#define UNUSED_PINS
22
23/* COL2ROW or ROW2COL */
24#define DIODE_DIRECTION COL2ROW
25
26/* number of backlight levels */
27#define BACKLIGHT_PIN B7
28#ifdef BACKLIGHT_PIN
29#define BACKLIGHT_LEVELS 3
30#endif
31
32/* Set 0 if debouncing isn't needed */
33#define DEBOUNCING_DELAY 5
34
35/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
36#define LOCKING_SUPPORT_ENABLE
37
38/* Locking resynchronize hack */
39#define LOCKING_RESYNC_ENABLE
40
41/* key combination for command */
42#define IS_COMMAND() ( \
43 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
44)
45
46/* prevent stuck modifiers */
47#define PREVENT_STUCK_MODIFIERS
48
49#define RGB_DI_PIN F6
50#ifdef RGB_DI_PIN
51#define RGBLIGHT_ANIMATIONS
52#define RGBLED_NUM 10
53#define RGBLIGHT_HUE_STEP 8
54#define RGBLIGHT_SAT_STEP 8
55#define RGBLIGHT_VAL_STEP 8
56#endif
57
58#endif \ No newline at end of file
diff --git a/keyboards/s60-x-rgb/keymaps/dbroqua/keymap.c b/keyboards/s60-x-rgb/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..9577a8f5d
--- /dev/null
+++ b/keyboards/s60-x-rgb/keymaps/dbroqua/keymap.c
@@ -0,0 +1,194 @@
1#include "s60-x-rgb.h"
2
3#define _DEFAULT 0
4#define _FN 1
5#define _SFX 2
6
7// Fillers to make layering more clear
8#define ______ KC_TRNS
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11/* Qwerty gui/alt/space/alt/gui
12 * ,-----------------------------------------------------------------------------------------.
13 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
14 * |-----------------------------------------------------------------------------------------+
15 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
16 * |-----------------------------------------------------------------------------------------+
17 * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
18 * |-----------------------------------------------------------------------------------------+
19 * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN |
20 * |-----------------------------------------------------------------------------------------+
21 * |LGUI | LAlt | Space | RAlt |RGUI |
22 * `-----------------------------------------------------------------'
23 */
24 [_DEFAULT] = KEYMAP( /* Basic QWERTY */
25 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_GRV, \
26 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_BSPC, \
27 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_ENT, \
28 KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ______, KC_RSFT, MO(_FN), \
29 ______, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, ______, ______ \
30 ),
31
32/* FN Layer
33 * ,-----------------------------------------------------------------------------------------.
34 * | SFX | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
35 * |-----------------------------------------------------------------------------------------+
36 * | CAPS | | | | | | | | Psc | Slck| Paus| Up | | |
37 * |-----------------------------------------------------------------------------------------+
38 * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| |
39 * |-----------------------------------------------------------------------------------------+
40 * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | |
41 * |-----------------------------------------------------------------------------------------+
42 * | | | | Stop | |
43 * `-----------------------------------------------------------------'
44 */
45 [_FN] = KEYMAP( /* Layer 1 */
46 TG(_SFX),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_INS, KC_DEL, \
47 KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \
48 ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,______, ______, \
49 ______, ______, KC_MPRV, KC_MPLY, KC_MNXT,______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN,______, ______, ______, \
50 ______, ______, ______, TG(_WASD), KC_MSTP, ______, ______, ______ \
51 ),
52
53
54/* SFX Layer
55 * ,-----------------------------------------------------------------------------------------.
56 * | | | | | | | | | | | | | | | |
57 * |-----------------------------------------------------------------------------------------+
58 * | | BL- | BL+ | BL | | | | | | | | | | |
59 * |-----------------------------------------------------------------------------------------+
60 * | | RGBT| RGBM| | | | | | | | | | |
61 * |-----------------------------------------------------------------------------------------+
62 * | | Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | |
63 * |-----------------------------------------------------------------------------------------+
64 * | | | | | |
65 * `-----------------------------------------------------------------'
66 */
67 [_SFX] = KEYMAP(
68 ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
69 ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
70 ______, F(0), F(1), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
71 ______, ______, F(2), F(3), F(4), F(5), F(6), F(7), ______, ______, ______, ______, ______, ______, ______, \
72 ______, ______, ______, ______, ______, ______, ______, ______ \
73 )
74};
75
76const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
77 keyevent_t event = record->event;
78
79 switch (id) {
80
81 }
82 return MACRO_NONE;
83}
84
85enum function_id {
86 RGBLED_TOGGLE,
87 RGBLED_STEP_MODE,
88 RGBLED_INCREASE_HUE,
89 RGBLED_DECREASE_HUE,
90 RGBLED_INCREASE_SAT,
91 RGBLED_DECREASE_SAT,
92 RGBLED_INCREASE_VAL,
93 RGBLED_DECREASE_VAL
94};
95
96const uint16_t PROGMEM fn_actions[] = {
97 [0] = ACTION_FUNCTION(RGBLED_TOGGLE),
98 [1] = ACTION_FUNCTION(RGBLED_STEP_MODE),
99 [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
100 [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
101 [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
102 [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
103 [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
104 [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL)
105};
106
107void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
108 switch (id) {
109 case RGBLED_TOGGLE:
110 if (record->event.pressed) {
111 rgblight_toggle();
112 }
113 break;
114 case RGBLED_INCREASE_HUE:
115 if (record->event.pressed) {
116 rgblight_increase_hue();
117 }
118 break;
119 case RGBLED_DECREASE_HUE:
120 if (record->event.pressed) {
121 rgblight_decrease_hue();
122 }
123 break;
124 case RGBLED_INCREASE_SAT:
125 if (record->event.pressed) {
126 rgblight_increase_sat();
127 }
128 break;
129 case RGBLED_DECREASE_SAT:
130 if (record->event.pressed) {
131 rgblight_decrease_sat();
132 }
133 break;
134 case RGBLED_INCREASE_VAL:
135 if (record->event.pressed) {
136 rgblight_increase_val();
137 }
138 break;
139 case RGBLED_DECREASE_VAL:
140 if (record->event.pressed) {
141 rgblight_decrease_val();
142 }
143 break;
144 case RGBLED_STEP_MODE:
145 if (record->event.pressed) {
146 rgblight_step();
147 }
148 break;
149 }
150}
151
152void matrix_init_user(void) {
153}
154
155void matrix_scan_user(void) {
156}
157
158bool process_record_user(uint16_t keycode, keyrecord_t *record) {
159 return true;
160}
161
162void led_set_user(uint8_t usb_led) {
163
164 if (usb_led & (1 << USB_LED_NUM_LOCK)) {
165
166 } else {
167
168 }
169
170 if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
171
172 } else {
173
174 }
175
176 if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
177
178 } else {
179
180 }
181
182 if (usb_led & (1 << USB_LED_COMPOSE)) {
183
184 } else {
185
186 }
187
188 if (usb_led & (1 << USB_LED_KANA)) {
189
190 } else {
191
192 }
193
194} \ No newline at end of file
diff --git a/keyboards/s60-x-rgb/keymaps/default/keymap.c b/keyboards/s60-x-rgb/keymaps/default/keymap.c
new file mode 100644
index 000000000..303f07638
--- /dev/null
+++ b/keyboards/s60-x-rgb/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
1#include "s60-x-rgb.h"
2
3/* 0: Main layer
4┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
5│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
6├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
7│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
8├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
9│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
10├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
11│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
12├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
13│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
14└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
15*/
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 /* 0: ANSI qwerty */
19 LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
20 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
21 CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT , \
22 LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
23 LCTL, LGUI, LALT, SPC, RALT, FN0, APP, RCTL),
24
25/* 1: Fn layer
26┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
27│GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
28├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
29│ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│
30├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
31│ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
32├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
33│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
34├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
35│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
36└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
37*/
38 LEGACY_KEYMAP(
39 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
40 TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \
41 TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
42 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
43 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
44};
45
46const uint16_t PROGMEM fn_actions[] = {
47 [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
48};
diff --git a/keyboards/s60-x-rgb/keymaps/default/readme.md b/keyboards/s60-x-rgb/keymaps/default/readme.md
new file mode 100644
index 000000000..01cda9df9
--- /dev/null
+++ b/keyboards/s60-x-rgb/keymaps/default/readme.md
@@ -0,0 +1,27 @@
1### 1 Standard - ANSI
2The standard keymap is the one that is pre-flashed on the S60-X.
3
4#### 1.0 Default layer
5 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
6 │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
7 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
8 │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
9 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
10 │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
11 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
12 │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
13 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
14 │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
15 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
16#### 1.1 Fn layer
17 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
18 │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
19 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
20 │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│
21 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
22 │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
23 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
24 │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
25 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
26 │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
27 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x-rgb/rules.mk b/keyboards/s60-x-rgb/rules.mk
new file mode 100644
index 000000000..c303af4bc
--- /dev/null
+++ b/keyboards/s60-x-rgb/rules.mk
@@ -0,0 +1,56 @@
1# MCU name
2MCU = atmega32u4
3
4# Processor frequency.
5# This will define a symbol, F_CPU, in all source code files equal to the
6# processor frequency in Hz. You can then use this symbol in your source code to
7# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
8# automatically to create a 32-bit value in your source code.
9#
10# This will be an integer division of F_USB below, as it is sourced by
11# F_USB after it has run through any CPU prescalers. Note that this value
12# does not *change* the processor frequency - it should merely be updated to
13# reflect the processor speed set externally so that the code can use accurate
14# software delays.
15F_CPU = 16000000
16
17#
18# LUFA specific
19#
20# Target architecture (see library "Board Types" documentation).
21ARCH = AVR8
22
23# Input clock frequency.
24# This will define a symbol, F_USB, in all source code files equal to the
25# input clock frequency (before any prescaling is performed) in Hz. This value may
26# differ from F_CPU if prescaling is used on the latter, and is required as the
27# raw input clock is fed directly to the PLL sections of the AVR for high speed
28# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
29# at the end, this will be done automatically to create a 32-bit value in your
30# source code.
31#
32# If no clock division is performed on the input clock inside the AVR (via the
33# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
34F_USB = $(F_CPU)
35
36# Interrupt driven control endpoint task(+60)
37OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
38
39
40# Boot Section Size in *bytes*
41OPT_DEFS += -DBOOTLOADER_SIZE=4096
42
43
44# Build Options
45# comment out to disable the options.
46#
47BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
48MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
49EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
50CONSOLE_ENABLE ?= no # Console for debug(+400)
51COMMAND_ENABLE ?= no # Commands for debug and configuration
52SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
53NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
54BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
55AUDIO_ENABLE ?= no
56RGBLIGHT_ENABLE ?= yes \ No newline at end of file
diff --git a/keyboards/s60-x-rgb/s60-x-rgb.c b/keyboards/s60-x-rgb/s60-x-rgb.c
new file mode 100644
index 000000000..39d3a70e8
--- /dev/null
+++ b/keyboards/s60-x-rgb/s60-x-rgb.c
@@ -0,0 +1 @@
#include "s60-x-rgb.h"
diff --git a/keyboards/s60-x-rgb/s60-x-rgb.h b/keyboards/s60-x-rgb/s60-x-rgb.h
new file mode 100644
index 000000000..cb7a5f567
--- /dev/null
+++ b/keyboards/s60-x-rgb/s60-x-rgb.h
@@ -0,0 +1,37 @@
1#ifndef S60XRGB_H
2#define S60XRGB_H
3
4#include "quantum.h"
5
6#define KEYMAP( \
7 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
8 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
9 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
10 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
11 K400, K401, K402, K406, K410, K411, K412, K413 \
12) { \
13 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
14 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO }, \
15 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
16 { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
17 { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, KC_NO } \
18}
19
20/*This special definition is used for S60-X keymaps that were ported from TMK
21 * QMK has a lot of keycodes that don't start with KC_, so using the regular KEYMAP macro is recommended
22 */
23#define LEGACY_KEYMAP( \
24 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
25 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
26 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
27 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
28 K40, K41, K42, K46, K4A, K4B, K4C, K4D \
29) { \
30 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E }, \
31 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO }, \
32 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO }, \
33 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E }, \
34 { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_NO } \
35}
36
37#endif \ No newline at end of file