aboutsummaryrefslogtreecommitdiff
path: root/keyboards
diff options
context:
space:
mode:
authorelmo-space <lorwel@mailbox.org>2020-06-10 23:33:26 +0200
committerGitHub <noreply@github.com>2020-06-10 14:33:26 -0700
commit7e8dc2e570e21a018b3cfdf860ef03dd8d2a20f3 (patch)
tree5a1776535dcd4441b5ba2f21302acb7332255535 /keyboards
parent263536586daebcf09d31ab78a623da9366ebf7f7 (diff)
downloadqmk_firmware-7e8dc2e570e21a018b3cfdf860ef03dd8d2a20f3.tar.gz
qmk_firmware-7e8dc2e570e21a018b3cfdf860ef03dd8d2a20f3.zip
[Keymap] Add dual layer keymap for xd002 macropad (#9222)
Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/xd002/keymaps/multilayer_rgb/config.h22
-rw-r--r--keyboards/xd002/keymaps/multilayer_rgb/keymap.c173
-rw-r--r--keyboards/xd002/keymaps/multilayer_rgb/rgblite.h9
-rw-r--r--keyboards/xd002/keymaps/multilayer_rgb/rules.mk2
4 files changed, 206 insertions, 0 deletions
diff --git a/keyboards/xd002/keymaps/multilayer_rgb/config.h b/keyboards/xd002/keymaps/multilayer_rgb/config.h
new file mode 100644
index 000000000..f478baf3b
--- /dev/null
+++ b/keyboards/xd002/keymaps/multilayer_rgb/config.h
@@ -0,0 +1,22 @@
1/* Copyright 2020 elmo-space<mail@elmo.space>
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#pragma once
17
18/*enable layers*/
19#undef NO_ACTION_LAYER
20
21/* increase tap duration (spotify doesn't like very short taps)*/
22#define TAP_CODE_DELAY 100
diff --git a/keyboards/xd002/keymaps/multilayer_rgb/keymap.c b/keyboards/xd002/keymaps/multilayer_rgb/keymap.c
new file mode 100644
index 000000000..01a96119e
--- /dev/null
+++ b/keyboards/xd002/keymaps/multilayer_rgb/keymap.c
@@ -0,0 +1,173 @@
1/* Copyright 2020 elmo-space<mail@elmo.space>
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 QMK_KEYBOARD_H
18#include "rgblite.h"
19
20// Defines names for use in layer keycodes and the keymap
21enum layer_names {
22 _BASE,
23 _FUNC,
24};
25
26// set your keycodes here
27#define layer1_left KC_PAUS
28#define layer1_right KC_MPLY
29#define layer2_left KC_MPRV
30#define layer2_right KC_MNXT
31
32
33enum custom_keycodes {
34 LEFT1 = SAFE_RANGE,
35 RIGHT1,
36 LEFT2,
37 RIGHT2
38};
39
40const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
41 [_BASE] = LAYOUT(
42 LEFT1, RIGHT1
43 ),
44 [_FUNC] = LAYOUT(
45 LEFT2, RIGHT2
46 )
47};
48
49static bool key1_down = false;
50static bool key2_down = false;
51static char layer_switched = 0; // this prevents the individual keys getting triggered after a layerchange
52
53bool process_record_user(uint16_t keycode, keyrecord_t *record)
54{
55 switch (keycode)
56 {
57 case LEFT1:
58 if (record->event.pressed)
59 {
60 if (key2_down)
61 {
62 layer_on(1);
63 layer_switched = 2;
64 return false;
65 break;
66 }
67 key1_down = true;
68 }
69 else {
70 if (layer_switched > 0) {
71 --layer_switched;
72 key1_down = false;
73 }
74 else {
75 tap_code(layer1_left);
76 key1_down = false;
77 }
78 }
79 return false;
80 break;
81 case RIGHT1:
82 if (record->event.pressed)
83 {
84 if (key1_down)
85 {
86 layer_on(1);
87 layer_switched = 2;
88 return false;
89 break;
90 }
91 key2_down = true;
92 }
93 else {
94 if (layer_switched > 0) {
95 --layer_switched;
96 key2_down = false;
97 }
98 else {
99 tap_code(layer1_right);
100 key2_down = false;
101 }
102 }
103 return false;
104 break;
105 case LEFT2:
106 if (record->event.pressed)
107 {
108 if (key2_down)
109 {
110 layer_off(1);
111 layer_switched = 2;
112 return false;
113 break;
114 }
115 key1_down = true;
116 }
117 else {
118 if (layer_switched > 0) {
119 --layer_switched;
120 key1_down = false;
121 }
122 else {
123 tap_code(layer2_left);
124 key1_down = false;
125 }
126 }
127 return false;
128 break;
129 case RIGHT2:
130 if (record->event.pressed)
131 {
132 if (key1_down)
133 {
134 layer_off(1);
135 layer_switched = 2;
136 return false;
137 break;
138 }
139 key2_down = true;
140 }
141 else {
142 if (layer_switched > 0) {
143 --layer_switched;
144 key2_down = false;
145 }
146 else {
147 tap_code(layer2_right);
148 key2_down = false;
149 }
150 }
151 return false;
152 break;
153 }
154 return true;
155};
156
157// layer colors
158layer_state_t layer_state_set_user(layer_state_t state) {
159 switch (get_highest_layer(state)) {
160 case _FUNC:
161 rgblight_setrgb_red();
162 break;
163 default: // for any other layers, or the default layer
164 rgblight_setrgb_green();
165 break;
166 }
167 return state;
168}
169
170// default color
171void keyboard_post_init_user(void) {
172 rgblight_setrgb_green();
173}
diff --git a/keyboards/xd002/keymaps/multilayer_rgb/rgblite.h b/keyboards/xd002/keymaps/multilayer_rgb/rgblite.h
new file mode 100644
index 000000000..ddc61d5f4
--- /dev/null
+++ b/keyboards/xd002/keymaps/multilayer_rgb/rgblite.h
@@ -0,0 +1,9 @@
1#pragma once
2
3#include "ws2812.h"
4#include "rgblight_list.h"
5
6static inline void rgblight_setrgb(uint8_t _r, uint8_t _g, uint8_t _b) {
7 LED_TYPE leds[RGBLED_NUM] = {{.r = _r, .g = _g, .b = _b}, {.r = _r, .g = _g, .b = _b}};
8 ws2812_setleds(leds, RGBLED_NUM);
9}
diff --git a/keyboards/xd002/keymaps/multilayer_rgb/rules.mk b/keyboards/xd002/keymaps/multilayer_rgb/rules.mk
new file mode 100644
index 000000000..69d592aa4
--- /dev/null
+++ b/keyboards/xd002/keymaps/multilayer_rgb/rules.mk
@@ -0,0 +1,2 @@
1SRC += ws2812.c
2EXTRAKEY_ENABLE = yes