]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/msiu/keymap.c
Update KBD67 readme so that it mentions the KBD65 PCB (#5143)
[qmk_firmware.git] / keyboards / planck / keymaps / msiu / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "muse.h"
3
4 extern keymap_config_t keymap_config;
5
6 enum planck_layers {
7   _QWERTY,
8   _DVORAK,
9   _LOWER,
10   _RAISE,
11   _NUMB,
12   _FUNC,
13   _ADJUST
14 };
15
16 enum planck_keycodes {
17   QWERTY = SAFE_RANGE,
18   DVORAK,
19   BACKLIT,
20   EXT_PLV
21 };
22
23 #define LOWER MO(_LOWER)
24 #define RAISE MO(_RAISE)
25
26 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27
28 [_QWERTY] = LAYOUT_planck_grid(
29   LT(_NUMB, KC_TAB),   KC_Q,    KC_W,    KC_E,    KC_R,  KC_T,      KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC,
30   LCTL_T(KC_ESC),      KC_A,    KC_S,    KC_D,    KC_F,  KC_G,      KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT,
31   KC_LSFT,             KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,      KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
32   KC_LCTL,             KC_HYPR, KC_LALT, KC_LGUI, LOWER, MO(_FUNC), KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
33 ),
34
35 [_DVORAK] = LAYOUT_planck_grid(
36   _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,     KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______,
37   _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,     KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
38   _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,     KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______,
39   _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
40 ),
41
42 [_LOWER] = LAYOUT_planck_grid(
43   KC_TILD, KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
44   _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
45   _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
46   _______, _______,  _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
47 ),
48
49 [_RAISE] = LAYOUT_planck_grid(
50   KC_GRV,  KC_1,    KC_2,    KC_3,   KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
51   _______, KC_4,    KC_5,    KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
52   _______, KC_7,    KC_8,    KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
53   _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
54 ),
55
56 [_ADJUST] = LAYOUT_planck_grid(
57     _______, _______, DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
58     _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  DVORAK,  _______, _______, _______,
59     _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF,_______, _______, _______,
60     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
61 ),
62
63 [_FUNC] = LAYOUT_planck_grid(
64   _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_PSCR, _______,
65   _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
66   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
67   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
68 ),
69
70 [_NUMB] = LAYOUT_planck_grid(
71   _______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, KC_BSPC,
72   _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,
73   _______, _______, _______, _______, _______, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______,
74   _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______, _______
75 )
76
77
78 };
79
80 #ifdef AUDIO_ENABLE
81   float plover_song[][2]     = SONG(PLOVER_SOUND);
82   float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
83 #endif
84
85 uint32_t layer_state_set_user(uint32_t state) {
86   return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
87 }
88
89 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
90   switch (keycode) {
91     case QWERTY:
92       if (record->event.pressed) {
93         print("mode just switched to qwerty and this is a huge string\n");
94         set_single_persistent_default_layer(_QWERTY);
95       }
96       return false;
97       break;
98     case DVORAK:
99       if (record->event.pressed) {
100         set_single_persistent_default_layer(_DVORAK);
101       }
102       return false;
103       break;
104     case BACKLIT:
105       if (record->event.pressed) {
106         register_code(KC_RSFT);
107         #ifdef BACKLIGHT_ENABLE
108           backlight_step();
109         #endif
110         #ifdef KEYBOARD_planck_rev5
111           PORTE &= ~(1<<6);
112         #endif
113       } else {
114         unregister_code(KC_RSFT);
115         #ifdef KEYBOARD_planck_rev5
116           PORTE |= (1<<6);
117         #endif
118       }
119       return false;
120       break;
121   }
122   return true;
123 }
124
125 bool muse_mode = false;
126 uint8_t last_muse_note = 0;
127 uint16_t muse_counter = 0;
128 uint8_t muse_offset = 70;
129 uint16_t muse_tempo = 50;
130
131 void encoder_update(bool clockwise) {
132   if (muse_mode) {
133     if (IS_LAYER_ON(_RAISE)) {
134       if (clockwise) {
135         muse_offset++;
136       } else {
137         muse_offset--;
138       }
139     } else {
140       if (clockwise) {
141         muse_tempo+=1;
142       } else {
143         muse_tempo-=1;
144       }
145     }
146   } else {
147     if (clockwise) {
148       register_code(KC_PGDN);
149       unregister_code(KC_PGDN);
150     } else {
151       register_code(KC_PGUP);
152       unregister_code(KC_PGUP);
153     }
154   }
155 }
156
157 void dip_update(uint8_t index, bool active) {
158   switch (index) {
159     case 0:
160       if (active) {
161         #ifdef AUDIO_ENABLE
162           PLAY_SONG(plover_song);
163         #endif
164         layer_on(_ADJUST);
165       } else {
166         #ifdef AUDIO_ENABLE
167           PLAY_SONG(plover_gb_song);
168         #endif
169         layer_off(_ADJUST);
170       }
171       break;
172     case 1:
173       if (active) {
174         muse_mode = true;
175       } else {
176         muse_mode = false;
177         #ifdef AUDIO_ENABLE
178           stop_all_notes();
179         #endif
180       }
181    }
182 }
183
184 void matrix_scan_user(void) {
185   #ifdef AUDIO_ENABLE
186     if (muse_mode) {
187       if (muse_counter == 0) {
188         uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
189         if (muse_note != last_muse_note) {
190           stop_note(compute_freq_for_midi_note(last_muse_note));
191           play_note(compute_freq_for_midi_note(muse_note), 0xF);
192           last_muse_note = muse_note;
193         }
194       }
195       muse_counter = (muse_counter + 1) % muse_tempo;
196     }
197   #endif
198 }
199
200 bool music_mask_user(uint16_t keycode) {
201   switch (keycode) {
202     case RAISE:
203     case LOWER:
204       return false;
205     default:
206       return true;
207   }
208 }