]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/clueboard/keymaps/magicmonty/keymap.c
c7847dfb76353b00b207b29f6548fe6cec6082ea
[qmk_firmware.git] / keyboards / clueboard / keymaps / magicmonty / keymap.c
1 #include "clueboard.h"
2
3 // Helpful defines
4 #define GRAVE_MODS  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5 #define _______ KC_TRNS
6 #define xxxxxxx KC_NO
7
8 // Each layer gets a name for readability, which is then used in the keymap matrix below.
9 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
10 // Layer names don't all need to be of the same length, obviously, and you can also skip them
11 // entirely and just use numbers.
12 #define _BL 0 // BASE Layer
13 #define _FL 1 // Function Layer
14 #define _ME 2 // Media Layer
15 #define _CL 3 // Control Layer
16 #define _ML 4 // Mouse Layer
17 #if defined(MIDI_ENABLE)
18   #define _MI 5 // MIDI Layer
19   #define TO_MIDI TO(_MI)
20 #else
21   #define TO_MIDI _______
22 #endif
23
24 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25   /* Keymap _BL: Base Layer (Default Layer)
26    */
27   [_BL] = KEYMAP(
28     F(0),    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, \
29     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, \
30     MO(_FL), 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,                            \
31     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,           \
32     KC_LCTL, KC_LGUI, KC_LALT, _______,          LT(_ML, KC_SPC),LT(_ML, KC_SPC),      _______,  KC_RALT,  MO(_ME),  MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
33
34   /* Keymap _FL: Function Layer */
35   [_FL] = KEYMAP(
36     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, \
37     _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,_______, KC_PAUS,  _______,  _______,  _______,                   _______, \
38     MO(_FL), _______, MO(_CL),_______,_______,_______,KC_LEFT,KC_DOWN,  KC_UP,KC_RGHT, _______,  _______,  _______,  _______,                            \
39     _______, _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______,  TO_MIDI,  _______,  _______,          KC_PGUP,          \
40     _______, _______, _______,_______,        _______,_______,                         _______,  _______,  _______,  MO(_FL), KC_HOME, KC_PGDN, KC_END),
41
42   /* Keymap _ME: Media layer */
43   [_ME] = KEYMAP(
44     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______, KC_MUTE,         KC_VOLU, \
45     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______,                  KC_VOLD, \
46     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______,                           \
47     MO(_FL), _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______,  _______,  _______,  MO(_FL),          _______,         \
48     _______, _______, _______,_______,                _______,_______,                 _______,  _______,  _______,  _______, KC_MPRV, KC_MPLY,KC_MNXT),
49
50   /* Keymap _CL: Control layer */
51   [_CL] = KEYMAP(
52     _______,    F(1), _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______, RGB_TOG,          RGB_VAI, \
53     _______, _______, _______,_______,RESET,  _______,_______,_______,_______,_______, _______,  _______,  _______,  _______,                   RGB_VAD, \
54     _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______,                            \
55     MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  MO(_FL),          RGB_SAI,          \
56     _______, _______, _______,_______,        RGB_MOD,RGB_MOD,                         _______,  _______,  _______,  _______, RGB_HUD, RGB_SAD, RGB_HUI),
57
58   /* Keymap _ML: Mouse layer */
59   [_ML] = KEYMAP(
60     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______, _______,         _______, \
61     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______,                  _______, \
62     _______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R, _______,  _______,  _______,  _______,                           \
63     _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______,  _______,  _______,  _______,          KC_MS_U,         \
64     _______, _______, _______,_______,        LT(_ML, KC_SPC),LT(_ML, KC_SPC),         _______,  KC_BTN1,  KC_BTN2,  KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
65
66 #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
67   /* Keymap _MI: MIDI layer (Advanced)*/
68   [_MI] = KEYMAP(
69     TO(_BL),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, \
70     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, \
71      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,                           \
72      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,         \
73     xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,                 MI_ALLOFF,MI_ALLOFF,                    xxxxxxx, xxxxxxx,  xxxxxxx,  xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx),
74 #elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
75   /* Keymap _MI: MIDI layer (Basic)*/
76   [_MI] = KEYMAP(
77     TO(_BL), xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx,  xxxxxxx,  xxxxxxx,  xxxxxxx, xxxxxxx,         xxxxxxx, \
78     xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx,  xxxxxxx,  xxxxxxx,  xxxxxxx,                  xxxxxxx, \
79     xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx,  xxxxxxx,  xxxxxxx,  xxxxxxx,                           \
80     xxxxxxx, xxxxxxx,   MI_ON, MI_OFF,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx,  xxxxxxx,  xxxxxxx,  xxxxxxx,          xxxxxxx,         \
81     xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,                xxxxxxx,xxxxxxx,                 xxxxxxx,  xxxxxxx,  xxxxxxx,  xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx),
82 #endif
83 };
84
85 /* This is a list of user defined functions. F(N) corresponds to item N
86    of this list.
87  */
88 const uint16_t PROGMEM fn_actions[] = {
89   [0] = ACTION_FUNCTION(0),  // Calls action_function()
90   [1] = ACTION_FUNCTION(1),  // Calls action_function()
91 };
92
93 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
94   static uint8_t mods_pressed;
95   static bool mod_flag;
96
97   switch (id) {
98     case 0:
99       /* Handle the combined Grave/Esc key
100        */
101       mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
102
103       if (record->event.pressed) {
104         /* The key is being pressed.
105          */
106         if (mods_pressed) {
107           mod_flag = true;
108           add_key(KC_GRV);
109           send_keyboard_report();
110         } else {
111           add_key(KC_ESC);
112           send_keyboard_report();
113         }
114       } else {
115         /* The key is being released.
116          */
117         if (mod_flag) {
118           mod_flag = false;
119           del_key(KC_GRV);
120           send_keyboard_report();
121         } else {
122           del_key(KC_ESC);
123           send_keyboard_report();
124         }
125       }
126       break;
127     case 1:
128       rgblight_mode(1);
129   }
130 }
131
132 enum layer_id {
133   LAYER_BASE,
134   LAYER_FUNCTION,
135   LAYER_MEDIA,
136   LAYER_CONTROL,
137   LAYER_MOUSE,
138 #if defined(MIDI_ENABLE)
139   LAYER_MIDI
140 #endif
141 };
142
143 void clueboard_set_led(uint8_t id, uint8_t val) {
144   switch (id) {
145     case LAYER_BASE:
146       rgblight_sethsv_noeeprom(346, 0, val);
147       break;
148     case LAYER_FUNCTION:
149       rgblight_sethsv_noeeprom(46, 255, val);
150       break;
151     case LAYER_MEDIA:
152       rgblight_sethsv_noeeprom(86, 255, val);
153       break;
154     case LAYER_CONTROL:
155       rgblight_sethsv_noeeprom(346, 255, val);
156       break;
157     case LAYER_MOUSE:
158       rgblight_sethsv_noeeprom(206, 255, val);
159       break;
160 #if defined(MIDI_ENABLE)
161     case LAYER_MIDI:
162       rgblight_sethsv_noeeprom(316, 255, val);
163       break;
164 #endif
165   }
166 };
167
168 void matrix_scan_user(void) {
169     rgblight_config_t rgblight_config;
170     rgblight_config.raw = eeconfig_read_rgblight();
171
172     if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
173
174     uint32_t layer = layer_state;
175     uint8_t val = rgblight_config.val;
176
177     if (layer & (1<<_FL)) {
178       if (layer & (1<<_ME)) {
179         clueboard_set_led(LAYER_MEDIA, val);
180       } else if (layer & (1<<_CL)) {
181         clueboard_set_led(LAYER_CONTROL, val);
182       } else {
183         clueboard_set_led(LAYER_FUNCTION, val);
184       }
185     } else if (layer & (1<<_ML)) {
186         clueboard_set_led(LAYER_MOUSE, val);
187 #if defined(MIDI_ENABLE)
188     } else if (layer & (1<<_MI)) {
189         clueboard_set_led(LAYER_MIDI, val);
190 #endif
191     } else {
192         clueboard_set_led(LAYER_BASE, val);
193     }
194 };