]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/tv44/keymaps/mjt/keymap.c
Keymaps for several of my boards (#1641)
[qmk_firmware.git] / keyboards / tv44 / keymaps / mjt / keymap.c
1 //Author: mike terhar
2
3 #include "tv44.h"
4 #include "action_layer.h"
5 #include "eeconfig.h"
6 #ifdef BACKLIGHT_ENABLE
7   #include "backlight.h"
8 #endif
9
10 enum minivan_layers {
11   _QWERTY,
12   _NUMSYM,
13   _FKEYS,
14   _FKEYGRV,
15   _PLOVER,
16   _ADJUST
17 };
18
19 enum planck_keycodes {
20   QWERTY = SAFE_RANGE,
21   DYNKEY,
22   DYNAMIC_MACRO_RANGE,
23 };
24
25 // Fillers to make layering more clear
26 #define _______ KC_TRNS
27 #define FKEYS F(_FKEYS)
28 #define NUMSYM F(_NUMSYM)
29 #define FKEYGRV F(_FKEYGRV)
30 #define MACSLEEP M(5)
31 #define PLOVER M(6)
32 #define LAYERRESET M(7)
33 #define BACKLIT M(8)
34 #define ADJUST M(9)
35 #define XXXXXXX KC_NO
36
37 #include "dynamic_macro.h"
38
39 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
40 [_QWERTY] = {
41   {FKEYS, KC_Q,   KC_W,   KC_E, KC_R,   KC_T,   KC_Y,   KC_U, KC_I,   KC_O,  KC_P,   KC_BSPC},
42   {KC_ESC, KC_A,   KC_S,   KC_D, KC_F,   KC_G,   KC_H,   KC_J, KC_K,   KC_L,  KC_SCLN,KC_QUOT},
43   {KC_LSFT,KC_Z,   KC_X,   KC_C, KC_V,   KC_B,   KC_N,   KC_M, KC_COMM,KC_DOT,KC_SLSH,SFT_T(KC_ENT) },
44   {KC_LCTL,KC_LALT,KC_LGUI, KC_SPC,XXXXXXX,XXXXXXX,XXXXXXX,NUMSYM,KC_LEFT,KC_DOWN,KC_UP ,KC_RIGHT}
45 },
46 [_NUMSYM] = {
47   {FKEYGRV,  KC_1,  KC_2,    KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,  _______},
48   {KC_DEL,KC_EXLM, KC_AT,  KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, ADJUST },
49   { _______,  KC_UNDS,KC_PLUS, KC_LCBR,KC_RCBR,KC_PIPE , KC_MINS,KC_EQL,KC_LBRC, KC_RBRC, KC_BSLS, _______},
50   {_______,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,_______,    KC_HOME, KC_PGDN, KC_PGUP, KC_END}
51 },
52 [_FKEYS] ={
53   {_______, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5, KC_F6, KC_F7,  KC_F8,  KC_F9,  KC_F10, _______},
54   {KC_DEL, KC_F11, KC_F12,  KC_F13,  KC_F14,  KC_F15, _______, _______,  _______,  MACSLEEP, DYN_REC_START1, DYN_REC_START2 },
55   {KC_CAPS,  _______, _______,  _______,  _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,_______,DYN_REC_STOP},
56   {_______,_______,_______,LAYERRESET,XXXXXXX,XXXXXXX,XXXXXXX,LAYERRESET,    KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
57 },
58 [_PLOVER] = {
59   {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
60   {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
61   {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
62   {LAYERRESET, XXXXXXX, KC_C,    KC_V,   XXXXXXX ,  XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
63 },
64 [_ADJUST] = {
65  {_______ , RESET,   _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PAUS, KC_PSCR, KC_DEL },
66  {_______ , _______, _______, _______, _______,  AG_NORM, AG_SWAP, QWERTY,  _______, MACSLEEP,  PLOVER, _______},
67  {_______ , _______,  _______,  _______,   _______,  _______,   _______,  _______, _______, _______, _______, _______},
68  {BACKLIT, _______, _______, LAYERRESET, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
69 }
70 };
71
72 #ifdef AUDIO_ENABLE
73
74 float tone_startup[][2]           = SONG(STARTUP_SOUND);
75 float tone_qwerty[][2]            = SONG(QWERTY_SOUND);
76 float tone_dyn_macro_rec[][2]     = SONG(DVORAK_SOUND);
77 float tone_dyn_macro_play[][2]    = SONG(COLEMAK_SOUND);
78 float tone_plover[][2]            = SONG(PLOVER_SOUND);
79 float tone_adjust[][2]            = SONG(PLOVER_GOODBYE_SOUND);
80 float music_scale[][2]            = SONG(MUSIC_SCALE_SOUND);
81
82 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
83 #endif
84
85 void persistant_default_layer_set(uint16_t default_layer) {
86   eeconfig_update_default_layer(default_layer);
87   default_layer_set(default_layer);
88 }
89
90 const uint16_t PROGMEM fn_actions[] = {
91  [_FKEYS] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_TAB),
92  [_FKEYGRV] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_GRV),
93  [_NUMSYM] = ACTION_LAYER_TAP_TOGGLE(_NUMSYM),
94 };
95
96 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
97 {
98       switch(id) {
99         case 5: // MACSLEEP
100             if (record->event.pressed) {
101               register_code(KC_RSFT);
102               register_code(KC_RCTL);
103               register_code(KC_POWER);
104               unregister_code(KC_POWER);
105               unregister_code(KC_RCTL);
106               unregister_code(KC_RSFT);
107             }
108         break;
109         case 6: // PLOVER
110               if (record->event.pressed) {
111               #ifdef AUDIO_ENABLE
112                 stop_all_notes();
113                 PLAY_NOTE_ARRAY(tone_plover, false, 0);
114               #endif
115               layer_off(_NUMSYM);
116               layer_off(_FKEYS);
117               layer_off(_ADJUST);
118               layer_on(_PLOVER);
119             }
120         break;
121         case 7: // LAYERRESET
122               if (record->event.pressed) {
123               #ifdef AUDIO_ENABLE
124                 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
125               #endif
126               layer_off(_NUMSYM);
127               layer_off(_FKEYS);
128               layer_off(_PLOVER);
129               layer_off(_ADJUST);
130             }
131         break;
132         case 8: // BACKLIT
133           if (record->event.pressed) {
134             register_code(KC_RSFT);
135             #ifdef BACKLIGHT_ENABLE
136               backlight_step();
137             #endif
138           } else {
139             unregister_code(KC_RSFT);
140           }
141         break;
142         case 9: // ADJUST
143           if(record->event.pressed) {
144             #ifdef AUDIO_ENABLE
145               stop_all_notes();
146               PLAY_NOTE_ARRAY(tone_adjust, false, 0);
147             #endif
148             layer_off(_NUMSYM);
149             layer_off(_FKEYS);
150             layer_off(_PLOVER);
151             layer_on(_ADJUST);
152           }
153       }
154     return MACRO_NONE;
155 };
156
157 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
158   uint16_t macro_kc = keycode;
159   if (keycode == FKEYS || keycode == ADJUST || keycode == FKEYGRV ){
160     macro_kc = DYN_REC_STOP;
161   }
162   if (!process_record_dynamic_macro(macro_kc, record)) {
163     return false;
164   }
165
166   return true;
167 }
168
169 void matrix_init_user(void) {
170     #ifdef AUDIO_ENABLE
171         startup_user();
172     #endif
173 }
174
175 #ifdef AUDIO_ENABLE
176
177 void startup_user()
178 {
179     _delay_ms(20); // gets rid of tick
180     PLAY_NOTE_ARRAY(tone_startup, false, 0);
181 }
182
183 void shutdown_user()
184 {
185     PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
186     _delay_ms(150);
187     stop_all_notes();
188 }
189
190 void music_on_user(void)
191 {
192     music_scale_user();
193 }
194
195 void music_scale_user(void)
196 {
197     PLAY_NOTE_ARRAY(music_scale, false, 0);
198 }
199 #endif