aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonavin <71780717+Jonavin@users.noreply.github.com>2021-07-03 11:13:41 -0400
committerGitHub <noreply@github.com>2021-07-03 08:13:41 -0700
commit002d90b3577dc09416ef1491b65f65bbf5438b01 (patch)
treec1f93681c33b6c469adc729f0aab848dcc038539
parent4b6af0a5077ceeb9c4ed5caf95062cea01220ecb (diff)
downloadqmk_firmware-002d90b3577dc09416ef1491b65f65bbf5438b01.tar.gz
qmk_firmware-002d90b3577dc09416ef1491b65f65bbf5438b01.zip
[Keymap] Jonavin merc additional encoder functionality (#13039)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Jonavin <=>
-rwxr-xr-xkeyboards/mechwild/mercutio/keymaps/jonavin/keymap.c148
-rw-r--r--keyboards/mechwild/mercutio/keymaps/jonavin/readme.md24
-rw-r--r--keyboards/mechwild/mercutio/keymaps/jonavin/rules.mk1
3 files changed, 155 insertions, 18 deletions
diff --git a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
index f5dddcfac..6fadea489 100755
--- a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
+++ b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
@@ -26,19 +26,38 @@ enum custom_layers {
26 _RAISE, 26 _RAISE,
27}; 27};
28 28
29enum custom_keycodes {
30 ENCFUNC = SAFE_RANGE, // encoder function keys
31};
32
33// Tap Dance Definitions
34enum custom_tapdance {
35 TD_LSFT_CAPSLOCK,
36};
37
38qk_tap_dance_action_t tap_dance_actions[] = {
39 // Tap once for shift, twice for Caps Lock
40 [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
41};
42
43#define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK)
44#define KC_CAD LALT(LCTL(KC_DEL))
45#define KC_AF4 LALT(KC_F4)
46#define KC_TASK LCTL(LSFT(KC_ESC))
47
29const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 48const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30[_BASE] = LAYOUT_all( 49[_BASE] = LAYOUT_all(
31 KC_MUTE, 50 KC_MUTE,
32 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 51 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
33 TT(_RAISE), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 52 TT(_RAISE), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
34 KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SFTENT, 53 KC_LSFTCAPS, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SFTENT,
35 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(_LOWER,KC_SPC), KC_SPC, KC_RALT, MO(_FN1), KC_RCTL ), 54 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(_LOWER,KC_SPC), KC_SPC, KC_RALT, MO(_FN1), KC_RCTL ),
36 55
37 [_FN1] = LAYOUT_all( 56 [_FN1] = LAYOUT_all(
38 KC_TRNS, 57 ENCFUNC,
39 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, 58 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
40 KC_CAPS, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SCLN, KC_PAUS, KC_NO, KC_NO, 59 KC_CAPS, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO,
41 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NLCK, KC_P0, KC_NO, KC_NO, KC_SFTENT, 60 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NLCK, KC_NO, KC_NO, KC_NO, KC_SFTENT,
42 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), 61 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
43 62
44 [_LOWER] = LAYOUT_all( 63 [_LOWER] = LAYOUT_all(
@@ -56,8 +75,64 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) 75 KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
57}; 76};
58 77
78/* These are needed whether encoder function is enabled or not when ENCFUNC keycode is pressed.
79 Defaults never changes if no encoder present to change it
80*/
81typedef struct {
82 char keydesc[6]; // this will be displayed on OLED
83 uint16_t keycode; // this is the keycode that will be sent when activted
84} keycodedescType;
85
86static const keycodedescType PROGMEM keyselection[] = {
87 // list of key codes that will be scrollled through by encoder and description
88 {"TASK", KC_TASK},
89 {"INS", KC_INS},
90 {"DEL", KC_DEL},
91 {"PrtSc", KC_PSCR},
92 {"ScrLk", KC_SCLN},
93 {"Break", KC_PAUS},
94 {"C-A-D", KC_CAD}, // Ctrl-Alt-Del
95 {"AltF4", KC_AF4},
96 {"PLAY", KC_MEDIA_PLAY_PAUSE}
97};
98
99#define MAX_KEYSELECTION sizeof(keyselection)/sizeof(keyselection[0])
100
101static uint8_t selectedkey_idx = 0;
102static keycodedescType selectedkey_rec;
103
104static void set_selectedkey(uint8_t idx) {
105 // make a copy from PROGMEM
106 memcpy_P (&selectedkey_rec, &keyselection[idx], sizeof selectedkey_rec);
107
108 //selectedkey_rec = keyselection[idx];
109
110}
111
112void keyboard_post_init_user(void) {
113 // Call the keyboard post init code.
114 //selectedkey_rec = keyselection[selectedkey_idx];
115 set_selectedkey(selectedkey_idx);
116}
117
118bool process_record_user(uint16_t keycode, keyrecord_t *record) {
119 switch (keycode) {
120 case ENCFUNC:
121 if (record->event.pressed) {
122 tap_code16(selectedkey_rec.keycode);
123 } else {
124 // when keycode is released
125 }
126 break;
127 }
128 return true;
129};
130
131
132
59#ifdef ENCODER_ENABLE // Encoder Functionality 133#ifdef ENCODER_ENABLE // Encoder Functionality
60 uint8_t selected_layer = 0; 134 uint8_t selected_layer = 0;
135
61 bool encoder_update_user(uint8_t index, bool clockwise) { 136 bool encoder_update_user(uint8_t index, bool clockwise) {
62 #ifdef OLED_DRIVER_ENABLE 137 #ifdef OLED_DRIVER_ENABLE
63 oled_clear(); 138 oled_clear();
@@ -65,21 +140,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65 #endif 140 #endif
66 switch (index) { 141 switch (index) {
67 case 0: // This is the only encoder right now, keeping for consistency 142 case 0: // This is the only encoder right now, keeping for consistency
68 if ( clockwise ) { 143 switch(get_highest_layer(layer_state)){ // special handling per layer
69 if ( selected_layer < 3 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers 144 case _FN1: // on Fn layer select what the encoder does when pressed
70 selected_layer ++; 145 if (!keyboard_report->mods) {
71 layer_move(selected_layer); 146 if ( clockwise ) {
147 if ( selectedkey_idx < MAX_KEYSELECTION-1) {
148 selectedkey_idx ++;
149 } else {
150 // do nothing
151 }
152 } else if ( !clockwise ) {
153 if ( selectedkey_idx > 0){
154 selectedkey_idx --;
155 } else {
156 // do nothing
157 }
158 }
159 set_selectedkey(selectedkey_idx);
160 break;
72 } else { 161 } else {
73 tap_code(KC_VOLU); // Otherwise it just changes volume 162 // continue to default
74 } 163 }
75 } else if ( !clockwise ) { 164 default: // all other layers
76 if ( selected_layer > 0 && keyboard_report->mods & MOD_BIT(KC_LSFT) ){ 165 if ( clockwise ) {
77 selected_layer --; 166 if ( selected_layer < 3 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
78 layer_move(selected_layer); 167 selected_layer ++;
79 } else { 168 layer_move(selected_layer);
80 tap_code(KC_VOLD); 169 } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word
170 tap_code16(LCTL(KC_RGHT));
171 } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track
172 tap_code(KC_MEDIA_NEXT_TRACK);
173 } else {
174 tap_code(KC_VOLU); // Otherwise it just changes volume
175 }
176 } else if ( !clockwise ) {
177 if ( selected_layer > 0 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) {
178 selected_layer --;
179 layer_move(selected_layer);
180 } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word
181 tap_code16(LCTL(KC_LEFT));
182 } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track
183 tap_code(KC_MEDIA_PREV_TRACK);
184 } else {
185 tap_code(KC_VOLD);
186 }
81 } 187 }
188 break;
82 } 189 }
190 break;
83 } 191 }
84 return true; 192 return true;
85 } 193 }
@@ -129,12 +237,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
129 } 237 }
130 render_logo(); 238 render_logo();
131 oled_set_cursor(8,2); 239 oled_set_cursor(8,2);
240 char fn_str[12];
132 switch(selected_layer){ 241 switch(selected_layer){
133 case 0: 242 case 0:
134 oled_write_P(PSTR("BASE"), false); 243 oled_write_P(PSTR("BASE"), false);
135 break; 244 break;
136 case 1: 245 case 1:
137 oled_write_P(PSTR("FN"), false); 246 sprintf(fn_str, "FN %5s", selectedkey_rec.keydesc);
247 oled_write(fn_str, false);
248 //oled_write_P(PSTR("FN "), false);
138 break; 249 break;
139 case 2: 250 case 2:
140 oled_write_P(PSTR("LOWER"), false); 251 oled_write_P(PSTR("LOWER"), false);
@@ -147,14 +258,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
147 } 258 }
148 oled_set_cursor(8,3); 259 oled_set_cursor(8,3);
149 if (get_highest_layer(layer_state) == selected_layer) { 260 if (get_highest_layer(layer_state) == selected_layer) {
150 oled_write_P(PSTR(" "), false); 261 oled_write_P(PSTR(" "), false);
151 } else { 262 } else {
152 switch (get_highest_layer(layer_state)) { 263 switch (get_highest_layer(layer_state)) {
153 case 0: 264 case 0:
154 oled_write_P(PSTR("Temp BASE"), false); 265 oled_write_P(PSTR("Temp BASE"), false);
155 break; 266 break;
156 case 1: 267 case 1:
157 oled_write_P(PSTR("Temp FN"), false); 268 sprintf(fn_str, "Temp FN %5s", selectedkey_rec.keydesc);
269 oled_write(fn_str, false);
158 break; 270 break;
159 case 2: 271 case 2:
160 oled_write_P(PSTR("Temp LOWER"), false); 272 oled_write_P(PSTR("Temp LOWER"), false);
diff --git a/keyboards/mechwild/mercutio/keymaps/jonavin/readme.md b/keyboards/mechwild/mercutio/keymaps/jonavin/readme.md
index 5122f143d..9180ac215 100644
--- a/keyboards/mechwild/mercutio/keymaps/jonavin/readme.md
+++ b/keyboards/mechwild/mercutio/keymaps/jonavin/readme.md
@@ -12,5 +12,29 @@ Features
12 - MOUSEKEYS is disbled 12 - MOUSEKEYS is disbled
13 - shutdown oled when powered down to prevent OLED from showing Mercutio all the time 13 - shutdown oled when powered down to prevent OLED from showing Mercutio all the time
14 - add WPM indicator when wpm is > 20 wpm 14 - add WPM indicator when wpm is > 20 wpm
15 - add double tap of Left Shift to toggle Caps Lock
16
17 - FN layer has encoder selectable key codes and displayed on OLED
18
19 Change these in keymap.c to assign your desired key selection
15 20
21 static const keycodedescType PROGMEM keyselection[] = {
22 // list of key codes that will be scrollled through by encoder and description
23 {"TASK", KC_TASK},
24 {"INS", KC_INS},
25 {"DEL", KC_DEL},
26 {"PrtSc", KC_PSCR},
27 {"ScrLk", KC_SCLN},
28 {"Break", KC_PAUS},
29 {"C-A-D", KC_CAD}, // Ctrl-Alt-Del
30 {"AltF4", KC_AF4},
31 {"PLAY", KC_MEDIA_PLAY_PAUSE}
32 };
33
34 - Additional encoder functionality
35 While holding Left Ctrl, navigates next or previous word
36 While holding Left Alt, media next track or previous track
37
38
39Default Layers
16![image](https://user-images.githubusercontent.com/71780717/118902752-4aaf7880-b8e4-11eb-82f4-e5047612ffcf.png) 40![image](https://user-images.githubusercontent.com/71780717/118902752-4aaf7880-b8e4-11eb-82f4-e5047612ffcf.png)
diff --git a/keyboards/mechwild/mercutio/keymaps/jonavin/rules.mk b/keyboards/mechwild/mercutio/keymaps/jonavin/rules.mk
index 5ae6c7d31..550e84c80 100644
--- a/keyboards/mechwild/mercutio/keymaps/jonavin/rules.mk
+++ b/keyboards/mechwild/mercutio/keymaps/jonavin/rules.mk
@@ -2,3 +2,4 @@ VIA_ENABLE = yes
2 2
3MOUSEKEY_ENABLE = yes 3MOUSEKEY_ENABLE = yes
4WPM_ENABLE = yes 4WPM_ENABLE = yes
5TAP_DANCE_ENABLE = yes