aboutsummaryrefslogtreecommitdiff
path: root/keyboard/hhkb
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2013-02-04 22:53:45 +0900
committertmk <nobody@nowhere>2013-02-04 22:53:45 +0900
commitaad91a30a34d61739e1261bb82a1cb1ace581afa (patch)
treea8d265120be758e1ac496ad46e1b95a58c8481c7 /keyboard/hhkb
parent1d7962ba8a20323dc13cc913381608e117afaeb4 (diff)
downloadqmk_firmware-aad91a30a34d61739e1261bb82a1cb1ace581afa.tar.gz
qmk_firmware-aad91a30a34d61739e1261bb82a1cb1ace581afa.zip
Add macro feature.
Diffstat (limited to 'keyboard/hhkb')
-rw-r--r--keyboard/hhkb/keymap.c42
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] = {
162enum function_id { 161enum 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
196static 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 */
191void keymap_call_function(keyrecord_t *record, uint8_t id) 216void 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