]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/tada68/keymaps/bazooka/keymap.c
Remove redundant KC_TRNS and KC_NO fillers in remaining keymaps (#5154)
[qmk_firmware.git] / keyboards / tada68 / keymaps / bazooka / keymap.c
1 #include QMK_KEYBOARD_H
2
3 // Each layer gets a name for readability, which is then used in the keymap matrix below.
4 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
5 // Layer names don't all need to be of the same length, obviously, and you can also skip them
6 // entirely and just use numbers.
7 #define _BL 0
8 #define _MAC 1
9 #define _FUNC 2
10 #define _MOUSE 3
11
12 #define MAC_TOG TG(_MAC)
13
14 enum {
15   FUN_LAY = SAFE_RANGE,
16   MOU_TOG,
17   WIN_LCK,
18   WIN_KEY,
19 };
20
21 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22   /* Keymap _BL: (Base Layer) Default Layer
23    * ,----------------------------------------------------------------.
24    * |Esc`| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |~ ` |
25    * |----------------------------------------------------------------|
26    * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |Del |
27    * |----------------------------------------------------------------|
28    * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
29    * |----------------------------------------------------------------|
30    * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|PgDn|
31    * |----------------------------------------------------------------|
32    * |Ctrl|Win |Alt |        Space          |Alt| FN|Ctrl|Lef|Dow|Rig |
33    * `----------------------------------------------------------------'
34    */
35 [_BL] = LAYOUT_ansi(
36   KC_GESC,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_GRV, \
37    KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, \
38   KC_CAPS,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,         KC_ENT,KC_PGUP, \
39           KC_LSFT,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_RSFT,  KC_UP,KC_PGDN, \
40   KC_LCTL,WIN_KEY,KC_LALT,                         KC_SPC,                KC_RALT,FUN_LAY,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
41
42   /* Keymap _MAC: Mac Layer
43    * ,----------------------------------------------------------------.
44    * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |    |
45    * |----------------------------------------------------------------|
46    * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |    |
47    * |----------------------------------------------------------------|
48    * |      |   |   |   |   |   |   |   |   |   |   |   |        |    |
49    * |----------------------------------------------------------------|
50    * |        |   |   |   |   |   |   |   |   |   |   |      |   |    |
51    * |----------------------------------------------------------------|
52    * |Win |Alt |Ctrl|                       |Ctrl|   |Win|   |   |    |
53    * `----------------------------------------------------------------'
54    */
55 [_MAC] = LAYOUT_ansi(
56   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
57   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
58   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,_______, \
59           _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
60   KC_LGUI,KC_LALT,KC_LCTL,                        _______,                KC_RCTL,_______,KC_RGUI,_______,_______,_______),
61
62
63   /* Keymap _FUNC: Function Layer
64    * ,----------------------------------------------------------------.
65    * |   |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|  Del  |HPg |
66    * |----------------------------------------------------------------|
67    * |     |   |   |   |   |   |   |   |Mac|   |PSc|ScL|PsB| Calc|Ins |
68    * |----------------------------------------------------------------|
69    * |      |   |   |   |   |   |   |   |Stp|Ply|PTr|NTr|        |Hme |
70    * |----------------------------------------------------------------|
71    * |        |BL |Bl-|Bl+|   |   |   |Mou|MUT|VU-|VU+|      |PgU|End |
72    * |----------------------------------------------------------------|
73    * |    |WnLc|    |                       |   |   |    |Hme|PgD|End |
74    * `----------------------------------------------------------------'
75    */
76 [_FUNC] = LAYOUT_ansi(
77   _______,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,KC_WHOM, \
78   _______,_______,_______,_______,_______,_______,_______,_______,MAC_TOG,_______,KC_PSCR,KC_SLCK,KC_PAUS,KC_CALC, KC_INS,  \
79   _______,_______,_______,_______,_______,_______,_______,_______,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,        _______,KC_HOME, \
80           _______,BL_TOGG, BL_DEC, BL_INC,_______,_______,_______,MOU_TOG,KC_MUTE,KC_VOLD,KC_VOLU,_______,KC_PGUP,KC_END , \
81   _______,WIN_LCK,_______,                        _______,                _______,_______,_______,KC_HOME,KC_PGDN,KC_END),
82
83   /* Keymap _MOUSE: Mouse Navigation Layer
84    * ,----------------------------------------------------------------.
85    * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |    |
86    * |----------------------------------------------------------------|
87    * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |    |
88    * |----------------------------------------------------------------|
89    * |      |   |   |   |   |   |   |   |   |   |   |   |   McR  |    |
90    * |----------------------------------------------------------------|
91    * |        |   |   |   |   |   |   |   |   |   |   |  McL |MsU|    |
92    * |----------------------------------------------------------------|
93    * |    |    |    |                       |   |   |    |MsL|MsD|MsR |
94    * `----------------------------------------------------------------'
95    */
96 [_MOUSE] = LAYOUT_ansi(
97   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
98   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
99   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        KC_BTN2,_______, \
100           _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_BTN1,KC_MS_U,_______, \
101   _______,_______,_______,                        _______,                _______,_______,_______,KC_MS_L,KC_MS_D,KC_MS_R),
102
103 };
104
105 #define SET_BIT(var, pos) (var |= (1UL << pos))
106 #define CLEAR_BIT(var, pos) (var &= ~(1UL << pos))
107 #define TOGGLE_BIT(var, pos) (var ^= (1UL << pos))
108 #define CHECK_BIT(var, pos) (var & (1U << pos)) 
109
110 static uint8_t keyboard_state = 0;
111 // bit 0 = function layer status (on/off)
112 // bit 1 = mouse navigation layer state
113 // bit 2 = windows key lock state
114
115 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
116   switch(keycode) {
117     // acts like a momentary function layer press
118     case FUN_LAY:
119       if (record->event.pressed) { 
120         layer_on(_FUNC);
121         if (CHECK_BIT(keyboard_state, 1)) {
122           layer_on(_MOUSE);
123         } 
124         else {
125           layer_off(_MOUSE);
126         }
127         // turns on function layer status
128         SET_BIT(keyboard_state, 0);
129       }
130       // key released
131       else {
132         layer_off(_FUNC);
133         layer_off(_MOUSE);
134         // turns off function layer status
135         CLEAR_BIT(keyboard_state, 0);
136       }
137       break;
138
139     case MOU_TOG:
140       if(record->event.pressed) {
141         // toggles navigation layer state
142         TOGGLE_BIT(keyboard_state, 1);
143
144         // if FN is pressed down while hitting this key, the correct layer will be updated,
145         // so that the FN key doesn't need to be pressed down again to start using the functionality
146         if (CHECK_BIT(keyboard_state, 0)) {
147           if (CHECK_BIT(keyboard_state, 1)) {
148             layer_on(_MOUSE);
149           }
150           else {
151             layer_off(_MOUSE);
152           } 
153         }
154       }
155       break;
156
157     case WIN_LCK:
158       if (record->event.pressed) {
159         // toggles windows key lock state
160         TOGGLE_BIT(keyboard_state, 2);
161       }
162       break;
163
164     // uses seperate WIN_KEY so that WIN_LCK does not affect Mac Layer's KC_LGUI
165     case WIN_KEY:
166       // checks if windows key lock is off to allow key to be pressed
167       if (!CHECK_BIT(keyboard_state, 2)) {
168         if (record->event.pressed) {
169           SEND_STRING(SS_DOWN(X_LGUI));
170           return false;
171         }
172         // key released
173         else { 
174           SEND_STRING(SS_UP(X_LGUI));
175           return false;
176         }
177       }
178       break;
179   }
180   return true;
181 };