Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jonavin merc additional encoder functionality #13039

Merged
merged 31 commits into from
Jul 3, 2021
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
9ca134a
keymap - add fn layer selectable encoder keys
May 29, 2021
00a25b6
update readme with new keymap changes
May 29, 2021
5d068a3
keymap Additional encoder functionality
May 29, 2021
e565bb0
Merge 'master' git://github.com/qmk/qmk_firmware
May 30, 2021
6b994e1
Merge branch 'qmk-master' into jonavin-merc-encoderFkeys
May 30, 2021
6e639eb
readme update
May 30, 2021
dbaec21
fix incoming merge
May 30, 2021
5473061
Update keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
Jonavin May 30, 2021
22a08a3
Update keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
Jonavin May 30, 2021
7135623
fix broken commit from PR recommendation
May 30, 2021
a3049ac
rewrite encoder keymap selection - struct PROGMEM
May 31, 2021
f59cbf9
update readme to reflect struct changes
May 31, 2021
0b7eee0
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin May 31, 2021
baf5c5d
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 2, 2021
003ab42
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 7, 2021
83b10e0
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 8, 2021
544ac6c
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 13, 2021
0922a59
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 15, 2021
4170065
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 16, 2021
24bd6a1
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 18, 2021
59491e8
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 20, 2021
3bf5772
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 24, 2021
192d9d8
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 27, 2021
e6cccbd
update keymap - double tap LShift to toggle CAPS
Jun 28, 2021
b303e90
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 28, 2021
d11a5d5
add KC_LSFTCAPS to keymap
Jun 29, 2021
6fdf2c9
fix keymap SCLN to SCLK
Jonavin Jun 29, 2021
77ff941
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jun 29, 2021
a077b72
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jul 1, 2021
6090f6d
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jul 3, 2021
b3676fa
Merge branch 'qmk:master' into jonavin-merc-encoderFkeys
Jonavin Jul 3, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 88 additions & 16 deletions keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ enum custom_layers {
_RAISE,
};

enum custom_keycodes {
ENCFUNC = SAFE_RANGE, // encoder function keys
};

#define KC_CAD LALT(LCTL(KC_DEL))
#define KC_AF4 LALT(KC_F4)
#define KC_TASK LCTL(LSFT(KC_ESC))

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_all(
KC_MUTE,
Expand All @@ -35,10 +43,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(_LOWER,KC_SPC), KC_SPC, KC_RALT, MO(_FN1), KC_RCTL ),

[_FN1] = LAYOUT_all(
KC_TRNS,
ENCFUNC,
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
KC_CAPS, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SCLN, KC_PAUS, KC_NO, KC_NO,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NLCK, KC_P0, KC_NO, KC_NO, KC_SFTENT,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NLCK, KC_NO, KC_NO, KC_NO, KC_SFTENT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),

[_LOWER] = LAYOUT_all(
Expand All @@ -56,30 +64,90 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
};

/* These are needed whether encoder function is enabled or not when ENCFUNC keycode is pressed.
Defaults never changes if no encoder present to change it
*/
const uint16_t fkeycodes[] = { // list of key codes that will be scrollled through by encoder
KC_TASK, KC_INS, KC_DEL, KC_PSCR, KC_SCLN, KC_PAUS, KC_CAD, KC_AF4, KC_MEDIA_PLAY_PAUSE
};
const char* fkeydesc[] = { // list of desc to be shown on LCD max 5 chars will be shown
"TASK","INS", "DEL", "PRTSC", "SCRLK", "BREAK", "C-A-D", "AltF4", "PLAY"
};

static uint8_t selected_Fkey = 0;

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case ENCFUNC:
if (record->event.pressed) {
tap_code16(fkeycodes[selected_Fkey]);
} else {
// when keycode is released
}
break;
}
return true;
};



#ifdef ENCODER_ENABLE // Encoder Functionality
uint8_t selected_layer = 0;

bool encoder_update_user(uint8_t index, bool clockwise) {
#ifdef OLED_DRIVER_ENABLE
oled_clear();
oled_render();
#endif
switch (index) {
case 0: // This is the only encoder right now, keeping for consistency
if ( clockwise ) {
if ( selected_layer < 3 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
selected_layer ++;
layer_move(selected_layer);
switch(biton32(layer_state)){ // special handling per layer
case _FN1: // on Fn layer select what the encoder does when pressed
if (!keyboard_report->mods) {
if ( clockwise ) {
if ( selected_Fkey < sizeof(fkeycodes)/sizeof(fkeycodes[0])-1) {
selected_Fkey ++;
} else {
// do nothing
}
} else if ( !clockwise ) {
if ( selected_Fkey > 0){
selected_Fkey --;
} else {
// do nothing
}
}
break;
} else {
tap_code(KC_VOLU); // Otherwise it just changes volume
// continue to default
}
} else if ( !clockwise ) {
if ( selected_layer > 0 && keyboard_report->mods & MOD_BIT(KC_LSFT) ){
selected_layer --;
layer_move(selected_layer);
} else {
tap_code(KC_VOLD);
default: // all other layers
if ( clockwise ) {
if ( selected_layer < 3 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
selected_layer ++;
layer_move(selected_layer);
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word
tap_code16(LCTL(KC_RGHT));
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track
tap_code(KC_MEDIA_NEXT_TRACK);
} else {
tap_code(KC_VOLU); // Otherwise it just changes volume
}
} else if ( !clockwise ) {
if ( selected_layer > 0 && keyboard_report->mods & MOD_BIT(KC_LSFT) ) {
selected_layer --;
layer_move(selected_layer);
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word
tap_code16(LCTL(KC_LEFT));
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track
tap_code(KC_MEDIA_PREV_TRACK);
} else {
tap_code(KC_VOLD);
}
}
break;
}
break;
}
return true;
}
Expand Down Expand Up @@ -129,12 +197,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
render_logo();
oled_set_cursor(8,2);
char fn_str[12];
switch(selected_layer){
case 0:
oled_write_P(PSTR("BASE"), false);
break;
case 1:
oled_write_P(PSTR("FN"), false);
sprintf(fn_str, "FN %5s", fkeydesc[selected_Fkey]);
oled_write(fn_str, false);
//oled_write_P(PSTR("FN "), false);
break;
case 2:
oled_write_P(PSTR("LOWER"), false);
Expand All @@ -147,14 +218,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
oled_set_cursor(8,3);
if (get_highest_layer(layer_state) == selected_layer) {
oled_write_P(PSTR(" "), false);
oled_write_P(PSTR(" "), false);
} else {
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_P(PSTR("Temp BASE"), false);
break;
case 1:
oled_write_P(PSTR("Temp FN"), false);
sprintf(fn_str, "Temp FN %5s", fkeydesc[selected_Fkey]);
oled_write(fn_str, false);
break;
case 2:
oled_write_P(PSTR("Temp LOWER"), false);
Expand Down
17 changes: 17 additions & 0 deletions keyboards/mechwild/mercutio/keymaps/jonavin/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,22 @@ Features
- MOUSEKEYS is disbled
- shutdown oled when powered down to prevent OLED from showing Mercutio all the time
- add WPM indicator when wpm is > 20 wpm

- FN layer has encoder selectable key codes and displayed on OLED

Change these in keymap.c to assign your desired key selection

const uint16_t fkeycodes[] = { // list of key codes that will be scrollled through by encoder
KC_TASK, KC_INS, KC_DEL, KC_PSCR, KC_SCLN, KC_PAUS, KC_CAD, KC_AF4, KC_MEDIA_PLAY_PAUSE
};
const char* fkeydesc[] = { // list of desc to be shown on LCD max 5 chars will be shown
"TASK","INS", "DEL", "PRTSC", "SCRLK", "BREAK", "C-A-D", "AltF4", "PLAY"
};

- Additional encoder functionality
While holding Left Ctrl, navigates next or previous word
While holding Left Alt, media next track or previous track


Default Layers
![image](https://user-images.githubusercontent.com/71780717/118902752-4aaf7880-b8e4-11eb-82f4-e5047612ffcf.png)