Adjust qvex lynepad mouse keys to have on the fly accelleration changes as well as adjusted key layout that's more efficient and more usable
This commit is contained in:
parent
2fc3dbc208
commit
cf8237e523
|
@ -16,7 +16,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
// place overrides here
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#undef RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_LAYERS
|
||||
|
||||
|
@ -29,3 +30,4 @@
|
|||
#define MOUSEKEY_WHEEL_INTERVAL 50
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 20
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 10
|
||||
#define MK_COMBINED
|
||||
|
|
|
@ -15,6 +15,44 @@
|
|||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum {
|
||||
ACCEL_0 = 0,
|
||||
ACCEL_1 = 1,
|
||||
ACCEL_2 = 2,
|
||||
};
|
||||
static uint8_t acceleration_level = ACCEL_0;
|
||||
|
||||
void change_accel(void) {
|
||||
acceleration_level++;
|
||||
if (acceleration_level > ACCEL_2) {
|
||||
acceleration_level = ACCEL_0;
|
||||
}
|
||||
}
|
||||
|
||||
// Custom key codes
|
||||
enum {
|
||||
ACCEL = SAFE_RANGE,
|
||||
};
|
||||
|
||||
// Tap Dance declarations
|
||||
enum {
|
||||
TD_LAYER_BOOT,
|
||||
};
|
||||
|
||||
void dance_layer_boot_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
layer_on(1);
|
||||
} else {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
||||
// Tap Dance definitions
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
// Tap once for Escape, twice for Caps Lock
|
||||
[TD_LAYER_BOOT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_layer_boot_finished, NULL),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap (Base Layer) Default Layer
|
||||
* |----------------------------|
|
||||
|
@ -26,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[0] = LAYOUT_Lynepad(
|
||||
LCTL(LALT(KC_TAB)), KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1,
|
||||
LGUI(KC_DOWN), KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,
|
||||
KC_MS_BTN3, TO(1), TO(2)
|
||||
ACCEL, TD(TD_LAYER_BOOT), KC_ESC
|
||||
),
|
||||
[1] = LAYOUT_Lynepad(
|
||||
LCTL(LALT(KC_2)), LCTL(KC_BSPACE), LSFT(KC_X), LSFT(KC_P),
|
||||
|
@ -80,6 +118,40 @@ layer_state_t layer_state_set_user(layer_state_t state) {
|
|||
return state;
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case ACCEL:
|
||||
if (record->event.pressed) {
|
||||
switch(acceleration_level) {
|
||||
case ACCEL_0:
|
||||
register_code16(KC_ACL0);
|
||||
break;
|
||||
case ACCEL_1:
|
||||
register_code16(KC_ACL1);
|
||||
break;
|
||||
case ACCEL_2:
|
||||
register_code16(KC_ACL2);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch(acceleration_level) {
|
||||
case ACCEL_0:
|
||||
unregister_code16(KC_ACL0);
|
||||
break;
|
||||
case ACCEL_1:
|
||||
unregister_code16(KC_ACL1);
|
||||
break;
|
||||
case ACCEL_2:
|
||||
unregister_code16(KC_ACL2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false; // Skip all further processing of this key
|
||||
default:
|
||||
return true; // Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
// Standard encoder functionality
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
// Process encoder rotational movements
|
||||
|
@ -168,19 +240,15 @@ extern int16_t enc2RightPrev;
|
|||
void matrix_scan_user(void) {
|
||||
if (enc1Center != enc1CenterPrev) {
|
||||
if (enc1Center < ENC_TILT_THRESHOLD) {
|
||||
register_code16(KC_ESC);
|
||||
}
|
||||
else {
|
||||
unregister_code16(KC_ESC);
|
||||
if (layer_state_is(0)) {
|
||||
change_accel();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (enc2Center != enc2CenterPrev) {
|
||||
if (enc2Center < ENC_TILT_THRESHOLD) {
|
||||
}
|
||||
else {
|
||||
if (layer_state_is(0)) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Encoder sets ALL values when center is pressed so bail out at this point\
|
||||
|
|
|
@ -34,9 +34,9 @@
|
|||
"y": -0.5,
|
||||
"a": 7
|
||||
},
|
||||
"Mouse Btn 3",
|
||||
"Layer 1",
|
||||
"Layer 2"
|
||||
"Accel",
|
||||
"Layer 1\n\n\n\nBoot",
|
||||
"Esc"
|
||||
],
|
||||
[
|
||||
{
|
||||
|
@ -46,6 +46,6 @@
|
|||
"w": 2,
|
||||
"h": 2
|
||||
},
|
||||
"Esc\n\n\n\n\n\n\n\n\n<i class='fa fa-retweet'></i> Wheel"
|
||||
"Accel Mode\n\n\n\n\n\n\n\n\n<i class='fa fa-retweet'></i> Wheel"
|
||||
]
|
||||
]
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
File diff suppressed because it is too large
Load diff
1
keyboards/qvex/lynepad/rules.mk
Normal file
1
keyboards/qvex/lynepad/rules.mk
Normal file
|
@ -0,0 +1 @@
|
|||
TAP_DANCE_ENABLE = yes
|
|
@ -16,7 +16,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
// place overrides here
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#undef RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_LAYERS
|
||||
|
||||
|
@ -29,3 +30,4 @@
|
|||
#define MOUSEKEY_WHEEL_INTERVAL 50
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 20
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 10
|
||||
#define MK_COMBINED
|
||||
|
|
|
@ -15,6 +15,44 @@
|
|||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum {
|
||||
ACCEL_0 = 0,
|
||||
ACCEL_1 = 1,
|
||||
ACCEL_2 = 2,
|
||||
};
|
||||
static uint8_t acceleration_level = ACCEL_0;
|
||||
|
||||
void change_accel(void) {
|
||||
acceleration_level++;
|
||||
if (acceleration_level > ACCEL_2) {
|
||||
acceleration_level = ACCEL_0;
|
||||
}
|
||||
}
|
||||
|
||||
// Custom key codes
|
||||
enum {
|
||||
ACCEL = SAFE_RANGE,
|
||||
};
|
||||
|
||||
// Tap Dance declarations
|
||||
enum {
|
||||
TD_LAYER_BOOT,
|
||||
};
|
||||
|
||||
void dance_layer_boot_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
layer_on(1);
|
||||
} else {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
||||
// Tap Dance definitions
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
// Tap once for Escape, twice for Caps Lock
|
||||
[TD_LAYER_BOOT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_layer_boot_finished, NULL),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap (Base Layer) Default Layer
|
||||
* |----------------------------|
|
||||
|
@ -26,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[0] = LAYOUT_Lynepad(
|
||||
LCTL(LALT(KC_TAB)), KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1,
|
||||
LGUI(KC_DOWN), KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,
|
||||
KC_MS_BTN3, TO(1), TO(2)
|
||||
ACCEL, TD(TD_LAYER_BOOT), KC_ESC
|
||||
),
|
||||
[1] = LAYOUT_Lynepad(
|
||||
LCTL(LALT(KC_2)), LCTL(KC_BSPACE), LSFT(KC_X), LSFT(KC_P),
|
||||
|
@ -80,6 +118,40 @@ layer_state_t layer_state_set_user(layer_state_t state) {
|
|||
return state;
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case ACCEL:
|
||||
if (record->event.pressed) {
|
||||
switch(acceleration_level) {
|
||||
case ACCEL_0:
|
||||
register_code16(KC_ACL0);
|
||||
break;
|
||||
case ACCEL_1:
|
||||
register_code16(KC_ACL1);
|
||||
break;
|
||||
case ACCEL_2:
|
||||
register_code16(KC_ACL2);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch(acceleration_level) {
|
||||
case ACCEL_0:
|
||||
unregister_code16(KC_ACL0);
|
||||
break;
|
||||
case ACCEL_1:
|
||||
unregister_code16(KC_ACL1);
|
||||
break;
|
||||
case ACCEL_2:
|
||||
unregister_code16(KC_ACL2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false; // Skip all further processing of this key
|
||||
default:
|
||||
return true; // Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
// Standard encoder functionality
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
// Process encoder rotational movements
|
||||
|
@ -168,19 +240,15 @@ extern int16_t enc2RightPrev;
|
|||
void matrix_scan_user(void) {
|
||||
if (enc1Center != enc1CenterPrev) {
|
||||
if (enc1Center < ENC_TILT_THRESHOLD) {
|
||||
register_code16(KC_ESC);
|
||||
}
|
||||
else {
|
||||
unregister_code16(KC_ESC);
|
||||
if (layer_state_is(0)) {
|
||||
change_accel();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (enc2Center != enc2CenterPrev) {
|
||||
if (enc2Center < ENC_TILT_THRESHOLD) {
|
||||
}
|
||||
else {
|
||||
if (layer_state_is(0)) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Encoder sets ALL values when center is pressed so bail out at this point\
|
||||
|
|
1
qmk/keyboards/qvex/lynepad/keymaps/kemonine/rules.mk
Normal file
1
qmk/keyboards/qvex/lynepad/keymaps/kemonine/rules.mk
Normal file
|
@ -0,0 +1 @@
|
|||
TAP_DANCE_ENABLE = yes
|
Loading…
Reference in a new issue