diff --git a/keyboards/ploopyco/trackball_nano/keymaps/t4corun/config.h b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/config.h new file mode 100644 index 00000000..5ec3ee19 --- /dev/null +++ b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/config.h @@ -0,0 +1,9 @@ +#pragma once + +#define PLOOPY_HOST_LED_CONTROL +#define PLOOPY_DRAGSCROLL_INVERT +#define PLOOPY_DRAGSCROLL_DIVISOR_H 25.0 +#define PLOOPY_DRAGSCROLL_DIVISOR_V 20.0 + +#define PLOOPY_DPI_OPTIONS { 300, 550, 800, 1200 } +#define PLOOPY_DPI_DEFAULT 2 \ No newline at end of file diff --git a/keyboards/ploopyco/trackball_nano/keymaps/t4corun/keymap.c b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/keymap.c new file mode 100644 index 00000000..fa577318 --- /dev/null +++ b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/keymap.c @@ -0,0 +1,3 @@ +#include "t4corun.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {{{ KC_NO }}}; \ No newline at end of file diff --git a/keyboards/ploopyco/trackball_nano/keymaps/t4corun/readme.md b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/readme.md new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/ploopyco/trackball_nano/keymaps/t4corun/rules.mk b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/rules.mk new file mode 100644 index 00000000..715f60c3 --- /dev/null +++ b/keyboards/ploopyco/trackball_nano/keymaps/t4corun/rules.mk @@ -0,0 +1,14 @@ +# override userspace defaults +LTO_ENABLE = yes +DYNAMIC_MACRO_ENABLE = no +WPM_ENABLE = no +EXTRAKEY_ENABLE = no +CAPS_WORD_ENABLE = no +MOUSEKEY_ENABLE = no +COMBO_ENABLE = no +KEY_OVERRIDE_ENABLE = no + +# override keyboard defaults +# keyboards\ploopyco\trackball_nano\info.json +# keyboards\ploopyco\trackball_nano\rules.mk +# keyboards\ploopyco\postrules.mk \ No newline at end of file diff --git a/qmk.json b/qmk.json index f0eace4e..2425e319 100644 --- a/qmk.json +++ b/qmk.json @@ -7,7 +7,8 @@ ["planck/rev6", "t4corun"], ["bluebell/swoop", "t4corun"], ["barbellboards/rollow", "t4corun"], - ["klor/2040", "t4corun"] + ["klor/2040", "t4corun"], + ["ploopyco/trackball_nano", "t4corun"] ] } \ No newline at end of file diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 5ff81aaa..95ea141e 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -36,7 +36,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode // case MOUSE_BUTTON5: case MOUSE_DRGTOG: - if ( get_highest_layer(layer_state | default_layer_state) > _DEFAULT_LAYER_1 ) return false; + if ( get_highest_layer(layer_state | default_layer_state) > FIRST_DEFAULT_LAYER ) return false; default: return true; diff --git a/users/t4corun/features/oled.c b/users/t4corun/features/oled.c index 292e54de..faed83ba 100644 --- a/users/t4corun/features/oled.c +++ b/users/t4corun/features/oled.c @@ -115,7 +115,7 @@ void render_feature_status(bool vertical) { #endif //RGB_MATRIX_ENABLED // only works on master side - drag_scroll_is_enabled() ? oled_write_P(dragscr_on, false) : oled_write_P(dragscr_off, false); + host_keyboard_led_state().scroll_lock ? oled_write_P(dragscr_on, false) : oled_write_P(dragscr_off, false); if (vertical) { oled_write_P(PSTR(" "), false); diff --git a/users/t4corun/features/taphold.h b/users/t4corun/features/taphold.h index 7cf63f39..c71a70cc 100644 --- a/users/t4corun/features/taphold.h +++ b/users/t4corun/features/taphold.h @@ -1,6 +1,11 @@ #pragma once #include "t4corun.h" +// Tells the process_tap_hold_key what kind of hold action is wanted +#define HOLD_SINGLETP 0 +#define HOLD_DOUBLETP 1 +#define HOLD_BRACKETS 2 + void single_tap(uint16_t key); void double_tap(uint16_t key, uint32_t ms); void insert_brackets(uint16_t left, uint16_t right, uint32_t ms); diff --git a/users/t4corun/t4corun.c b/users/t4corun/t4corun.c index 07b948fe..fe2941d6 100644 --- a/users/t4corun/t4corun.c +++ b/users/t4corun/t4corun.c @@ -2,21 +2,12 @@ // Keeps track of base layer so we can make one key to cycle through them // instead of making a key for each one */ -static uint8_t current_base_layer = _DEFAULT_LAYER_1; - -// Should keep track of the Ploopy Nano drag scroll mode -// There is a possibility of this being out of sync -static bool drag_scroll_enabled = false; +static uint8_t current_base_layer = FIRST_DEFAULT_LAYER; // Luna Pet Variables static bool isJumping = false; static bool showedJump = true; - - -// Allows the OLED code to get the drag scroll mode -bool drag_scroll_is_enabled(void) { return drag_scroll_enabled; } - // Allows the OLED code to see when space bar is pressed bool isLunaJumping(void) { return isJumping; } bool isJumpShown(void) { return showedJump; } @@ -24,14 +15,51 @@ bool isJumpShown(void) { return showedJump; } // Allows the OLED code to clear the space bar status when render is complete void setLunaJumped(void) { showedJump = true;} + + // Hold Navigation and Number to get Symbol layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _NAVIGATION, _NUMBER, _SYMBOL); } + // Customize behavior for existing keycodes or create new ones bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { + // use the host state status to boot the Ploopy Nano + // will effectively turn on num lock/caps lock/scroll lock then back off + case PN_BOOT: + if (record->event.pressed) { + if(!host_keyboard_led_state().num_lock) { tap_code(KC_NUM); } + if(!host_keyboard_led_state().caps_lock) { tap_code(KC_CAPS); } + if(!host_keyboard_led_state().scroll_lock) { tap_code(KC_SCRL); } + } else { + if(host_keyboard_led_state().num_lock) { tap_code(KC_NUM); } + if(host_keyboard_led_state().caps_lock) { tap_code(KC_CAPS); } + if(host_keyboard_led_state().scroll_lock) { tap_code(KC_SCRL); } + } + return false; + + // makes scroll lock a hold instead of toggle + // enables momentary drag scroll on ploopy nano + case KC_SCRL: + if (record->event.pressed) { + tap_code(KC_SCRL); + } else { + tap_code(KC_SCRL); + } + return false; + + // makes num lock a hold instead of toggle + // prevents accidental ploopy nano going into bootloader + case KC_NUM: + if (record->event.pressed) { + tap_code(KC_NUM); + } else { + tap_code(KC_NUM); + } + return false; + case KC_SPC: if (record->event.pressed) { isJumping = true; @@ -45,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case BASELYR: if (record->event.pressed) { - current_base_layer = (current_base_layer + 1) % NUM_BASE_LAYER; + current_base_layer = (current_base_layer + 1) % NUM_DEFAULT_LAYERS; set_single_persistent_default_layer(current_base_layer); } @@ -54,34 +82,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case RBSELYR: if (record->event.pressed) { - current_base_layer = (current_base_layer - 1) % NUM_BASE_LAYER; + current_base_layer = (current_base_layer - 1) % NUM_DEFAULT_LAYERS; set_single_persistent_default_layer(current_base_layer); } return false; - case PN_DRGS: - if (record->event.pressed) { - - //tap numlock twice to toggle ploopy nano drag scroll - // double_tap(KC_NUM, KC_NUM, WAIT_DELAY); - double_tap(KC_NUM, WAIT_DELAY); - - //I realize this may not work for the Charybdis nano - drag_scroll_enabled = !drag_scroll_enabled; - - } - return false; - - case PN_PDPI: - if (record->event.pressed) { - - //tap capslock twice to cycle ploopy nano pointer DPI - //double_tap(KC_CAPS, KC_CAPS, WAIT_DELAY); - double_tap(KC_CAPS, WAIT_DELAY); - - } - return false; //https://docs.qmk.fm/#/mod_tap?id=changing-both-tasp-and-hold //https://getreuer.info/posts/keyboards/triggers/index.html#tap-vs.-long-press diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 95657b48..ef65381e 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -2,11 +2,11 @@ #include QMK_KEYBOARD_H #include "features/taphold.h" -bool drag_scroll_is_enabled(void); bool isLunaJumping(void); bool isJumpShown(void); void setLunaJumped(void); +// put the default base layers first enum layers { _QWERTY = 0, FIRST_DEFAULT_LAYER = 0, @@ -18,6 +18,11 @@ enum layers { _CONFIG }; +// start at the second layer +#define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 1) +#define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 2) +#define NUM_DEFAULT_LAYERS 3 + enum keycodes { //These are only here to make the taphold/defines unique TH_LCBR = QK_USER, @@ -41,8 +46,7 @@ enum keycodes { TH_SCLN, TH_QUOT, - PN_DRGS, - PN_PDPI, + PN_BOOT, BASELYR, RBSELYR @@ -84,34 +88,29 @@ enum keycodes { // tap hoLd. These will be intercepted and overridden. The LT will be ignored // Brackets: open and close brackets and put the cursor inside -#define TR_LCBR LT(_DEFAULT_LAYER_1, TH_LCBR) -#define TR_LABK LT(_DEFAULT_LAYER_1, TH_LABK) -#define TR_LBRC LT(_DEFAULT_LAYER_1, TH_LBRC) -#define TR_LPRN LT(_DEFAULT_LAYER_1, TH_LPRN) -#define TR_DQUO LT(_DEFAULT_LAYER_1, TH_DQUO) -#define TR_SQUO LT(_DEFAULT_LAYER_1, TH_SQUO) +#define TR_LCBR LT(FIRST_DEFAULT_LAYER, TH_LCBR) +#define TR_LABK LT(FIRST_DEFAULT_LAYER, TH_LABK) +#define TR_LBRC LT(FIRST_DEFAULT_LAYER, TH_LBRC) +#define TR_LPRN LT(FIRST_DEFAULT_LAYER, TH_LPRN) +#define TR_DQUO LT(FIRST_DEFAULT_LAYER, TH_DQUO) +#define TR_SQUO LT(FIRST_DEFAULT_LAYER, TH_SQUO) // double tap -#define TR_BSLS LT(_DEFAULT_LAYER_1, TH_BSLS) -#define TR_SLSH LT(_DEFAULT_LAYER_1, TH_SLSH) -#define TR_PIPE LT(_DEFAULT_LAYER_1, TH_PIPE) +#define TR_BSLS LT(FIRST_DEFAULT_LAYER, TH_BSLS) +#define TR_SLSH LT(FIRST_DEFAULT_LAYER, TH_SLSH) +#define TR_PIPE LT(FIRST_DEFAULT_LAYER, TH_PIPE) // Custom override without holding shift -#define TR_COMM LT(_DEFAULT_LAYER_1, TH_COMM) -#define TR_DOT LT(_DEFAULT_LAYER_1, TH_DOT) -#define TR_PERC LT(_DEFAULT_LAYER_1, TH_PERC) +#define TR_COMM LT(FIRST_DEFAULT_LAYER, TH_COMM) +#define TR_DOT LT(FIRST_DEFAULT_LAYER, TH_DOT) +#define TR_PERC LT(FIRST_DEFAULT_LAYER, TH_PERC) // auto shift -#define TR_EQL LT(_DEFAULT_LAYER_1, TH_EQL) -#define TR_MINS LT(_DEFAULT_LAYER_1, TH_MINS) -#define TR_GRV LT(_DEFAULT_LAYER_1, TH_GRV) -#define TR_SCLN LT(_DEFAULT_LAYER_1, TH_SCLN) -#define TR_QUOT LT(_DEFAULT_LAYER_1, TH_QUOT) - -// Tells the process_tap_hold_key what kind of hold action is wanted -#define HOLD_SINGLETP 0 -#define HOLD_DOUBLETP 1 -#define HOLD_BRACKETS 2 +#define TR_EQL LT(FIRST_DEFAULT_LAYER, TH_EQL) +#define TR_MINS LT(FIRST_DEFAULT_LAYER, TH_MINS) +#define TR_GRV LT(FIRST_DEFAULT_LAYER, TH_GRV) +#define TR_SCLN LT(FIRST_DEFAULT_LAYER, TH_SCLN) +#define TR_QUOT LT(FIRST_DEFAULT_LAYER, TH_QUOT) #if defined(KEYBOARD_bastardkb_charybdis_3x5) @@ -122,9 +121,9 @@ enum keycodes { # define TR_PDPI DPI_MOD //pointer dpi #else # define TR_SNIP ___x___ -# define TR_DRGS PN_DRGS //use host status for ploopy nano drag scroll +# define TR_DRGS KC_SCRL //use host status for ploopy nano drag scroll # define TR_SDPI ___x___ -# define TR_PDPI PN_PDPI //use host status for ploopy nano dpi switch +# define TR_PDPI KC_NUM //use host status for ploopy nano dpi switch #endif //KEYBOARD_bastardkb_charybdis_3x5 @@ -184,13 +183,6 @@ enum keycodes { #endif //AUDIO_ENABLE - - -#define _DEFAULT_LAYER_1 FIRST_DEFAULT_LAYER -#define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 1) -#define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 2) -#define NUM_BASE_LAYER 3 - #define _NONE_3__________________ ___x___, ___x___, ___x___ #define _NONE_5____________________________________ ___x___, ___x___, ___x___, ___x___, ___x___ #define _GACS_MODS________________________ TR_LGUI, TR_LALT, TR_LCTL, TR_LSFT @@ -227,7 +219,7 @@ enum keycodes { #define LAYER_NAVIGATION \ KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, ___x___, ___x___, SC_FILE, SC_SNIP, CONFIG, \ - ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ + KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ _UCCPR_L___________________________________, ___x___, KC_APP, TR_SNIP, TR_SDPI, TR_PDPI, \ ZOOMRST, NUM, KC_ENT, _LAYER_TRANS_____________ @@ -241,13 +233,13 @@ enum keycodes { #define LAYER_SYMBOL \ ___x___, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ - KC_CAPS, TR_LCBR, KC_RCBR, KC_EXLM, TR_SCLN, KC_AMPR, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ + ___x___, TR_LCBR, KC_RCBR, KC_EXLM, TR_SCLN, KC_AMPR, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ ___x___, TR_LABK, KC_RABK, TR_BSLS, TR_PIPE, TR_PERC, TR_SLSH, TR_LPRN, KC_RPRN, TR_MINS, \ _LAYER_TRANS_____________, _LAYER_TRANS_____________ #define LAYER_CONFIG \ - TR_HRST, TR_HCNU, TR_HNXT, TR_HFBK, TR_HTOG, ___x___, ___x___, EE_CLR, QK_BOOT, _______, \ + TR_HRST, TR_HCNU, TR_HNXT, TR_HFBK, TR_HTOG, ___x___, PN_BOOT, EE_CLR, QK_BOOT, _______, \ TR_CRST, TR_CKUP, TR_CTOG, ___x___, TR_ATOG, ___x___, TR_LSFT, ___x___, ___x___, TR_RMOD, \ KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, TR_RTOG, TR_RHUI, TR_RSAI, TR_RVAI, TR_RSPI, \ BASELYR, TR_DMR1, TR_DMP1, ___x___, ___x___, TR_RTOG