aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWhale Mo <ncwhale@gmail.com>2020-08-07 13:47:59 +0800
committerGitHub <noreply@github.com>2020-08-06 22:47:59 -0700
commit871d35aa432f149b67d986b584bb31b80bd1573e (patch)
tree138e93f02803e89640b0d2cf55939885ea4eb932
parent2d8703f6cc61918aaefd3ce04a064a82ab238140 (diff)
downloadqmk_firmware-871d35aa432f149b67d986b584bb31b80bd1573e.tar.gz
qmk_firmware-871d35aa432f149b67d986b584bb31b80bd1573e.zip
[Keyboard] Add Whale's Split Keyboard(ver.3) (#9859)
Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
-rw-r--r--keyboards/whale/sk/config.h23
-rw-r--r--keyboards/whale/sk/keymaps/default/keymap.c34
-rw-r--r--keyboards/whale/sk/readme.md15
-rw-r--r--keyboards/whale/sk/rules.mk1
-rw-r--r--keyboards/whale/sk/sk.c1
-rw-r--r--keyboards/whale/sk/sk.h7
-rw-r--r--keyboards/whale/sk/v3/config.h53
-rw-r--r--keyboards/whale/sk/v3/info.json970
-rw-r--r--keyboards/whale/sk/v3/rules.mk25
-rw-r--r--keyboards/whale/sk/v3/v3.c134
-rw-r--r--keyboards/whale/sk/v3/v3.h65
11 files changed, 1328 insertions, 0 deletions
diff --git a/keyboards/whale/sk/config.h b/keyboards/whale/sk/config.h
new file mode 100644
index 000000000..a3989df89
--- /dev/null
+++ b/keyboards/whale/sk/config.h
@@ -0,0 +1,23 @@
1/* Copyright 2020 Whale Mo
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xFEED
23#define PRODUCT_ID 0x0495
diff --git a/keyboards/whale/sk/keymaps/default/keymap.c b/keyboards/whale/sk/keymaps/default/keymap.c
new file mode 100644
index 000000000..249b1955e
--- /dev/null
+++ b/keyboards/whale/sk/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
1/* Copyright 2020 Whale Mo
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21};
22
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24 [_BASE] = LAYOUT_all(
25 KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_HOME, KC_END, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
26 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_PGUP, KC_PGDOWN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
27 KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL, KC_BSPC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
28 KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT, KC_RIGHT, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSHIFT,
29 KC_LBRACKET, KC_LALT, KC_LWIN, KC_APP, KC_HENK, KC_MENU, KC_MENU, KC_MHEN, KC_APP, KC_RWIN, KC_RALT, KC_RBRACKET,
30 KC_F1, KC_F2, KC_F7, KC_F8,
31 KC_SPC, KC_F3, KC_F4, KC_F9, KC_F10, KC_SPC,
32 KC_F5, KC_F6, KC_F11, KC_F12
33 ),
34};
diff --git a/keyboards/whale/sk/readme.md b/keyboards/whale/sk/readme.md
new file mode 100644
index 000000000..ab2121a9c
--- /dev/null
+++ b/keyboards/whale/sk/readme.md
@@ -0,0 +1,15 @@
1# Splite Keyboard
2
3![Split Keyboard Default Layout](https://github.com/ncwhale/Keyboard_Design/raw/master/Splite-Keyboard-v3/Keyboard-layout.png)
4
5A splite keyboard (7x6x2) made by Whale Mo.
6
7* Keyboard Maintainer: [Whale Mo](https://github.com/ncwhale)
8* Hardware Supported: [Opensource Design](https://github.com/ncwhale/Keyboard_Design), Sparkfun Micro Pro
9* Hardware Availability: On the way.
10
11Make example for this keyboard (after setting up your build environment):
12
13 make whale/sk:default
14
15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/whale/sk/rules.mk b/keyboards/whale/sk/rules.mk
new file mode 100644
index 000000000..1a4ddedfa
--- /dev/null
+++ b/keyboards/whale/sk/rules.mk
@@ -0,0 +1 @@
DEFAULT_FOLDER = whale/sk/v3
diff --git a/keyboards/whale/sk/sk.c b/keyboards/whale/sk/sk.c
new file mode 100644
index 000000000..c151f73fb
--- /dev/null
+++ b/keyboards/whale/sk/sk.c
@@ -0,0 +1 @@
#include "sk.h"
diff --git a/keyboards/whale/sk/sk.h b/keyboards/whale/sk/sk.h
new file mode 100644
index 000000000..d9c75f15b
--- /dev/null
+++ b/keyboards/whale/sk/sk.h
@@ -0,0 +1,7 @@
1#pragma once
2
3#include "quantum.h"
4
5#ifdef KEYBOARD_whale_sk_v3
6 #include "v3.h"
7#endif
diff --git a/keyboards/whale/sk/v3/config.h b/keyboards/whale/sk/v3/config.h
new file mode 100644
index 000000000..8fff28ca7
--- /dev/null
+++ b/keyboards/whale/sk/v3/config.h
@@ -0,0 +1,53 @@
1/*
2Copyright 2020 Whale Mo
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define DEVICE_VER 0x0003
24#define MANUFACTURER Whale Mo
25#define PRODUCT Splite Keyboard v3
26
27/* key matrix size */
28/* Notice: HALF of row on the slave side */
29#define MATRIX_ROWS 12
30#define MATRIX_COLS 7
31
32/*
33 * Keyboard Matrix Assignments
34 *
35 * Change this to how you wired your keyboard
36 * COLS: AVR pins used for columns, left to right
37 * ROWS: AVR pins used for rows, top to bottom
38 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
39 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
40 *
41 */
42#define MATRIX_ROW_PINS { B1, B2, B3, B4, B5, B6 }
43#define MATRIX_COL_PINS { D4, C6, D7, E6, F4, F5, F6 }
44
45/* COL2ROW, ROW2COL*/
46#define DIODE_DIRECTION COL2ROW
47
48/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
49#define DEBOUNCE 3
50
51/* disable these deprecated features by default */
52#define NO_ACTION_MACRO
53#define NO_ACTION_FUNCTION
diff --git a/keyboards/whale/sk/v3/info.json b/keyboards/whale/sk/v3/info.json
new file mode 100644
index 000000000..b03534650
--- /dev/null
+++ b/keyboards/whale/sk/v3/info.json
@@ -0,0 +1,970 @@
1{
2 "keyboard_name": "Splite Keyboard v3",
3 "url": "https://github.com/ncwhale/Keyboard_Design/tree/master/Splite-Keyboard-v3",
4 "maintainer": "ncwhale",
5 "width": 20,
6 "height": 8,
7 "key_count": 84,
8 "layouts": {
9 "LAYOUT_all": {
10 "layout": [
11 {
12 "label": "Esc",
13 "x": 0.25,
14 "y": 0
15 },
16 {
17 "label": "~",
18 "x": 1.25,
19 "y": 0
20 },
21 {
22 "label": "1",
23 "x": 2.25,
24 "y": 0
25 },
26 {
27 "label": "2",
28 "x": 3.25,
29 "y": 0
30 },
31 {
32 "label": "3",
33 "x": 4.25,
34 "y": 0
35 },
36 {
37 "label": "4",
38 "x": 5.25,
39 "y": 0
40 },
41 {
42 "label": "5",
43 "x": 6.25,
44 "y": 0
45 },
46 {
47 "label": "Home",
48 "x": 7.25,
49 "y": 0,
50 "w": 1.25
51 },
52 {
53 "label": "End",
54 "x": 11.5,
55 "y": 0,
56 "w": 1.25
57 },
58 {
59 "label": "6",
60 "x": 12.75,
61 "y": 0
62 },
63 {
64 "label": "7",
65 "x": 13.75,
66 "y": 0
67 },
68 {
69 "label": "8",
70 "x": 14.75,
71 "y": 0
72 },
73 {
74 "label": "9",
75 "x": 15.75,
76 "y": 0
77 },
78 {
79 "label": "0",
80 "x": 16.75,
81 "y": 0
82 },
83 {
84 "label": "-",
85 "x": 17.75,
86 "y": 0
87 },
88 {
89 "label": "=",
90 "x": 18.75,
91 "y": 0
92 },
93 {
94 "label": "Tab",
95 "x": 0.5,
96 "y": 1,
97 "w": 1.5
98 },
99 {
100 "label": "Q",
101 "x": 2,
102 "y": 1
103 },
104 {
105 "label": "W",
106 "x": 3,
107 "y": 1
108 },
109 {
110 "label": "E",
111 "x": 4,
112 "y": 1
113 },
114 {
115 "label": "R",
116 "x": 5,
117 "y": 1
118 },
119 {
120 "label": "T",
121 "x": 6,
122 "y": 1
123 },
124 {
125 "label": "PgUp",
126 "x": 7,
127 "y": 1,
128 "w": 1.5
129 },
130 {
131 "label": "PgDn",
132 "x": 11.5,
133 "y": 1,
134 "w": 1.5
135 },
136 {
137 "label": "Y",
138 "x": 13,
139 "y": 1
140 },
141 {
142 "label": "U",
143 "x": 14,
144 "y": 1
145 },
146 {
147 "label": "I",
148 "x": 15,
149 "y": 1
150 },
151 {
152 "label": "O",
153 "x": 16,
154 "y": 1
155 },
156 {
157 "label": "P",
158 "x": 17,
159 "y": 1
160 },
161 {
162 "label": "\\",
163 "x": 18,
164 "y": 1,
165 "w": 1.5
166 },
167 {
168 "label": "Control",
169 "x": 0.25,
170 "y": 2,
171 "w": 1.5
172 },
173 {
174 "label": "A",
175 "x": 1.75,
176 "y": 2
177 },
178 {
179 "label": "S",
180 "x": 2.75,
181 "y": 2
182 },
183 {
184 "label": "D",
185 "x": 3.75,
186 "y": 2
187 },
188 {
189 "label": "F",
190 "x": 4.75,
191 "y": 2
192 },
193 {
194 "label": "G",
195 "x": 5.75,
196 "y": 2
197 },
198 {
199 "label": "Del",
200 "x": 6.75,
201 "y": 2,
202 "w": 1.5
203 },
204 {
205 "label": "BS",
206 "x": 11.75,
207 "y": 2,
208 "w": 1.5
209 },
210 {
211 "label": "H",
212 "x": 13.25,
213 "y": 2
214 },
215 {
216 "label": "J",
217 "x": 14.25,
218 "y": 2
219 },
220 {
221 "label": "K",
222 "x": 15.25,
223 "y": 2
224 },
225 {
226 "label": "L",
227 "x": 16.25,
228 "y": 2
229 },
230 {
231 "label": ";",
232 "x": 17.25,
233 "y": 2
234 },
235 {
236 "label": "Enter",
237 "x": 18.25,
238 "y": 2,
239 "w": 1.5
240 },
241 {
242 "label": "Shift",
243 "x": 0,
244 "y": 3,
245 "w": 1.5
246 },
247 {
248 "label": "Z",
249 "x": 1.5,
250 "y": 3
251 },
252 {
253 "label": "X",
254 "x": 2.5,
255 "y": 3
256 },
257 {
258 "label": "C",
259 "x": 3.5,
260 "y": 3
261 },
262 {
263 "label": "V",
264 "x": 4.5,
265 "y": 3
266 },
267 {
268 "label": "B",
269 "x": 5.5,
270 "y": 3
271 },
272 {
273 "label": "Fn",
274 "x": 6.5,
275 "y": 3
276 },
277 {
278 "label": "Fn",
279 "x": 12.5,
280 "y": 3
281 },
282 {
283 "label": "N",
284 "x": 13.5,
285 "y": 3
286 },
287 {
288 "label": "M",
289 "x": 14.5,
290 "y": 3
291 },
292 {
293 "label": ",",
294 "x": 15.5,
295 "y": 3
296 },
297 {
298 "label": ".",
299 "x": 16.5,
300 "y": 3
301 },
302 {
303 "label": "/",
304 "x": 17.5,
305 "y": 3
306 },
307 {
308 "label": "Shift",
309 "x": 18.5,
310 "y": 3,
311 "w": 1.5
312 },
313 {
314 "label": "Fn",
315 "x": 0,
316 "y": 4
317 },
318 {
319 "label": "Alt",
320 "x": 1,
321 "y": 4
322 },
323 {
324 "label": "Meta",
325 "x": 2,
326 "y": 4
327 },
328 {
329 "label": "TF",
330 "x": 3,
331 "y": 4
332 },
333 {
334 "label": "QB",
335 "x": 4,
336 "y": 4
337 },
338 {
339 "label": "Menu",
340 "x": 5,
341 "y": 4
342 },
343 {
344 "label": "Menu",
345 "x": 14,
346 "y": 4
347 },
348 {
349 "label": "QB",
350 "x": 15,
351 "y": 4
352 },
353 {
354 "label": "TF",
355 "x": 16,
356 "y": 4
357 },
358 {
359 "label": "Meta",
360 "x": 17,
361 "y": 4
362 },
363 {
364 "label": "Alt",
365 "x": 18,
366 "y": 4
367 },
368 {
369 "label": "Fn",
370 "x": 19,
371 "y": 4
372 },
373 {
374 "label": "F1",
375 "x": 7.5,
376 "y": 4,
377 "r": 30,
378 "rx": 7,
379 "ry": 3.5
380 },
381 {
382 "label": "F2",
383 "x": 8.5,
384 "y": 4,
385 "r": 30,
386 "rx": 7,
387 "ry": 3.5
388 },
389 {
390 "x": 6.5,
391 "y": 5,
392 "h": 2,
393 "r": 30,
394 "rx": 7,
395 "ry": 3.5
396 },
397 {
398 "label": "F3",
399 "x": 7.5,
400 "y": 5,
401 "r": 30,
402 "rx": 7,
403 "ry": 3.5
404 },
405 {
406 "label": "F4",
407 "x": 8.5,
408 "y": 5,
409 "r": 30,
410 "rx": 7,
411 "ry": 3.5
412 },
413 {
414 "label": "F5",
415 "x": 7.5,
416 "y": 6,
417 "r": 30,
418 "rx": 7,
419 "ry": 3.5
420 },
421 {
422 "label": "F6",
423 "x": 8.5,
424 "y": 6,
425 "r": 30,
426 "rx": 7,
427 "ry": 3.5
428 },
429 {
430 "label": "F7",
431 "x": 10.5,
432 "y": 4,
433 "r": -30,
434 "rx": 13,
435 "ry": 3.5
436 },
437 {
438 "label": "F8",
439 "x": 11.5,
440 "y": 4,
441 "r": -30,
442 "rx": 13,
443 "ry": 3.5
444 },
445 {
446 "label": "F9",
447 "x": 10.5,
448 "y": 5,
449 "r": -30,
450 "rx": 13,
451 "ry": 3.5
452 },
453 {
454 "label": "F10",
455 "x": 11.5,
456 "y": 5,
457 "r": -30,
458 "rx": 13,
459 "ry": 3.5
460 },
461 {
462 "x": 12.5,
463 "y": 5,
464 "h": 2,
465 "r": -30,
466 "rx": 13,
467 "ry": 3.5
468 },
469 {
470 "label": "F11",
471 "x": 10.5,
472 "y": 6,
473 "r": -30,
474 "rx": 13,
475 "ry": 3.5
476 },
477 {
478 "label": "F12",
479 "x": 11.5,
480 "y": 6,
481 "r": -30,
482 "rx": 13,
483 "ry": 3.5
484 }
485 ]
486 },
487 "LAYOUT_left_half_only": {
488 "layout": [
489 {
490 "label": "Esc",
491 "x": 0.25,
492 "y": 0
493 },
494 {
495 "label": "~",
496 "x": 1.25,
497 "y": 0
498 },
499 {
500 "label": "1",
501 "x": 2.25,
502 "y": 0
503 },
504 {
505 "label": "2",
506 "x": 3.25,
507 "y": 0
508 },
509 {
510 "label": "3",
511 "x": 4.25,
512 "y": 0
513 },
514 {
515 "label": "4",
516 "x": 5.25,
517 "y": 0
518 },
519 {
520 "label": "5",
521 "x": 6.25,
522 "y": 0
523 },
524 {
525 "label": "Home",
526 "x": 7.25,
527 "y": 0,
528 "w": 1.25
529 },
530 {
531 "label": "Tab",
532 "x": 0.5,
533 "y": 1,
534 "w": 1.5
535 },
536 {
537 "label": "Q",
538 "x": 2,
539 "y": 1
540 },
541 {
542 "label": "W",
543 "x": 3,
544 "y": 1
545 },
546 {
547 "label": "E",
548 "x": 4,
549 "y": 1
550 },
551 {
552 "label": "R",
553 "x": 5,
554 "y": 1
555 },
556 {
557 "label": "T",
558 "x": 6,
559 "y": 1
560 },
561 {
562 "label": "PgUp",
563 "x": 7,
564 "y": 1,
565 "w": 1.5
566 },
567 {
568 "label": "Control",
569 "x": 0.25,
570 "y": 2,
571 "w": 1.5
572 },
573 {
574 "label": "A",
575 "x": 1.75,
576 "y": 2
577 },
578 {
579 "label": "S",
580 "x": 2.75,
581 "y": 2
582 },
583 {
584 "label": "D",
585 "x": 3.75,
586 "y": 2
587 },
588 {
589 "label": "F",
590 "x": 4.75,
591 "y": 2
592 },
593 {
594 "label": "G",
595 "x": 5.75,
596 "y": 2
597 },
598 {
599 "label": "Del",
600 "x": 6.75,
601 "y": 2,
602 "w": 1.5
603 },
604 {
605 "label": "Shift",
606 "x": 0,
607 "y": 3,
608 "w": 1.5
609 },
610 {
611 "label": "Z",
612 "x": 1.5,
613 "y": 3
614 },
615 {
616 "label": "X",
617 "x": 2.5,
618 "y": 3
619 },
620 {
621 "label": "C",
622 "x": 3.5,
623 "y": 3
624 },
625 {
626 "label": "V",
627 "x": 4.5,
628 "y": 3
629 },
630 {
631 "label": "B",
632 "x": 5.5,
633 "y": 3
634 },
635 {
636 "label": "Fn",
637 "x": 6.5,
638 "y": 3
639 },
640 {
641 "label": "Fn",
642 "x": 0,
643 "y": 4
644 },
645 {
646 "label": "Alt",
647 "x": 1,
648 "y": 4
649 },
650 {
651 "label": "Meta",
652 "x": 2,
653 "y": 4
654 },
655 {
656 "label": "TF",
657 "x": 3,
658 "y": 4
659 },
660 {
661 "label": "QB",
662 "x": 4,
663 "y": 4
664 },
665 {
666 "label": "Menu",
667 "x": 5,
668 "y": 4
669 },
670 {
671 "label": "F1",
672 "x": 7.5,
673 "y": 4,
674 "r": 30,
675 "rx": 7,
676 "ry": 3.5
677 },
678 {
679 "label": "F2",
680 "x": 8.5,
681 "y": 4,
682 "r": 30,
683 "rx": 7,
684 "ry": 3.5
685 },
686 {
687 "x": 6.5,
688 "y": 5,
689 "h": 2,
690 "r": 30,
691 "rx": 7,
692 "ry": 3.5
693 },
694 {
695 "label": "F3",
696 "x": 7.5,
697 "y": 5,
698 "r": 30,
699 "rx": 7,
700 "ry": 3.5
701 },
702 {
703 "label": "F4",
704 "x": 8.5,
705 "y": 5,
706 "r": 30,
707 "rx": 7,
708 "ry": 3.5
709 },
710 {
711 "label": "F5",
712 "x": 7.5,
713 "y": 6,
714 "r": 30,
715 "rx": 7,
716 "ry": 3.5
717 },
718 {
719 "label": "F6",
720 "x": 8.5,
721 "y": 6,
722 "r": 30,
723 "rx": 7,
724 "ry": 3.5
725 }
726 ]
727 },
728 "LAYOUT_right_half_only": {
729 "layout": [
730 {
731 "label": "End",
732 "x": 11.5,
733 "y": 0,
734 "w": 1.25
735 },
736 {
737 "label": "6",
738 "x": 12.75,
739 "y": 0
740 },
741 {
742 "label": "7",
743 "x": 13.75,
744 "y": 0
745 },
746 {
747 "label": "8",
748 "x": 14.75,
749 "y": 0
750 },
751 {
752 "label": "9",
753 "x": 15.75,
754 "y": 0
755 },
756 {
757 "label": "0",
758 "x": 16.75,
759 "y": 0
760 },
761 {
762 "label": "-",
763 "x": 17.75,
764 "y": 0
765 },
766 {
767 "label": "=",
768 "x": 18.75,
769 "y": 0
770 },
771 {
772 "label": "PgDn",
773 "x": 11.5,
774 "y": 1,
775 "w": 1.5
776 },
777 {
778 "label": "Y",
779 "x": 13,
780 "y": 1
781 },
782 {
783 "label": "U",
784 "x": 14,
785 "y": 1
786 },
787 {
788 "label": "I",
789 "x": 15,
790 "y": 1
791 },
792 {
793 "label": "O",
794 "x": 16,
795 "y": 1
796 },
797 {
798 "label": "P",
799 "x": 17,
800 "y": 1
801 },
802 {
803 "label": "\\",
804 "x": 18,
805 "y": 1,
806 "w": 1.5
807 },
808 {
809 "label": "BS",
810 "x": 11.75,
811 "y": 2,
812 "w": 1.5
813 },
814 {
815 "label": "H",
816 "x": 13.25,
817 "y": 2
818 },
819 {
820 "label": "J",
821 "x": 14.25,
822 "y": 2
823 },
824 {
825 "label": "K",
826 "x": 15.25,
827 "y": 2
828 },
829 {
830 "label": "L",
831 "x": 16.25,
832 "y": 2
833 },
834 {
835 "label": ";",
836 "x": 17.25,
837 "y": 2
838 },
839 {
840 "label": "Enter",
841 "x": 18.25,
842 "y": 2,
843 "w": 1.5
844 },
845 {
846 "label": "Fn",
847 "x": 12.5,
848 "y": 3
849 },
850 {
851 "label": "N",
852 "x": 13.5,
853 "y": 3
854 },
855 {
856 "label": "M",
857 "x": 14.5,
858 "y": 3
859 },
860 {
861 "label": ",",
862 "x": 15.5,
863 "y": 3
864 },
865 {
866 "label": ".",
867 "x": 16.5,
868 "y": 3
869 },
870 {
871 "label": "/",
872 "x": 17.5,
873 "y": 3
874 },
875 {
876 "label": "Shift",
877 "x": 18.5,
878 "y": 3,
879 "w": 1.5
880 },
881 {
882 "label": "Menu",
883 "x": 14,
884 "y": 4
885 },
886 {
887 "label": "QB",
888 "x": 15,
889 "y": 4
890 },
891 {
892 "label": "TF",
893 "x": 16,
894 "y": 4
895 },
896 {
897 "label": "Meta",
898 "x": 17,
899 "y": 4
900 },
901 {
902 "label": "Alt",
903 "x": 18,
904 "y": 4
905 },
906 {
907 "label": "Fn",
908 "x": 19,
909 "y": 4
910 },
911 {
912 "label": "F7",
913 "x": 10.5,
914 "y": 4,
915 "r": -30,
916 "rx": 13,
917 "ry": 3.5
918 },
919 {
920 "label": "F8",
921 "x": 11.5,
922 "y": 4,
923 "r": -30,
924 "rx": 13,
925 "ry": 3.5
926 },
927 {
928 "label": "F9",
929 "x": 10.5,
930 "y": 5,
931 "r": -30,
932 "rx": 13,
933 "ry": 3.5
934 },
935 {
936 "label": "F10",
937 "x": 11.5,
938 "y": 5,
939 "r": -30,
940 "rx": 13,
941 "ry": 3.5
942 },
943 {
944 "x": 12.5,
945 "y": 5,
946 "h": 2,
947 "r": -30,
948 "rx": 13,
949 "ry": 3.5
950 },
951 {
952 "label": "F11",
953 "x": 10.5,
954 "y": 6,
955 "r": -30,
956 "rx": 13,
957 "ry": 3.5
958 },
959 {
960 "label": "F12",
961 "x": 11.5,
962 "y": 6,
963 "r": -30,
964 "rx": 13,
965 "ry": 3.5
966 }
967 ]
968 }
969 }
970}
diff --git a/keyboards/whale/sk/v3/rules.mk b/keyboards/whale/sk/v3/rules.mk
new file mode 100644
index 000000000..cbb4c8dc5
--- /dev/null
+++ b/keyboards/whale/sk/v3/rules.mk
@@ -0,0 +1,25 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23
24SPLIT_KEYBOARD = yes
25SPLIT_TRANSPORT = custom
diff --git a/keyboards/whale/sk/v3/v3.c b/keyboards/whale/sk/v3/v3.c
new file mode 100644
index 000000000..30ffc4dcc
--- /dev/null
+++ b/keyboards/whale/sk/v3/v3.c
@@ -0,0 +1,134 @@
1#include "v3.h"
2
3#if defined(__AVR__)
4# include <avr/io.h>
5# include <avr/interrupt.h>
6#endif
7
8#define ROWS_PER_HAND (MATRIX_ROWS / 2)
9#define SLAVE_MATRIX_SYNC_ADDR (0x01)
10
11typedef struct {
12 char* buffer;
13 size_t count;
14 bool* flag;
15} transmit_status;
16
17transmit_status irx = {}, itx = {};
18
19// Buffer for master/slave matrix scan transmit.
20// Master: receive buffer.
21// Slave: transmit buffer.
22matrix_row_t sync_matrix[ROWS_PER_HAND];
23bool matrix_synced = false;
24
25void USART_init(uint16_t baud) {
26 cli();
27
28 // UBRR1H = (unsigned char)(baud >>8);
29 // UBRR1L = (unsigned char)(baud);
30 UBRR1 = baud;
31 // Enable U2X1 for double speed.
32 UCSR1A = (1 << U2X1);
33 // Enable RX/TX, 9N1 mode
34 UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1) | (1 << TXCIE1) | (1 << UCSZ12);
35 UCSR1C = (1 << UCSZ10) | (1 << UCSZ11);
36 sei();
37}
38
39ISR(USART1_RX_vect) {
40 // read data from reg.
41 uint8_t status = UCSR1A;
42 uint8_t high_bit = UCSR1B;
43 uint8_t low_data = UDR1;
44 if (status & ((1 << FE1) | (1 << DOR1) | (1 << UPE1))) {
45 // Something error happen, ignore this package.
46 irx.count = 0;
47 return;
48 }
49
50 // Is it a addr? (9th bit is one/zero?)
51 if (high_bit & (1 << RXB81)) {
52 // data is addr. prepend for receive.
53 switch (low_data) {
54 case SLAVE_MATRIX_SYNC_ADDR:
55 irx.buffer = (char *)sync_matrix;
56 irx.count = sizeof(sync_matrix) * sizeof(matrix_row_t);
57 irx.flag = &matrix_synced;
58 break;
59
60 default:
61 // ignore this package.
62 irx.count = 0;
63 break;
64 }
65
66 } else if (irx.count > 0) {
67 *irx.buffer = low_data;
68 ++irx.buffer;
69 if (--irx.count == 0 && irx.flag != NULL) {
70 *irx.flag = true;
71 }
72 }
73}
74
75// TX complete
76ISR(USART1_TX_vect) {
77 // Is in transmit?
78 if (itx.count > 0) {
79 // Send data.
80 UCSR1B &= ~(1 << TXB81);
81 UDR1 = *itx.buffer;
82
83 // Move to next char.
84 ++itx.buffer;
85 if (--itx.count == 0) {
86 *itx.flag = true;
87 }
88 }
89 // TODO: read queue/register for next message.
90}
91
92// return: queue depth.
93int send_packet(uint8_t addr, char* buffer, size_t length, bool* flag) {
94 // See if we can start transmit right now.
95 if ((itx.count == 0) && (UCSR1A & (1 << UDRE1))) {
96 // Ready to write.
97 // Prepend registers.
98 itx.buffer = buffer;
99 itx.count = length;
100 itx.flag = flag;
101
102 // Write addr to kick start transmit.
103 UCSR1B |= (1 << TXB81);
104 UDR1 = addr;
105 // TODO: put request in queue;
106 // }else{
107 }
108
109 return 0;
110}
111
112void transport_master_init(void) { USART_init(0); }
113
114void transport_slave_init(void) { USART_init(0); }
115
116// returns false if valid data not received from slave
117bool transport_master(matrix_row_t matrix[]) {
118 if (matrix_synced) {
119 for (uint8_t i = 0; i < ROWS_PER_HAND; ++i) {
120 matrix[i] = sync_matrix[i];
121 }
122 matrix_synced = false;
123 return true;
124 }
125 return false;
126}
127
128void transport_slave(matrix_row_t matrix[]) {
129 for (uint8_t i = 0; i < ROWS_PER_HAND; ++i) {
130 sync_matrix[i] = matrix[i];
131 }
132 matrix_synced = false;
133 send_packet(SLAVE_MATRIX_SYNC_ADDR, (char*)sync_matrix, sizeof(sync_matrix) * sizeof(matrix_row_t), &matrix_synced);
134}
diff --git a/keyboards/whale/sk/v3/v3.h b/keyboards/whale/sk/v3/v3.h
new file mode 100644
index 000000000..06ebc45dc
--- /dev/null
+++ b/keyboards/whale/sk/v3/v3.h
@@ -0,0 +1,65 @@
1#pragma once
2
3#include "sk.h"
4
5#include "quantum.h"
6
7#define LAYOUT_all( \
8 L00, L01, L02, L03, L04, L05, L06, L46, R46, R06, R05, R04, R03, R02, R01, R00, \
9 L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \
10 L20, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, R20, \
11 L30, L31, L32, L33, L34, L35, L36, R36, R35, R34, R33, R32, R31, R30, \
12 L40, L41, L42, L43, L44, L45, R45, R44, R43, R42, R41, R40, \
13 L51, L52, R52, R51, \
14 L50, L53, L54, R54, R53, R50, \
15 L55, L56, R56, R55 \
16) { \
17 {L00, L01, L02, L03, L04, L05, L06, }, \
18 {L10, L11, L12, L13, L14, L15, L16, }, \
19 {L20, L21, L22, L23, L24, L25, L26, }, \
20 {L30, L31, L32, L33, L34, L35, L36, }, \
21 {L40, L41, L42, L43, L44, L45, L46, }, \
22 {L50, L51, L52, L53, L54, L55, L56, }, \
23 {R00, R01, R02, R03, R04, R05, R06, }, \
24 {R10, R11, R12, R13, R14, R15, R16, }, \
25 {R20, R21, R22, R23, R24, R25, R26, }, \
26 {R30, R31, R32, R33, R34, R35, R36, }, \
27 {R40, R41, R42, R43, R44, R45, R46, }, \
28 {R50, R51, R52, R53, R54, R55, R56 } \
29}
30
31#define LAYOUT_left_half_only(\
32 L00, L01, L02, L03, L04, L05, L06, L46, \
33 L10, L11, L12, L13, L14, L15, L16, \
34 L20, L21, L22, L23, L24, L25, L26, \
35 L30, L31, L32, L33, L34, L35, L36, \
36 L40, L41, L42, L43, L44, L45, \
37 L51, L52, \
38 L50, L53, L54, \
39 L55, L56 \
40) { \
41 {L00, L01, L02, L03, L04, L05, L06, }, \
42 {L10, L11, L12, L13, L14, L15, L16, }, \
43 {L20, L21, L22, L23, L24, L25, L26, }, \
44 {L30, L31, L32, L33, L34, L35, L36, }, \
45 {L40, L41, L42, L43, L44, L45, L46, }, \
46 {L50, L51, L52, L53, L54, L55, L56 } \
47}
48
49#define LAYOUT_right_half_only( \
50 R46, R06, R05, R04, R03, R02, R01, R00, \
51 R16, R15, R14, R13, R12, R11, R10, \
52 R26, R25, R24, R23, R22, R21, R20, \
53 R36, R35, R34, R33, R32, R31, R30, \
54 R45, R44, R43, R42, R41, R40, \
55 R52, R51, \
56 R54, R53, R50, \
57 R56, R55 \
58) { \
59 {R00, R01, R02, R03, R04, R05, R06, }, \
60 {R10, R11, R12, R13, R14, R15, R16, }, \
61 {R20, R21, R22, R23, R24, R25, R26, }, \
62 {R30, R31, R32, R33, R34, R35, R36, }, \
63 {R40, R41, R42, R43, R44, R45, R46, }, \
64 {R50, R51, R52, R53, R54, R55, R56 } \
65}