]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/infinity_chibios/keymaps/hasu/keymap.c
Add ChibiOS support for QMK (#465)
[qmk_firmware.git] / keyboards / infinity_chibios / keymaps / hasu / keymap.c
1 #include "infinity_chibios.h"
2
3 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4     /* Layer 0: Default Layer
5      * ,-----------------------------------------------------------.
6      * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
7      * |-----------------------------------------------------------|
8      * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
9      * |-----------------------------------------------------------|
10      * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
11      * |-----------------------------------------------------------|
12      * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn0|
13      * |-----------------------------------------------------------'
14      * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
15      * `-----------------------------------------------------------'
16      */
17     [0] =
18     KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,GRV, \
19            TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
20            LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN6, \
21            FN7, Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN1, \
22            NO,  LGUI,LALT,          FN4,                FN5, RGUI,NO, NO),
23
24     /* Layer 1: HHKB mode (HHKB Fn)
25      * ,-----------------------------------------------------------.
26      * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
27      * |-----------------------------------------------------------|
28      * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Backs|
29      * |-----------------------------------------------------------|
30      * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
31      * |-----------------------------------------------------------|
32      * |        |   |   |   |   |   |  +|  -|End|PgD|Dow|      |   |
33      * `-----------------------------------------------------------'
34      * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
35      * `-----------------------------------------------------------'
36      */ 
37     [1] = 
38     KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
39            CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP,  TRNS,BSPC, \
40            LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
41            LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
42            TRNS,LGUI,LALT,          TRNS,               RALT,RGUI,TRNS,TRNS),
43
44     /* Layer 2: Vi mode[Slash]
45      * ,-----------------------------------------------------------.
46      * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
47      * |-----------------------------------------------------------|
48      * |Tab  |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd|   |   |   |Backs|
49      * |-----------------------------------------------------------|
50      * |Contro|   |Lef|Dow|Rig|   |Lef|Dow|Up |Rig|   |   |Return  |
51      * |-----------------------------------------------------------|
52      * |Shift   |   |   |   |   |   |Hom|PgD|PgUlEnd|Fn0|Shift |   |
53      * `-----------------------------------------------------------'
54      *       |Gui|Alt  |          Space        |Alt  |Gui|
55      *       `-------------------------------------------'
56      */
57     [2] = \
58     KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
59            TAB, HOME,PGDN,UP,  PGUP,END, HOME,PGDN,PGUP,END, NO,  NO,  NO,  BSPC, \
60            LCTL,NO,  LEFT,DOWN,RGHT,NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,  ENT, \
61            LSFT,NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \
62            TRNS,LGUI,LALT,          SPC,                RALT,RGUI,TRNS,TRNS),
63
64     /* Layer 3: Mouse mode(IJKL)[Semicolon]
65      * ,-----------------------------------------------------------.
66      * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
67      * |-----------------------------------------------------------|
68      * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
69      * |-----------------------------------------------------------|
70      * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Fn |   |Return  |
71      * |-----------------------------------------------------------|
72      * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
73      * `-----------------------------------------------------------'
74      *      |Gui |Alt  |          Mb1          |Fn   |Fn |
75      *      `--------------------------------------------'
76      * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
77      */
78     [3] = \
79     KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
80            FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
81            LCTL,ACL0,ACL1,ACL2,ACL2,NO,  NO,  MS_L,MS_D,MS_R,FN3, NO,  ENT, \
82            LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
83            TRNS,LGUI,LALT,          BTN1,               TRNS,TRNS,TRNS,TRNS),
84
85     /* Layer 4: Mouse mode(IJKL)[Space]
86      * ,-----------------------------------------------------------.
87      * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
88      * |-----------------------------------------------------------|
89      * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
90      * |-----------------------------------------------------------|
91      * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Mb1|   |Return  |
92      * |-----------------------------------------------------------|
93      * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
94      * `-----------------------------------------------------------'
95      *      |Gui |Alt  |          Mb1          |Fn   |Fn |
96      *      `--------------------------------------------'
97      * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
98      */
99     [4] = \
100     KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
101            FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
102            LCTL,VOLD,VOLU,MUTE,NO,  NO,  NO,  MS_L,MS_D,MS_R,BTN1,NO,  ENT, \
103            LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
104            TRNS,LGUI,LALT,          TRNS,               TRNS,TRNS,TRNS,TRNS),
105
106 };
107
108 /* id for user defined functions */
109 enum function_id {
110     LSHIFT_LPAREN,
111 };
112
113 enum macro_id {
114     HELLO,
115     VOLUP,
116     ALT_TAB,
117 };
118
119 /*
120  * Fn action definition
121  */
122 const uint16_t fn_actions[] = {
123     [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
124     [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
125     [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
126     [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN),           // Mousekey layer with Semicolon*
127     [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC),            // Mousekey layer with Space
128     [5] = ACTION_LAYER_MOMENTARY(4),                  // Mousekey layer(IJKL)
129     [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT),      // RControl with tap Enter
130     [7] = ACTION_MODS_ONESHOT(MOD_LSFT),              // Oneshot Shift
131     [8] = ACTION_MACRO(ALT_TAB),                      // Application switching
132     [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
133    [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
134 };
135
136 /*
137  * Macro definition
138  */
139 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
140 {
141     switch (id) {
142         case HELLO:
143             return (record->event.pressed ?
144                     MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
145                     MACRO_NONE );
146         case VOLUP:
147             return (record->event.pressed ?
148                     MACRO( D(VOLU), U(VOLU), END ) :
149                     MACRO_NONE );
150         case ALT_TAB:
151             return (record->event.pressed ?
152                     MACRO( D(LALT), D(TAB), END ) :
153                     MACRO( U(TAB), END ));
154     }
155     return MACRO_NONE;
156 }
157
158
159
160 /*
161  * user defined action function
162  */
163 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
164 {
165     if (record->event.pressed) dprint("P"); else dprint("R");
166     dprintf("%d", record->tap.count);
167     if (record->tap.interrupted) dprint("i");
168     dprint("\n");
169
170     switch (id) {
171         case LSHIFT_LPAREN:
172             // Shift parentheses example: LShft + tap '('
173             // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
174             // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
175             if (record->event.pressed) {
176                 if (record->tap.count > 0 && !record->tap.interrupted) {
177                     if (record->tap.interrupted) {
178                         dprint("tap interrupted\n");
179                         register_mods(MOD_BIT(KC_LSHIFT));
180                     }
181                 } else {
182                     register_mods(MOD_BIT(KC_LSHIFT));
183                 }
184             } else {
185                 if (record->tap.count > 0 && !(record->tap.interrupted)) {
186                     add_weak_mods(MOD_BIT(KC_LSHIFT));
187                     send_keyboard_report();
188                     register_code(KC_9);
189                     unregister_code(KC_9);
190                     del_weak_mods(MOD_BIT(KC_LSHIFT));
191                     send_keyboard_report();
192                     record->tap.count = 0;  // ad hoc: cancel tap
193                 } else {
194                     unregister_mods(MOD_BIT(KC_LSHIFT));
195                 }
196             }
197             break;
198     }
199 }