aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornoroadsleft <18669334+noroadsleft@users.noreply.github.com>2018-11-26 20:57:15 -0800
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>2018-11-26 20:57:15 -0800
commit952a30ef345e05051f62fa39960f88475817821d (patch)
tree5e771e64853aabb86d2d165272045c52d460f8f1
parentbada74e2a10224849719d1caa1dff8493cf39c58 (diff)
downloadqmk_firmware-952a30ef345e05051f62fa39960f88475817821d.tar.gz
qmk_firmware-952a30ef345e05051f62fa39960f88475817821d.zip
handwired/arrow_pad Refactor and Configurator support (#4498)
* handwired/arrow_pad: layout macro and keymap refactor - Layout macros moved from the keymaps to arrow_pad.h. - LAYOUT_pad21 refactored to only accept keys that are physical present (no KC_NO entries required in keymap) - Keymaps now use #include QMK_KEYBOARD_H - Keymaps refactored to use process_record_user function (from action_get_macro) * handwired/arrow_pad: Readme cleanup Fixed the make commands and updated the layout macro. * handwired/arrow_pad: Configurator support
-rw-r--r--keyboards/handwired/arrow_pad/arrow_pad.h30
-rw-r--r--keyboards/handwired/arrow_pad/info.json62
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/default/keymap.c146
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c165
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c146
-rw-r--r--keyboards/handwired/arrow_pad/readme.md12
6 files changed, 265 insertions, 296 deletions
diff --git a/keyboards/handwired/arrow_pad/arrow_pad.h b/keyboards/handwired/arrow_pad/arrow_pad.h
index 62882b9b5..b93fd113f 100644
--- a/keyboards/handwired/arrow_pad/arrow_pad.h
+++ b/keyboards/handwired/arrow_pad/arrow_pad.h
@@ -10,4 +10,34 @@
10#include <avr/io.h> 10#include <avr/io.h>
11#include <stddef.h> 11#include <stddef.h>
12 12
13// This is the 21-key keypad to 4x6 element matrix mapping
14#define LAYOUT( \
15 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
16 KM_NUM, KM_FSL, KM_AST, KM_MIN, \
17 KM___7, KM___8, KM___9, KM_EQU, \
18 KM___4, KM___5, KM___6, KM_PLS, \
19 KM___1, KM___2, KM___3, ___ENT, \
20 KM___0, _____0, KM_DOT, KM_ENT \
21) { \
22 { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
23 { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
24 { KM___7, KM___8, KM___9, KM_EQU }, \
25 { KM___4, KM___5, KM___6, KM_PLS }, \
26 { KM___1, KM___2, KM___3, KC_NO }, \
27 { KM___0, KC_NO, KM_DOT, KM_ENT } \
28}
29
30// This is the 21-key keypad to 2x11 element matrix mapping
31#define LAYOUT_pad21( \
32 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
33 KM_NUM, KM_FSL, KM_AST, KM_MIN, \
34 KM___7, KM___8, KM___9, \
35 KM___4, KM___5, KM___6, KM_PLS, \
36 KM___1, KM___2, KM___3, \
37 KM___0, KM_DOT, KM_ENT \
38) { \
39 { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
40 { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
41}
42
13#endif 43#endif
diff --git a/keyboards/handwired/arrow_pad/info.json b/keyboards/handwired/arrow_pad/info.json
new file mode 100644
index 000000000..ad15e8e74
--- /dev/null
+++ b/keyboards/handwired/arrow_pad/info.json
@@ -0,0 +1,62 @@
1{
2 "keyboard_name": "arrow_pad",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 4,
6 "height": 6,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"label":"KM_ESC", "x":0, "y":0},
11 {"label":"KM_TAB", "x":1, "y":0},
12 {"label":"KM_BSL", "x":2, "y":0},
13 {"label":"KM_ARR", "x":3, "y":0},
14 {"label":"KM_NUM", "x":0, "y":1},
15 {"label":"KM_FSL", "x":1, "y":1},
16 {"label":"KM_AST", "x":2, "y":1},
17 {"label":"KM_MIN", "x":3, "y":1},
18 {"label":"KM___7", "x":0, "y":2},
19 {"label":"KM___8", "x":1, "y":2},
20 {"label":"KM___9", "x":2, "y":2},
21 {"label":"KM_EQU", "x":3, "y":2},
22 {"label":"KM___4", "x":0, "y":3},
23 {"label":"KM___5", "x":1, "y":3},
24 {"label":"KM___6", "x":2, "y":3},
25 {"label":"KM_PLS", "x":3, "y":3},
26 {"label":"KM___1", "x":0, "y":4},
27 {"label":"KM___2", "x":1, "y":4},
28 {"label":"KM___3", "x":2, "y":4},
29 {"label":"___ENT", "x":3, "y":4},
30 {"label":"KM___0", "x":0, "y":5},
31 {"label":"_____0", "x":1, "y":5},
32 {"label":"KM_DOT", "x":2, "y":5},
33 {"label":"KM_ENT", "x":3, "y":5}
34 ]
35 },
36 "LAYOUT_pad21": {
37 "layout": [
38 {"label":"KM_ESC", "x":0, "y":0},
39 {"label":"KM_TAB", "x":1, "y":0},
40 {"label":"KM_BSL", "x":2, "y":0},
41 {"label":"KM_ARR", "x":3, "y":0},
42 {"label":"KM_NUM", "x":0, "y":1},
43 {"label":"KM_FSL", "x":1, "y":1},
44 {"label":"KM_AST", "x":2, "y":1},
45 {"label":"KM_MIN", "x":3, "y":1},
46 {"label":"KM___7", "x":0, "y":2},
47 {"label":"KM___8", "x":1, "y":2},
48 {"label":"KM___9", "x":2, "y":2},
49 {"label":"KM___4", "x":0, "y":3},
50 {"label":"KM___5", "x":1, "y":3},
51 {"label":"KM___6", "x":2, "y":3},
52 {"label":"KM_PLS", "x":3, "y":2, "h":2},
53 {"label":"KM___1", "x":0, "y":4},
54 {"label":"KM___2", "x":1, "y":4},
55 {"label":"KM___3", "x":2, "y":4},
56 {"label":"KM___0", "x":0, "y":5, "w":2},
57 {"label":"KM_DOT", "x":2, "y":5},
58 {"label":"KM_ENT", "x":3, "y":4, "h":2}
59 ]
60 }
61 }
62}
diff --git a/keyboards/handwired/arrow_pad/keymaps/default/keymap.c b/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
index b5d304708..dd729c59a 100644
--- a/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
@@ -1,35 +1,18 @@
1 1
2#include "arrow_pad.h" 2#include QMK_KEYBOARD_H
3#include "led.h" 3#include "led.h"
4 4
5// This is the 21-key keypad to 2x11 element matrix mapping 5enum layers {
6#define LAYOUT( \ 6 LAYER_BASE,
7 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ 7 LAYER_EDIT,
8 KM_NUM, KM_FSL, KM_AST, KM_MIN, \ 8 LAYER_FUNCTION
9 KM___7, KM___8, KM___9, KM_EQU, \ 9};
10 KM___4, KM___5, KM___6, KM_PLS, \
11 KM___1, KM___2, KM___3, ___ENT, \
12 KM___0, _____0, KM_DOT, KM_ENT \
13) { \
14 { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
15 { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
16 { KM___7, KM___8, KM___9, KM_EQU }, \
17 { KM___4, KM___5, KM___6, KM_PLS }, \
18 { KM___1, KM___2, KM___3, KC_NO }, \
19 { KM___0, KC_NO, KM_DOT, KM_ENT } \
20}
21
22#define LAYER_BASE 0
23#define LAYER_EDIT 1
24#define LAYER_FUNCTION 2
25
26#define MACRO_COPY_CUT 0
27#define MACRO_SHIFT_CONTROL 1
28#define MACRO_CONTROL_ALT 2
29 10
30#define M_COPY KC_FN5 11enum custom_keycodes {
31#define M_SHFCT KC_FN6 12 M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
32#define M_CTALT KC_FN7 13 M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
14 M_CTALT // KC_FN7: MACRO_CONTROL_ALT
15};
33 16
34#define SC_UNDO LCTL(KC_Z) 17#define SC_UNDO LCTL(KC_Z)
35#define SC_REDO LCTL(KC_Y) 18#define SC_REDO LCTL(KC_Y)
@@ -42,13 +25,10 @@
42#define SC_ACLS LALT(KC_F4) 25#define SC_ACLS LALT(KC_F4)
43#define SC_CCLS LCTL(KC_F4) 26#define SC_CCLS LCTL(KC_F4)
44 27
45#define _______ KC_TRNS
46#define XXXXXXX KC_NO
47
48const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
49 29
50[LAYER_BASE] = LAYOUT( \ 30[LAYER_BASE] = LAYOUT( \
51 KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \ 31 KC_ESC, KC_TAB, KC_BSLS, MO(2), \
52 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ 32 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
53 KC_P7, KC_P8, KC_P9, KC_PEQL, \ 33 KC_P7, KC_P8, KC_P9, KC_PEQL, \
54 KC_P4, KC_P5, KC_P6, KC_PPLS, \ 34 KC_P4, KC_P5, KC_P6, KC_PPLS, \
@@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
57 37
58[LAYER_EDIT] = LAYOUT( \ 38[LAYER_EDIT] = LAYOUT( \
59 KC_ESC, KC_TAB, KC_SPC, _______, \ 39 KC_ESC, KC_TAB, KC_SPC, _______, \
60 KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \ 40 TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
61 KC_HOME, KC_UP, KC_PGUP, KC_LALT, \ 41 KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
62 KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \ 42 KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
63 KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \ 43 KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
64 KC_BSPC, KC_PENT, KC_DEL, M_SHFCT), 44 KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
65 45
66[LAYER_FUNCTION] = LAYOUT( \ 46[LAYER_FUNCTION] = LAYOUT( \
67 KC_FN2, KC_FN3, KC_FN4, _______, \ 47 BL_TOGG, BL_INC, BL_DEC, _______, \
68 KC_FN1, _______, _______, _______, \ 48 TG(1), _______, _______, _______, \
69 _______, _______, _______, _______, \ 49 _______, _______, _______, _______, \
70 _______, _______, _______, _______, \ 50 _______, _______, _______, _______, \
71 _______, _______, _______, XXXXXXX, \ 51 _______, _______, _______, XXXXXXX, \
@@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
74}; 54};
75 55
76 56
77const uint16_t PROGMEM fn_actions[] = { 57bool process_record_user(uint16_t keycode, keyrecord_t * record) {
78 [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION), 58 // MACRODOWN only works in this function
79 [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT), 59 switch (keycode) {
80 [2] = ACTION_BACKLIGHT_TOGGLE(), 60
81 [3] = ACTION_BACKLIGHT_INCREASE(), 61 case M_COPY:
82 [4] = ACTION_BACKLIGHT_DECREASE(), 62 if (record->event.pressed) {
83 [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT), 63 register_code(KC_LCTL);
84 [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL), 64 if (record->tap.count == 1) {
85 [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT), 65 register_code(KC_C);
86 66 unregister_code(KC_C);
87}; 67 } else if (record->tap.count == 2) {
88 68 register_code(KC_X);
89 69 unregister_code(KC_X);
90void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) 70 }
91{ 71 unregister_code(KC_LCTL);
92} 72 }
73 break;
93 74
75 case M_SHFCT:
76 if (record->event.pressed) {
77 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
78 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
79 if (record->tap.count == 3) register_code(KC_PENT);;
80 } else {
81 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
82 unregister_code(KC_PENT);
83 }
84 break;
94 85
95const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 86 case M_CTALT:
96{ 87 if (record->event.pressed) {
97 // MACRODOWN only works in this function 88 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
98 switch (id) { 89 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
99 90 } else {
100 case MACRO_COPY_CUT: 91 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
101 if (record->event.pressed) {
102 register_code(KC_LCTL);
103 if (record->tap.count == 1) {
104 register_code(KC_C);
105 unregister_code(KC_C);
106 }
107 else if (record->tap.count == 2) {
108 register_code(KC_X);
109 unregister_code(KC_X);
110 }
111 unregister_code(KC_LCTL);
112 }
113 break;
114
115 case MACRO_SHIFT_CONTROL:
116 if (record->event.pressed) {
117 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
118 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
119 if (record->tap.count == 3) register_code(KC_PENT);;
120 }
121 else {
122 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
123 unregister_code(KC_PENT);
124 }
125 break;
126
127 case MACRO_CONTROL_ALT:
128 if (record->event.pressed) {
129 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
130 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
131 }
132 else {
133 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
134 }
135 break;
136 } 92 }
93 break;
94 }
137 95
138 return MACRO_NONE; 96 return true;
139} 97}
140 98
141void led_set_user(uint8_t usb_led) 99void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c b/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
index a29f9e101..169297635 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
@@ -1,32 +1,18 @@
1 1
2#include "arrow_pad.h" 2#include QMK_KEYBOARD_H
3#include "led.h" 3#include "led.h"
4 4
5// This is the 21-key keypad to 2x11 element matrix mapping 5enum layers {
6#define LAYOUT( \ 6 LAYER_BASE,
7 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ 7 LAYER_EDIT,
8 KM_NUM, KM_FSL, KM_AST, KM_MIN, \ 8 LAYER_FUNCTION
9 KM___7, KM___8, KM___9, ___PLS, \ 9};
10 KM___4, KM___5, KM___6, KM_PLS, \
11 KM___1, KM___2, KM___3, ___ENT, \
12 KM___0, _____0, KM_DOT, KM_ENT \
13) { \
14 { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
15 { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
16}
17
18
19#define LAYER_BASE 0
20#define LAYER_EDIT 1
21#define LAYER_FUNCTION 2
22
23#define MACRO_COPY_CUT 0
24#define MACRO_SHIFT_CONTROL 1
25#define MACRO_CONTROL_ALT 2
26 10
27#define M_COPY KC_FN5 11enum custom_keycodes {
28#define M_SHFCT KC_FN6 12 M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
29#define M_CTALT KC_FN7 13 M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
14 M_CTALT // KC_FN7: MACRO_CONTROL_ALT
15};
30 16
31#define SC_UNDO LCTL(KC_Z) 17#define SC_UNDO LCTL(KC_Z)
32#define SC_REDO LCTL(KC_Y) 18#define SC_REDO LCTL(KC_Y)
@@ -39,100 +25,75 @@
39#define SC_ACLS LALT(KC_F4) 25#define SC_ACLS LALT(KC_F4)
40#define SC_CCLS LCTL(KC_F4) 26#define SC_CCLS LCTL(KC_F4)
41 27
42#define _______ KC_TRNS
43#define XXXXXXX KC_NO
44
45const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46 29
47[LAYER_BASE] = LAYOUT( \ 30[LAYER_BASE] = LAYOUT_pad21( \
48 KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \ 31 KC_ESC, KC_TAB, KC_BSLS, MO(2), \
49 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ 32 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
50 KC_P7, KC_P8, KC_P9, XXXXXXX, \ 33 KC_P7, KC_P8, KC_P9, \
51 KC_P4, KC_P5, KC_P6, KC_PPLS, \ 34 KC_P4, KC_P5, KC_P6, KC_PPLS, \
52 KC_P1, KC_P2, KC_P3, XXXXXXX, \ 35 KC_P1, KC_P2, KC_P3, \
53 KC_P0, XXXXXXX, KC_PDOT, KC_PENT ), 36 KC_P0, KC_PDOT, KC_PENT ),
54 37
55[LAYER_EDIT] = LAYOUT( \ 38[LAYER_EDIT] = LAYOUT_pad21( \
56 KC_ESC, KC_TAB, KC_SPC, _______, \ 39 KC_ESC, KC_TAB, KC_SPC, _______, \
57 KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \ 40 TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
58 KC_HOME, KC_UP, KC_PGUP, XXXXXXX, \ 41 KC_HOME, KC_UP, KC_PGUP, \
59 KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \ 42 KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \
60 KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \ 43 KC_END, KC_DOWN, KC_PGDN, \
61 KC_BSPC, XXXXXXX, KC_DEL, M_SHFCT), 44 KC_BSPC, KC_DEL, M_SHFCT),
62 45
63[LAYER_FUNCTION] = LAYOUT( \ 46[LAYER_FUNCTION] = LAYOUT_pad21( \
64 KC_FN2, KC_FN3, KC_FN4, _______, \ 47 BL_TOGG, BL_INC, BL_DEC, _______, \
65 KC_FN1, _______, _______, _______, \ 48 TG(1), _______, _______, _______, \
66 _______, _______, _______, XXXXXXX, \ 49 _______, _______, _______, \
67 _______, _______, _______, _______, \ 50 _______, _______, _______, _______, \
68 _______, _______, _______, XXXXXXX, \ 51 _______, _______, _______, \
69 RESET, XXXXXXX, _______, _______ ), 52 RESET, _______, _______ ),
70
71};
72
73
74const uint16_t PROGMEM fn_actions[] = {
75 [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
76 [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
77 [2] = ACTION_BACKLIGHT_TOGGLE(),
78 [3] = ACTION_BACKLIGHT_INCREASE(),
79 [4] = ACTION_BACKLIGHT_DECREASE(),
80 [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
81 [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
82 [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
83 53
84}; 54};
85 55
86 56
87void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) 57bool process_record_user(uint16_t keycode, keyrecord_t * record) {
88{ 58 // MACRODOWN only works in this function
89} 59 switch (keycode) {
60
61 case M_COPY:
62 if (record->event.pressed) {
63 register_code(KC_LCTL);
64 if (record->tap.count == 1) {
65 register_code(KC_C);
66 unregister_code(KC_C);
67 } else if (record->tap.count == 2) {
68 register_code(KC_X);
69 unregister_code(KC_X);
70 }
71 unregister_code(KC_LCTL);
72 }
73 break;
90 74
75 case M_SHFCT:
76 if (record->event.pressed) {
77 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
78 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
79 if (record->tap.count == 3) register_code(KC_PENT);;
80 } else {
81 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
82 unregister_code(KC_PENT);
83 }
84 break;
91 85
92const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 86 case M_CTALT:
93{ 87 if (record->event.pressed) {
94 // MACRODOWN only works in this function 88 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
95 switch (id) { 89 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
96 90 } else {
97 case MACRO_COPY_CUT: 91 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
98 if (record->event.pressed) {
99 register_code(KC_LCTL);
100 if (record->tap.count == 1) {
101 register_code(KC_C);
102 unregister_code(KC_C);
103 }
104 else if (record->tap.count == 2) {
105 register_code(KC_X);
106 unregister_code(KC_X);
107 }
108 unregister_code(KC_LCTL);
109 }
110 break;
111
112 case MACRO_SHIFT_CONTROL:
113 if (record->event.pressed) {
114 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
115 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
116 if (record->tap.count == 3) register_code(KC_PENT);;
117 }
118 else {
119 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
120 unregister_code(KC_PENT);
121 }
122 break;
123
124 case MACRO_CONTROL_ALT:
125 if (record->event.pressed) {
126 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
127 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
128 }
129 else {
130 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
131 }
132 break;
133 } 92 }
93 break;
94 }
134 95
135 return MACRO_NONE; 96 return true;
136} 97}
137 98
138void led_set_user(uint8_t usb_led) 99void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c b/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
index b5d304708..dd729c59a 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
@@ -1,35 +1,18 @@
1 1
2#include "arrow_pad.h" 2#include QMK_KEYBOARD_H
3#include "led.h" 3#include "led.h"
4 4
5// This is the 21-key keypad to 2x11 element matrix mapping 5enum layers {
6#define LAYOUT( \ 6 LAYER_BASE,
7 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ 7 LAYER_EDIT,
8 KM_NUM, KM_FSL, KM_AST, KM_MIN, \ 8 LAYER_FUNCTION
9 KM___7, KM___8, KM___9, KM_EQU, \ 9};
10 KM___4, KM___5, KM___6, KM_PLS, \
11 KM___1, KM___2, KM___3, ___ENT, \
12 KM___0, _____0, KM_DOT, KM_ENT \
13) { \
14 { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
15 { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
16 { KM___7, KM___8, KM___9, KM_EQU }, \
17 { KM___4, KM___5, KM___6, KM_PLS }, \
18 { KM___1, KM___2, KM___3, KC_NO }, \
19 { KM___0, KC_NO, KM_DOT, KM_ENT } \
20}
21
22#define LAYER_BASE 0
23#define LAYER_EDIT 1
24#define LAYER_FUNCTION 2
25
26#define MACRO_COPY_CUT 0
27#define MACRO_SHIFT_CONTROL 1
28#define MACRO_CONTROL_ALT 2
29 10
30#define M_COPY KC_FN5 11enum custom_keycodes {
31#define M_SHFCT KC_FN6 12 M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
32#define M_CTALT KC_FN7 13 M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
14 M_CTALT // KC_FN7: MACRO_CONTROL_ALT
15};
33 16
34#define SC_UNDO LCTL(KC_Z) 17#define SC_UNDO LCTL(KC_Z)
35#define SC_REDO LCTL(KC_Y) 18#define SC_REDO LCTL(KC_Y)
@@ -42,13 +25,10 @@
42#define SC_ACLS LALT(KC_F4) 25#define SC_ACLS LALT(KC_F4)
43#define SC_CCLS LCTL(KC_F4) 26#define SC_CCLS LCTL(KC_F4)
44 27
45#define _______ KC_TRNS
46#define XXXXXXX KC_NO
47
48const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
49 29
50[LAYER_BASE] = LAYOUT( \ 30[LAYER_BASE] = LAYOUT( \
51 KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \ 31 KC_ESC, KC_TAB, KC_BSLS, MO(2), \
52 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ 32 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
53 KC_P7, KC_P8, KC_P9, KC_PEQL, \ 33 KC_P7, KC_P8, KC_P9, KC_PEQL, \
54 KC_P4, KC_P5, KC_P6, KC_PPLS, \ 34 KC_P4, KC_P5, KC_P6, KC_PPLS, \
@@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
57 37
58[LAYER_EDIT] = LAYOUT( \ 38[LAYER_EDIT] = LAYOUT( \
59 KC_ESC, KC_TAB, KC_SPC, _______, \ 39 KC_ESC, KC_TAB, KC_SPC, _______, \
60 KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \ 40 TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
61 KC_HOME, KC_UP, KC_PGUP, KC_LALT, \ 41 KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
62 KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \ 42 KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
63 KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \ 43 KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
64 KC_BSPC, KC_PENT, KC_DEL, M_SHFCT), 44 KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
65 45
66[LAYER_FUNCTION] = LAYOUT( \ 46[LAYER_FUNCTION] = LAYOUT( \
67 KC_FN2, KC_FN3, KC_FN4, _______, \ 47 BL_TOGG, BL_INC, BL_DEC, _______, \
68 KC_FN1, _______, _______, _______, \ 48 TG(1), _______, _______, _______, \
69 _______, _______, _______, _______, \ 49 _______, _______, _______, _______, \
70 _______, _______, _______, _______, \ 50 _______, _______, _______, _______, \
71 _______, _______, _______, XXXXXXX, \ 51 _______, _______, _______, XXXXXXX, \
@@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
74}; 54};
75 55
76 56
77const uint16_t PROGMEM fn_actions[] = { 57bool process_record_user(uint16_t keycode, keyrecord_t * record) {
78 [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION), 58 // MACRODOWN only works in this function
79 [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT), 59 switch (keycode) {
80 [2] = ACTION_BACKLIGHT_TOGGLE(), 60
81 [3] = ACTION_BACKLIGHT_INCREASE(), 61 case M_COPY:
82 [4] = ACTION_BACKLIGHT_DECREASE(), 62 if (record->event.pressed) {
83 [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT), 63 register_code(KC_LCTL);
84 [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL), 64 if (record->tap.count == 1) {
85 [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT), 65 register_code(KC_C);
86 66 unregister_code(KC_C);
87}; 67 } else if (record->tap.count == 2) {
88 68 register_code(KC_X);
89 69 unregister_code(KC_X);
90void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) 70 }
91{ 71 unregister_code(KC_LCTL);
92} 72 }
73 break;
93 74
75 case M_SHFCT:
76 if (record->event.pressed) {
77 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
78 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
79 if (record->tap.count == 3) register_code(KC_PENT);;
80 } else {
81 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
82 unregister_code(KC_PENT);
83 }
84 break;
94 85
95const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 86 case M_CTALT:
96{ 87 if (record->event.pressed) {
97 // MACRODOWN only works in this function 88 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
98 switch (id) { 89 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
99 90 } else {
100 case MACRO_COPY_CUT: 91 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
101 if (record->event.pressed) {
102 register_code(KC_LCTL);
103 if (record->tap.count == 1) {
104 register_code(KC_C);
105 unregister_code(KC_C);
106 }
107 else if (record->tap.count == 2) {
108 register_code(KC_X);
109 unregister_code(KC_X);
110 }
111 unregister_code(KC_LCTL);
112 }
113 break;
114
115 case MACRO_SHIFT_CONTROL:
116 if (record->event.pressed) {
117 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
118 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
119 if (record->tap.count == 3) register_code(KC_PENT);;
120 }
121 else {
122 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
123 unregister_code(KC_PENT);
124 }
125 break;
126
127 case MACRO_CONTROL_ALT:
128 if (record->event.pressed) {
129 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
130 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
131 }
132 else {
133 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
134 }
135 break;
136 } 92 }
93 break;
94 }
137 95
138 return MACRO_NONE; 96 return true;
139} 97}
140 98
141void led_set_user(uint8_t usb_led) 99void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/readme.md b/keyboards/handwired/arrow_pad/readme.md
index d0d172272..43a0e33c4 100644
--- a/keyboards/handwired/arrow_pad/readme.md
+++ b/keyboards/handwired/arrow_pad/readme.md
@@ -94,13 +94,13 @@ More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.
94The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix. 94The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
95 95
96``` 96```
97#define KEYMAP( \ 97#define LAYOUT_pad21( \
98 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ 98 KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
99 KM_NUM, KM_FSL, KM_AST, KM_MIN, \ 99 KM_NUM, KM_FSL, KM_AST, KM_MIN, \
100 KM___7, KM___8, KM___9, ___PLS, \ 100 KM___7, KM___8, KM___9, \
101 KM___4, KM___5, KM___6, KM_PLS, \ 101 KM___4, KM___5, KM___6, KM_PLS, \
102 KM___1, KM___2, KM___3, ___ENT, \ 102 KM___1, KM___2, KM___3, \
103 KM___0, _____0, KM_DOT, KM_ENT \ 103 KM___0, KM_DOT, KM_ENT \
104) { \ 104) { \
105 { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \ 105 { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
106 { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \ 106 { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
@@ -119,7 +119,7 @@ Download or clone the whole firmware and navigate to the keyboards/arrow_pad fol
119Depending on which keymap you would like to use, you will have to compile slightly differently. 119Depending on which keymap you would like to use, you will have to compile slightly differently.
120 120
121### Default 121### Default
122To build with the default keymap, simply run `make default`. 122To build with the default keymap, simply run `make handwired/arrow_pad:default`.
123 123
124### Other Keymaps 124### Other Keymaps
125Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. 125Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
@@ -127,7 +127,7 @@ Several version of keymap are available in advance but you are recommended to de
127To build the firmware binary hex file with a keymap just do `make` with a keymap like this: 127To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
128 128
129``` 129```
130$ make [default|pad_21|pad_24|<name>] 130$ make handwired/arrow_pad:[default|pad_21|pad_24|<name>]
131``` 131```
132 132
133Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. 133Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.