aboutsummaryrefslogtreecommitdiff
path: root/keyboards/naked60
diff options
context:
space:
mode:
authorSalicylic-acid3 <46864619+Salicylic-acid3@users.noreply.github.com>2019-10-17 02:26:43 +0900
committerDrashna Jaelre <drashna@live.com>2019-10-16 10:26:43 -0700
commitf360c27f9302b1f916985dc32f68657ec22b3b9c (patch)
treeb3c3210e6c0c450b5d27d643c6d6817309ac83fc /keyboards/naked60
parent2fc3494fd967bb2d8ffba3dcd33fa4a7ef1066ed (diff)
downloadqmk_firmware-f360c27f9302b1f916985dc32f68657ec22b3b9c.tar.gz
qmk_firmware-f360c27f9302b1f916985dc32f68657ec22b3b9c.zip
[Keyboard] Add keyboard Naked60 (#6527)
* Add Naked60 * readme Update * Update keyboards/naked60/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Updated keymaps Changed the alias. * updated rule.mk Unnecessary part was deleted and explanation was added to the boot loader. * Update keyboards/naked60/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/rev1/rev1.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/rev1/rev1.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/rev1/config.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/rev1/config.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Updated keymaps rules.mk. Cleaned up declarations in rules.mk. * Updated keymap Changed remaining aliases. * Update rev1.c Cleaned up declarations in rev1.c. * Update readme The appearance has been adjusted. * Update keyboards/naked60/keymaps/default/readme.md Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_nafuda/readme.md Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_nafuda/readme.md Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic/readme.md Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/rev1/rev1.c Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_nafuda/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/salicylic/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_nafuda/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_setta21/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/naked60/keymaps/default_with_setta21/rules.mk Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Updated keymaps The appearance has been adjusted. Unnecessary rules.mk was deleted. * Update keyboards/naked60/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update readme Changed to markdown format. * Update keyboards/naked60/keymaps/default/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/keymaps/salicylic/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/naked60/keymaps/salicylic/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com>
Diffstat (limited to 'keyboards/naked60')
-rw-r--r--keyboards/naked60/config.h43
-rw-r--r--keyboards/naked60/info.json312
-rw-r--r--keyboards/naked60/keymaps/default/config.h51
-rw-r--r--keyboards/naked60/keymaps/default/keymap.c139
-rw-r--r--keyboards/naked60/keymaps/default/readme.md53
-rw-r--r--keyboards/naked60/keymaps/default_with_nafuda/config.h90
-rw-r--r--keyboards/naked60/keymaps/default_with_nafuda/keymap.c212
-rw-r--r--keyboards/naked60/keymaps/default_with_nafuda/readme.md31
-rw-r--r--keyboards/naked60/keymaps/default_with_nafuda/rules.mk10
-rw-r--r--keyboards/naked60/keymaps/default_with_setta21/config.h90
-rw-r--r--keyboards/naked60/keymaps/default_with_setta21/keymap.c207
-rw-r--r--keyboards/naked60/keymaps/default_with_setta21/readme.md44
-rw-r--r--keyboards/naked60/keymaps/default_with_setta21/rules.mk9
-rw-r--r--keyboards/naked60/keymaps/salicylic/config.h51
-rw-r--r--keyboards/naked60/keymaps/salicylic/keymap.c147
-rw-r--r--keyboards/naked60/keymaps/salicylic/readme.md53
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_nafuda/config.h90
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c207
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md32
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk9
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_setta21/config.h90
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c207
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_setta21/readme.md44
-rw-r--r--keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk10
-rw-r--r--keyboards/naked60/naked60.c1
-rw-r--r--keyboards/naked60/naked60.h12
-rw-r--r--keyboards/naked60/readme.md18
-rw-r--r--keyboards/naked60/rev1/config.h119
-rw-r--r--keyboards/naked60/rev1/matrix.c357
-rw-r--r--keyboards/naked60/rev1/rev1.c1
-rw-r--r--keyboards/naked60/rev1/rev1.h97
-rw-r--r--keyboards/naked60/rev1/rules.mk3
-rw-r--r--keyboards/naked60/rev1/serial_config.h8
-rw-r--r--keyboards/naked60/rev1/serial_config_simpleapi.h8
-rw-r--r--keyboards/naked60/rev1/split_scomm.c92
-rw-r--r--keyboards/naked60/rev1/split_scomm.h22
-rw-r--r--keyboards/naked60/rev1/split_util.c70
-rw-r--r--keyboards/naked60/rev1/split_util.h16
-rw-r--r--keyboards/naked60/rules.mk40
-rw-r--r--keyboards/naked60/serial.c590
-rw-r--r--keyboards/naked60/serial.h86
41 files changed, 3771 insertions, 0 deletions
diff --git a/keyboards/naked60/config.h b/keyboards/naked60/config.h
new file mode 100644
index 000000000..47f2a9aac
--- /dev/null
+++ b/keyboards/naked60/config.h
@@ -0,0 +1,43 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3Copyright 2015 Jack Humbert
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20
21#include "config_common.h"
22
23// GCC include 'config.h" sequence in qmk_firmware/keyboards/naked60/
24// -include keyboards/naked60/config.h
25// -include keyboards/naked60/rev?/config.h
26// -include keyboards/naked60/rev?/keymaps/MAPNAME/config.h
27// XXXX.c
28
29#include <serial_config.h>
30
31// GCC include search path in qmk_firmare/keyboards/naked60/
32// #include "..." search starts here:
33// #include <...> search starts here:
34// keyboards/naked60/rev?/keymaps/MAPNAME
35// keyboards/naked60
36// keyboards/naked60/rev?
37// .
38// ./tmk_core
39// ......
40
41// MACRO and FUNCTION are features that are depreciated.
42#define NO_ACTION_MACRO
43#define NO_ACTION_FUNCTION
diff --git a/keyboards/naked60/info.json b/keyboards/naked60/info.json
new file mode 100644
index 000000000..bc353f659
--- /dev/null
+++ b/keyboards/naked60/info.json
@@ -0,0 +1,312 @@
1{
2 "keyboard_name": "Naked60",
3 "url": "https://salicylic-acid3.hatenablog.com/",
4 "maintainer": "Salicylic_acid3",
5 "width": 14,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {
11 "label":"ESC",
12 "x":0,
13 "y":0
14 },
15 {
16 "label":"1",
17 "x":1,
18 "y":0
19 },
20 {
21 "label":"2",
22 "x":2,
23 "y":0
24 },
25 {
26 "label":"3",
27 "x":3,
28 "y":0
29 },
30 {
31 "label":"4",
32 "x":4,
33 "y":0
34 },
35 {
36 "label":"5",
37 "x":5,
38 "y":0
39 },
40 {
41 "label":"6",
42 "x":8,
43 "y":0
44 },
45 {
46 "label":"7",
47 "x":9,
48 "y":0
49 },
50 {
51 "label":"8",
52 "x":10,
53 "y":0
54 },
55 {
56 "label":"9",
57 "x":11,
58 "y":0
59 },
60 {
61 "label":"0",
62 "x":12,
63 "y":0
64 },
65 {
66 "label":"Back Space",
67 "x":13,
68 "y":0
69 },
70 {
71 "label":"Tab",
72 "x":0,
73 "y":1
74 },
75 {
76 "label":"Q",
77 "x":1,
78 "y":1
79 },
80 {
81 "label":"W",
82 "x":2,
83 "y":1,
84 },
85 {
86 "label":"E",
87 "x":3,
88 "y":1,
89 },
90 {
91 "label":"R",
92 "x":4,
93 "y":1,
94 },
95 {
96 "label":"T",
97 "x":5,
98 "y":1,
99 },
100 {
101 "label":"Y",
102 "x":8,
103 "y":1,
104 },
105 {
106 "label":"U",
107 "x":9,
108 "y":1,
109 },
110 {
111 "label":"I",
112 "x":10,
113 "y":1,
114 },
115 {
116 "label":"O",
117 "x":11,
118 "y":1,
119 },
120 {
121 "label":"P",
122 "x":12,
123 "y":1,
124 },
125 {
126 "label":"\\",
127 "x":13,
128 "y":1,
129 },
130 {
131 "label":"Esc",
132 "x":0,
133 "y":2,
134 },
135 {
136 "label":"A",
137 "x":1,
138 "y":2,
139 },
140 {
141 "label":"S",
142 "x":2,
143 "y":2,
144 },
145 {
146 "label":"D",
147 "x":3,
148 "y":2,
149 },
150 {
151 "label":"F",
152 "x":4,
153 "y":2,
154 },
155 {
156 "label":"G",
157 "x":5,
158 "y":2,
159 },
160 {
161 "label":"H",
162 "x":8,
163 "y":2,
164 },
165 {
166 "label":"J",
167 "x":9,
168 "y":2,
169 },
170 {
171 "label":"K",
172 "x":10,
173 "y":2,
174 },
175 {
176 "label":"L",
177 "x":11,
178 "y":2,
179 },
180 {
181 "label":";",
182 "x":12,
183 "y":2,
184 },
185 {
186 "label":"'",
187 "x":13,
188 "y":2,
189 },
190 {
191 "label":"Shift",
192 "x":0,
193 "y":3,
194 },
195 {
196 "label":"Z",
197 "x":1,
198 "y":3,
199 },
200 {
201 "label":"X",
202 "x":2,
203 "y":3,
204 },
205 {
206 "label":"C",
207 "x":3,
208 "y":3,
209 },
210 {
211 "label":"V",
212 "x":4,
213 "y":3,
214 },
215 {
216 "label":"B",
217 "x":5,
218 "y":3,
219 },
220 {
221 "label":"N",
222 "x":8,
223 "y":3,
224 },
225 {
226 "label":"M",
227 "x":9,
228 "y":3,
229 },
230 {
231 "label":",
232 ",
233 "x":10,
234 "y":3,
235 },
236 {
237 "label":".",
238 "x":11,
239 "y":3,
240 },
241 {
242 "label":"/",
243 "x":12,
244 "y":3,
245 },
246 {
247 "label":"Enter",
248 "x":13,
249 "y":3,
250 },
251 {
252 "label":"Adjust",
253 "x":1,
254 "y":4,
255 },
256 {
257 "label":"Ctrl",
258 "x":2,
259 "y":4,
260 },
261 {
262 "label":"Alt",
263 "x":3,
264 "y":4,
265 },
266 {
267 "label":"GUI",
268 "x":4,
269 "y":4,
270 },
271 {
272 "label":"&dArr;",
273 "x":5,
274 "y":4,
275 },
276 {
277 "x":6,
278 "y":4,
279 },
280 {
281 "x":7,
282 "y":4,
283 },
284 {
285 "label":"&uArr;",
286 "x":8,
287 "y":4,
288 },
289 {
290 "label":"&larr;",
291 "x":9,
292 "y":4,
293 },
294 {
295 "label":"&darr;",
296 "x":10,
297 "y":4,
298 },
299 {
300 "label":"&uarr;",
301 "x":11,
302 "y":4,
303 },
304 {
305 "label":"&rarr;",
306 "x":12,
307 "y":4,
308 }
309 ]
310 }
311 }
312} \ No newline at end of file
diff --git a/keyboards/naked60/keymaps/default/config.h b/keyboards/naked60/keymaps/default/config.h
new file mode 100644
index 000000000..140a79c77
--- /dev/null
+++ b/keyboards/naked60/keymaps/default/config.h
@@ -0,0 +1,51 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define MK_3_SPEED
31
32#undef MOUSEKEY_INTERVAL
33#define MOUSEKEY_INTERVAL 0
34
35#undef MOUSEKEY_TIME_TO_MAX
36#define MOUSEKEY_TIME_TO_MAX 150
37
38#undef MOUSEKEY_MAX_SPEED
39#define MOUSEKEY_MAX_SPEED 3
40
41#undef MOUSEKEY_MOVE_DELTA
42#define MOUSEKEY_MOVE_DELTA 5
43
44#undef MOUSEKEY_DELAY
45#define MOUSEKEY_DELAY 0
46
47#undef MOUSEKEY_WHEEL_MAX_SPEED
48#define MOUSEKEY_WHEEL_MAX_SPEED 1
49
50#undef MOUSEKEY_WHEEL_TIME_TO_MAX
51#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/default/keymap.c b/keyboards/naked60/keymaps/default/keymap.c
new file mode 100644
index 000000000..4b15e969d
--- /dev/null
+++ b/keyboards/naked60/keymaps/default/keymap.c
@@ -0,0 +1,139 @@
1#include QMK_KEYBOARD_H
2
3extern keymap_config_t keymap_config;
4
5#ifdef RGBLIGHT_ENABLE
6//Following line allows macro to read current RGB settings
7extern rgblight_config_t rgblight_config;
8#endif
9
10extern uint8_t is_master;
11
12// Each layer gets a name for readability, which is then used in the keymap matrix below.
13// The underscores don't mean anything - you can have a layer called STUFF or any other name.
14// Layer names don't all need to be of the same length, obviously, and you can also skip them
15// entirely and just use numbers.
16enum layer_number {
17 _QWERTY = 0,
18 _FLOCK,
19 _LOWER,
20 _RAISE,
21 _ADJUST,
22};
23
24enum custom_keycodes {
25 FLOCK = SAFE_RANGE,
26 ADJUST,
27 RGBRST
28};
29
30enum tapdances{
31 TD_ESFL = 0,
32 TD_ESQW,
33};
34
35// Layer Mode aliases
36
37#define KC_SNUBS S(KC_NUBS)
38#define KC_SNUHS S(KC_NUHS)
39
40qk_tap_dance_action_t tap_dance_actions[] = {
41 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
42 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
43};
44
45const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46 [_QWERTY] = LAYOUT(
47 //,-----------------------------------------------------| |-----------------------------------------------------.
48 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
49 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
50 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
51 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
52 KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
53 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
54 KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
55 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
56 ADJUST,KC_LCTRL, KC_LALT, KC_LGUI,MO(_LOWER),KC_SPC, KC_SPC,MO(_RAISE),KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
57 //`------------------------------------------------------------------------------------------------------------'
58 ),
59
60
61 [_FLOCK] = LAYOUT(
62 //,-----------------------------------------------------| |-----------------------------------------------------.
63 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
64 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
65 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
66 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
70 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
71 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
72 //`------------------------------------------------------------------------------------------------------------'
73 ),
74
75
76 [_LOWER] = LAYOUT(
77 //,-----------------------------------------------------| |-----------------------------------------------------.
78 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
79 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
80 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL,
81 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
82 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
83 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
84 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _______, _______, _______,
85 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
86 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
87 //`------------------------------------------------------------------------------------------------------------'
88 ),
89
90
91 [_RAISE] = LAYOUT(
92 //,-----------------------------------------------------| |-----------------------------------------------------.
93 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
94 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
95 KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
96 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
97 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
98 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
99 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______,
100 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
101 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
102 //`------------------------------------------------------------------------------------------------------------'
103 ),
104
105
106 [_ADJUST] = LAYOUT( /* Base */
107 //,-----------------------------------------------------| |-----------------------------------------------------.
108 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
109 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
110 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR),
111 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
112 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR,
113 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
114 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL),
115 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
116 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
117 //`------------------------------------------------------------------------------------------------------------'
118 )
119};
120
121uint32_t layer_state_set_user(uint32_t state) {
122 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
123}
124
125int RGB_current_mode;
126bool process_record_user(uint16_t keycode, keyrecord_t *record) {
127
128 bool result = false;
129 switch (keycode) {
130 case ADJUST:
131 update_tri_layer_state(record->event.pressed, _ADJUST, _RAISE, _LOWER);
132 break;
133 default:
134 result = true;
135 break;
136 }
137
138 return result;
139} \ No newline at end of file
diff --git a/keyboards/naked60/keymaps/default/readme.md b/keyboards/naked60/keymaps/default/readme.md
new file mode 100644
index 000000000..87ce8b3a2
--- /dev/null
+++ b/keyboards/naked60/keymaps/default/readme.md
@@ -0,0 +1,53 @@
1# The default keymap for naked60
2
3## Default
4| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
5|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
6| ESC(FLock) | 1| 2| 3| 4| 5| | | 6| 7| 8| 9| 0| BSPC|
7| TAB | Q| W| E| R| T| | | Y| U| I| O| P| \ |
8| LSFT | A| S| D| F| G| | | H| J| K| L| ;| '|
9|LCTRL | Z| X| C| V| B| | | N| M| ,| .| /| ENT|
10| |ADJUST| LCTRL| LALT| LGUI| LOWER| SPC| SPC| RAISE| LEFT| DOWN| UP| RIGHT| |
11
12
13
14## FLock
15| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
16|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
17| ESC(FLock)| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| BSPC|
18| TAB | Q| W| E| R| T| | | Y| U| I| O| P| BSLS|
19| LSFT | A| S| D| F| G| | | H| J| K| L| SCLN| QUOT|
20|LCTRL | Z| X| C| V| B| | | N| M| COMM| DOT| SLSH| ENT|
21| |ADJUST| LCTRL| LALT| LGUI| LOWER| SPC| SPC| RAISE| LEFT| DOWN| UP| RIGHT| |
22
23
24## Lower
25| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
26|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
27| ESC| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| F12|
28| ~| !| @| #| $| %| | | ^| &| *| (| )| DEL|
29| _____| F1| F2| F3| F4| F5| | | F6| _| +| {| }| PIPE|
30| _____| F7| F8| F9| F10| F11| | | F12| SNUHS| SNUBS| ,| .| _____|
31| |ADJUST| LCTRL| LALT| LGUI| LOWER| SPC| SPC| RAISE| MNXT| VOLD| VOLU| MPLY| |
32
33
34## Raise
35| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
36|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
37| ESC| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| F12|
38| ~| 1| 2| 3| 4| 5| | | 6| 7| 8| 9| 0| DEL|
39| _____| F1| F2| F3| F4| F5| | | F6| -| =| [| ]| BSLS|
40| _____| F7| F8| F9| F10| F11| | | F12| NUHS| NUBS| ,| .| _____|
41| |ADJUST| LCTRL| LALT| LGUI| LOWER| SPC| SPC| RAISE| MNXT| VOLD| VOLU| MPLY| |
42
43
44
45## Adjust
46| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
47|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
48| ESC| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| F12|
49| TILD| RST| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| BTN1| MS_U| BTN2| XXXXX|Alt+PSCR|
50| LSFT| XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| MS_L| MS_D| MS_R| XXXXX| PSCR|
51| LCTRL| XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| C+A+D|
52| |ADJUST| LCTRL| LALT| LGUI| LOWER| SPC| SPC| RAISE| MNXT| VOLD| VOLU| MPLY| |
53
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/config.h b/keyboards/naked60/keymaps/default_with_nafuda/config.h
new file mode 100644
index 000000000..e188262cf
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_nafuda/config.h
@@ -0,0 +1,90 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define RGBLED_NUM 7
31
32#ifndef IOS_DEVICE_ENABLE
33 #define RGBLIGHT_LIMIT_VAL 180
34 #define RGBLIGHT_VAL_STEP 17
35#else
36 #define RGBLIGHT_LIMIT_VAL 50
37 #define RGBLIGHT_VAL_STEP 4
38#endif
39#define RGBLIGHT_HUE_STEP 10
40#define RGBLIGHT_SAT_STEP 17
41
42#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
43// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
44// 120 RGBoff, OLEDoff
45// 120 OLED
46// 330 RGB 6
47// 300 RGB 32
48// 310 OLED & RGB 32
49 #define USB_MAX_POWER_CONSUMPTION 400
50#else
51 // fix iPhone and iPad power adapter issue
52 // iOS device need lessthan 100
53 #define USB_MAX_POWER_CONSUMPTION 100
54#endif
55
56// Selection of RGBLIGHT MODE to use.
57#if defined(LED_ANIMATIONS)
58 //#define RGBLIGHT_EFFECT_BREATHING
59 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
60 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
61 //#define RGBLIGHT_EFFECT_SNAKE
62 #define RGBLIGHT_EFFECT_KNIGHT
63 //#define RGBLIGHT_EFFECT_CHRISTMAS
64 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
65 //#define RGBLIGHT_EFFECT_RGB_TEST
66 //#define RGBLIGHT_EFFECT_ALTERNATING
67#endif
68
69#define MK_3_SPEED
70
71#undef MOUSEKEY_INTERVAL
72#define MOUSEKEY_INTERVAL 0
73
74#undef MOUSEKEY_TIME_TO_MAX
75#define MOUSEKEY_TIME_TO_MAX 150
76
77#undef MOUSEKEY_MAX_SPEED
78#define MOUSEKEY_MAX_SPEED 3
79
80#undef MOUSEKEY_MOVE_DELTA
81#define MOUSEKEY_MOVE_DELTA 5
82
83#undef MOUSEKEY_DELAY
84#define MOUSEKEY_DELAY 0
85
86#undef MOUSEKEY_WHEEL_MAX_SPEED
87#define MOUSEKEY_WHEEL_MAX_SPEED 1
88
89#undef MOUSEKEY_WHEEL_TIME_TO_MAX
90#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/keymap.c b/keyboards/naked60/keymaps/default_with_nafuda/keymap.c
new file mode 100644
index 000000000..d50af530d
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_nafuda/keymap.c
@@ -0,0 +1,212 @@
1#include QMK_KEYBOARD_H
2
3extern keymap_config_t keymap_config;
4
5#ifdef RGBLIGHT_ENABLE
6//Following line allows macro to read current RGB settings
7extern rgblight_config_t rgblight_config;
8#endif
9
10extern uint8_t is_master;
11
12// Each layer gets a name for readability, which is then used in the keymap matrix below.
13// The underscores don't mean anything - you can have a layer called STUFF or any other name.
14// Layer names don't all need to be of the same length, obviously, and you can also skip them
15// entirely and just use numbers.
16enum layer_number {
17 _QWERTY = 0,
18 _FLOCK,
19 _MOUSE,
20 _BROWSER,
21 _LOWER,
22 _RAISE,
23 _ADJUST,
24};
25
26enum custom_keycodes {
27 FLOCK = SAFE_RANGE,
28 MOUSE,
29 BROWSER,
30 LOWER,
31 RAISE,
32 ADJUST,
33 RGBRST
34};
35
36enum tapdances{
37 TD_ESFL = 0,
38 TD_ESQW,
39};
40
41// Fillers to make layering more clear
42
43#define KC_CAD LCA(KC_DEL)
44#define KC_APSCR LALT(KC_PSCR)
45
46#define KC_SNUBS S(KC_NUBS)
47#define KC_SNUHS S(KC_NUHS)
48
49#define KC_RTAB LCTL(KC_TAB)
50#define KC_LTAB LCTL(LSFT(KC_TAB))
51#define KC_CTAB LCTL(KC_W)
52#define KC_RETAB LCTL(LSFT(KC_T))
53
54#define KC_TGMO TG(_MOUSE)
55#define KC_TGBR TG(_BROWSER)
56#define KC_BSAD LT(_ADJUST, KC_BSPC)
57
58qk_tap_dance_action_t tap_dance_actions[] = {
59 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
60 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
61};
62
63
64const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65 [_QWERTY] = LAYOUT_with_nafuda(
66 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
67 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TGMO,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
69 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_BSAD, KC_UP, KC_TGBR,
70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
71 KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN,KC_RIGHT,
72 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
73 KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
74 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
75 ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
76 //`------------------------------------------------------------------------------------------------------------'
77 ),
78
79 [_FLOCK] = LAYOUT_with_nafuda(
80 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
81 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______,
82 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
83 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
84 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
85 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
86 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
87 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
88 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
89 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
90 //`------------------------------------------------------------------------------------------------------------'
91 ),
92
93 [_MOUSE] = LAYOUT_with_nafuda(
94 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
95 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TGMO,
96 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
97 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2,
98 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
99 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R,
100 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
101 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
102 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
103 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
104 //`------------------------------------------------------------------------------------------------------------'
105 ),
106
107 [_BROWSER] = LAYOUT_with_nafuda(
108 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
109 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CTAB,
110 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
111 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RETAB, KC_WH_U, KC_TGBR,
112 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
113 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LTAB, KC_WH_D, KC_RTAB,
114 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
116 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
117 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
118 //`------------------------------------------------------------------------------------------------------------'
119 ),
120
121 [_LOWER] = LAYOUT_with_nafuda(
122 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
123 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TGMO,
124 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
125 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL, KC_BSAD, KC_UP, KC_TGBR,
126 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
127 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN,KC_RIGHT,
128 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
129 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _______, _______, _______,
130 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
131 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
132 //`------------------------------------------------------------------------------------------------------------'
133 ),
134
135 [_RAISE] = LAYOUT_with_nafuda(
136 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
137 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TGMO,
138 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
139 KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSAD, KC_UP, KC_TGBR,
140 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
141 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_LEFT, KC_DOWN,KC_RIGHT,
142 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
143 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______,
144 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
145 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
146 //`------------------------------------------------------------------------------------------------------------'
147 ),
148
149 [_ADJUST] = LAYOUT_with_nafuda( /* Base */
150 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
151 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD,
152 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
153 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR), ADJUST, RGB_SAD, RGB_VAI,
154 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
155 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR, RGB_MOD, RGB_TOG, RGB_SAI,
156 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
157 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL),
158 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
159 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
160 //`------------------------------------------------------------------------------------------------------------'
161 )
162};
163
164static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
165
166 pressed ? layer_on(layer1) : layer_off(layer1);
167 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
168}
169
170int RGB_current_mode;
171bool process_record_user(uint16_t keycode, keyrecord_t *record) {
172
173 bool result = false;
174 switch (keycode) {
175 case LOWER:
176 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
177 break;
178 case RAISE:
179 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
180 break;
181 case ADJUST:
182 update_change_layer(record->event.pressed, _ADJUST, _RAISE, _LOWER);
183 break;
184 #ifdef RGBLIGHT_ENABLE
185 case RGB_MOD:
186 if (record->event.pressed) {
187 rgblight_mode(RGB_current_mode);
188 rgblight_step();
189 RGB_current_mode = rgblight_config.mode;
190 }
191 break;
192 case RGBRST:
193 if (record->event.pressed) {
194 eeconfig_update_rgblight_default();
195 rgblight_enable();
196 RGB_current_mode = rgblight_config.mode;
197 }
198 break;
199 #endif
200 default:
201 result = true;
202 break;
203 }
204
205 return result;
206}
207
208void matrix_init_user(void) {
209 #ifdef RGBLIGHT_ENABLE
210 RGB_current_mode = rgblight_config.mode;
211 #endif
212}
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/readme.md b/keyboards/naked60/keymaps/default_with_nafuda/readme.md
new file mode 100644
index 000000000..574f90ffb
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_nafuda/readme.md
@@ -0,0 +1,31 @@
1# The default_with_nafuda keymap for naked60
2
3Add Nafuda maps to the default layout.
4
5## Default
6| 1 | 2 | 3 |
7|:----:|:----:|:----:|
8| | MOUSE| |
9| BS+Ad| UP|Browser|
10| LEFT| DOWN| RIGHT|
11
12## Mouse
13| 1 | 2 | 3 |
14|:----:|:----:|:----:|
15| |Default| |
16| BTN1| MS_U| BTN2|
17| MS_L| MS_D| MS_R|
18
19## Browser
20| 1 | 2 | 3 |
21|:----:|:----:|:----:|
22| |CloseTAB| |
23|ReOpenTAB|WH_U|Default|
24| LTAB| WH_D| RTAB|
25
26## Adjust
27| 1 | 2 | 3 |
28|:----:|:----:|:----:|
29| |LED_VAD| |
30|Default|LED_HUD|LED_VAI|
31|LED_MOD|LED_ON/Off|LED_HUI|
diff --git a/keyboards/naked60/keymaps/default_with_nafuda/rules.mk b/keyboards/naked60/keymaps/default_with_nafuda/rules.mk
new file mode 100644
index 000000000..15a887e78
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_nafuda/rules.mk
@@ -0,0 +1,10 @@
1RGBLIGHT_ENABLE = yes
2
3# If your custom naked60 pcb, you can rewrite to yes.
4LED_ANIMATIONS = yes # LED animations
5
6ifeq ($(strip $(LED_ANIMATIONS)), yes)
7 # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
8 OPT_DEFS += -DLED_ANIMATIONS
9endif
10
diff --git a/keyboards/naked60/keymaps/default_with_setta21/config.h b/keyboards/naked60/keymaps/default_with_setta21/config.h
new file mode 100644
index 000000000..fe162510d
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_setta21/config.h
@@ -0,0 +1,90 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define RGBLED_NUM 21
31
32#ifndef IOS_DEVICE_ENABLE
33 #define RGBLIGHT_LIMIT_VAL 180
34 #define RGBLIGHT_VAL_STEP 17
35#else
36 #define RGBLIGHT_LIMIT_VAL 50
37 #define RGBLIGHT_VAL_STEP 4
38#endif
39#define RGBLIGHT_HUE_STEP 10
40#define RGBLIGHT_SAT_STEP 17
41
42#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
43// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
44// 120 RGBoff, OLEDoff
45// 120 OLED
46// 330 RGB 6
47// 300 RGB 32
48// 310 OLED & RGB 32
49 #define USB_MAX_POWER_CONSUMPTION 400
50#else
51 // fix iPhone and iPad power adapter issue
52 // iOS device need lessthan 100
53 #define USB_MAX_POWER_CONSUMPTION 100
54#endif
55
56// Selection of RGBLIGHT MODE to use.
57#if defined(LED_ANIMATIONS)
58 //#define RGBLIGHT_EFFECT_BREATHING
59 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
60 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
61 //#define RGBLIGHT_EFFECT_SNAKE
62 #define RGBLIGHT_EFFECT_KNIGHT
63 //#define RGBLIGHT_EFFECT_CHRISTMAS
64 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
65 //#define RGBLIGHT_EFFECT_RGB_TEST
66 //#define RGBLIGHT_EFFECT_ALTERNATING
67#endif
68
69#define MK_3_SPEED
70
71#undef MOUSEKEY_INTERVAL
72#define MOUSEKEY_INTERVAL 0
73
74#undef MOUSEKEY_TIME_TO_MAX
75#define MOUSEKEY_TIME_TO_MAX 150
76
77#undef MOUSEKEY_MAX_SPEED
78#define MOUSEKEY_MAX_SPEED 3
79
80#undef MOUSEKEY_MOVE_DELTA
81#define MOUSEKEY_MOVE_DELTA 5
82
83#undef MOUSEKEY_DELAY
84#define MOUSEKEY_DELAY 0
85
86#undef MOUSEKEY_WHEEL_MAX_SPEED
87#define MOUSEKEY_WHEEL_MAX_SPEED 1
88
89#undef MOUSEKEY_WHEEL_TIME_TO_MAX
90#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/default_with_setta21/keymap.c b/keyboards/naked60/keymaps/default_with_setta21/keymap.c
new file mode 100644
index 000000000..06ea56501
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_setta21/keymap.c
@@ -0,0 +1,207 @@
1#include QMK_KEYBOARD_H
2
3extern keymap_config_t keymap_config;
4
5#ifdef RGBLIGHT_ENABLE
6//Following line allows macro to read current RGB settings
7extern rgblight_config_t rgblight_config;
8#endif
9
10extern uint8_t is_master;
11
12// Each layer gets a name for readability, which is then used in the keymap matrix below.
13// The underscores don't mean anything - you can have a layer called STUFF or any other name.
14// Layer names don't all need to be of the same length, obviously, and you can also skip them
15// entirely and just use numbers.
16enum layer_number {
17 _QWERTY = 0,
18 _FLOCK,
19 _LOWER,
20 _RAISE,
21 _ADJUST,
22};
23
24enum custom_keycodes {
25 FLOCK = SAFE_RANGE,
26 LOWER,
27 RAISE,
28 ADJUST,
29 KANJI,
30 RGBRST,
31 SEND_SUM,
32 SEND_AVERAGE,
33 SEND_COUNTIF,
34 SEND_MAX,
35 SEND_MIN
36};
37
38enum tapdances{
39 TD_ESFL = 0,
40 TD_ESQW,
41};
42
43// Fillers to make layering more clear
44#define KC_SNUBS S(KC_NUBS)
45#define KC_SNUHS S(KC_NUHS)
46
47#define KC_SSUM SEND_SUM
48#define KC_SAVE SEND_AVERAGE
49#define KC_SCOU SEND_COUNTIF
50#define KC_SMAX SEND_MAX
51#define KC_SMIN SEND_MIN
52
53#define KC_RADO LT(_RAISE, KC_PDOT)
54#define KC_LOP0 LT(_LOWER, KC_P0)
55#define KC_ADNL LT(_ADJUST, KC_NLCK)
56
57qk_tap_dance_action_t tap_dance_actions[] = {
58 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
59 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
60};
61
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63 [_QWERTY] = LAYOUT_with_setta21(
64 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
65 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
66 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
67 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
69 KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, KC_EQL,
70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
71 KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL,
72 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
73 ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
74 //`------------------------------------------------------------------------------------------------------------'
75 ),
76
77 [_FLOCK] = LAYOUT_with_setta21(
78 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
79 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______,_______,_______,_______,_______,_______,
80 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
81 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,_______,_______,
82 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
83 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,_______,_______,_______,
84 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
85 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,
86 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
87 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
88 //`------------------------------------------------------------------------------------------------------------'
89 ),
90
91 [_LOWER] = LAYOUT_with_setta21(
92 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
93 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER,XXXXXXX,KC_LEFT,XXXXXXX,XXXXXXX, KC_ESC,
94 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
95 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL, KC_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
96 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
97 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, RAISE,XXXXXXX,KC_RIGHT,XXXXXXX,KC_PAST, KC_EQL,
98 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
99 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _______, _______, _______, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL,
100 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
101 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
102 //`------------------------------------------------------------------------------------------------------------'
103 ),
104
105 [_RAISE] = LAYOUT_with_setta21(
106 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
107 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
108 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
109 KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
110 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
111 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, KC_EQL,
112 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
113 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, KC_RPRN, KC_SSUM,KC_SAVE, KC_DEL,
114 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
116 //`------------------------------------------------------------------------------------------------------------'
117 ),
118
119 [_ADJUST] = LAYOUT_with_setta21( /* Base */
120 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
121 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
122 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
123 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR), RGB_VAI,RGB_HUI,RGB_SAI,XXXXXXX,_______,
124 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
125 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR, RAISE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______,
126 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
127 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL), RGB_MOD, _______,_______,_______,
128 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
129 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
130 //`------------------------------------------------------------------------------------------------------------'
131 )
132};
133
134static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
135
136 pressed ? layer_on(layer1) : layer_off(layer1);
137 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
138}
139
140int RGB_current_mode;
141bool process_record_user(uint16_t keycode, keyrecord_t *record) {
142
143 bool result = false;
144 switch (keycode) {
145 case LOWER:
146 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
147 break;
148 case RAISE:
149 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
150 break;
151 case ADJUST:
152 update_change_layer(record->event.pressed, _ADJUST, _RAISE, _LOWER);
153 break;
154 case SEND_SUM:
155 if (record->event.pressed) {
156 SEND_STRING("=SUM(");
157 }
158 break;
159 case SEND_AVERAGE:
160 if (record->event.pressed) {
161 SEND_STRING("=AVERAGE(");
162 }
163 break;
164 case SEND_COUNTIF:
165 if (record->event.pressed) {
166 SEND_STRING("=COUNTIF(");
167 }
168 break;
169 case SEND_MAX:
170 if (record->event.pressed) {
171 SEND_STRING("=MAX(");
172 }
173 break;
174 case SEND_MIN:
175 if (record->event.pressed) {
176 SEND_STRING("=MIN(");
177 }
178 break;
179 #ifdef RGBLIGHT_ENABLE
180 case RGB_MOD:
181 if (record->event.pressed) {
182 rgblight_mode(RGB_current_mode);
183 rgblight_step();
184 RGB_current_mode = rgblight_config.mode;
185 }
186 break;
187 case RGBRST:
188 if (record->event.pressed) {
189 eeconfig_update_rgblight_default();
190 rgblight_enable();
191 RGB_current_mode = rgblight_config.mode;
192 }
193 break;
194 #endif
195 default:
196 result = true;
197 break;
198 }
199
200 return result;
201}
202
203void matrix_init_user(void) {
204 #ifdef RGBLIGHT_ENABLE
205 RGB_current_mode = rgblight_config.mode;
206 #endif
207}
diff --git a/keyboards/naked60/keymaps/default_with_setta21/readme.md b/keyboards/naked60/keymaps/default_with_setta21/readme.md
new file mode 100644
index 000000000..750a8b350
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_setta21/readme.md
@@ -0,0 +1,44 @@
1# The default_with_setta21 keymap for naked60
2
3Add Setta21 maps to the default layout.
4
5## Default
6| 1 | 2 | 3 | 4 |
7|:----:|:----:|:----:|:----:|
8| ESC| F2| =| DEL|
9|Ad+Num| /| *| -|
10| 7| 8| 9| |
11| 4| 5| 6| +|
12| 1| 2| 3| |
13| Rai+0| | LOW + .| ENT|
14
15## Lower
16| 1 | 2 | 3 | 4 |
17|:----:|:----:|:----:|:----:|
18| ESC| F2| =| DEL|
19| =MIN(| =MAX(|=COUNTIF(|=AVERAGE(|
20| F7| F8| F9| |
21| F4| F5| F6| =SUM(|
22| F11| F12| F3| |
23| RAISE| | LOWER| )|
24
25## Raise
26| 1 | 2 | 3 | 4 |
27|:----:|:----:|:----:|:----:|
28| ESC| F2| =| DEL|
29| XXXXX| /| *| -|
30| XXXXX| UP| XXXXX| |
31| LEFT| DOWN| RIGHT| +|
32| XXXXX| DOWN| XXXXX| |
33| RAISE| | LOWER| ENT|
34
35## Adjust
36| 1 | 2 | 3 | 4 |
37|:----:|:----:|:----:|:----:|
38| ESC| F2| =| DEL|
39|ADJUST| XXXXX| XXXXX| -|
40|LED_SAD|LED_SAI| XXXXX| |
41|LED_HUD|LED_HUI| XXXXX| +|
42|LED_VAD|LED_VAI| XXXXX| |
43|LED_ON/Off| | XXXXX|LED_MOD|
44
diff --git a/keyboards/naked60/keymaps/default_with_setta21/rules.mk b/keyboards/naked60/keymaps/default_with_setta21/rules.mk
new file mode 100644
index 000000000..b714c8f51
--- /dev/null
+++ b/keyboards/naked60/keymaps/default_with_setta21/rules.mk
@@ -0,0 +1,9 @@
1RGBLIGHT_ENABLE = yes
2
3# If your custom naked60 pcb, you can rewrite to yes.
4LED_ANIMATIONS = yes # LED animations
5
6ifeq ($(strip $(LED_ANIMATIONS)), yes)
7 # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
8 OPT_DEFS += -DLED_ANIMATIONS
9endif
diff --git a/keyboards/naked60/keymaps/salicylic/config.h b/keyboards/naked60/keymaps/salicylic/config.h
new file mode 100644
index 000000000..140a79c77
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic/config.h
@@ -0,0 +1,51 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define MK_3_SPEED
31
32#undef MOUSEKEY_INTERVAL
33#define MOUSEKEY_INTERVAL 0
34
35#undef MOUSEKEY_TIME_TO_MAX
36#define MOUSEKEY_TIME_TO_MAX 150
37
38#undef MOUSEKEY_MAX_SPEED
39#define MOUSEKEY_MAX_SPEED 3
40
41#undef MOUSEKEY_MOVE_DELTA
42#define MOUSEKEY_MOVE_DELTA 5
43
44#undef MOUSEKEY_DELAY
45#define MOUSEKEY_DELAY 0
46
47#undef MOUSEKEY_WHEEL_MAX_SPEED
48#define MOUSEKEY_WHEEL_MAX_SPEED 1
49
50#undef MOUSEKEY_WHEEL_TIME_TO_MAX
51#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/salicylic/keymap.c b/keyboards/naked60/keymaps/salicylic/keymap.c
new file mode 100644
index 000000000..11d2e1431
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic/keymap.c
@@ -0,0 +1,147 @@
1#include QMK_KEYBOARD_H
2#include "keymap_jp.h"
3
4extern keymap_config_t keymap_config;
5
6#ifdef RGBLIGHT_ENABLE
7//Following line allows macro to read current RGB settings
8extern rgblight_config_t rgblight_config;
9#endif
10
11extern uint8_t is_master;
12
13// Each layer gets a name for readability, which is then used in the keymap matrix below.
14// The underscores don't mean anything - you can have a layer called STUFF or any other name.
15// Layer names don't all need to be of the same length, obviously, and you can also skip them
16// entirely and just use numbers.
17enum layer_number {
18 _QWERTY = 0,
19 _FLOCK,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23};
24
25enum custom_keycodes {
26 FLOCK = SAFE_RANGE,
27 LOWER,
28 RAISE,
29 ADJUST,
30 RGBRST
31};
32
33enum tapdances{
34 TD_ESFL = 0,
35 TD_ESQW,
36};
37
38// Fillers to make layering more clear
39#define KC_CT11 LCTL_T(KC_F11)
40#define KC_SF12 SFT_T(KC_F12)
41#define KC_LOEN LT(_LOWER, KC_ENT)
42#define KC_RASP LT(_RAISE, KC_SPC)
43
44qk_tap_dance_action_t tap_dance_actions[] = {
45 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
46 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
47};
48
49const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 [_QWERTY] = LAYOUT(
51 //,-----------------------------------------------------| |-----------------------------------------------------.
52 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
53 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
54 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC,
55 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
56 KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC,
57 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
58 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS,
59 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
60 KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
61 //`------------------------------------------------------------------------------------------------------------'
62 ),
63
64
65 [_FLOCK] = LAYOUT(
66 //,-----------------------------------------------------| |-----------------------------------------------------.
67 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
71 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
72 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
73 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
74 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
75 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
76 //`------------------------------------------------------------------------------------------------------------'
77 ),
78
79
80 [_LOWER] = LAYOUT(
81 //,-----------------------------------------------------| |-----------------------------------------------------.
82 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
83 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
84 JP_COLN, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH,
85 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
86 JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL,
87 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
88 JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT,
89 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
90 _______, _______, _______, KC_ZKHK, LOWER, _______, _______, RAISE, KC_0, JP_DOT, _______, _______
91 //`------------------------------------------------------------------------------------------------------------'
92 ),
93
94
95 [_RAISE] = LAYOUT(
96 //,-----------------------------------------------------| |-----------------------------------------------------.
97 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
98 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
99 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, KC_DEL,
100 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
101 KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT,
102 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
103 KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX,
104 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
105 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
106 //`------------------------------------------------------------------------------------------------------------'
107 ),
108
109 [_ADJUST] = LAYOUT( /* Base */
110 //,-----------------------------------------------------| |-----------------------------------------------------.
111 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
112 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
113 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR),
114 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
115 KC_LCTRL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR,
116 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
117 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL),
118 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
119 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
120 //`------------------------------------------------------------------------------------------------------------'
121 )
122};
123
124static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
125
126 pressed ? layer_on(layer1) : layer_off(layer1);
127 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
128}
129
130int RGB_current_mode;
131bool process_record_user(uint16_t keycode, keyrecord_t *record) {
132
133 bool result = false;
134 switch (keycode) {
135 case LOWER:
136 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
137 break;
138 case RAISE:
139 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
140 break;
141 default:
142 result = true;
143 break;
144 }
145
146 return result;
147}
diff --git a/keyboards/naked60/keymaps/salicylic/readme.md b/keyboards/naked60/keymaps/salicylic/readme.md
new file mode 100644
index 000000000..da2126381
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic/readme.md
@@ -0,0 +1,53 @@
1# The salicylic keymap for naked60
2
3## Default
4| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
5|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
6| ESC(FLock) | 1| 2| 3| 4| 5| | | 6| 7| 8| 9| 0| BSPC|
7| TAB | Q| W| E| R| T| | | Y| U| I| O| P| [|
8|LCTRL | A| S| D| F| G| | | H| J| K| L| -| ]|
9| LSFT | Z| X| C| V| B| | | N| M| ,| .| /| \ |
10| | LEFT| RIGHT| LGUI| MHEN|Low+Ent| BSPC| DEL|Rai+SPC| HENK| LALT| UP| DOWN| |
11
12
13
14## FLock
15| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
16|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
17| ESC(FLock)|F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| _____|
18| TAB | Q| W| E| R| T| | | Y| U| I| O| P| [|
19|LCTRL | A| S| D| F| G| | | H| J| K| L| -| ]|
20| LSFT | Z| X| C| V| B| | | N| M| ,| .| /| \ |
21| | LEFT| RIGHT| LGUI| MHEN|Low+Ent| BSPC| DEL|Rai+SPC| HENK| LALT| UP| DOWN| |
22
23
24## Lower
25| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
26|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
27| ESC| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| F12|
28| :| !| ?| [| ]| ~| | | 6| 7| 8| 9| *| /|
29| '| #| "| (| )| @| | | XXXXX| 4| 5| 6| -| =|
30| ^| %| &| ;| :| PIPE| | | 0| 1| 2| 3| +| ENT|
31| | LEFT| RIGHT| LGUI| ZKHK| LOWER| BSPC| DEL| RAISE| 0| .| UP| DOWN| |
32
33
34## Raise
35| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
36|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
37| ESC| F2| F3| F4| F5| F6| | | F7| F8| F9| F10| F11| F12|
38| ESC| 1| 2| 3| 4| 5| | | XXXXX| XXXXX| UP| XXXXX| PGUP| BSPC|
39|CtrlF11| F1| F2| F3| F4| F5| | | XXXXX| LEFT| DOWN| RIGHT| LSFT| ENT|
40|ShiftF12| F6| F7| F8| F9| F10| | | XXXXX| XXXXX| XXXXX| XXXXX| PGDN| XXXXX|
41| | LEFT| RIGHT| LGUI| ZKHK| LOWER| BSPC| DEL| RAISE| HENK| LALT| UP| DOWN| |
42
43
44
45## Adjust
46| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
47|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
48| ESC| F2| F3| F4| F5| | | F6| F7| F8| F9| F10| F11| F12|
49| ESC| RST| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| BTN1| MS_U| BTN2| XXXXX|Alt+PSCR|
50| LCTRL| XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| MS_L| MS_D| MS_R| XXXXX| PSCR|
51| LSFT| XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| | | XXXXX| XXXXX| XXXXX| XXXXX| XXXXX| C+A+D|
52| | LEFT| RIGHT| LGUI| ZKHK| LOWER| BSPC| DEL| RAISE| HENK| LALT| UP| DOWN| |
53
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/config.h b/keyboards/naked60/keymaps/salicylic_with_nafuda/config.h
new file mode 100644
index 000000000..e188262cf
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_nafuda/config.h
@@ -0,0 +1,90 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define RGBLED_NUM 7
31
32#ifndef IOS_DEVICE_ENABLE
33 #define RGBLIGHT_LIMIT_VAL 180
34 #define RGBLIGHT_VAL_STEP 17
35#else
36 #define RGBLIGHT_LIMIT_VAL 50
37 #define RGBLIGHT_VAL_STEP 4
38#endif
39#define RGBLIGHT_HUE_STEP 10
40#define RGBLIGHT_SAT_STEP 17
41
42#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
43// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
44// 120 RGBoff, OLEDoff
45// 120 OLED
46// 330 RGB 6
47// 300 RGB 32
48// 310 OLED & RGB 32
49 #define USB_MAX_POWER_CONSUMPTION 400
50#else
51 // fix iPhone and iPad power adapter issue
52 // iOS device need lessthan 100
53 #define USB_MAX_POWER_CONSUMPTION 100
54#endif
55
56// Selection of RGBLIGHT MODE to use.
57#if defined(LED_ANIMATIONS)
58 //#define RGBLIGHT_EFFECT_BREATHING
59 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
60 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
61 //#define RGBLIGHT_EFFECT_SNAKE
62 #define RGBLIGHT_EFFECT_KNIGHT
63 //#define RGBLIGHT_EFFECT_CHRISTMAS
64 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
65 //#define RGBLIGHT_EFFECT_RGB_TEST
66 //#define RGBLIGHT_EFFECT_ALTERNATING
67#endif
68
69#define MK_3_SPEED
70
71#undef MOUSEKEY_INTERVAL
72#define MOUSEKEY_INTERVAL 0
73
74#undef MOUSEKEY_TIME_TO_MAX
75#define MOUSEKEY_TIME_TO_MAX 150
76
77#undef MOUSEKEY_MAX_SPEED
78#define MOUSEKEY_MAX_SPEED 3
79
80#undef MOUSEKEY_MOVE_DELTA
81#define MOUSEKEY_MOVE_DELTA 5
82
83#undef MOUSEKEY_DELAY
84#define MOUSEKEY_DELAY 0
85
86#undef MOUSEKEY_WHEEL_MAX_SPEED
87#define MOUSEKEY_WHEEL_MAX_SPEED 1
88
89#undef MOUSEKEY_WHEEL_TIME_TO_MAX
90#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c b/keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c
new file mode 100644
index 000000000..33ccdf603
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_nafuda/keymap.c
@@ -0,0 +1,207 @@
1#include QMK_KEYBOARD_H
2#include "keymap_jp.h"
3
4extern keymap_config_t keymap_config;
5
6#ifdef RGBLIGHT_ENABLE
7//Following line allows macro to read current RGB settings
8extern rgblight_config_t rgblight_config;
9#endif
10
11extern uint8_t is_master;
12
13// Each layer gets a name for readability, which is then used in the keymap matrix below.
14// The underscores don't mean anything - you can have a layer called STUFF or any other name.
15// Layer names don't all need to be of the same length, obviously, and you can also skip them
16// entirely and just use numbers.
17enum layer_number {
18 _QWERTY = 0,
19 _FLOCK,
20 _MOUSE,
21 _BROWSER,
22 _LOWER,
23 _RAISE,
24 _ADJUST,
25};
26
27enum custom_keycodes {
28 FLOCK = SAFE_RANGE,
29 MOUSE,
30 BROWSER,
31 LOWER,
32 RAISE,
33 ADJUST,
34 RGBRST
35};
36
37enum tapdances{
38 TD_ESFL = 0,
39 TD_ESQW,
40};
41
42// Fillers to make layering more clear
43#define KC_CT11 LCTL_T(KC_F11)
44#define KC_SF12 SFT_T(KC_F12)
45#define KC_LOEN LT(_LOWER, KC_ENT)
46#define KC_RASP LT(_RAISE, KC_SPC)
47
48#define KC_RTAB LCTL(KC_TAB)
49#define KC_LTAB LCTL(LSFT(KC_TAB))
50#define KC_CTAB LCTL(KC_W)
51#define KC_RETAB LCTL(LSFT(KC_T))
52
53#define KC_TGMO TG(_MOUSE)
54#define KC_TGBR TG(_BROWSER)
55#define KC_BSAD LT(_ADJUST, KC_BSPC)
56
57qk_tap_dance_action_t tap_dance_actions[] = {
58 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
59 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
60};
61
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63 [_QWERTY] = LAYOUT_with_nafuda(
64 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
65 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TGMO,
66 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
67 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_BSAD, KC_UP, KC_TGBR,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
69 KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_LEFT, KC_DOWN,KC_RIGHT,
70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
71 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS,
72 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
73 KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
74 //`------------------------------------------------------------------------------------------------------------'
75 ),
76
77 [_FLOCK] = LAYOUT_with_nafuda(
78 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
79 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
80 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
81 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
82 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
83 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
84 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
85 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
86 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
87 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
88 //`------------------------------------------------------------------------------------------------------------'
89 ),
90
91 [_MOUSE] = LAYOUT_with_nafuda(
92 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
93 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TGMO,
94 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
95 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2,
96 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
97 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R,
98 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
99 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
100 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
101 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
102 //`------------------------------------------------------------------------------------------------------------'
103 ),
104
105 [_BROWSER] = LAYOUT_with_nafuda(
106 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
107 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CTAB,
108 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
109 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RETAB, KC_WH_U, KC_TGBR,
110 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
111 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LTAB, KC_WH_D, KC_RTAB,
112 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
113 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
114 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
116 //`------------------------------------------------------------------------------------------------------------'
117 ),
118
119 [_LOWER] = LAYOUT_with_nafuda(
120 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
121 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TGMO,
122 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
123 JP_COLN, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_BSAD, KC_UP, KC_TGBR,
124 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
125 JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, KC_LEFT, KC_DOWN,KC_RIGHT,
126 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
127 JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT,
128 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
129 _______, _______, _______, KC_ZKHK, LOWER, _______, _______, RAISE, KC_0, JP_DOT, _______, _______
130 //`------------------------------------------------------------------------------------------------------------'
131 ),
132
133 [_RAISE] = LAYOUT_with_nafuda(
134 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
135 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TGMO,
136 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
137 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, KC_DEL, KC_BSAD, KC_UP, KC_TGBR,
138 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
139 KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, KC_LEFT, KC_DOWN,KC_RIGHT,
140 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
141 KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX,
142 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
143 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
144 //`------------------------------------------------------------------------------------------------------------'
145 ),
146
147 [_ADJUST] = LAYOUT_with_nafuda( /* Base */
148 //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
149 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD,
150 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
151 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR), ADJUST, RGB_SAD, RGB_VAI,
152 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
153 KC_LCTRL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR, RGB_MOD, RGB_TOG, RGB_SAI,
154 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------------------------|
155 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL),
156 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
157 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
158 //`------------------------------------------------------------------------------------------------------------'
159 )
160};
161
162static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
163
164 pressed ? layer_on(layer1) : layer_off(layer1);
165 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
166}
167
168int RGB_current_mode;
169bool process_record_user(uint16_t keycode, keyrecord_t *record) {
170
171 bool result = false;
172 switch (keycode) {
173 case LOWER:
174 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
175 break;
176 case RAISE:
177 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
178 break;
179 #ifdef RGBLIGHT_ENABLE
180 case RGB_MOD:
181 if (record->event.pressed) {
182 rgblight_mode(RGB_current_mode);
183 rgblight_step();
184 RGB_current_mode = rgblight_config.mode;
185 }
186 break;
187 case RGBRST:
188 if (record->event.pressed) {
189 eeconfig_update_rgblight_default();
190 rgblight_enable();
191 RGB_current_mode = rgblight_config.mode;
192 }
193 break;
194 #endif
195 default:
196 result = true;
197 break;
198 }
199
200 return result;
201}
202
203void matrix_init_user(void) {
204 #ifdef RGBLIGHT_ENABLE
205 RGB_current_mode = rgblight_config.mode;
206 #endif
207}
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md b/keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md
new file mode 100644
index 000000000..8c83f7ea3
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_nafuda/readme.md
@@ -0,0 +1,32 @@
1# The salicylic_with_nafuda keymap for naked60
2
3Add Nafuda maps to the salicylic layout.
4
5## Default
6| 1 | 2 | 3 |
7|:----:|:----:|:----:|
8| | MOUSE| |
9| BS+Ad| UP|Browser|
10| LEFT| DOWN| RIGHT|
11
12## Mouse
13| 1 | 2 | 3 |
14|:----:|:----:|:----:|
15| |Default| |
16| BTN1| MS_U| BTN2|
17| MS_L| MS_D| MS_R|
18
19## Browser
20| 1 | 2 | 3 |
21|:----:|:----:|:----:|
22| |CloseTAB| |
23|ReOpenTAB|WH_U|Default|
24| LTAB| WH_D| RTAB|
25
26## Adjust
27| 1 | 2 | 3 |
28|:----:|:----:|:----:|
29| |LED_VAD| |
30|Default|LED_HUD|LED_VAI|
31|LED_MOD|LED_ON/Off|LED_HUI|
32
diff --git a/keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk b/keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk
new file mode 100644
index 000000000..b714c8f51
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_nafuda/rules.mk
@@ -0,0 +1,9 @@
1RGBLIGHT_ENABLE = yes
2
3# If your custom naked60 pcb, you can rewrite to yes.
4LED_ANIMATIONS = yes # LED animations
5
6ifeq ($(strip $(LED_ANIMATIONS)), yes)
7 # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
8 OPT_DEFS += -DLED_ANIMATIONS
9endif
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/config.h b/keyboards/naked60/keymaps/salicylic_with_setta21/config.h
new file mode 100644
index 000000000..fe162510d
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_setta21/config.h
@@ -0,0 +1,90 @@
1/* Copyright 2018 Salicylic_acid3
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/* Select hand configuration */
20
21#define MASTER_LEFT
22// #define MASTER_RIGHT
23// #define EE_HANDS
24
25#define USE_SERIAL_PD2
26
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 180
29
30#define RGBLED_NUM 21
31
32#ifndef IOS_DEVICE_ENABLE
33 #define RGBLIGHT_LIMIT_VAL 180
34 #define RGBLIGHT_VAL_STEP 17
35#else
36 #define RGBLIGHT_LIMIT_VAL 50
37 #define RGBLIGHT_VAL_STEP 4
38#endif
39#define RGBLIGHT_HUE_STEP 10
40#define RGBLIGHT_SAT_STEP 17
41
42#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
43// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
44// 120 RGBoff, OLEDoff
45// 120 OLED
46// 330 RGB 6
47// 300 RGB 32
48// 310 OLED & RGB 32
49 #define USB_MAX_POWER_CONSUMPTION 400
50#else
51 // fix iPhone and iPad power adapter issue
52 // iOS device need lessthan 100
53 #define USB_MAX_POWER_CONSUMPTION 100
54#endif
55
56// Selection of RGBLIGHT MODE to use.
57#if defined(LED_ANIMATIONS)
58 //#define RGBLIGHT_EFFECT_BREATHING
59 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
60 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
61 //#define RGBLIGHT_EFFECT_SNAKE
62 #define RGBLIGHT_EFFECT_KNIGHT
63 //#define RGBLIGHT_EFFECT_CHRISTMAS
64 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
65 //#define RGBLIGHT_EFFECT_RGB_TEST
66 //#define RGBLIGHT_EFFECT_ALTERNATING
67#endif
68
69#define MK_3_SPEED
70
71#undef MOUSEKEY_INTERVAL
72#define MOUSEKEY_INTERVAL 0
73
74#undef MOUSEKEY_TIME_TO_MAX
75#define MOUSEKEY_TIME_TO_MAX 150
76
77#undef MOUSEKEY_MAX_SPEED
78#define MOUSEKEY_MAX_SPEED 3
79
80#undef MOUSEKEY_MOVE_DELTA
81#define MOUSEKEY_MOVE_DELTA 5
82
83#undef MOUSEKEY_DELAY
84#define MOUSEKEY_DELAY 0
85
86#undef MOUSEKEY_WHEEL_MAX_SPEED
87#define MOUSEKEY_WHEEL_MAX_SPEED 1
88
89#undef MOUSEKEY_WHEEL_TIME_TO_MAX
90#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c b/keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c
new file mode 100644
index 000000000..4d2618c52
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_setta21/keymap.c
@@ -0,0 +1,207 @@
1#include QMK_KEYBOARD_H
2#include "keymap_jp.h"
3
4extern keymap_config_t keymap_config;
5
6#ifdef RGBLIGHT_ENABLE
7//Following line allows macro to read current RGB settings
8extern rgblight_config_t rgblight_config;
9#endif
10
11extern uint8_t is_master;
12
13// Each layer gets a name for readability, which is then used in the keymap matrix below.
14// The underscores don't mean anything - you can have a layer called STUFF or any other name.
15// Layer names don't all need to be of the same length, obviously, and you can also skip them
16// entirely and just use numbers.
17enum layer_number {
18 _QWERTY = 0,
19 _FLOCK,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23};
24
25enum custom_keycodes {
26 FLOCK = SAFE_RANGE,
27 LOWER,
28 RAISE,
29 ADJUST,
30 KANJI,
31 RGBRST,
32 SEND_SUM,
33 SEND_AVERAGE,
34 SEND_COUNTIF,
35 SEND_MAX,
36 SEND_MIN
37};
38
39enum tapdances{
40 TD_ESFL = 0,
41 TD_ESQW,
42};
43
44// Fillers to make layering more clear
45#define KC_CT11 LCTL_T(KC_F11)
46#define KC_SF12 SFT_T(KC_F12)
47#define KC_LOEN LT(_LOWER, KC_ENT)
48#define KC_RASP LT(_RAISE, KC_SPC)
49
50#define KC_SSUM SEND_SUM
51#define KC_SAVE SEND_AVERAGE
52#define KC_SCOU SEND_COUNTIF
53#define KC_SMAX SEND_MAX
54#define KC_SMIN SEND_MIN
55
56#define KC_RADO LT(_RAISE, KC_PDOT)
57#define KC_LOP0 LT(_LOWER, KC_P0)
58#define KC_ADNL LT(_ADJUST, KC_NLCK)
59
60qk_tap_dance_action_t tap_dance_actions[] = {
61 [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
62 [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
63};
64
65const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
66 [_QWERTY] = LAYOUT_with_setta21(
67 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
68 TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
69 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
70 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
71 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
72 KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, JP_EQL,
73 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
74 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL,
75 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
76 KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
77 //`------------------------------------------------------------------------------------------------------------'
78 ),
79
80 [_FLOCK] = LAYOUT_with_setta21(
81 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
82 TD(TD_ESQW), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______,_______,_______,_______,_______,
83 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
84 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,_______,_______,
85 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
86 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,_______,_______,_______,
87 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
88 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______,
89 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
90 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
91 //`------------------------------------------------------------------------------------------------------------'
92 ),
93
94 [_LOWER] = LAYOUT_with_setta21(
95 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
96 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER,XXXXXXX,KC_LEFT,XXXXXXX,XXXXXXX, KC_ESC,
97 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
98 JP_COLN, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
99 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
100 JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, RAISE,XXXXXXX,KC_RIGHT,XXXXXXX,KC_PAST, JP_EQL,
101 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
102 JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL,
103 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
104 _______, _______, _______, KC_ZKHK, LOWER, _______, _______, RAISE, KC_0, JP_DOT, _______, _______
105 //`------------------------------------------------------------------------------------------------------------'
106 ),
107
108 [_RAISE] = LAYOUT_with_setta21(
109 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
110 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
111 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
112 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, KC_DEL, KC_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
113 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
114 KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, JP_EQL,
115 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
116 KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX, JP_RPRN, KC_SSUM,KC_SAVE, KC_DEL,
117 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
118 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
119 //`------------------------------------------------------------------------------------------------------------'
120 ),
121
122 [_ADJUST] = LAYOUT_with_setta21( /* Base */
123 //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
124 KC_ESC, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
125 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
126 _______, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX,LALT(KC_PSCR), RGB_VAI,RGB_HUI,RGB_SAI,XXXXXXX,_______,
127 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
128 KC_LCTRL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PSCR, RAISE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______,
129 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
130 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,LCA(KC_DEL), RGB_MOD, _______,_______,_______,
131 //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |-----------------------------------------------|
132 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
133 //`------------------------------------------------------------------------------------------------------------'
134 )
135};
136
137static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
138
139 pressed ? layer_on(layer1) : layer_off(layer1);
140 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
141}
142
143int RGB_current_mode;
144bool process_record_user(uint16_t keycode, keyrecord_t *record) {
145
146 bool result = false;
147 switch (keycode) {
148 case LOWER:
149 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
150 break;
151 case RAISE:
152 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
153 break;
154 case SEND_SUM:
155 if (record->event.pressed) {
156 SEND_STRING("_SUM*");
157 }
158 break;
159 case SEND_AVERAGE:
160 if (record->event.pressed) {
161 SEND_STRING("_AVERAGE*");
162 }
163 break;
164 case SEND_COUNTIF:
165 if (record->event.pressed) {
166 SEND_STRING("_COUNTIF*");
167 }
168 break;
169 case SEND_MAX:
170 if (record->event.pressed) {
171 SEND_STRING("_MAX*");
172 }
173 break;
174 case SEND_MIN:
175 if (record->event.pressed) {
176 SEND_STRING("_MIN*");
177 }
178 break;
179 #ifdef RGBLIGHT_ENABLE
180 case RGB_MOD:
181 if (record->event.pressed) {
182 rgblight_mode(RGB_current_mode);
183 rgblight_step();
184 RGB_current_mode = rgblight_config.mode;
185 }
186 break;
187 case RGBRST:
188 if (record->event.pressed) {
189 eeconfig_update_rgblight_default();
190 rgblight_enable();
191 RGB_current_mode = rgblight_config.mode;
192 }
193 break;
194 #endif
195 default:
196 result = true;
197 break;
198 }
199
200 return result;
201}
202
203void matrix_init_user(void) {
204 #ifdef RGBLIGHT_ENABLE
205 RGB_current_mode = rgblight_config.mode;
206 #endif
207}
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/readme.md b/keyboards/naked60/keymaps/salicylic_with_setta21/readme.md
new file mode 100644
index 000000000..0912d5431
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_setta21/readme.md
@@ -0,0 +1,44 @@
1# The salicylic_with_setta21 keymap for naked60
2
3Add Setta21 maps to the salicylic layout.
4
5## Default
6| 1 | 2 | 3 | 4 |
7|:----:|:----:|:----:|:----:|
8| ESC| F2| =| DEL|
9|Ad+Num| /| *| -|
10| 7| 8| 9| |
11| 4| 5| 6| +|
12| 1| 2| 3| |
13| Rai+0| | LOW + .| ENT|
14
15## Lower
16| 1 | 2 | 3 | 4 |
17|:----:|:----:|:----:|:----:|
18| ESC| F2| =| DEL|
19| =MIN(| =MAX(|=COUNTIF(|=AVERAGE(|
20| F7| F8| F9| |
21| F4| F5| F6| =SUM(|
22| F11| F12| F3| |
23| RAISE| | LOWER| )|
24
25## Raise
26| 1 | 2 | 3 | 4 |
27|:----:|:----:|:----:|:----:|
28| ESC| F2| =| DEL|
29| XXXXX| /| *| -|
30| XXXXX| UP| XXXXX| |
31| LEFT| DOWN| RIGHT| +|
32| XXXXX| DOWN| XXXXX| |
33| RAISE| | LOWER| ENT|
34
35## Adjust
36| 1 | 2 | 3 | 4 |
37|:----:|:----:|:----:|:----:|
38| ESC| F2| =| DEL|
39|ADJUST| XXXXX| XXXXX| -|
40|LED_SAD|LED_SAI| XXXXX| |
41|LED_HUD|LED_HUI| XXXXX| +|
42|LED_VAD|LED_VAI| XXXXX| |
43|LED_ON/Off| | XXXXX|LED_MOD|
44
diff --git a/keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk b/keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk
new file mode 100644
index 000000000..15a887e78
--- /dev/null
+++ b/keyboards/naked60/keymaps/salicylic_with_setta21/rules.mk
@@ -0,0 +1,10 @@
1RGBLIGHT_ENABLE = yes
2
3# If your custom naked60 pcb, you can rewrite to yes.
4LED_ANIMATIONS = yes # LED animations
5
6ifeq ($(strip $(LED_ANIMATIONS)), yes)
7 # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
8 OPT_DEFS += -DLED_ANIMATIONS
9endif
10
diff --git a/keyboards/naked60/naked60.c b/keyboards/naked60/naked60.c
new file mode 100644
index 000000000..1ff159cdb
--- /dev/null
+++ b/keyboards/naked60/naked60.c
@@ -0,0 +1 @@
#include "naked60.h"
diff --git a/keyboards/naked60/naked60.h b/keyboards/naked60/naked60.h
new file mode 100644
index 000000000..fde791c5e
--- /dev/null
+++ b/keyboards/naked60/naked60.h
@@ -0,0 +1,12 @@
1#pragma once
2
3#ifdef KEYBOARD_naked60_rev1
4 #include "rev1.h"
5#endif
6
7#include "quantum.h"
8
9#ifdef PROTOCOL_LUFA
10#include "lufa.h"
11#include "split_util.h"
12#endif
diff --git a/keyboards/naked60/readme.md b/keyboards/naked60/readme.md
new file mode 100644
index 000000000..60bb16437
--- /dev/null
+++ b/keyboards/naked60/readme.md
@@ -0,0 +1,18 @@
1# naked60
2
3![naked60](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190530/20190530040355.jpg)
4
5This is 60 keys modification Ortholinear keyboard.
6
7Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
8Hardware Supported: Naked60BMP PCB, Pro Micro
9Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1360780)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make naked60:default:avrdude
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).
16
17[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked60bmp-build-guide)
18[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked60)
diff --git a/keyboards/naked60/rev1/config.h b/keyboards/naked60/rev1/config.h
new file mode 100644
index 000000000..1724ef060
--- /dev/null
+++ b/keyboards/naked60/rev1/config.h
@@ -0,0 +1,119 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3Copyright 2015 Jack Humbert
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xFEED
23#define PRODUCT_ID 0x3060
24#define DEVICE_VER 0x0002
25#define MANUFACTURER Salicylic_Acid
26#define PRODUCT naked60
27#define DESCRIPTION Ortholinear 60 Keys Keyboard
28
29/* Use I2C or Serial */
30//#define USE_I2C
31#define USE_SERIAL
32//#define USE_MATRIX_I2C
33
34/* Select hand configuration */
35#define MASTER_LEFT
36// #define MASTER_RIGHT
37// #define EE_HANDS
38
39// OLED support
40// see ./rules.mk: OLED_ENABLE=yes or no
41#ifdef OLED_ENABLE
42 #define SSD1306OLED
43#endif
44
45/* key matrix size */
46#define MATRIX_ROWS 10
47#define MATRIX_COLS 14
48
49// Rows are doubled-up
50#define MATRIX_ROW_PINS { B6, D1, D0, D4, C6 }
51
52// wiring of each half
53#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, D7, E6, B4, B5, D3 }
54// #define MATRIX_COL_PINS { D3, B5, B4, E6, D7, B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
55
56/* define if matrix has ghost */
57//#define MATRIX_HAS_GHOST
58
59/* number of backlight levels */
60// #define BACKLIGHT_LEVELS 3
61
62/* Set 0 if debouncing isn't needed */
63#define DEBOUNCE 5
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66//#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68//#define LOCKING_RESYNC_ENABLE
69
70/* ws2812 RGB LED */
71#define RGB_DI_PIN D3
72#define RGBLIGHT_TIMER
73
74// naked60 keyboard RGB LED support
75//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
76// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
77//#define RGBLED_NUM 21
78
79#ifndef IOS_DEVICE_ENABLE
80 #define RGBLIGHT_LIMIT_VAL 180
81 #define RGBLIGHT_VAL_STEP 17
82#else
83 #define RGBLIGHT_LIMIT_VAL 50
84 #define RGBLIGHT_VAL_STEP 4
85#endif
86#define RGBLIGHT_HUE_STEP 10
87#define RGBLIGHT_SAT_STEP 17
88
89#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
90// USB_MAX_POWER_CONSUMPTION value for naked60 keyboard
91// 120 RGBoff, OLEDoff
92// 120 OLED
93// 330 RGB 6
94// 300 RGB 32
95// 310 OLED & RGB 32
96 #define USB_MAX_POWER_CONSUMPTION 400
97#else
98 // fix iPhone and iPad power adapter issue
99 // iOS device need lessthan 100
100 #define USB_MAX_POWER_CONSUMPTION 100
101#endif
102
103/*
104 * Feature disable options
105 * These options are also useful to firmware size reduction.
106 */
107
108/* disable debug print */
109// #define NO_DEBUG
110
111/* disable print */
112// #define NO_PRINT
113
114/* disable action features */
115//#define NO_ACTION_LAYER
116//#define NO_ACTION_TAPPING
117//#define NO_ACTION_ONESHOT
118//#define NO_ACTION_MACRO
119//#define NO_ACTION_FUNCTION
diff --git a/keyboards/naked60/rev1/matrix.c b/keyboards/naked60/rev1/matrix.c
new file mode 100644
index 000000000..8685a8125
--- /dev/null
+++ b/keyboards/naked60/rev1/matrix.c
@@ -0,0 +1,357 @@
1/*
2Copyright 2012 Jun Wako <wakojun@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/*
19 * scan matrix
20 */
21#include <stdint.h>
22#include <stdbool.h>
23#include <string.h>
24#include <avr/io.h>
25#include <avr/wdt.h>
26#include <avr/interrupt.h>
27#include <util/delay.h>
28#include "print.h"
29#include "debug.h"
30#include "util.h"
31#include "matrix.h"
32#include "split_util.h"
33#include "pro_micro.h"
34
35#ifdef USE_MATRIX_I2C
36# include "i2c.h"
37#else // USE_SERIAL
38# include "split_scomm.h"
39#endif
40
41#ifndef DEBOUNCE
42# define DEBOUNCE 5
43#endif
44
45#define ERROR_DISCONNECT_COUNT 5
46
47static uint8_t debouncing = DEBOUNCE;
48static const int ROWS_PER_HAND = MATRIX_ROWS/2;
49static uint8_t error_count = 0;
50uint8_t is_master = 0 ;
51
52static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
53static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
54
55/* matrix state(1:on, 0:off) */
56static matrix_row_t matrix[MATRIX_ROWS];
57static matrix_row_t matrix_debouncing[MATRIX_ROWS];
58
59static matrix_row_t read_cols(void);
60static void init_cols(void);
61static void unselect_rows(void);
62static void select_row(uint8_t row);
63static uint8_t matrix_master_scan(void);
64
65
66__attribute__ ((weak))
67void matrix_init_kb(void) {
68 matrix_init_user();
69}
70
71__attribute__ ((weak))
72void matrix_scan_kb(void) {
73 matrix_scan_user();
74}
75
76__attribute__ ((weak))
77void matrix_init_user(void) {
78}
79
80__attribute__ ((weak))
81void matrix_scan_user(void) {
82}
83
84inline
85uint8_t matrix_rows(void)
86{
87 return MATRIX_ROWS;
88}
89
90inline
91uint8_t matrix_cols(void)
92{
93 return MATRIX_COLS;
94}
95
96void matrix_init(void)
97{
98 debug_enable = true;
99 debug_matrix = true;
100 debug_mouse = true;
101 // initialize row and col
102 unselect_rows();
103 init_cols();
104
105 TX_RX_LED_INIT;
106 TXLED0;
107 RXLED0;
108
109 // initialize matrix state: all keys off
110 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
111 matrix[i] = 0;
112 matrix_debouncing[i] = 0;
113 }
114
115 is_master = has_usb();
116
117 matrix_init_quantum();
118}
119
120uint8_t _matrix_scan(void)
121{
122 // Right hand is stored after the left in the matirx so, we need to offset it
123 int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
124
125 for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
126 select_row(i);
127 _delay_us(30); // without this wait read unstable value.
128 matrix_row_t cols = read_cols();
129 if (matrix_debouncing[i+offset] != cols) {
130 matrix_debouncing[i+offset] = cols;
131 debouncing = DEBOUNCE;
132 }
133 unselect_rows();
134 }
135
136 if (debouncing) {
137 if (--debouncing) {
138 _delay_ms(1);
139 } else {
140 for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
141 matrix[i+offset] = matrix_debouncing[i+offset];
142 }
143 }
144 }
145
146 return 1;
147}
148
149#ifdef USE_MATRIX_I2C
150
151// Get rows from other half over i2c
152int i2c_transaction(void) {
153 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
154
155 int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
156 if (err) goto i2c_error;
157
158 // start of matrix stored at 0x00
159 err = i2c_master_write(0x00);
160 if (err) goto i2c_error;
161
162 // Start read
163 err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
164 if (err) goto i2c_error;
165
166 if (!err) {
167 int i;
168 for (i = 0; i < ROWS_PER_HAND-1; ++i) {
169 matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
170 }
171 matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
172 i2c_master_stop();
173 } else {
174i2c_error: // the cable is disconnceted, or something else went wrong
175 i2c_reset_state();
176 return err;
177 }
178
179 return 0;
180}
181
182#else // USE_SERIAL
183
184int serial_transaction(int master_changed) {
185 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
186#ifdef SERIAL_USE_MULTI_TRANSACTION
187 int ret=serial_update_buffers(master_changed);
188#else
189 int ret=serial_update_buffers();
190#endif
191 if (ret ) {
192 if(ret==2) RXLED1;
193 return 1;
194 }
195 RXLED0;
196 memcpy(&matrix[slaveOffset],
197 (void *)serial_slave_buffer, sizeof(serial_slave_buffer));
198 return 0;
199}
200#endif
201
202uint8_t matrix_scan(void)
203{
204 if (is_master) {
205 matrix_master_scan();
206 }else{
207 matrix_slave_scan();
208 int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
209 memcpy(&matrix[offset],
210 (void *)serial_master_buffer, sizeof(serial_master_buffer));
211 matrix_scan_quantum();
212 }
213 return 1;
214}
215
216
217uint8_t matrix_master_scan(void) {
218
219 int ret = _matrix_scan();
220 int mchanged = 1;
221
222 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
223
224#ifdef USE_MATRIX_I2C
225// for (int i = 0; i < ROWS_PER_HAND; ++i) {
226 /* i2c_slave_buffer[i] = matrix[offset+i]; */
227// i2c_slave_buffer[i] = matrix[offset+i];
228// }
229#else // USE_SERIAL
230 #ifdef SERIAL_USE_MULTI_TRANSACTION
231 mchanged = memcmp((void *)serial_master_buffer,
232 &matrix[offset], sizeof(serial_master_buffer));
233 #endif
234 memcpy((void *)serial_master_buffer,
235 &matrix[offset], sizeof(serial_master_buffer));
236#endif
237
238#ifdef USE_MATRIX_I2C
239 if( i2c_transaction() ) {
240#else // USE_SERIAL
241 if( serial_transaction(mchanged) ) {
242#endif
243 // turn on the indicator led when halves are disconnected
244 TXLED1;
245
246 error_count++;
247
248 if (error_count > ERROR_DISCONNECT_COUNT) {
249 // reset other half if disconnected
250 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
251 for (int i = 0; i < ROWS_PER_HAND; ++i) {
252 matrix[slaveOffset+i] = 0;
253 }
254 }
255 } else {
256 // turn off the indicator led on no error
257 TXLED0;
258 error_count = 0;
259 }
260 matrix_scan_quantum();
261 return ret;
262}
263
264void matrix_slave_scan(void) {
265 _matrix_scan();
266
267 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
268
269#ifdef USE_MATRIX_I2C
270 for (int i = 0; i < ROWS_PER_HAND; ++i) {
271 /* i2c_slave_buffer[i] = matrix[offset+i]; */
272 i2c_slave_buffer[i] = matrix[offset+i];
273 }
274#else // USE_SERIAL
275 #ifdef SERIAL_USE_MULTI_TRANSACTION
276 int change = 0;
277 #endif
278 for (int i = 0; i < ROWS_PER_HAND; ++i) {
279 #ifdef SERIAL_USE_MULTI_TRANSACTION
280 if( serial_slave_buffer[i] != matrix[offset+i] )
281 change = 1;
282 #endif
283 serial_slave_buffer[i] = matrix[offset+i];
284 }
285 #ifdef SERIAL_USE_MULTI_TRANSACTION
286 slave_buffer_change_count += change;
287 #endif
288#endif
289}
290
291bool matrix_is_modified(void)
292{
293 if (debouncing) return false;
294 return true;
295}
296
297inline
298bool matrix_is_on(uint8_t row, uint8_t col)
299{
300 return (matrix[row] & ((matrix_row_t)1<<col));
301}
302
303inline
304matrix_row_t matrix_get_row(uint8_t row)
305{
306 return matrix[row];
307}
308
309void matrix_print(void)
310{
311 print("\nr/c 0123456789ABCDEF\n");
312 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
313 phex(row); print(": ");
314 pbin_reverse16(matrix_get_row(row));
315 print("\n");
316 }
317}
318
319uint8_t matrix_key_count(void)
320{
321 uint8_t count = 0;
322 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
323 count += bitpop16(matrix[i]);
324 }
325 return count;
326}
327
328static void init_cols(void)
329{
330 for(int x = 0; x < MATRIX_COLS; x++) {
331 _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
332 _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
333 }
334}
335
336static matrix_row_t read_cols(void)
337{
338 matrix_row_t result = 0;
339 for(int x = 0; x < MATRIX_COLS; x++) {
340 result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
341 }
342 return result;
343}
344
345static void unselect_rows(void)
346{
347 for(int x = 0; x < ROWS_PER_HAND; x++) {
348 _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
349 _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
350 }
351}
352
353static void select_row(uint8_t row)
354{
355 _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
356 _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
357}
diff --git a/keyboards/naked60/rev1/rev1.c b/keyboards/naked60/rev1/rev1.c
new file mode 100644
index 000000000..520a869e5
--- /dev/null
+++ b/keyboards/naked60/rev1/rev1.c
@@ -0,0 +1 @@
#include "rev1.h"
diff --git a/keyboards/naked60/rev1/rev1.h b/keyboards/naked60/rev1/rev1.h
new file mode 100644
index 000000000..38e355cfc
--- /dev/null
+++ b/keyboards/naked60/rev1/rev1.h
@@ -0,0 +1,97 @@
1#pragma once
2
3#include "naked60.h"
4
5#include "quantum.h"
6
7#ifdef RGBLIGHT_ENABLE
8//rgb led driver
9#include "ws2812.h"
10#endif
11
12
13//////////////////////////////////////////////////////////////////////////////
14// When only use naked60.
15//////////////////////////////////////////////////////////////////////////////
16/*
17 * ,------------------------------------ ------------------------------------.
18 * | L00 | L01 | L02 | L03 | L04 | L05 | | L06 | L07 | L08 | L09 | L0A | L0B |
19 * |------------------------------------ ------------------------------------+
20 * | L10 | L11 | L12 | L13 | L14 | L15 | | L16 | L17 | L18 | L19 | L1A | L1B |
21 * |------------------------------------ ------------------------------------+
22 * | L20 | L21 | L22 | L23 | L24 | L25 | | L26 | L17 | L28 | L29 | L2A | L2B |
23 * |------------------------------------ ------------------------------------+
24 * | L30 | L31 | L32 | L33 | L34 | L35 | | L36 | L37 | L38 | L39 | L3A | L3B |
25 * |-----------------------------------------------------------------------'
26 * | L40 | L41 | L42 | L43 | L44 | L45 | L46 | L47 | L48 | L49 | L4A | L4B |
27 * |-----------------------------------------------------------------------'
28 */
29
30#define LAYOUT( \
31 L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, \
32 L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, \
33 L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, \
34 L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B, \
35 L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B \
36 ) \
37 { \
38 { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B }, \
39 { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B }, \
40 { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B }, \
41 { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B }, \
42 { L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B }, \
43 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
44 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
45 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
46 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
47 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
48 }
49
50//////////////////////////////////////////////////////////////////////////////
51// When connecting Setta21 to naked60.
52//////////////////////////////////////////////////////////////////////////////
53
54#define LAYOUT_with_setta21( \
55 L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R00, R01, R02, R03, R04, R05, \
56 L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R11, R12, R13, R14, R15, \
57 L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, R23, R24, R25, \
58 L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B, R30, R32, R34, R35, \
59 L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B \
60 ) \
61 { \
62 { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
63 { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
64 { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
65 { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
66 { L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B,KC_NO,KC_NO }, \
67 { R00, R01, R02, R03, R04, R05,KC_NO,KC_NO,KC_NO, R11, R12, R13, R14, R15 }, \
68 { R20, R21, R22, R23, R24, R25,KC_NO,KC_NO, R30,KC_NO, R32,KC_NO, R34, R35 }, \
69 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
70 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
71 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
72 }
73
74//////////////////////////////////////////////////////////////////////////////
75// When connecting Nafuda to naked60.
76//////////////////////////////////////////////////////////////////////////////
77
78#define LAYOUT_with_nafuda( \
79 L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R01, \
80 L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R10, R11, R12, \
81 L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, \
82 L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B, \
83 L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B \
84 ) \
85 { \
86 { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
87 { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
88 { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
89 { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
90 { L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L4A, L4B,KC_NO,KC_NO }, \
91 {KC_NO, R01,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, R10, R11, R12,KC_NO,KC_NO,KC_NO }, \
92 { R20, R21, R22,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
93 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
94 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
95 {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
96 }
97
diff --git a/keyboards/naked60/rev1/rules.mk b/keyboards/naked60/rev1/rules.mk
new file mode 100644
index 000000000..a71181033
--- /dev/null
+++ b/keyboards/naked60/rev1/rules.mk
@@ -0,0 +1,3 @@
1SRC += matrix.c \
2 split_util.c \
3 split_scomm.c
diff --git a/keyboards/naked60/rev1/serial_config.h b/keyboards/naked60/rev1/serial_config.h
new file mode 100644
index 000000000..37135213d
--- /dev/null
+++ b/keyboards/naked60/rev1/serial_config.h
@@ -0,0 +1,8 @@
1//// #error rev2 serial config
2
3#ifndef SOFT_SERIAL_PIN
4/* Soft Serial defines */
5#define SOFT_SERIAL_PIN D2
6
7#define SERIAL_USE_MULTI_TRANSACTION
8#endif
diff --git a/keyboards/naked60/rev1/serial_config_simpleapi.h b/keyboards/naked60/rev1/serial_config_simpleapi.h
new file mode 100644
index 000000000..e2d22a41e
--- /dev/null
+++ b/keyboards/naked60/rev1/serial_config_simpleapi.h
@@ -0,0 +1,8 @@
1#ifndef SERIAL_CONFIG_SIMPLEAPI_H
2#define SERIAL_CONFIG_SIMPLEAPI_H
3
4#undef SERIAL_USE_MULTI_TRANSACTION
5#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
6#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
7
8#endif // SERIAL_CONFIG_SIMPLEAPI_H
diff --git a/keyboards/naked60/rev1/split_scomm.c b/keyboards/naked60/rev1/split_scomm.c
new file mode 100644
index 000000000..ada786796
--- /dev/null
+++ b/keyboards/naked60/rev1/split_scomm.c
@@ -0,0 +1,92 @@
1#ifdef USE_SERIAL
2#ifdef SERIAL_USE_MULTI_TRANSACTION
3/* --- USE flexible API (using multi-type transaction function) --- */
4
5#include <stdbool.h>
6#include <stdint.h>
7#include <stddef.h>
8#include <split_scomm.h>
9#include "serial.h"
10#ifdef CONSOLE_ENABLE
11 #include <print.h>
12#endif
13
14uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
15uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
16uint8_t volatile status_com = 0;
17uint8_t volatile status1 = 0;
18uint8_t slave_buffer_change_count = 0;
19uint8_t s_change_old = 0xff;
20uint8_t s_change_new = 0xff;
21
22SSTD_t transactions[] = {
23#define GET_SLAVE_STATUS 0
24 /* master buffer not changed, only recive slave_buffer_change_count */
25 { (uint8_t *)&status_com,
26 0, NULL,
27 sizeof(slave_buffer_change_count), &slave_buffer_change_count,
28 },
29#define PUT_MASTER_GET_SLAVE_STATUS 1
30 /* master buffer changed need send, and recive slave_buffer_change_count */
31 { (uint8_t *)&status_com,
32 sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
33 sizeof(slave_buffer_change_count), &slave_buffer_change_count,
34 },
35#define GET_SLAVE_BUFFER 2
36 /* recive serial_slave_buffer */
37 { (uint8_t *)&status1,
38 0, NULL,
39 sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
40 }
41};
42
43void serial_master_init(void)
44{
45 soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
46}
47
48void serial_slave_init(void)
49{
50 soft_serial_target_init(transactions, TID_LIMIT(transactions));
51}
52
53// 0 => no error
54// 1 => slave did not respond
55// 2 => checksum error
56int serial_update_buffers(int master_update)
57{
58 int status, smatstatus;
59 static int need_retry = 0;
60
61 if( s_change_old != s_change_new ) {
62 smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
63 if( smatstatus == TRANSACTION_END ) {
64 s_change_old = s_change_new;
65#ifdef CONSOLE_ENABLE
66 uprintf("slave matrix = %b %b %b %b %b\n",
67 serial_slave_buffer[0], serial_slave_buffer[1],
68 serial_slave_buffer[2], serial_slave_buffer[3],
69 serial_slave_buffer[4] );
70#endif
71 }
72 } else {
73 // serial_slave_buffer dosen't change
74 smatstatus = TRANSACTION_END; // dummy status
75 }
76
77 if( !master_update && !need_retry) {
78 status = soft_serial_transaction(GET_SLAVE_STATUS);
79 } else {
80 status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
81 }
82 if( status == TRANSACTION_END ) {
83 s_change_new = slave_buffer_change_count;
84 need_retry = 0;
85 } else {
86 need_retry = 1;
87 }
88 return smatstatus;
89}
90
91#endif // SERIAL_USE_MULTI_TRANSACTION
92#endif /* USE_SERIAL */
diff --git a/keyboards/naked60/rev1/split_scomm.h b/keyboards/naked60/rev1/split_scomm.h
new file mode 100644
index 000000000..537ec4080
--- /dev/null
+++ b/keyboards/naked60/rev1/split_scomm.h
@@ -0,0 +1,22 @@
1#pragma once
2
3#ifndef SERIAL_USE_MULTI_TRANSACTION
4/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
5#include "serial.h"
6
7#else
8/* --- USE flexible API (using multi-type transaction function) --- */
9// Buffers for master - slave communication
10#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
11#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
12
13extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
14extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
15extern uint8_t slave_buffer_change_count;
16
17void serial_master_init(void);
18void serial_slave_init(void);
19int serial_update_buffers(int master_changed);
20
21#endif
22
diff --git a/keyboards/naked60/rev1/split_util.c b/keyboards/naked60/rev1/split_util.c
new file mode 100644
index 000000000..e1ff8b437
--- /dev/null
+++ b/keyboards/naked60/rev1/split_util.c
@@ -0,0 +1,70 @@
1#include <avr/io.h>
2#include <avr/wdt.h>
3#include <avr/power.h>
4#include <avr/interrupt.h>
5#include <util/delay.h>
6#include <avr/eeprom.h>
7#include "split_util.h"
8#include "matrix.h"
9#include "keyboard.h"
10
11#ifdef USE_MATRIX_I2C
12# include "i2c.h"
13#else
14# include "split_scomm.h"
15#endif
16
17volatile bool isLeftHand = true;
18
19static void setup_handedness(void) {
20 #ifdef EE_HANDS
21 isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
22 #else
23 // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
24 #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
25 isLeftHand = !has_usb();
26 #else
27 isLeftHand = has_usb();
28 #endif
29 #endif
30}
31
32static void keyboard_master_setup(void) {
33
34#ifdef USE_MATRIX_I2C
35 i2c_master_init();
36#else
37 serial_master_init();
38#endif
39}
40
41static void keyboard_slave_setup(void) {
42
43#ifdef USE_MATRIX_I2C
44 i2c_slave_init(SLAVE_I2C_ADDRESS);
45#else
46 serial_slave_init();
47#endif
48}
49
50bool has_usb(void) {
51 USBCON |= (1 << OTGPADE); //enables VBUS pad
52 _delay_us(5);
53 return (USBSTA & (1<<VBUS)); //checks state of VBUS
54}
55
56void split_keyboard_setup(void) {
57 setup_handedness();
58
59 if (has_usb()) {
60 keyboard_master_setup();
61 } else {
62 keyboard_slave_setup();
63 }
64 sei();
65}
66
67// this code runs before the usb and keyboard is initialized
68void matrix_setup(void) {
69 split_keyboard_setup();
70}
diff --git a/keyboards/naked60/rev1/split_util.h b/keyboards/naked60/rev1/split_util.h
new file mode 100644
index 000000000..f59304756
--- /dev/null
+++ b/keyboards/naked60/rev1/split_util.h
@@ -0,0 +1,16 @@
1#pragma once
2
3#include <stdbool.h>
4#include "eeconfig.h"
5
6#define SLAVE_I2C_ADDRESS 0x32
7
8extern volatile bool isLeftHand;
9
10// slave version of matix scan, defined in matrix.c
11void matrix_slave_scan(void);
12
13void split_keyboard_setup(void);
14bool has_usb(void);
15
16void matrix_master_OLED_init (void);
diff --git a/keyboards/naked60/rules.mk b/keyboards/naked60/rules.mk
new file mode 100644
index 000000000..fc2fe3032
--- /dev/null
+++ b/keyboards/naked60/rules.mk
@@ -0,0 +1,40 @@
1QUANTUM_LIB_SRC += serial.c
2
3# MCU name
4MCU = atmega32u4
5
6# Bootloader selection
7# Teensy halfkay
8# Pro Micro caterina
9# Atmel DFU atmel-dfu
10# LUFA DFU lufa-dfu
11# QMK DFU qmk-dfu
12# ATmega32A bootloadHID
13# ATmega328P USBasp
14BOOTLOADER = caterina
15
16# Build Options
17# change to "no" to disable the options, or define them in the Makefile in
18# the appropriate keymap folder that will get included automatically
19#
20BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
21MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
22EXTRAKEY_ENABLE = no # Audio control and System control(+450)
23CONSOLE_ENABLE = no # Console for debug(+400)
24COMMAND_ENABLE = no # Commands for debug and configuration
25NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
26BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
27MIDI_ENABLE = no # MIDI controls
28AUDIO_ENABLE = no # Audio output on port C6
29UNICODE_ENABLE = no # Unicode
30BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
31RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
32TAP_DANCE_ENABLE = yes
33SUBPROJECT_rev1 = no
34USE_I2C = no
35# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
36SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
37
38CUSTOM_MATRIX = yes
39
40DEFAULT_FOLDER = naked60/rev1
diff --git a/keyboards/naked60/serial.c b/keyboards/naked60/serial.c
new file mode 100644
index 000000000..6006ebf1b
--- /dev/null
+++ b/keyboards/naked60/serial.c
@@ -0,0 +1,590 @@
1/*
2 * WARNING: be careful changing this code, it is very timing dependent
3 *
4 * 2018-10-28 checked
5 * avr-gcc 4.9.2
6 * avr-gcc 5.4.0
7 * avr-gcc 7.3.0
8 */
9
10#ifndef F_CPU
11#define F_CPU 16000000
12#endif
13
14#include <avr/io.h>
15#include <avr/interrupt.h>
16#include <util/delay.h>
17#include <stddef.h>
18#include <stdbool.h>
19#include "serial.h"
20//#include <pro_micro.h>
21
22#ifdef SOFT_SERIAL_PIN
23
24#ifdef __AVR_ATmega32U4__
25 // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
26 #ifdef USE_I2C
27 #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
28 #error Using ATmega32U4 I2C, so can not use PD0, PD1
29 #endif
30 #endif
31
32 #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
33 #define SERIAL_PIN_DDR DDRD
34 #define SERIAL_PIN_PORT PORTD
35 #define SERIAL_PIN_INPUT PIND
36 #if SOFT_SERIAL_PIN == D0
37 #define SERIAL_PIN_MASK _BV(PD0)
38 #define EIMSK_BIT _BV(INT0)
39 #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
40 #define SERIAL_PIN_INTERRUPT INT0_vect
41 #elif SOFT_SERIAL_PIN == D1
42 #define SERIAL_PIN_MASK _BV(PD1)
43 #define EIMSK_BIT _BV(INT1)
44 #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
45 #define SERIAL_PIN_INTERRUPT INT1_vect
46 #elif SOFT_SERIAL_PIN == D2
47 #define SERIAL_PIN_MASK _BV(PD2)
48 #define EIMSK_BIT _BV(INT2)
49 #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
50 #define SERIAL_PIN_INTERRUPT INT2_vect
51 #elif SOFT_SERIAL_PIN == D3
52 #define SERIAL_PIN_MASK _BV(PD3)
53 #define EIMSK_BIT _BV(INT3)
54 #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
55 #define SERIAL_PIN_INTERRUPT INT3_vect
56 #endif
57 #elif SOFT_SERIAL_PIN == E6
58 #define SERIAL_PIN_DDR DDRE
59 #define SERIAL_PIN_PORT PORTE
60 #define SERIAL_PIN_INPUT PINE
61 #define SERIAL_PIN_MASK _BV(PE6)
62 #define EIMSK_BIT _BV(INT6)
63 #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
64 #define SERIAL_PIN_INTERRUPT INT6_vect
65 #else
66 #error invalid SOFT_SERIAL_PIN value
67 #endif
68
69#else
70 #error serial.c now support ATmega32U4 only
71#endif
72
73//////////////// for backward compatibility ////////////////////////////////
74#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
75/* --- USE OLD API (compatible with let's split serial.c) */
76 #if SERIAL_SLAVE_BUFFER_LENGTH > 0
77 uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
78 #endif
79 #if SERIAL_MASTER_BUFFER_LENGTH > 0
80 uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
81 #endif
82 uint8_t volatile status0 = 0;
83
84SSTD_t transactions[] = {
85 { (uint8_t *)&status0,
86 #if SERIAL_MASTER_BUFFER_LENGTH > 0
87 sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
88 #else
89 0, (uint8_t *)NULL,
90 #endif
91 #if SERIAL_SLAVE_BUFFER_LENGTH > 0
92 sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
93 #else
94 0, (uint8_t *)NULL,
95 #endif
96 }
97};
98
99void serial_master_init(void)
100{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
101
102void serial_slave_init(void)
103{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
104
105// 0 => no error
106// 1 => slave did not respond
107// 2 => checksum error
108int serial_update_buffers()
109{
110 int result;
111 result = soft_serial_transaction();
112 return result;
113}
114
115#endif // end of OLD API (compatible with let's split serial.c)
116////////////////////////////////////////////////////////////////////////////
117
118#define ALWAYS_INLINE __attribute__((always_inline))
119#define NO_INLINE __attribute__((noinline))
120#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
121
122// parity check
123#define ODD_PARITY 1
124#define EVEN_PARITY 0
125#define PARITY EVEN_PARITY
126
127#ifdef SERIAL_DELAY
128 // custom setup in config.h
129 // #define TID_SEND_ADJUST 2
130 // #define SERIAL_DELAY 6 // micro sec
131 // #define READ_WRITE_START_ADJUST 30 // cycles
132 // #define READ_WRITE_WIDTH_ADJUST 8 // cycles
133#else
134// ============ Standard setups ============
135
136#ifndef SELECT_SOFT_SERIAL_SPEED
137#define SELECT_SOFT_SERIAL_SPEED 1
138// 0: about 189kbps
139// 1: about 137kbps (default)
140// 2: about 75kbps
141// 3: about 39kbps
142// 4: about 26kbps
143// 5: about 20kbps
144#endif
145
146#if __GNUC__ < 6
147 #define TID_SEND_ADJUST 14
148#else
149 #define TID_SEND_ADJUST 2
150#endif
151
152#if SELECT_SOFT_SERIAL_SPEED == 0
153 // Very High speed
154 #define SERIAL_DELAY 4 // micro sec
155 #if __GNUC__ < 6
156 #define READ_WRITE_START_ADJUST 33 // cycles
157 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
158 #else
159 #define READ_WRITE_START_ADJUST 34 // cycles
160 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
161 #endif
162#elif SELECT_SOFT_SERIAL_SPEED == 1
163 // High speed
164 #define SERIAL_DELAY 6 // micro sec
165 #if __GNUC__ < 6
166 #define READ_WRITE_START_ADJUST 30 // cycles
167 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
168 #else
169 #define READ_WRITE_START_ADJUST 33 // cycles
170 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
171 #endif
172#elif SELECT_SOFT_SERIAL_SPEED == 2
173 // Middle speed
174 #define SERIAL_DELAY 12 // micro sec
175 #define READ_WRITE_START_ADJUST 30 // cycles
176 #if __GNUC__ < 6
177 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
178 #else
179 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
180 #endif
181#elif SELECT_SOFT_SERIAL_SPEED == 3
182 // Low speed
183 #define SERIAL_DELAY 24 // micro sec
184 #define READ_WRITE_START_ADJUST 30 // cycles
185 #if __GNUC__ < 6
186 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
187 #else
188 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
189 #endif
190#elif SELECT_SOFT_SERIAL_SPEED == 4
191 // Very Low speed
192 #define SERIAL_DELAY 36 // micro sec
193 #define READ_WRITE_START_ADJUST 30 // cycles
194 #if __GNUC__ < 6
195 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
196 #else
197 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
198 #endif
199#elif SELECT_SOFT_SERIAL_SPEED == 5
200 // Ultra Low speed
201 #define SERIAL_DELAY 48 // micro sec
202 #define READ_WRITE_START_ADJUST 30 // cycles
203 #if __GNUC__ < 6
204 #define READ_WRITE_WIDTH_ADJUST 3 // cycles
205 #else
206 #define READ_WRITE_WIDTH_ADJUST 7 // cycles
207 #endif
208#else
209#error invalid SELECT_SOFT_SERIAL_SPEED value
210#endif /* SELECT_SOFT_SERIAL_SPEED */
211#endif /* SERIAL_DELAY */
212
213#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
214#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
215
216#define SLAVE_INT_WIDTH_US 1
217#ifndef SERIAL_USE_MULTI_TRANSACTION
218 #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
219#else
220 #define SLAVE_INT_ACK_WIDTH_UNIT 2
221 #define SLAVE_INT_ACK_WIDTH 4
222#endif
223
224static SSTD_t *Transaction_table = NULL;
225static uint8_t Transaction_table_size = 0;
226
227inline static void serial_delay(void) ALWAYS_INLINE;
228inline static
229void serial_delay(void) {
230 _delay_us(SERIAL_DELAY);
231}
232
233inline static void serial_delay_half1(void) ALWAYS_INLINE;
234inline static
235void serial_delay_half1(void) {
236 _delay_us(SERIAL_DELAY_HALF1);
237}
238
239inline static void serial_delay_half2(void) ALWAYS_INLINE;
240inline static
241void serial_delay_half2(void) {
242 _delay_us(SERIAL_DELAY_HALF2);
243}
244
245inline static void serial_output(void) ALWAYS_INLINE;
246inline static
247void serial_output(void) {
248 SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
249}
250
251// make the serial pin an input with pull-up resistor
252inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
253inline static
254void serial_input_with_pullup(void) {
255 SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
256 SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
257}
258
259inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
260inline static
261uint8_t serial_read_pin(void) {
262 return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
263}
264
265inline static void serial_low(void) ALWAYS_INLINE;
266inline static
267void serial_low(void) {
268 SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
269}
270
271inline static void serial_high(void) ALWAYS_INLINE;
272inline static
273void serial_high(void) {
274 SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
275}
276
277void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
278{
279 Transaction_table = sstd_table;
280 Transaction_table_size = (uint8_t)sstd_table_size;
281 serial_output();
282 serial_high();
283}
284
285void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
286{
287 Transaction_table = sstd_table;
288 Transaction_table_size = (uint8_t)sstd_table_size;
289 serial_input_with_pullup();
290
291 // Enable INT0-INT3,INT6
292 EIMSK |= EIMSK_BIT;
293#if SERIAL_PIN_MASK == _BV(PE6)
294 // Trigger on falling edge of INT6
295 EICRB &= EICRx_BIT;
296#else
297 // Trigger on falling edge of INT0-INT3
298 EICRA &= EICRx_BIT;
299#endif
300}
301
302// Used by the sender to synchronize timing with the reciver.
303static void sync_recv(void) NO_INLINE;
304static
305void sync_recv(void) {
306 for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
307 }
308 // This shouldn't hang if the target disconnects because the
309 // serial line will float to high if the target does disconnect.
310 while (!serial_read_pin());
311}
312
313// Used by the reciver to send a synchronization signal to the sender.
314static void sync_send(void) NO_INLINE;
315static
316void sync_send(void) {
317 serial_low();
318 serial_delay();
319 serial_high();
320}
321
322// Reads a byte from the serial line
323static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
324static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
325 uint8_t byte, i, p, pb;
326
327 _delay_sub_us(READ_WRITE_START_ADJUST);
328 for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
329 serial_delay_half1(); // read the middle of pulses
330 if( serial_read_pin() ) {
331 byte = (byte << 1) | 1; p ^= 1;
332 } else {
333 byte = (byte << 1) | 0; p ^= 0;
334 }
335 _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
336 serial_delay_half2();
337 }
338 /* recive parity bit */
339 serial_delay_half1(); // read the middle of pulses
340 pb = serial_read_pin();
341 _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
342 serial_delay_half2();
343
344 *pterrcount += (p != pb)? 1 : 0;
345
346 return byte;
347}
348
349// Sends a byte with MSB ordering
350void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
351void serial_write_chunk(uint8_t data, uint8_t bit) {
352 uint8_t b, p;
353 for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
354 if(data & b) {
355 serial_high(); p ^= 1;
356 } else {
357 serial_low(); p ^= 0;
358 }
359 serial_delay();
360 }
361 /* send parity bit */
362 if(p & 1) { serial_high(); }
363 else { serial_low(); }
364 serial_delay();
365
366 serial_low(); // sync_send() / senc_recv() need raise edge
367}
368
369static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
370static
371void serial_send_packet(uint8_t *buffer, uint8_t size) {
372 for (uint8_t i = 0; i < size; ++i) {
373 uint8_t data;
374 data = buffer[i];
375 sync_send();
376 serial_write_chunk(data,8);
377 }
378}
379
380static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
381static
382uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
383 uint8_t pecount = 0;
384 for (uint8_t i = 0; i < size; ++i) {
385 uint8_t data;
386 sync_recv();
387 data = serial_read_chunk(&pecount, 8);
388 buffer[i] = data;
389 }
390 return pecount == 0;
391}
392
393inline static
394void change_sender2reciver(void) {
395 sync_send(); //0
396 serial_delay_half1(); //1
397 serial_low(); //2
398 serial_input_with_pullup(); //2
399 serial_delay_half1(); //3
400}
401
402inline static
403void change_reciver2sender(void) {
404 sync_recv(); //0
405 serial_delay(); //1
406 serial_low(); //3
407 serial_output(); //3
408 serial_delay_half1(); //4
409}
410
411static inline uint8_t nibble_bits_count(uint8_t bits)
412{
413 bits = (bits & 0x5) + (bits >> 1 & 0x5);
414 bits = (bits & 0x3) + (bits >> 2 & 0x3);
415 return bits;
416}
417
418// interrupt handle to be used by the target device
419ISR(SERIAL_PIN_INTERRUPT) {
420
421#ifndef SERIAL_USE_MULTI_TRANSACTION
422 serial_low();
423 serial_output();
424 SSTD_t *trans = Transaction_table;
425#else
426 // recive transaction table index
427 uint8_t tid, bits;
428 uint8_t pecount = 0;
429 sync_recv();
430 bits = serial_read_chunk(&pecount,7);
431 tid = bits>>3;
432 bits = (bits&7) != nibble_bits_count(tid);
433 if( bits || pecount> 0 || tid > Transaction_table_size ) {
434 return;
435 }
436 serial_delay_half1();
437
438 serial_high(); // response step1 low->high
439 serial_output();
440 _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
441 SSTD_t *trans = &Transaction_table[tid];
442 serial_low(); // response step2 ack high->low
443#endif
444
445 // target send phase
446 if( trans->target2initiator_buffer_size > 0 )
447 serial_send_packet((uint8_t *)trans->target2initiator_buffer,
448 trans->target2initiator_buffer_size);
449 // target switch to input
450 change_sender2reciver();
451
452 // target recive phase
453 if( trans->initiator2target_buffer_size > 0 ) {
454 if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
455 trans->initiator2target_buffer_size) ) {
456 *trans->status = TRANSACTION_ACCEPTED;
457 } else {
458 *trans->status = TRANSACTION_DATA_ERROR;
459 }
460 } else {
461 *trans->status = TRANSACTION_ACCEPTED;
462 }
463
464 sync_recv(); //weit initiator output to high
465}
466
467/////////
468// start transaction by initiator
469//
470// int soft_serial_transaction(int sstd_index)
471//
472// Returns:
473// TRANSACTION_END
474// TRANSACTION_NO_RESPONSE
475// TRANSACTION_DATA_ERROR
476// this code is very time dependent, so we need to disable interrupts
477#ifndef SERIAL_USE_MULTI_TRANSACTION
478int soft_serial_transaction(void) {
479 SSTD_t *trans = Transaction_table;
480#else
481int soft_serial_transaction(int sstd_index) {
482 if( sstd_index > Transaction_table_size )
483 return TRANSACTION_TYPE_ERROR;
484 SSTD_t *trans = &Transaction_table[sstd_index];
485#endif
486 cli();
487
488 // signal to the target that we want to start a transaction
489 serial_output();
490 serial_low();
491 _delay_us(SLAVE_INT_WIDTH_US);
492
493#ifndef SERIAL_USE_MULTI_TRANSACTION
494 // wait for the target response
495 serial_input_with_pullup();
496 _delay_us(SLAVE_INT_RESPONSE_TIME);
497
498 // check if the target is present
499 if (serial_read_pin()) {
500 // target failed to pull the line low, assume not present
501 serial_output();
502 serial_high();
503 *trans->status = TRANSACTION_NO_RESPONSE;
504 sei();
505 return TRANSACTION_NO_RESPONSE;
506 }
507
508#else
509 // send transaction table index
510 int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
511 sync_send();
512 _delay_sub_us(TID_SEND_ADJUST);
513 serial_write_chunk(tid, 7);
514 serial_delay_half1();
515
516 // wait for the target response (step1 low->high)
517 serial_input_with_pullup();
518 while( !serial_read_pin() ) {
519 _delay_sub_us(2);
520 }
521
522 // check if the target is present (step2 high->low)
523 for( int i = 0; serial_read_pin(); i++ ) {
524 if (i > SLAVE_INT_ACK_WIDTH + 1) {
525 // slave failed to pull the line low, assume not present
526 serial_output();
527 serial_high();
528 *trans->status = TRANSACTION_NO_RESPONSE;
529 sei();
530 return TRANSACTION_NO_RESPONSE;
531 }
532 _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
533 }
534#endif
535
536 // initiator recive phase
537 // if the target is present syncronize with it
538 if( trans->target2initiator_buffer_size > 0 ) {
539 if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
540 trans->target2initiator_buffer_size) ) {
541 serial_output();
542 serial_high();
543 *trans->status = TRANSACTION_DATA_ERROR;
544 sei();
545 return TRANSACTION_DATA_ERROR;
546 }
547 }
548
549 // initiator switch to output
550 change_reciver2sender();
551
552 // initiator send phase
553 if( trans->initiator2target_buffer_size > 0 ) {
554 serial_send_packet((uint8_t *)trans->initiator2target_buffer,
555 trans->initiator2target_buffer_size);
556 }
557
558 // always, release the line when not in use
559 sync_send();
560
561 *trans->status = TRANSACTION_END;
562 sei();
563 return TRANSACTION_END;
564}
565
566#ifdef SERIAL_USE_MULTI_TRANSACTION
567int soft_serial_get_and_clean_status(int sstd_index) {
568 SSTD_t *trans = &Transaction_table[sstd_index];
569 cli();
570 int retval = *trans->status;
571 *trans->status = 0;;
572 sei();
573 return retval;
574}
575#endif
576
577#endif
578
579// Helix serial.c history
580// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
581// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
582// (adjusted with avr-gcc 4.9.2)
583// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
584// (adjusted with avr-gcc 4.9.2)
585// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
586// (adjusted with avr-gcc 4.9.2)
587// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
588// (adjusted with avr-gcc 7.3.0)
589// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
590// (adjusted with avr-gcc 5.4.0, 7.3.0)
diff --git a/keyboards/naked60/serial.h b/keyboards/naked60/serial.h
new file mode 100644
index 000000000..5deaf789e
--- /dev/null
+++ b/keyboards/naked60/serial.h
@@ -0,0 +1,86 @@
1#pragma once
2
3#include <stdbool.h>
4
5// /////////////////////////////////////////////////////////////////
6// Need Soft Serial defines in config.h
7// /////////////////////////////////////////////////////////////////
8// ex.
9// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
10// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
11// // 1: about 137kbps (default)
12// // 2: about 75kbps
13// // 3: about 39kbps
14// // 4: about 26kbps
15// // 5: about 20kbps
16//
17// //// USE OLD API (compatible with let's split serial.c)
18// ex.
19// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
20// #define SERIAL_MASTER_BUFFER_LENGTH 1
21//
22// //// USE NEW API
23// //// USE simple API (using signle-type transaction function)
24// #define SERIAL_USE_SINGLE_TRANSACTION
25// //// USE flexible API (using multi-type transaction function)
26// #define SERIAL_USE_MULTI_TRANSACTION
27//
28// /////////////////////////////////////////////////////////////////
29
30
31//////////////// for backward compatibility ////////////////////////////////
32#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
33/* --- USE OLD API (compatible with let's split serial.c) */
34 #if SERIAL_SLAVE_BUFFER_LENGTH > 0
35 extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
36 #endif
37 #if SERIAL_MASTER_BUFFER_LENGTH > 0
38 extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
39 #endif
40
41 void serial_master_init(void);
42 void serial_slave_init(void);
43 int serial_update_buffers(void);
44
45#endif // end of USE OLD API
46////////////////////////////////////////////////////////////////////////////
47
48// Soft Serial Transaction Descriptor
49typedef struct _SSTD_t {
50 uint8_t *status;
51 uint8_t initiator2target_buffer_size;
52 uint8_t *initiator2target_buffer;
53 uint8_t target2initiator_buffer_size;
54 uint8_t *target2initiator_buffer;
55} SSTD_t;
56#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
57
58// initiator is transaction start side
59void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
60// target is interrupt accept side
61void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
62
63// initiator resullt
64#define TRANSACTION_END 0
65#define TRANSACTION_NO_RESPONSE 0x1
66#define TRANSACTION_DATA_ERROR 0x2
67#define TRANSACTION_TYPE_ERROR 0x4
68#ifndef SERIAL_USE_MULTI_TRANSACTION
69int soft_serial_transaction(void);
70#else
71int soft_serial_transaction(int sstd_index);
72#endif
73
74// target status
75// *SSTD_t.status has
76// initiator:
77// TRANSACTION_END
78// or TRANSACTION_NO_RESPONSE
79// or TRANSACTION_DATA_ERROR
80// target:
81// TRANSACTION_DATA_ERROR
82// or TRANSACTION_ACCEPTED
83#define TRANSACTION_ACCEPTED 0x8
84#ifdef SERIAL_USE_MULTI_TRANSACTION
85int soft_serial_get_and_clean_status(int sstd_index);
86#endif