]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/impossible/keymap.c
Modified Qwerty, created Qwerty with numbers
[qmk_firmware.git] / keyboards / planck / keymaps / impossible / keymap.c
1 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2 // this is the style you want to emulate.
3
4 #include "planck.h"
5 #include "action_layer.h"
6 #ifdef AUDIO_ENABLE
7   #include "audio.h"
8 #endif
9 #include "eeconfig.h"
10
11 extern keymap_config_t keymap_config;
12
13 // Each layer gets a name for readability, which is then used in the keymap matrix below.
14 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
15 // Layer names don't all need to be of the same length, obviously, and you can also skip them
16 // entirely and just use numbers.
17
18 #define _ALPHA 0
19 #define _FN 1
20 #define _QWERTY 2
21 #define _PLOVER 3
22 #define _ADJUST 4
23 #define _QWERTY2 5
24
25 enum planck_keycodes {
26   QWERTY = SAFE_RANGE,
27   PLOVER,
28   LOWER,
29   RAISE,
30   BACKLIT,
31   EXT_PLV
32 };
33
34 // Fillers to make layering more clear
35 #define _______ KC_TRNS
36 #define XXXXXXX KC_NO
37
38 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
39
40 /* Alpha-numeric
41  * ,-----------------------------------------------------------------------------------------------.
42  * |   Q   |   D   |   R   |   W   |   B   |   F   |   U   |   P   |   J   |   7   |   8   |   9   |
43  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
44  * |   A   |   S   |   H   |   T   |   G   |   N   |   E   |   O   |   I   |   4   |   5   |   6   |
45  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
46  * |   Z   |   X   |   M   |   C   |   V   |   L   |   Y   |   K   |   Up  |   1   |   2   |   3   |
47  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
48  * |Alt/Tab|Gui/Esc|   ,   |CTL/Bsp| Fn/Ent|SFT/SPC|   .   |  Left |  Down | Right |   0   |   /   |
49  * `-----------------------------------------------------------------------------------------------'
50  */
51
52 [_ALPHA] = {
53   {KC_Q,          KC_D,          KC_R,    KC_W,           KC_B,              KC_F,          KC_U,   KC_P,    KC_J,    KC_KP_7, KC_KP_8, KC_KP_9},
54   {KC_A,          KC_S,          KC_H,    KC_T,           KC_G,              KC_N,          KC_E,   KC_O,    KC_I,    KC_KP_4, KC_KP_5, KC_KP_6},
55   {KC_Z,          KC_X,          KC_M,    KC_C,           KC_V,              KC_L,          KC_Y,   KC_K,    KC_UP,   KC_KP_1, KC_KP_2, KC_KP_3},
56   {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENTER), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, KC_SLASH}
57 },
58
59 /* FN-key held
60  * ,-----------------------------------------------------------------------------------------------.
61  * |   !   |   @   |   #   |   $   |   %   |   ^   |   &   |   *   |  F12  |   F7  |   F8  |   F9  |
62  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
63  * | Caps  |   [   |   ]   |   -   |  Del  |   =   |   (   |   )   |  F11  |   F4  |   F5  |   F6  |
64  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
65  * |  DFU  |Insert | PrtSc | ScrLk | Pause | NumLk |  Menu |       |  PgUp |   F1  |   F2  |   F3  |
66  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
67  * |Alt/Tab|Gui/Esc|   `   |CTL/Bsp|Fn/Ent |SFT/Spc|   ;   |  Home |  PgDn |  End  |  F10  |   /   |
68  * `-----------------------------------------------------------------------------------------------'
69  */
70
71 [_FN] = {
72   {KC_EXLM,     KC_AT,       KC_HASH,     KC_DLR,   KC_PERC,   KC_CIRC,    KC_AMPR,   KC_ASTR, KC_FN12, KC_FN7, KC_FN8,  KC_FN9},
73   {KC_CAPSLOCK, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_EQUAL,   KC_LPRN,   KC_RPRN, KC_FN11, KC_FN4, KC_FN5,  KC_FN6},
74   {RESET,       KC_INS,      KC_PSCR,     KC_SLCK,  KC_PAUSE,  KC_NUMLOCK, KC_MENU,   XXXXXXX, KC_PGUP, KC_FN1, KC_FN2,  KC_FN3},
75   {_______,    _______,      KC_GRAVE,    _______,  _______,   _______,    KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_FN10, KC_BSLASH}
76 },
77
78 /* Qwerty
79  * ,-----------------------------------------------------------------------------------------------.
80  * |  Esc  |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |   /   |
81  * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
82  * |  Tab  |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |   ;   |   "   |
83  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
84  * | Shift |   Z   |   X   |   C   |   V   |   B   |   N   |   M   |   ,   |   .   |  Up   | Enter |
85  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
86  * | Ctrl  |  Alt  |  GUI  |       |       | Bksp  | Space |       |       | Left  | Down  | Right |
87  * `-----------------------------------------------------------------------------------------------'
88  */
89
90 [_QWERTY] = {
91     {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,   KC_I,    KC_O,    KC_P,    KC_SLSH},
92     {KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,   KC_K,    KC_L,    KC_SCLN, KC_QUOT},
93     {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,   KC_COMM, KC_DOT,  KC_UP,   KC_ENT },
94     {KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_BSPC, KC_SPC, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT}
95 },
96
97 /* Qwerty W/ Numbers
98  * ,-----------------------------------------------------------------------------------------------.
99  * |  Esc  |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   |   0   | Bksp  |
100  * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
101  * |  TAB  |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |   /   |
102  * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
103  * | Shift |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |   ;   |   "   |
104  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
105  * | Ctrl  |   Z   |   X   |   C   |   V   |  SPC  |   B   |   N   |   M   |   ,   |   .   | Enter |
106  * `-----------------------------------------------------------------------------------------------'
107  */
108
109 [_QWERTY2] = {
110     {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   KC_6,      KC/3_7, KC_8,    KC_9,    KC_0,     KC_BSPC},
111     {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_Y,      KC_U,   KC_I,    KC_O,    KC_P,     KC_SLSH},
112     {KC_LSFT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_H,      KC_J,   KC_K,    KC_L,    KC_SCLN,  KC_QUOT},
113     {KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_SPC,    KC_N,   KC_M,    KC_COMM, KC_DOT,   KC_ENT},
114 1},
115
116 /* Plover layer (http://opensteno.org)
117  * ,-----------------------------------------------------------------------------------------------.
118  * |   S   |   T   |   P   |   H   |   *   |   F   |   P   |   L   |   T   |   D   |       |       |
119  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
120  * |   S   |   K   |   W   |   R   |   *   |   R   |   B   |   G   |   S   |   Z   |       |       |
121  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
122  * |   #   |   #   |   #   |   #   |       |   #   |   #   |   #   |   #   |   #   |       |       |
123  * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
124  * | Exit  |       |   A   |   O   |       |   E   |   U   |       |       |       |       |       |
125  * `-----------------------------------------------------------------------------------------------'
126  */
127
128 [_PLOVER] = {
129   {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_U,    KC_I,    KC_O,    KC_P,    XXXXXXX, XXXXXXX},
130   {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_J,    KC_K,    KC_L,    KC_SCLN, XXXXXXX, XXXXXXX},
131   {KC_1,    KC_1,    KC_1,    KC_1,    XXXXXXX, KC_1,    KC_1,    KC_1,    KC_1,    XXXXXXX, XXXXXXX},
132   {EXT_PLV, XXXXXXX, KC_C,    KC_V,    XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
133 },
134
135 /* Adjust
136  * ,-----------------------------------------------------------------------------------------------.
137  * |       | Reset |       |       |       |       |       |       |       |       |       |  Del  |
138  * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
139  * |       |       |       |Aud on |Audoff |AGnorm |AGswap |Qwerty |       |       |Plover |       |
140  * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
141  * |       |Voice- |Voice+ |Mus on |Musoff |MIDIon |MIDIof |       |       |       |       |       |
142  * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
143  * |       |       |       |       |       |       |       |       |       |       |       |       |
144  * `-----------------------------------------------------------------------------------------------'
145  */
146
147 [_ADJUST] = {
148   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
149   {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, _______, PLOVER,  _______},
150   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
151   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
152 }
153
154
155 };
156
157 #ifdef AUDIO_ENABLE
158
159 float tone_startup[][2]    = SONG(STARTUP_SOUND);
160
161 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
162 float tone_plover[][2]     = SONG(PLOVER_SOUND);
163 float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
164 float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
165
166 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
167 #endif
168
169
170 void persistant_default_layer_set(uint16_t default_layer) {
171   eeconfig_update_default_layer(default_layer);
172   default_layer_set(default_layer);
173 }
174
175 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
176   switch (keycode) {
177     case QWERTY:
178       if (record->event.pressed) {
179         #ifdef AUDIO_ENABLE
180           PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
181         #endif
182         persistant_default_layer_set(1UL<<_QWERTY);
183       }
184       return false;
185       break;
186     case BACKLIT:
187       if (record->event.pressed) {
188         register_code(KC_RSFT);
189         #ifdef BACKLIGHT_ENABLE
190           backlight_step();
191         #endif
192       } else {
193         unregister_code(KC_RSFT);
194       }
195       return false;
196       break;
197     case PLOVER:
198       if (record->event.pressed) {
199         #ifdef AUDIO_ENABLE
200           stop_all_notes();
201           PLAY_NOTE_ARRAY(tone_plover, false, 0);
202         #endif
203         layer_off(_ADJUST);
204         layer_on(_PLOVER);
205         if (!eeconfig_is_enabled()) {
206             eeconfig_init();
207         }
208         keymap_config.raw = eeconfig_read_keymap();
209         keymap_config.nkro = 1;
210         eeconfig_update_keymap(keymap_config.raw);
211       }
212       return false;
213       break;
214     case EXT_PLV:
215       if (record->event.pressed) {
216         #ifdef AUDIO_ENABLE
217           PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
218         #endif
219         layer_off(_PLOVER);
220       }
221       return false;
222       break;
223   }
224   return true;
225 }
226
227 void matrix_init_user(void) {
228     #ifdef AUDIO_ENABLE
229         startup_user();
230     #endif
231 }
232
233 #ifdef AUDIO_ENABLE
234
235 void startup_user()
236 {
237     _delay_ms(20); // gets rid of tick
238     PLAY_NOTE_ARRAY(tone_startup, false, 0);
239 }
240
241 void shutdown_user()
242 {
243     PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
244     _delay_ms(150);
245     stop_all_notes();
246 }
247
248 void music_on_user(void)
249 {
250     music_scale_user();
251 }
252
253 void music_scale_user(void)
254 {
255     PLAY_NOTE_ARRAY(music_scale, false, 0);
256 }
257
258 #endif