]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - keyboard/hhkb/keymap.c
Add timeout option to MODS_ONESHOT #66
[tmk_firmware.git] / keyboard / hhkb / keymap.c
index 7afbdbec2c072b21432d7bb6ae5e345d3298ddac..f2c6caf48026b9b082349b5eb8955d34eb2f2a28 100644 (file)
@@ -48,8 +48,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_NO    } \
 }
 
-
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+#ifdef KEYMAP_SECTION_ENABLE
+const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
+#else
+static const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+#endif
     /* Layer 0: Default Layer
      * ,-----------------------------------------------------------.
      * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|  `|
@@ -67,7 +70,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
            TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
            LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN4, \
             FN5,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN1, \
-                LGUI,LALT,          FN6,                RALT,FN7),
+                LGUI,LALT,          FN6,                RALT,RGUI),
 
     /* Layer 1: HHKB mode (HHKB Fn)
      * ,-----------------------------------------------------------.
@@ -150,7 +153,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      * ,-----------------------------------------------------------.
      * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
      * |-----------------------------------------------------------|
-     * |Tab  |   |   |   |   |   |MwL|MwD|MwU|MwR|   |   |   |Backs|
+     * |Tab  |   |   |   |   |   |MwL|MwD|MwU|MwR|   |Wbk|Wfr|Close|
      * |-----------------------------------------------------------|
      * |Contro|   |   |   |   |   |McL|McD|McU|McR|Fn0|   |Return  |
      * |-----------------------------------------------------------|
@@ -161,7 +164,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel 
      */
     KEYMAP(ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
-           TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,NO,  NO,  NO,  BSPC, \
+           TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,FN8, \
            LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,NO,  NO,  ENT, \
            LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,BTN4,BTN5,NO,  RSFT,NO, \
                 LGUI,LALT,          TRNS,               RALT,RGUI),
@@ -179,13 +182,18 @@ enum macro_id {
     LSHIFT_PAREN,
     RSHIFT_PAREN,
     HELLO,
+    VOLUP,
 };
 
 
 /*
  * Fn action definition
  */
-static const uint16_t PROGMEM fn_actions[] = {
+#ifdef KEYMAP_SECTION_ENABLE
+const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+#else
+static const uint16_t fn_actions[] PROGMEM = {
+#endif
     [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
     [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
     [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
@@ -194,6 +202,7 @@ static const uint16_t PROGMEM fn_actions[] = {
     [5] = ACTION_MODS_ONESHOT(MOD_LSFT),              // Oneshot Shift*
     [6] = ACTION_LAYER_TAP_KEY(5, KC_SPC),            // Mousekey layer with Space
     [7] = ACTION_LAYER_TOGGLE(3),                     // Mousekey layer(toggle)
+    [8] = ACTION_MODS_KEY(MOD_LCTL, KC_W),            // Close Tab
 
 //  [8] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC),       // LControl with tap Backspace
 //  [9] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC),        // LControl with tap Esc
@@ -202,13 +211,14 @@ static const uint16_t PROGMEM fn_actions[] = {
 //  [13] = ACTION_MACRO_TAP(LSHIFT_PAREN),             // Macro: LShift with tap '('
 //  [14] = ACTION_MACRO_TAP(RSHIFT_PAREN),             // Macro: RShift with tap ')'
 //  [15] = ACTION_MACRO(HELLO),                        // Macro: say hello
+//  [9] = ACTION_MACRO(VOLUP),                         // Macro: media key
 };
 
 
 /*
  * Macro definition
  */
-const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 {
     keyevent_t event = record->event;
     tap_t tap = record->tap;
@@ -217,23 +227,27 @@ const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t op
         case LSHIFT_PAREN:
             if (tap.count > 0 && !tap.interrupted) {
                 return (event.pressed ?
-                        MACRO( MD(LSHIFT), D(9), U(9), MU(LSHIFT), END ) : MACRO_NONE);
+                        MACRO( D(LSHIFT), D(9), U(9), U(LSHIFT), END ) : MACRO_NONE);
             } else {
                 return (event.pressed ?
-                        MACRO( MD(LSHIFT), END ) : MACRO( MU(LSHIFT), END ) );
+                        MACRO( D(LSHIFT), END ) : MACRO( U(LSHIFT), END ) );
             }
         case RSHIFT_PAREN:
             if (tap.count > 0 && !tap.interrupted) {
                 return (event.pressed ?
-                        MACRO( MD(RSHIFT), D(0), U(0), MU(RSHIFT), END ) : MACRO_NONE);
+                        MACRO( D(RSHIFT), D(0), U(0), U(RSHIFT), END ) : MACRO_NONE);
             } else {
                 return (event.pressed ?
-                        MACRO( MD(RSHIFT), END ) : MACRO( MU(RSHIFT), END ) );
+                        MACRO( D(RSHIFT), END ) : MACRO( U(RSHIFT), END ) );
             }
         case HELLO:
             return (event.pressed ?
                     MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
                     MACRO_NONE );
+        case VOLUP:
+            return (event.pressed ?
+                    MACRO( D(VOLU), U(VOLU), END ) :
+                    MACRO_NONE );
     }
     return MACRO_NONE;
 }
@@ -303,10 +317,6 @@ uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
 action_t keymap_fn_to_action(uint8_t keycode)
 {
     action_t action;
-    if (FN_INDEX(keycode) < sizeof(fn_actions) / sizeof(fn_actions[0])) {
-        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
-    } else {
-        action.code = ACTION_NO;
-    }
+    action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
     return action;
 }