diff options
| author | tmk <nobody@nowhere> | 2013-02-04 22:53:45 +0900 |
|---|---|---|
| committer | tmk <nobody@nowhere> | 2013-02-04 22:53:45 +0900 |
| commit | aad91a30a34d61739e1261bb82a1cb1ace581afa (patch) | |
| tree | a8d265120be758e1ac496ad46e1b95a58c8481c7 /keyboard/hhkb | |
| parent | 1d7962ba8a20323dc13cc913381608e117afaeb4 (diff) | |
| download | qmk_firmware-aad91a30a34d61739e1261bb82a1cb1ace581afa.tar.gz qmk_firmware-aad91a30a34d61739e1261bb82a1cb1ace581afa.zip | |
Add macro feature.
Diffstat (limited to 'keyboard/hhkb')
| -rw-r--r-- | keyboard/hhkb/keymap.c | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/keyboard/hhkb/keymap.c b/keyboard/hhkb/keymap.c index e11b4563a..f2f21e8ce 100644 --- a/keyboard/hhkb/keymap.c +++ b/keyboard/hhkb/keymap.c | |||
| @@ -21,12 +21,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 21 | #include <stdint.h> | 21 | #include <stdint.h> |
| 22 | #include <stdbool.h> | 22 | #include <stdbool.h> |
| 23 | #include <avr/pgmspace.h> | 23 | #include <avr/pgmspace.h> |
| 24 | #include "host.h" | ||
| 25 | #include "keycode.h" | 24 | #include "keycode.h" |
| 26 | #include "print.h" | ||
| 27 | #include "debug.h" | ||
| 28 | #include "util.h" | ||
| 29 | #include "action.h" | 25 | #include "action.h" |
| 26 | #include "action_macro.h" | ||
| 27 | #include "host.h" | ||
| 28 | #include "debug.h" | ||
| 30 | #include "keymap.h" | 29 | #include "keymap.h" |
| 31 | 30 | ||
| 32 | 31 | ||
| @@ -69,7 +68,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 69 | TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ | 68 | TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ |
| 70 | FN6, A, S, D, F, G, H, J, K, L, FN3, QUOT,FN7, \ | 69 | FN6, A, S, D, F, G, H, J, K, L, FN3, QUOT,FN7, \ |
| 71 | FN8, Z, X, C, V, B, N, M, COMM,DOT, FN2, FN12,FN10, \ | 70 | FN8, Z, X, C, V, B, N, M, COMM,DOT, FN2, FN12,FN10, \ |
| 72 | LGUI,LALT, FN5, RALT,FN4), | 71 | LGUI,LALT, FN5, FN13,FN4), |
| 73 | 72 | ||
| 74 | /* Layer 1: HHKB mode (HHKB Fn) | 73 | /* Layer 1: HHKB mode (HHKB Fn) |
| 75 | * ,-----------------------------------------------------------. | 74 | * ,-----------------------------------------------------------. |
| @@ -162,6 +161,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 162 | enum function_id { | 161 | enum function_id { |
| 163 | LSHIFT_LPAREN, | 162 | LSHIFT_LPAREN, |
| 164 | RSHIFT_RPAREN, | 163 | RSHIFT_RPAREN, |
| 164 | MACRO = 0xff | ||
| 165 | }; | 165 | }; |
| 166 | 166 | ||
| 167 | /* | 167 | /* |
| @@ -172,7 +172,8 @@ static const uint16_t PROGMEM fn_actions[] = { | |||
| 172 | ACTION_LAYER_SET(1), // FN1 | 172 | ACTION_LAYER_SET(1), // FN1 |
| 173 | ACTION_LAYER_SET_TAP_KEY(2, KC_SLASH), // FN2 | 173 | ACTION_LAYER_SET_TAP_KEY(2, KC_SLASH), // FN2 |
| 174 | ACTION_LAYER_SET_TAP_KEY(3, KC_SCLN), // FN3 | 174 | ACTION_LAYER_SET_TAP_KEY(3, KC_SCLN), // FN3 |
| 175 | ACTION_LAYER_SET(3), // FN4 | 175 | //ACTION_LAYER_SET(3), // FN4 |
| 176 | ACTION_FUNCTION(MACRO, 0), // FN4 | ||
| 176 | ACTION_LAYER_SET_TAP_KEY(5, KC_SPC), // FN5 | 177 | ACTION_LAYER_SET_TAP_KEY(5, KC_SPC), // FN5 |
| 177 | ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // FN6 | 178 | ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // FN6 |
| 178 | ACTION_RMOD_TAP_KEY(KC_RCTL, KC_ENT), // FN7 | 179 | ACTION_RMOD_TAP_KEY(KC_RCTL, KC_ENT), // FN7 |
| @@ -183,12 +184,36 @@ static const uint16_t PROGMEM fn_actions[] = { | |||
| 183 | //ACTION_LAYER_BIT_TAP_TOGGLE(1), // FN10 | 184 | //ACTION_LAYER_BIT_TAP_TOGGLE(1), // FN10 |
| 184 | ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // FN11 | 185 | ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // FN11 |
| 185 | ACTION_FUNCTION_TAP(RSHIFT_RPAREN), // FN12 | 186 | ACTION_FUNCTION_TAP(RSHIFT_RPAREN), // FN12 |
| 187 | ACTION_FUNCTION(MACRO, 1), // FN13 | ||
| 186 | }; | 188 | }; |
| 187 | 189 | ||
| 190 | |||
| 191 | /* | ||
| 192 | * Macro definition | ||
| 193 | */ | ||
| 194 | #define MACRO(...) ({ static prog_macro_t _m[] PROGMEM = { __VA_ARGS__ }; _m; }) | ||
| 195 | #define MACRO_NONE 0 | ||
| 196 | static const prog_macro_t *get_macro(uint8_t id, bool pressed) | ||
| 197 | { | ||
| 198 | switch (id) { | ||
| 199 | case 0: | ||
| 200 | return (pressed ? | ||
| 201 | MACRO( MD(LSHIFT), D(D), END ) : | ||
| 202 | MACRO( U(D), MU(LSHIFT), END ) ); | ||
| 203 | case 1: | ||
| 204 | return (pressed ? | ||
| 205 | MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ) : | ||
| 206 | MACRO_NONE ); | ||
| 207 | } | ||
| 208 | return 0; | ||
| 209 | } | ||
| 210 | |||
| 211 | |||
| 212 | |||
| 188 | /* | 213 | /* |
| 189 | * user defined action function | 214 | * user defined action function |
| 190 | */ | 215 | */ |
| 191 | void keymap_call_function(keyrecord_t *record, uint8_t id) | 216 | void keymap_call_function(keyrecord_t *record, uint8_t id, uint8_t opt) |
| 192 | { | 217 | { |
| 193 | keyevent_t event = record->event; | 218 | keyevent_t event = record->event; |
| 194 | uint8_t tap_count = record->tap_count; | 219 | uint8_t tap_count = record->tap_count; |
| @@ -261,6 +286,9 @@ void keymap_call_function(keyrecord_t *record, uint8_t id) | |||
| 261 | } | 286 | } |
| 262 | } | 287 | } |
| 263 | break; | 288 | break; |
| 289 | case MACRO: | ||
| 290 | action_macro_play(get_macro(opt, event.pressed)); | ||
| 291 | break; | ||
| 264 | } | 292 | } |
| 265 | } | 293 | } |
| 266 | 294 | ||
