aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/config.h8
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c113
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk11
-rw-r--r--keyboards/handwired/woodpad/config.h185
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/config.h24
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/keymap.c135
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/rules.mk37
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/config.h42
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/keymap.c440
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/rules.mk10
-rw-r--r--keyboards/handwired/woodpad/readme.md28
-rw-r--r--keyboards/handwired/woodpad/rules.mk81
-rw-r--r--keyboards/handwired/woodpad/woodpad.c43
-rw-r--r--keyboards/handwired/woodpad/woodpad.h40
-rw-r--r--keyboards/orthodox/keymaps/drashna/config.h42
-rw-r--r--keyboards/orthodox/keymaps/drashna/keymap.c197
-rw-r--r--keyboards/orthodox/keymaps/drashna/rules.mk6
19 files changed, 1356 insertions, 88 deletions
diff --git a/.gitignore b/.gitignore
index e77127268..fb73d7b7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,3 +54,4 @@ util/Win_Check_Output.txt
54# things travis sees 54# things travis sees
55secrets.tar 55secrets.tar
56id_rsa_* 56id_rsa_*
57/.vs
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
index 0b6a09934..d2878547d 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
@@ -4,3 +4,11 @@
4 4
5#define TAPPING_TERM 200 5#define TAPPING_TERM 200
6 6
7#ifdef RGBLIGHT_ENABLE
8#undef RGBLIGHT_SAT_STEP
9#define RGBLIGHT_SAT_STEP 12
10#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
11#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
12#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
13#endif // RGBLIGHT_ENABLE
14#define FORCE_NKRO
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
index a56a88e58..2df8cbf22 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
@@ -40,15 +40,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
40 40
41//define macro keycodes 41//define macro keycodes
42#define M_VERSION M(0) 42#define M_VERSION M(0)
43#define M_SYMM M(1) 43#define M_MAKE M(1)
44#define M_SALT M(2) 44
45#define M_HARD M(3)
46#define M_MAKE M(4)
47#define M_GOODGAME M(5)
48#define M_MORESALT M(6)
49#define M_DOOMFIST M(7)
50
51
52//define layer change stuff for underglow indicator 45//define layer change stuff for underglow indicator
53bool skip_leds = false; 46bool skip_leds = false;
54 47
@@ -383,10 +376,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
383 * `--------------------' `--------------------' 376 * `--------------------' `--------------------'
384 */ 377 */
385 [OVERWATCH] = KEYMAP( 378 [OVERWATCH] = KEYMAP(
386 KC_ESCAPE, M_SALT, M_MORESALT, M_GOODGAME, M_SYMM, M_DOOMFIST, M_HARD, 379 KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
387 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, 380 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
388 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, 381 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
389 KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_M, KC_TRNS, 382 KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_M, KC_TRNS,
390 KC_G, KC_U, KC_I, KC_Y, KC_T, 383 KC_G, KC_U, KC_I, KC_Y, KC_T,
391 KC_O, KC_P, 384 KC_O, KC_P,
392 KC_LGUI, 385 KC_LGUI,
@@ -395,7 +388,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
395 KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, 388 KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
396 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 389 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
397 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 390 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
398 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 391 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
399 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 392 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
400 KC_NO, KC_NO, 393 KC_NO, KC_NO,
401 KC_NO, 394 KC_NO,
@@ -508,45 +501,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
508 } 501 }
509 case 1: 502 case 1:
510 if (record->event.pressed) { 503 if (record->event.pressed) {
511 // Symmentra "Left Click to win" salt
512 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(L), U(LSFT), T(E), T(F), T(T), T(SPACE), T(C), T(L), T(I), T(C), T(K), T(SPACE), T(T), T(O), T(SPACE), T(W), T(I), T(N), D(LSFT), T(1), U(LSFT), T(ENTER), END );
513 }
514 case 2:
515 if (record->event.pressed) {
516 //salt salt salt
517 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(S), U(LSFT), T(A), T(L), T(T), T(COMMA), T(SPACE), T(S), T(A), T(L), T(T), T(COMMA), T(SPACE), T(S), T(A), T(L), T(T), T(DOT), T(DOT), T(DOT), T(ENTER), END );
518 }
519 case 3:
520 if (record->event.pressed) {
521 // your saltiness makes me hard
522 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(Y), U(LSFT), T(O), T(U), T(R), T(SPACE), T(S), T(A), T(L), T(T), T(SPACE), T(O), T(N), T(L), T(Y), T(SPACE), T(M), T(A), T(K), T(E), T(S), T(SPACE), T(M), T(Y), T(SPACE), T(P), T(E), T(N), T(I), T(S), T(SPACE), T(T), T(H), T(A), T(T), T(SPACE), T(M), T(U), T(C), T(H), T(SPACE), T(H), T(A), T(R), T(D), T(E), T(R), T(COMMA), T(SPACE), T(A), T(N), T(D), T(SPACE), T(E), T(V), T(E), T(N), T(SPACE), T(M), T(O), T(R), T(E), T(SPACE), T(A), T(G), T(G), T(R), T(E), T(S), T(S), T(I), T(V), T(E), D(LSFT), T(1), U(LSFT), T(ENTER), END );
523 }
524 case 4:
525 if (record->event.pressed) {
526 // make ergodox-ez-drashna-custom-teensy 504 // make ergodox-ez-drashna-custom-teensy
527 return MACRO(I(5), T(M), T(A), T(K), T(E), T(SPACE), T(E), T(R), T(G), T(O), T(D), T(O), T(X), D(LSFT), T(MINUS), U(LSFT), T(E), T(Z), T(MINUS), T(D), T(R), T(A), T(S), T(H), T(N), T(A), T(MINUS), T(C), T(U), T(S), T(T), T(O), T(M), T(MINUS), T(T), T(E), T(E), T(N), T(S), T(Y), T(ENTER), END); 505 return MACRO(I(5), T(M), T(A), T(K), T(E), T(SPACE), T(E), T(R), T(G), T(O), T(D), T(O), T(X), D(LSFT), T(MINUS), U(LSFT), T(E), T(Z), T(MINUS), T(D), T(R), T(A), T(S), T(H), T(N), T(A), T(MINUS), T(C), T(U), T(S), T(T), T(O), T(M), T(MINUS), T(T), T(E), T(E), T(N), T(S), T(Y), T(ENTER), END);
528 } 506 }
529 case 5:
530 if (record->event.pressed) {
531 //gg
532 return MACRO(I(50), T(ENTER), I(5), T(G), T(G), T(ENTER), END);
533 }
534 case 6:
535 if (record->event.pressed) {
536 // Please sir, can I have some more salt
537 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(P), U(LSFT), T(L), T(E), T(A), T(S), T(E), T(SPACE), T(S), T(I), T(R), T(COMMA), T(SPACE), T(C), T(A), T(N), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(H), T(A), T(V), T(E), T(SPACE), T(S), T(O), T(M), T(E), T(SPACE), T(M), T(O), T(R), T(E), T(SPACE), T(S), T(A), T(L), T(T), D(LSFT), T(SLASH), U(LSFT), D(LSFT), T(1), U(LSFT), T(ENTER), END );
538 }
539 break;
540 case 7:
541 if (record->event.pressed) {
542 // DoomFisted
543 // Hey, look at me. I'm Doomfist, and I'm overpowered!
544 // All I do is spam punches all day! I'm DPS, tank and
545 // defense, rolled into one! All I need is team healing to be complete!
546 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(H), U(LSFT), T(E), T(Y), T(COMMA), T(SPACE), T(L), T(O), T(O), T(K), T(SPACE), T(A), T(T), T(SPACE), T(M), T(E), T(DOT), T(SPACE), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), D(LSFT), T(D), U(LSFT), T(O), T(O), T(M), T(F), T(I), T(S), T(T), T(COMMA), T(SPACE), T(A), T(N), T(D), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), T(O), T(V), T(E), T(R), T(P), T(O), T(W), T(E), T(R), T(E), T(D), D(LSFT), T(1), U(LSFT), T(SPACE), T(SPACE), D(LSFT), T(A), U(LSFT), T(L), T(L), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(D), T(O), T(SPACE), T(I), T(S), T(SPACE), T(S), T(P), T(A), T(M), T(SPACE), T(P), T(U), T(N), T(C), T(H), T(E), T(S), T(SPACE), T(A), T(L), T(L), T(SPACE), T(D), T(A), T(Y), D(LSFT), T(1), U(LSFT), T(SPACE), T(SPACE), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), D(LSFT), T(D), U(LSFT), D(LSFT), T(P), U(LSFT), D(LSFT), T(S), U(LSFT), T(COMMA), T(SPACE), T(T), T(A), T(N), T(K), T(SPACE), T(A), T(N), T(D), T(SPACE), T(D), T(E), T(F), T(E), T(N), T(S), T(E), T(COMMA), T(SPACE), T(R), T(O), T(L), T(L), T(E), T(D), T(SPACE), T(I), T(N), T(T), T(O), T(SPACE), T(O), T(N), T(E), D(LSFT), T(1), U(LSFT), T(SPACE), D(LSFT), T(A), U(LSFT), T(L), T(L), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(N), T(E), T(E), T(D), T(SPACE), T(I), T(S), T(SPACE), T(T), T(E), T(A), T(M), T(SPACE), T(H), T(E), T(A), T(L), T(I), T(N), T(G), T(SPACE), T(T), T(O), T(SPACE), T(B), T(E), T(SPACE), T(C), T(O), T(M), T(P), T(L), T(E), T(T), T(E), D(LSFT), T(1), U(LSFT), T(ENTER), END );
547 }
548 break;
549
550 } 507 }
551 return MACRO_NONE; 508 return MACRO_NONE;
552}; 509};
@@ -709,49 +666,39 @@ void matrix_scan_user(void) { // runs frequently to update info
709 666
710 } 667 }
711 // Check layer, and apply color if its changed since last check 668 // Check layer, and apply color if its changed since last check
712 switch (layer) { 669 if (has_layer_changed) {
713 case SYMB: 670 switch (layer) {
714 if (has_layer_changed) { 671 case SYMB:
715 rgblight_sethsv (255,255,255); 672 rgblight_sethsv (255,255,255);
716 } 673 rgblight_mode(23);
717 break; 674 break;
718 case OVERWATCH: 675 case OVERWATCH:
719 if (has_layer_changed) {
720 rgblight_sethsv (30,255,255); 676 rgblight_sethsv (30,255,255);
721 } 677 rgblight_mode(17);
722 break; 678 break;
723 case DIABLO: 679 case DIABLO:
724 if (has_layer_changed) {
725 rgblight_sethsv (0,255,255); 680 rgblight_sethsv (0,255,255);
726 } 681 rgblight_mode(5);
727 break; 682 break;
728 case MOUS: 683 case MOUS:
729 if (has_layer_changed) {
730 rgblight_sethsv (60,255,255); 684 rgblight_sethsv (60,255,255);
731 } 685 break;
732 break; 686 case COLEMAK:
733 case COLEMAK:
734 if (has_layer_changed) {
735 rgblight_sethsv (300,255,255); 687 rgblight_sethsv (300,255,255);
736 } 688 break;
737 break; 689 case DVORAK:
738 case DVORAK:
739 if (has_layer_changed) {
740 rgblight_sethsv (120,255,255); 690 rgblight_sethsv (120,255,255);
741 } 691 break;
742 break; 692 case 7:
743 case 7:
744 if (has_layer_changed) {
745 rgblight_sethsv (255,255,255); 693 rgblight_sethsv (255,255,255);
746 } 694 break;
747 break; 695 default:
748 default:
749 if (has_layer_changed) {
750 rgblight_sethsv (195,255,255); 696 rgblight_sethsv (195,255,255);
751 } 697 rgblight_mode(1);
752 break; 698 break;
699 }
753 } 700 }
754 701
755 // Update layer status at the end, so this sets the default color 702 // Update layer status at the end, so this sets the default color
756 // rather than relying on the init, which was unreliably... 703 // rather than relying on the init, which was unreliably...
757 // Probably due to a timing issue, but this requires no additional code 704 // Probably due to a timing issue, but this requires no additional code
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
index 96590e7f7..6c78b556b 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
@@ -1,8 +1,9 @@
1TAP_DANCE_ENABLE = yes 1TAP_DANCE_ENABLE = yes
2SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend 2SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
3COMMAND_ENABLE = no # Commands for debug and configuration 3COMMAND_ENABLE = no # Commands for debug and configuration
4RGBLIGHT_ENABLE = yes 4RGBLIGHT_ENABLE = yes
5MIDI_ENABLE = no 5MIDI_ENABLE = no
6CONSOLE_ENABLE = yes
6 7
7ifndef QUANTUM_DIR 8ifndef QUANTUM_DIR
8 include ../../../../Makefile 9 include ../../../../Makefile
diff --git a/keyboards/handwired/woodpad/config.h b/keyboards/handwired/woodpad/config.h
new file mode 100644
index 000000000..2c8a8bef7
--- /dev/null
+++ b/keyboards/handwired/woodpad/config.h
@@ -0,0 +1,185 @@
1/*
2Copyright 2017 REPLACE_WITH_YOUR_NAME
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#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6069
26#define DEVICE_VER 0x0001
27#define MANUFACTURER WoodKeys.click
28#define PRODUCT woodpad
29#define DESCRIPTION Basic numpad
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 4
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { D1, D0, D4, C6, D7 }
46#define MATRIX_COL_PINS { B1, B3, B2, B6 }
47#define UNUSED_PINS
48
49/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
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/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162/*
163 * MIDI options
164 */
165
166/* Prevent use of disabled MIDI features in the keymap */
167//#define MIDI_ENABLE_STRICT 1
168
169/* enable basic MIDI features:
170 - MIDI notes can be sent when in Music mode is on
171*/
172//#define MIDI_BASIC
173
174/* enable advanced MIDI features:
175 - MIDI notes can be added to the keymap
176 - Octave shift and transpose
177 - Virtual sustain, portamento, and modulation wheel
178 - etc.
179*/
180//#define MIDI_ADVANCED
181
182/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
183//#define MIDI_TONE_KEYCODE_OCTAVES 1
184
185#endif
diff --git a/keyboards/handwired/woodpad/keymaps/default/config.h b/keyboards/handwired/woodpad/keymaps/default/config.h
new file mode 100644
index 000000000..f52a97bbc
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/default/config.h
@@ -0,0 +1,24 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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#ifndef CONFIG_USER_H
18#define CONFIG_USER_H
19
20#include "../../config.h"
21
22// place overrides here
23
24#endif
diff --git a/keyboards/handwired/woodpad/keymaps/default/keymap.c b/keyboards/handwired/woodpad/keymaps/default/keymap.c
new file mode 100644
index 000000000..1fa90ba91
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/default/keymap.c
@@ -0,0 +1,135 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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 "woodpad.h"
17
18// Each layer gets a name for readability, which is then used in the keymap matrix below.
19// The underscores don't mean anything - you can have a layer called STUFF or any other name.
20// Layer names don't all need to be of the same length, obviously, and you can also skip them
21// entirely and just use numbers.
22#define _NUMLOCK 0
23#define _NAV 1
24#define _ALT 2
25#define _ADJUST 3
26
27// Fillers to make layering more clear
28#define _______ KC_TRNS
29#define XXXXXXX KC_NO
30
31const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32[_NUMLOCK] = KEYMAP( /* Base */
33 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,\
34 KC_P7, KC_P8, KC_P9, KC_PPLS, \
35 KC_P4, KC_P5, KC_P6, KC_PEQL, \
36 KC_P1, KC_P2, KC_P3, KC_COMM, \
37 KC_LALT, KC_P0, KC_PDOT, KC_PENT \
38),
39[_NAV] = KEYMAP( /* Base */
40 _______, _______, _______, _______,\
41 KC_HOME, KC_UP, KC_PGUP, _______, \
42 KC_LEFT, XXXXXXX, KC_RIGHT, _______, \
43 KC_END, KC_DOWN, KC_PGDN, _______, \
44 _______, KC_INS, KC_DEL, _______ \
45),
46[_ALT] = KEYMAP( /* Base */
47 _______, KC_MUTE, KC_VOLD, KC_VOLU,\
48 _______, _______, _______, _______, \
49 _______, _______, _______, _______, \
50 _______, _______, _______, _______, \
51 _______, _______, _______, _______ \
52),
53[_ADJUST] = KEYMAP( /* Base */
54 _______, KC_A, _______, RESET,\
55 _______, _______, _______, _______, \
56 _______, _______, _______, _______, \
57 _______, _______, _______, _______, \
58 _______, _______, _______, _______ \
59),
60};
61
62const uint16_t PROGMEM fn_actions[] = {
63
64};
65
66void numlock_led_on(void) {
67 PORTF |= (1<<7);
68}
69
70void numlock_led_off(void) {
71 PORTF &= ~(1<<7);
72}
73
74static bool numlock_down = false;
75
76bool process_record_user(uint16_t keycode, keyrecord_t *record) {
77 switch (keycode) {
78 case KC_NLCK:
79 if (record->event.pressed) {
80 numlock_down = true;
81 if (IS_LAYER_ON(_ALT)) {
82 layer_on(_ADJUST);
83 }
84 } else{
85 if(!IS_LAYER_ON(_ADJUST)) {
86 if (!IS_LAYER_ON(_NAV)){
87 numlock_led_off();
88 layer_on(_NAV);
89 } else {
90 numlock_led_on();
91 layer_off(_NAV);
92 }
93 } else {
94 layer_off(_ADJUST);
95 }
96 numlock_down = false;
97 }
98 return false;
99 break;
100 case KC_LALT:
101 if (record->event.pressed) {
102 if (numlock_down) {
103 layer_on(_ADJUST);
104 } else {
105 layer_on(_ALT);
106 }
107 } else {
108 if(IS_LAYER_ON(_ADJUST)) {
109 layer_off(_ADJUST);
110 } else {
111 layer_off(_ALT);
112 }
113 }
114 // Allow normal processing of ALT?
115 return false;
116 break;
117 }
118 return true;
119}
120
121void matrix_init_user(void) {
122 // set Numlock LED to output and low
123 DDRF |= (1<<7);
124 PORTF &= ~(1<<7);
125
126}
127
128void matrix_scan_user(void) {
129
130}
131
132
133void led_set_user(uint8_t usb_led) {
134
135}
diff --git a/keyboards/handwired/woodpad/keymaps/default/readme.md b/keyboards/handwired/woodpad/keymaps/default/readme.md
new file mode 100644
index 000000000..5f1740978
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for woodpad
diff --git a/keyboards/handwired/woodpad/keymaps/default/rules.mk b/keyboards/handwired/woodpad/keymaps/default/rules.mk
new file mode 100644
index 000000000..b8879076b
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/default/rules.mk
@@ -0,0 +1,37 @@
1# Copyright 2013 Jun Wako <wakojun@gmail.com>
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# QMK Build Options
18# change to "no" to disable the options, or define them in the Makefile in
19# the appropriate keymap folder that will get included automatically
20#
21BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
22MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
23EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
24CONSOLE_ENABLE = no # Console for debug(+400)
25COMMAND_ENABLE = yes # Commands for debug and configuration
26NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
27BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
28MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
29AUDIO_ENABLE = no # Audio output on port C6
30UNICODE_ENABLE = no # Unicode
31BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
32RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
33SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
34
35ifndef QUANTUM_DIR
36 include ../../../../Makefile
37endif
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/config.h b/keyboards/handwired/woodpad/keymaps/drashna/config.h
new file mode 100644
index 000000000..e25a10d0b
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/drashna/config.h
@@ -0,0 +1,42 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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#ifndef CONFIG_USER_H
18#define CONFIG_USER_H
19
20#include "../../config.h"
21
22#ifdef TAP_DANCE_ENABLE
23#define TAPPING_TERM 200
24#endif // TAP_DANCE_ENABLE
25
26
27
28#ifdef RGBLIGHT_ENABLE
29#define RGB_DI_PIN D3
30#define RGBLED_NUM 7 // Number of LEDs
31#define RGBLIGHT_ANIMATIONS
32#define RGBLIGHT_HUE_STEP 12
33#define RGBLIGHT_SAT_STEP 12
34#define RGBLIGHT_VAL_STEP 12
35#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
36#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
37#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
38#endif // RGBLIGHT_ENABLE
39
40
41
42#endif
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
new file mode 100644
index 000000000..a33a7ab46
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
@@ -0,0 +1,440 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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 "woodpad.h"
17
18// Each layer gets a name for readability, which is then used in the keymap matrix below.
19// The underscores don't mean anything - you can have a layer called STUFF or any other name.
20// Layer names don't all need to be of the same length, obviously, and you can also skip them
21// entirely and just use numbers.
22#define _NUMLOCK 0
23#define _NAV 1
24#define _DIABLO 2
25#define _MACROS 3
26#define _MEDIA 4
27
28// Fillers to make layering more clear
29#define _______ KC_TRNS
30#define XXXXXXX KC_NO
31
32
33//define layer change stuff for underglow indicator
34bool skip_leds = false;
35
36bool is_overwatch = false;
37
38//This is both for underglow, and Diablo 3 macros
39bool has_layer_changed = false;
40static uint8_t current_layer;
41
42#ifdef TAP_DANCE_ENABLE
43//define diablo macro timer variables
44static uint16_t diablo_timer[4];
45static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
46static uint8_t diablo_key_time[4];
47
48
49bool check_dtimer(uint8_t dtimer) {
50 // has the correct number of seconds elapsed (as defined by diablo_times)
51 return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true;
52};
53#endif
54
55
56enum custom_keycodes {
57 PLACEHOLDER = SAFE_RANGE, // can always be here
58 KC_DIABLO_CLEAR,
59 KC_OVERWATCH,
60 KC_SALT,
61 KC_MORESALT,
62 KC_SALTHARD,
63 KC_GOODGAME,
64 KC_SYMM,
65 KC_DOOMFIST,
66 KC_JUSTGAME,
67 KC_GLHF,
68 KC_TORB
69};
70
71#ifdef TAP_DANCE_ENABLE
72enum {
73 TD_DIABLO_1 = 0,
74 TD_DIABLO_2,
75 TD_DIABLO_3,
76 TD_DIABLO_4
77};
78
79
80// Cycle through the times for the macro, starting at 0, for disabled.
81// Max of six values, so don't exceed
82void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
83 if (state->count >= 7) {
84 diablo_key_time[diablo_key] = diablo_times[0];
85 reset_tap_dance(state);
86 }
87 else {
88 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
89 }
90}
91
92
93// Would rather have one function for all of this, but no idea how to do that...
94void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) {
95 diablo_tapdance_master(state, user_data, 0);
96}
97
98void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) {
99 diablo_tapdance_master(state, user_data, 1);
100}
101
102void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) {
103 diablo_tapdance_master(state, user_data, 2);
104}
105
106void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) {
107 diablo_tapdance_master(state, user_data, 3);
108}
109
110
111
112//Tap Dance Definitions
113qk_tap_dance_action_t tap_dance_actions[] = {
114 // tap once to disable, and more to enable timed micros
115 [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
116 [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
117 [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
118 [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
119
120};
121#endif
122
123const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
124[_NUMLOCK] = KEYMAP( /* Base */
125 TG(_NAV), TG(_DIABLO), TG(_MACROS), KC_PSLS,\
126 KC_P7, KC_P8, KC_P9, KC_PAST, \
127 KC_P4, KC_P5, KC_P6, KC_PMNS, \
128 KC_P1, KC_P2, KC_P3, KC_PPLS, \
129 LT(_MEDIA,KC_P0), KC_PDOT, KC_COLN, KC_PENT \
130),
131[_NAV] = KEYMAP( /* Base */
132 _______, _______, _______, _______,\
133 KC_HOME, KC_UP, KC_PGUP, _______, \
134 KC_LEFT, XXXXXXX, KC_RIGHT, _______, \
135 KC_END, KC_DOWN, KC_PGDN, _______, \
136 KC_INS, KC_DEL, _______, _______ \
137),
138#ifdef TAP_DANCE_ENABLE
139[_DIABLO] = KEYMAP( /* Base */
140 KC_ESC, _______, _______, _______,\
141 KC_S, KC_F, KC_I, KC_M, \
142 KC_1, KC_2, KC_3, KC_4, \
143 TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), \
144 _______, KC_DIABLO_CLEAR, KC_Q, SFT_T(KC_SPACE) \
145),
146#else
147[_DIABLO] = KEYMAP( /* Base */
148 KC_ESC, _______, _______, _______,\
149 KC_S, KC_F, KC_I, KC_M, \
150 KC_1, KC_2, KC_3, KC_4, \
151 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
152 _______, KC_DIABLO_CLEAR, KC_Q, SFT_T(KC_SPACE) \
153),
154
155#endif
156
157[_MACROS] = KEYMAP( /* Base */
158 KC_OVERWATCH, _______, _______, XXXXXXX,\
159 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
160 XXXXXXX, XXXXXXX, XXXXXXX, KC_JUSTGAME, \
161 KC_SYMM, KC_DOOMFIST, KC_TORB, KC_GOODGAME, \
162 KC_SALT, KC_MORESALT, KC_SALTHARD, KC_GLHF \
163),
164[_MEDIA] = KEYMAP( /* Base */
165 _______, KC_MUTE, KC_VOLD, KC_VOLU,\
166 _______, _______, RGB_HUI, RGB_HUD, \
167 KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \
168 RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \
169 _______, _______, RGB_SAD, RGB_VAD \
170),
171
172};
173
174const uint16_t PROGMEM fn_actions[] = {
175
176};
177
178const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
179{
180 switch (id) {
181 case 0:
182 if (record->event.pressed) {
183 // Output Keyboard Firmware info
184 SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP );
185 return false;
186 }
187 }
188 return MACRO_NONE;
189};
190void numlock_led_on(void) {
191 PORTF |= (1<<7);
192}
193
194void numlock_led_off(void) {
195 PORTF &= ~(1<<7);
196}
197
198
199bool process_record_user(uint16_t keycode, keyrecord_t *record) {
200 uint16_t kc;
201 if (is_overwatch) {
202 kc = KC_BSPC;
203 } else {
204 kc = KC_ENTER;
205 }
206 switch (keycode) {
207#ifdef TAP_DANCE_ENABLE
208 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
209 if (record->event.pressed) {
210 uint8_t dtime;
211
212 for (dtime = 0; dtime < 4; dtime++) {
213 diablo_key_time[dtime] = diablo_times[0];
214 }
215 }
216 return false;
217 break;
218#endif
219 case KC_OVERWATCH: // reset all Diable timers, disabling them
220 if (record->event.pressed) {
221 is_overwatch = !is_overwatch;
222 has_layer_changed = true;
223 }
224 return false;
225 break;
226 case KC_SALT:
227 if (!record->event.pressed) {
228 register_code(kc);
229 unregister_code(kc);
230 _delay_ms(50);
231 SEND_STRING("Salt, salt, salt...");
232 register_code(KC_ENTER);
233 unregister_code(KC_ENTER);
234 }
235 return false;
236 break;
237 case KC_MORESALT:
238 if (!record->event.pressed) {
239 register_code(kc);
240 unregister_code(kc);
241 _delay_ms(50);
242 SEND_STRING("Please sir, can I have some more salt?!");
243 register_code(KC_ENTER);
244 unregister_code(KC_ENTER);
245 }
246 return false;
247 break;
248 case KC_SALTHARD:
249 if (!record->event.pressed) {
250 register_code(kc);
251 unregister_code(kc);
252 _delay_ms(50);
253 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
254 register_code(KC_ENTER);
255 unregister_code(KC_ENTER);
256 }
257 return false;
258 break;
259 case KC_GOODGAME:
260 if (!record->event.pressed) {
261 register_code(kc);
262 unregister_code(kc);
263 _delay_ms(50);
264 SEND_STRING("Good game, everyone!");
265 register_code(KC_ENTER);
266 unregister_code(KC_ENTER);
267 }
268 return false;
269 break;
270 case KC_GLHF:
271 if (!record->event.pressed) {
272 register_code(kc);
273 unregister_code(kc);
274 _delay_ms(50);
275 SEND_STRING("Good luck, have fun!!!");
276 register_code(KC_ENTER);
277 unregister_code(KC_ENTER);
278 }
279 return false;
280 break;
281 case KC_SYMM:
282 if (!record->event.pressed) {
283 register_code(kc);
284 unregister_code(kc);
285 _delay_ms(50);
286 SEND_STRING("Left click to win!");
287 register_code(KC_ENTER);
288 unregister_code(KC_ENTER);
289 }
290 return false;
291 break;
292 case KC_DOOMFIST:
293 if (!record->event.pressed) {
294 register_code(kc);
295 unregister_code(kc);
296 _delay_ms(50);
297 SEND_STRING("Hey, look at me. I'm Doomfist, and I'm overpowered! All I do is spam punches all day! I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
298 register_code(KC_ENTER);
299 unregister_code(KC_ENTER);
300 }
301 return false;
302 break;
303 case KC_JUSTGAME:
304
305 if (!record->event.pressed) {
306 register_code(kc);
307 unregister_code(kc);
308 _delay_ms(50);
309 SEND_STRING("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.");
310 register_code(KC_ENTER);
311 unregister_code(KC_ENTER);
312 }
313 return false;
314 break;
315 case KC_TORB:
316
317 if (!record->event.pressed) {
318 register_code(kc);
319 unregister_code(kc);
320 _delay_ms(50);
321 SEND_STRING("That was positively riveting!");
322 register_code(KC_ENTER);
323 unregister_code(KC_ENTER);
324 }
325 return false;
326 break;
327
328 }
329 return true;
330}
331#ifdef TAP_DANCE_ENABLE
332
333// Sends the key press to system, but only if on the Diablo layer
334void send_diablo_keystroke(uint8_t diablo_key) {
335 if (current_layer == _DIABLO) {
336 switch (diablo_key) {
337 case 0:
338 SEND_STRING("1");
339 break;
340 case 1:
341 SEND_STRING("2");
342 break;
343 case 2:
344 SEND_STRING("3");
345 break;
346 case 3:
347 SEND_STRING("4");
348 break;
349 }
350 }
351}
352
353// Checks each of the 4 timers/keys to see if enough time has elapsed
354// Runs the "send string" command if enough time has passed, and resets the timer.
355void run_diablo_macro_check(void) {
356 uint8_t dtime;
357
358 for (dtime = 0; dtime < 4; dtime++) {
359 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
360 diablo_timer[dtime] = timer_read();
361 send_diablo_keystroke(dtime);
362 }
363 }
364
365}
366#endif
367void matrix_init_user(void) {
368 has_layer_changed = true;
369 // set Numlock LED to output and low
370 DDRF |= (1<<7);
371 PORTF &= ~(1<<7);
372}
373
374void matrix_scan_user(void) {
375 uint8_t layer = biton32(layer_state);
376#ifdef RGBLIGHT_ENABLE
377
378 numlock_led_off();
379 // Check layer, and apply color if its changed since last check
380 switch (layer) {
381 case _NAV:
382 if (has_layer_changed) {
383 rgblight_sethsv(240, 255, 255);
384 rgblight_mode(1);
385 }
386 break;
387 case _MACROS:
388 if (has_layer_changed) {
389 rgblight_sethsv(30, 255, 255);
390 if (is_overwatch) {
391 rgblight_mode(17);
392 } else {
393 rgblight_mode(18);
394 }
395 }
396 if (is_overwatch) {
397 numlock_led_on();
398 }
399 break;
400 case _DIABLO:
401 if (has_layer_changed) {
402 rgblight_sethsv(0, 255, 255);
403 rgblight_mode(5);
404 }
405 break;
406 case _MEDIA:
407 if (has_layer_changed) {
408 rgblight_sethsv(120, 255, 255);
409 rgblight_mode(22);
410 }
411 break;
412 default:
413 if (has_layer_changed) {
414 rgblight_sethsv(195, 255, 255);
415 rgblight_mode(1);
416 }
417 break;
418 }
419
420 #endif
421 // Update layer status at the end, so this sets the default color
422 // rather than relying on the init, which was unreliably...
423 // Probably due to a timing issue, but this requires no additional code
424 if (current_layer == layer) {
425 has_layer_changed = false;
426 }
427 else {
428 has_layer_changed = true;
429 current_layer = layer;
430 }
431 // Run Diablo 3 macro checking code.
432#ifdef TAP_DANCE_ENABLE
433 run_diablo_macro_check();
434#endif
435}
436
437
438void led_set_user(uint8_t usb_led) {
439
440}
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/rules.mk b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
new file mode 100644
index 000000000..0aeb409a8
--- /dev/null
+++ b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
@@ -0,0 +1,10 @@
1TAP_DANCE_ENABLE = yes
2SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
3COMMAND_ENABLE = no # Commands for debug and configuration
4RGBLIGHT_ENABLE = yes
5MIDI_ENABLE = no
6CONSOLE_ENABLE = no
7
8ifndef QUANTUM_DIR
9 include ../../../../Makefile
10endif
diff --git a/keyboards/handwired/woodpad/readme.md b/keyboards/handwired/woodpad/readme.md
new file mode 100644
index 000000000..2697398c9
--- /dev/null
+++ b/keyboards/handwired/woodpad/readme.md
@@ -0,0 +1,28 @@
1woodpad keyboard firmware
2======================
3
4## Quantum MK Firmware
5
6For the full Quantum feature list, see [the parent readme](/).
7
8## Building
9
10Download or clone the whole firmware and navigate to the keyboards/woodpad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
11
12Depending on which keymap you would like to use, you will have to compile slightly differently.
13
14### Default
15
16To build with the default keymap, simply run `make default`.
17
18### Other Keymaps
19
20Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
21
22To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
23
24```
25$ make [default|jack|<name>]
26```
27
28Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/handwired/woodpad/rules.mk b/keyboards/handwired/woodpad/rules.mk
new file mode 100644
index 000000000..7612f4b49
--- /dev/null
+++ b/keyboards/handwired/woodpad/rules.mk
@@ -0,0 +1,81 @@
1# MCU name
2#MCU = at90usb1286
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=4096
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
69RGBLIGHT_ENABLE ?= no
70
71#avrdude: build
72# ls /dev/tty* > /tmp/1; \
73# echo "Reset your Pro Micro now"; \
74# while [ -z $$USB ]; do \
75# sleep 1; \
76# ls /dev/tty* > /tmp/2; \
77# USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
78# done; \
79# avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
80#
81#.PHONY: avrdude \ No newline at end of file
diff --git a/keyboards/handwired/woodpad/woodpad.c b/keyboards/handwired/woodpad/woodpad.c
new file mode 100644
index 000000000..15a87f2ea
--- /dev/null
+++ b/keyboards/handwired/woodpad/woodpad.c
@@ -0,0 +1,43 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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 "woodpad.h"
17
18void matrix_init_kb(void) {
19 // put your keyboard start-up code here
20 // runs once when the firmware starts up
21
22 matrix_init_user();
23}
24
25void matrix_scan_kb(void) {
26 // put your looping keyboard code here
27 // runs every cycle (a lot)
28
29 matrix_scan_user();
30}
31
32bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
33 // put your per-action keyboard code here
34 // runs for every action, just before processing by the firmware
35
36 return process_record_user(keycode, record);
37}
38
39void led_set_kb(uint8_t usb_led) {
40 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
41
42 led_set_user(usb_led);
43}
diff --git a/keyboards/handwired/woodpad/woodpad.h b/keyboards/handwired/woodpad/woodpad.h
new file mode 100644
index 000000000..13ec0bfc2
--- /dev/null
+++ b/keyboards/handwired/woodpad/woodpad.h
@@ -0,0 +1,40 @@
1/* Copyright 2017 REPLACE_WITH_YOUR_NAME
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#ifndef WOODPAD_H
17#define WOODPAD_H
18
19#include "quantum.h"
20
21// This a shortcut to help you visually see your layout.
22// The following is an example using the Planck MIT layout
23// The first section contains all of the arguments
24// The second converts the arguments into a two-dimensional array
25#define KEYMAP( \
26 k00, k01, k02, k03, \
27 k10, k11, k12, k13, \
28 k20, k21, k22, k23, \
29 k30, k31, k32, k33, \
30 k40, k41, k42, k43 \
31) \
32{ \
33 { k00, k01, k02, k03 }, \
34 { k10, k11, k12, k13 }, \
35 { k20, k21, k22, k23 }, \
36 { k30, k31, k32, k33 }, \
37 { k40, k41, k42, k43 }, \
38}
39
40#endif
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
new file mode 100644
index 000000000..9e91753bd
--- /dev/null
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -0,0 +1,42 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6Copyright 2017 Art Ortenburger
7
8This program is free software: you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation, either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#ifndef CONFIG_USER_H
23#define CONFIG_USER_H
24
25#include "../../config.h"
26
27/* Use I2C or Serial, not both */
28
29#define USE_SERIAL
30// #define USE_I2C
31
32/* Select hand configuration */
33
34// #define MASTER_LEFT
35// #define _MASTER_RIGHT
36#define EE_HANDS
37
38#ifndef TAPPING_TERM
39#define TAPPING_TERM 200
40#endif
41
42#endif \ No newline at end of file
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
new file mode 100644
index 000000000..196794076
--- /dev/null
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -0,0 +1,197 @@
1/*
2This is the keymap for the keyboard
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6Copyright 2017 Art Ortenburger
7
8This program is free software: you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation, either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#include "orthodox.h"
23#include "action_layer.h"
24#include "eeconfig.h"
25
26extern keymap_config_t keymap_config;
27
28// Each layer gets a name for readability, which is then used in the keymap matrix below.
29// The underscores don't mean anything - you can have a layer called STUFF or any other name.
30// Layer names don't all need to be of the same length, obviously, and you can also skip them
31// entirely and just use numbers.
32#define _QWERTY 0
33#define _COLEMAK 1
34#define _DVORAK 2
35#define _LOWER 3
36#define _RAISE 4
37#define _ADJUST 16
38
39enum custom_keycodes {
40 QWERTY = SAFE_RANGE,
41 COLEMAK,
42 DVORAK,
43 LOWER,
44 RAISE,
45 ADJUST,
46};
47
48// Fillers to make layering more clear
49#define _______ KC_TRNS
50#define XXXXXXX KC_NO
51
52
53#ifdef TAP_DANCE_ENABLE
54enum {
55 TD_FLSH = 0,
56};
57
58
59
60
61
62// on the fourth tap, set the keyboard on flash state
63// and set the underglow to red, because red == bad
64void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
65 if (state->count >= 4) {
66#ifdef RGBLIGHT_ENABLE
67 rgblight_mode(1);
68 rgblight_setrgb(0xff, 0x00, 0x00);
69#endif
70 reset_keyboard();
71 reset_tap_dance(state);
72 }
73}
74
75
76
77//Tap Dance Definitions
78qk_tap_dance_action_t tap_dance_actions[] = {
79 //Once for Blue, Twice for Green, Thrice for Red, and four to flash
80 [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_flsh_finished, NULL),
81
82};
83#endif
84
85const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
86
87[_QWERTY] = KEYMAP( \
88 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
89 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
90 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH), KC_LGUI \
91),
92
93[_COLEMAK] = KEYMAP(\
94 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
95 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
96 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH), KC_LGUI \
97),
98
99[_DVORAK] = KEYMAP(\
100 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
101 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
102 KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_LGUI \
103),
104
105[_LOWER] = KEYMAP( \
106 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
107 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, KC_RCTL, KC_F11, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
108 TD(TD_FLSH),KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, KC_F12, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ \
109),
110
111[_RAISE] = KEYMAP( \
112 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
113 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, _______, KC_F11, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
114 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, KC_F12, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ \
115),
116
117[_ADJUST] = KEYMAP( \
118 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
119 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY , COLEMAK, DVORAK, _______, _______, \
120 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
121)
122
123
124};
125
126#ifdef AUDIO_ENABLE
127float tone_qwerty[][2] = SONG(QWERTY_SOUND);
128float tone_dvorak[][2] = SONG(DVORAK_SOUND);
129float tone_colemak[][2] = SONG(COLEMAK_SOUND);
130#endif
131
132void persistent_default_layer_set(uint16_t default_layer) {
133 eeconfig_update_default_layer(default_layer);
134 default_layer_set(default_layer);
135}
136
137bool process_record_user(uint16_t keycode, keyrecord_t *record) {
138 switch (keycode) {
139 case QWERTY:
140 if (record->event.pressed) {
141 #ifdef AUDIO_ENABLE
142 PLAY_SONG(tone_qwerty);
143 #endif
144 persistent_default_layer_set(1UL<<_QWERTY);
145 }
146 return false;
147 break;
148 case COLEMAK:
149 if (record->event.pressed) {
150 #ifdef AUDIO_ENABLE
151 PLAY_SONG(tone_colemak);
152 #endif
153 persistent_default_layer_set(1UL<<_COLEMAK);
154 }
155 return false;
156 break;
157 case DVORAK:
158 if (record->event.pressed) {
159 #ifdef AUDIO_ENABLE
160 PLAY_SONG(tone_dvorak);
161 #endif
162 persistent_default_layer_set(1UL<<_DVORAK);
163 }
164 return false;
165 break;
166 case LOWER:
167 if (record->event.pressed) {
168 layer_on(_LOWER);
169 update_tri_layer(_LOWER, _RAISE, _ADJUST);
170 } else {
171 layer_off(_LOWER);
172 update_tri_layer(_LOWER, _RAISE, _ADJUST);
173 }
174 return false;
175 break;
176 case RAISE:
177 if (record->event.pressed) {
178 layer_on(_RAISE);
179 update_tri_layer(_LOWER, _RAISE, _ADJUST);
180 } else {
181 layer_off(_RAISE);
182 update_tri_layer(_LOWER, _RAISE, _ADJUST);
183 }
184 return false;
185 break;
186 case ADJUST:
187 if (record->event.pressed) {
188 layer_on(_ADJUST);
189 } else {
190 layer_off(_ADJUST);
191 }
192 return false;
193 break;
194 }
195 return true;
196}
197
diff --git a/keyboards/orthodox/keymaps/drashna/rules.mk b/keyboards/orthodox/keymaps/drashna/rules.mk
new file mode 100644
index 000000000..e252a9044
--- /dev/null
+++ b/keyboards/orthodox/keymaps/drashna/rules.mk
@@ -0,0 +1,6 @@
1CONSOLE_ENABLE = yes
2TAP_DANCE_ENABLE = yes
3
4ifndef QUANTUM_DIR
5 include ../../../../Makefile
6endif