aboutsummaryrefslogtreecommitdiff
path: root/keyboard/hhkb/keymap.c
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2012-12-16 02:32:07 +0900
committertmk <nobody@nowhere>2012-12-16 02:32:07 +0900
commit8a709c2750eab09ec0f83450410a13640931d48e (patch)
tree224bcea716521704d63993ed54917152a6bf046e /keyboard/hhkb/keymap.c
parent77f157943f4e083fb9f1eaa0a55078b128842458 (diff)
downloadqmk_firmware-8a709c2750eab09ec0f83450410a13640931d48e.tar.gz
qmk_firmware-8a709c2750eab09ec0f83450410a13640931d48e.zip
Add initial fix for new keymap.
Diffstat (limited to 'keyboard/hhkb/keymap.c')
-rw-r--r--keyboard/hhkb/keymap.c109
1 files changed, 55 insertions, 54 deletions
diff --git a/keyboard/hhkb/keymap.c b/keyboard/hhkb/keymap.c
index 5dc5582ec..382996ec7 100644
--- a/keyboard/hhkb/keymap.c
+++ b/keyboard/hhkb/keymap.c
@@ -26,6 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
26#include "print.h" 26#include "print.h"
27#include "debug.h" 27#include "debug.h"
28#include "util.h" 28#include "util.h"
29#include "action.h"
29#include "keymap.h" 30#include "keymap.h"
30 31
31 32
@@ -49,33 +50,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
49 { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_NO } \ 50 { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_NO } \
50} 51}
51 52
52#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
53
54 53
55// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. 54static const action_t PROGMEM fn_actions[] = {
56static const uint8_t PROGMEM fn_layer[] = { 55 ACTION_LAYER(0), // Fn0
57 0, // Fn0 56 ACTION_LAYER(1), // Fn1
58 1, // Fn1 57 ACTION_LAYER_KEY(2, KC_SLASH), // Fn2
59 2, // Fn2 58 ACTION_LAYER_KEY(3, KC_SCLN), // Fn3
60 3, // Fn3 59 ACTION_LAYER(3), // Fn3
61 3, // Fn4 60 ACTION_LAYER_KEY(5, KC_SPC), // Fn5
62 5, // Fn5 61 NO_ACTION, // Fn6
63 0, // Fn6 62 NO_ACTION, // Fn7
64 0 // Fn7
65}; 63};
66 64
67// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
68// See layer.c for details.
69static const uint8_t PROGMEM fn_keycode[] = {
70 KC_NO, // Fn0
71 KC_NO, // Fn1
72 KC_SLSH, // Fn2
73 KC_SCLN, // Fn3
74 KC_NO, // Fn4
75 KC_SPC, // Fn5
76 KC_NO, // Fn6
77 KC_NO // Fn7
78};
79 65
80static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 66static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
81 /* Layer 0: Default Layer 67 /* Layer 0: Default Layer
@@ -149,24 +135,11 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
149 * `--------------------------------------------' 135 * `--------------------------------------------'
150 * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel 136 * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
151 */ 137 */
152#ifdef HOST_IWRAP
153// iWRAP does not support mouse wheel, use these keycodes to remap as wheel
154#define KC_KPPL KC_KP_PLUS
155#define KC_KPMI KC_KP_MINUS
156#define KC_KPAS KC_KP_ASTERISK
157#define KC_KPSL KC_KP_SLASH
158 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
159 TAB, KPAS,KPPL,MS_U,KPMI,KPSL,KPAS,KPPL,KPMI,KPSL,NO, NO, NO, BSPC, \
160 LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \
161 LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,NO, NO, NO, RSFT,NO, \
162 LGUI,LALT, BTN1, RALT,FN4),
163#else
164 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ 138 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
165 TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ 139 TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \
166 LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ 140 LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \
167 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \ 141 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
168 LGUI,LALT, BTN1, RALT,FN4), 142 LGUI,LALT, BTN1, RALT,FN4),
169#endif
170 143
171 /* Layer 4: Matias half keyboard style (Space) 144 /* Layer 4: Matias half keyboard style (Space)
172 * ,-----------------------------------------------------------. 145 * ,-----------------------------------------------------------.
@@ -188,33 +161,61 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
188 LGUI,LALT, FN5, RALT,RGUI), 161 LGUI,LALT, FN5, RALT,RGUI),
189 162
190 /* Layer5: another Mouse mode (Space) */ 163 /* Layer5: another Mouse mode (Space) */
191#ifdef HOST_IWRAP
192 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
193 TAB, KPAS,KPPL,MS_U,KPMI,KPSL,KPAS,KPPL,KPMI,KPSL,NO, NO, NO, BSPC, \
194 LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \
195 LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
196 LGUI,LALT, FN5, RALT,RGUI),
197#else
198 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ 164 KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
199 TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ 165 TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \
200 LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ 166 LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \
201 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \ 167 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
202 LGUI,LALT, FN5, RALT,RGUI), 168 LGUI,LALT, FN5, RALT,RGUI),
203#endif
204}; 169};
205 170
171#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
206 172
207uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
208{
209 return KEYCODE(layer, row, col);
210}
211 173
212uint8_t keymap_fn_layer(uint8_t index) 174/* legacy interface */
213{ 175uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) { return 0; }
214 return pgm_read_byte(&fn_layer[index]); 176uint8_t keymap_fn_layer(uint8_t fn_bits) { return 0; }
177uint8_t keymap_fn_keycode(uint8_t fn_bits) { return 0; }
178
179
180action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) {
181 /* convert from legacy keycode to action */
182 uint8_t key = KEYCODE(layer, row, col);
183 action_t action;
184 switch (key) {
185 case KC_A ... KC_EXSEL:
186 action = (action_t)ACTION_KEY(key);
187 break;
188 case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
189 action = (action_t)ACTION_USAGE_SYSTEM(key2system(key));
190 break;
191 case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
192 action = (action_t)ACTION_USAGE_CONSUMER(key2consumer(key));
193 break;
194 case KC_MS_UP ... KC_MS_ACCEL2:
195 action = (action_t)ACTION_MOUSEKEY(key);
196 break;
197 case KC_LCTRL ... KC_LGUI:
198 action = (action_t)ACTION_LMODS(MOD_BIT(key));
199 break;
200 case KC_RCTRL ... KC_RGUI:
201 action = (action_t)ACTION_RMODS(MOD_BIT(key)>>4);
202 break;
203 case KC_FN0 ... KC_FN7:
204 action = (action_t)pgm_read_word(&fn_actions[FN_INDEX(key)]);
205 break;
206 case KC_NO ... KC_UNDEFINED:
207 default:
208 action = (action_t)NO_ACTION;
209 break;
210 }
211 debug("action: "); debug_hex16(action.code); debug("\n");
212 return action;
215} 213}
216 214
217uint8_t keymap_fn_keycode(uint8_t index) 215
216uint8_t keymap_process_event(keyevent_t event)
218{ 217{
219 return pgm_read_byte(&fn_keycode[index]); 218 action_t action = keymap_get_action(current_layer, event.key.row, event.key.col);
219 action_exec(action, event);
220 return 0;
220} 221}