]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/clueboard/66/keymaps/magicmonty/keymap.c
Clueboard refresh (#4902)
[qmk_firmware.git] / keyboards / clueboard / 66 / keymaps / magicmonty / keymap.c
1 #include QMK_KEYBOARD_H
2
3 // Helpful defines
4 #define xxxxxxx KC_NO
5
6 // Each layer gets a name for readability, which is then used in the keymap matrix below.
7 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
8 // Layer names don't all need to be of the same length, obviously, and you can also skip them
9 // entirely and just use numbers.
10 #define _BL 0 // BASE Layer
11 #define _FL 1 // Function Layer
12 #define _ME 2 // Media Layer
13 #define _CL 3 // Control Layer
14 #define _ML 4 // Mouse Layer
15 #if defined(MIDI_ENABLE)
16   #define _MI 5 // MIDI Layer
17   #define TO_MIDI TO(_MI)
18 #else
19   #define TO_MIDI _______
20 #endif
21
22 // go back to base layer
23 #define TO_BASE TO(_BL)
24
25 // switch to function layer while helde
26 #define MO_FUNC MO(_FL)
27
28 // switch to media layer  while held
29 #define   MEDIA MO(_ME)
30
31 // switch to Control layer while helde
32 #define  MO_CTL MO(_CL)
33
34 // switch to mouse layer if held, else space
35 #define L_MOUSE LT(_ML, KC_SPC)
36
37 // Function key when held, else ESC
38 #define ESC_FUN LT(_FL, KC_ESC)
39
40 // Hyper (CTRL+ALT+SHIFT+SUPER) when held, TAB when tapped
41 #define HPR_TAB ALL_T(KC_TAB)
42
43 // CTRL when held, ESC when tapped
44 #define CTL_ESC CTL_T(KC_ESC)
45
46 // Reset RGB mode to layer signalling
47 #define RGB_RST F(0)
48
49 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50   /* Keymap _BL: Base Layer (Default Layer) */
51   [_BL] = LAYOUT(
52     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_INS,
53     HPR_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,
54     ESC_FUN,    KC_A,    KC_S,   KC_D,     KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,  KC_SCLN, KC_QUOT,  KC_NUHS,  KC_ENT,
55     KC_LSFT, KC_NUBS,    KC_Z,   KC_X,     KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,   KC_DOT, KC_SLSH,  _______, KC_RSFT,          KC_UP,
56     KC_LCTL, KC_LGUI, KC_LALT,_______,                    L_MOUSE, L_MOUSE,                    _______, KC_RALT,  KC_RCTL, MO_FUNC, KC_LEFT, KC_DOWN, KC_RGHT),
57
58   /* Keymap _FL: Function layer */
59   [_FL] = LAYOUT(
60      KC_GRV,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12, _______, _______,          BL_STEP,
61     _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,  KC_PAUS, _______,  _______, _______,                   _______,
62     _______, _______,  MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT,  _______, _______,  _______, _______,
63     KC_LSPO, _______, _______, _______, _______, _______, _______, _______,   MEDIA, _______,  _______, TO_MIDI,  _______, KC_RSPC,          KC_PGUP,
64     _______, _______, _______, _______,                   _______, _______,                    _______, _______,  _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
65
66   /* Keymap _ME: Media layer */
67   [_ME] = LAYOUT(
68     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______, KC_MUTE,          KC_VOLU,
69     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,                   KC_VOLD,
70     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,
71     _______, _______, _______, _______, _______, _______, _______, _______,   MEDIA, _______,  _______, _______,  _______, _______,          _______,
72     _______, _______, _______, _______,                   _______, _______,                    _______, _______,  _______, _______, KC_MPRV, KC_MPLY, KC_MNXT),
73
74   /* Keymap _CL: Control layer */
75   [_CL] = LAYOUT(
76     _______, RGB_RST, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______, RGB_TOG,          RGB_VAI,
77     _______, _______, _______, _______, RESET,   _______, _______, _______, _______, _______,  _______, _______,  _______, _______,                   RGB_VAD,
78     _______, _______,  MO_CTL, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,
79     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,          RGB_SAI,
80     _______, _______, _______, _______,                   RGB_MOD, RGB_MOD,                    _______, _______,  _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
81
82   /* Keymap _ML: Mouse layer */
83   [_ML] = LAYOUT(
84     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______, _______,          _______,
85     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,                   _______,
86     _______, _______, KC_BTN2, KC_BTN3, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,  _______, _______,  _______, _______,
87     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,  _______, _______,          KC_MS_U,
88     _______, _______, _______, _______,                   L_MOUSE, L_MOUSE,                    _______, KC_BTN1,  KC_BTN3, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R),
89
90 #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
91   /* Keymap _MI: MIDI layer (Advanced)*/
92   [_MI] = LAYOUT(
93     TO_BASE,MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10,  MI_CHD,   MI_CHU, xxxxxxx, xxxxxxx,          xxxxxxx,
94     xxxxxxx, xxxxxxx,   MI_Cs,   MI_Ds, xxxxxxx,   MI_Fs,   MI_Gs,   MI_As, xxxxxxx, MI_Cs_1,  MI_Ds_1, xxxxxxx,  MI_Fs_1, xxxxxxx,                   xxxxxxx,
95      MI_MOD,    MI_C,    MI_D,    MI_E,    MI_F,    MI_G,    MI_A,    MI_B,  MI_C_1,  MI_D_1,   MI_E_1,  MI_F_1,   MI_G_1, xxxxxxx,
96      MI_SUS, xxxxxxx, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, MI_TRNSD,MI_TRNSU,MI_TRNS_0,  MI_SUS,          xxxxxxx,
97     xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,                 MI_ALLOFF, MI_ALLOFF,                   xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
98 #elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
99   /* Keymap _MI: MIDI layer (Basic)*/
100   [_MI] = LAYOUT(
101     TO_BASE, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx, xxxxxxx,          xxxxxxx,
102     xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,                   xxxxxxx,
103     xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,
104     xxxxxxx, xxxxxxx,   MI_ON,  MI_OFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx,          xxxxxxx,
105     xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,                   xxxxxxx, xxxxxxx,                    xxxxxxx, xxxxxxx,  xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
106 #endif
107 };
108
109 /* This is a list of user defined functions. F(N) corresponds to item N
110    of this list.
111  */
112 const uint16_t PROGMEM fn_actions[] = {
113   [0] = ACTION_FUNCTION(0),  // Calls action_function()
114 };
115
116 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
117   switch (id) {
118     case 0:
119       if (record->event.pressed) {
120         rgblight_mode(1);
121         rgblight_sethsv(206, 255, 255);
122       }
123   }
124 }
125
126 enum layer_id {
127   LAYER_BASE,
128   LAYER_FUNCTION,
129   LAYER_MEDIA,
130   LAYER_CONTROL,
131   LAYER_MOUSE,
132 #if defined(MIDI_ENABLE)
133   LAYER_MIDI
134 #endif
135 };
136
137 void clueboard_set_led(uint8_t id, uint8_t val) {
138   switch (id) {
139     case LAYER_BASE:
140       rgblight_sethsv_noeeprom(190, 255, val);
141       break;
142     case LAYER_FUNCTION:
143       rgblight_sethsv_noeeprom(46, 255, val);
144       break;
145     case LAYER_MEDIA:
146       rgblight_sethsv_noeeprom(86, 255, val);
147       break;
148     case LAYER_CONTROL:
149       rgblight_sethsv_noeeprom(346, 255, val);
150       break;
151     case LAYER_MOUSE:
152       rgblight_sethsv_noeeprom(206, 255, val);
153       break;
154 #if defined(MIDI_ENABLE)
155     case LAYER_MIDI:
156       rgblight_sethsv_noeeprom(316, 255, val);
157       break;
158 #endif
159   }
160 };
161
162 const uint16_t oct_hues[10] = {
163   0,
164   30,
165   60,
166   90,
167   120,
168   150,
169   180,
170   210,
171   240,
172   300
173 };
174
175 #define MAX_OCT  9
176
177 void clueboard_set_midi_led(uint8_t base_oct, uint8_t val)
178 {
179   uint8_t sat = 255;
180
181   for (uint8_t i = 0; i < RGBLED_NUM; i++) {
182     sethsv(oct_hues[base_oct], sat, val, (LED_TYPE *)&led[i]);
183   }
184
185   uint8_t next_oct = base_oct < MAX_OCT ? base_oct + 1 : base_oct;
186
187   uint16_t next_hue = base_oct < MAX_OCT ? oct_hues[next_oct] : 0;
188   uint8_t next_val = base_oct < MAX_OCT ? val : 0;
189   uint8_t next_sat = base_oct < MAX_OCT ? sat : 0;
190
191
192   for (uint8_t i = 0; i < 3; i++) {
193     sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
194   }
195
196   for (uint8_t i = 11; i < 14; i++) {
197     sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
198   }
199
200   rgblight_set();
201 }
202
203 void matrix_scan_user(void) {
204     rgblight_config_t rgblight_config;
205     rgblight_config.raw = eeconfig_read_rgblight();
206
207     if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
208
209     uint32_t layer = layer_state;
210     uint8_t val = rgblight_config.val;
211
212     if (layer & (1<<_FL)) {
213       if (layer & (1<<_ME)) {
214         clueboard_set_led(LAYER_MEDIA, val);
215       } else if (layer & (1<<_CL)) {
216         clueboard_set_led(LAYER_CONTROL, val);
217       } else {
218         clueboard_set_led(LAYER_FUNCTION, val);
219       }
220     } else if (layer & (1<<_ML)) {
221       clueboard_set_led(LAYER_MOUSE, val);
222 #if defined(MIDI_ENABLE)
223     } else if (layer & (1<<_MI)) {
224       clueboard_set_midi_led(midi_config.octave, val);
225 #endif
226     } else {
227         clueboard_set_led(LAYER_BASE, val);
228     }
229 };