mirror of
https://github.com/qmk/qmk_userspace.git
synced 2026-07-26 19:31:55 -04:00
add trackball calibration (commentated)
This commit is contained in:
parent
de0c578f56
commit
aa84332739
4 changed files with 96 additions and 11 deletions
|
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "oco9oco.h" //look for users/oco9oco/
|
#include "oco9oco.h" //look for users/oco9oco/
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
//clang-format off
|
//clang-format off
|
||||||
|
|
||||||
|
|
@ -44,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
SFT_CAPS,__________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, KC_QUOT,
|
SFT_CAPS,__________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, KC_QUOT,
|
||||||
KC_LGUI, KC_Z, KC_X, LT(_ONEHAND,KC_C),KC_V, KC_B, __________________QWERTY_HOME_R3___________, KC_BSLS,
|
KC_LGUI, KC_Z, KC_X, LT(_ONEHAND,KC_C),KC_V, KC_B, __________________QWERTY_HOME_R3___________, KC_BSLS,
|
||||||
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
||||||
THUMB_L1,THUMB_L2, TT(_ONEHAND),/* */THUMB_R3,THUMB_R2,
|
THUMB_L1,THUMB_L2, THUMB_L3,/* */THUMB_R3,THUMB_R2,
|
||||||
THUMB_L3, USR_LNG,/* */THUMB_R1
|
USR_LNG, TT(_ONEHAND),/* */THUMB_R1
|
||||||
// ╰───────────────────────────╯ ╰──────────────────╯
|
// ╰───────────────────────────╯ ╰──────────────────╯qmk
|
||||||
),
|
),
|
||||||
|
|
||||||
[_IPC] = LAYOUT_charybdis_wrapper(
|
[_IPC] = LAYOUT_charybdis_wrapper(
|
||||||
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
||||||
ALT_F4, C(KC_F1),KC_P, KC_X, INV_DSP, TO(_ONEHAND), KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, XXXXXXX, _______,
|
ALT_F4, C(KC_F1),KC_P, KC_X, INV_DSP, TO(_ONEHAND), KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, XXXXXXX, _______,
|
||||||
ALT_TAB, INV_DSP, XXXXXXX, CLASS_E, CLASS_A, HWP_MACRO, KC_GRV, _________NUM_789_________, XXXXXXX, _______,
|
ALT_TAB, INV_DSP, KC_LEFT, KC_RGHT, CLASS_A, HWP_MACRO, KC_GRV, _________NUM_789_________, XXXXXXX, _______,
|
||||||
_______, IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, AT_IPC, _________NUM_456_________, KC_COLN, KC_DQUO,
|
_______, IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, AT_IPC, _________NUM_456_________, KC_COLN, KC_DQUO,
|
||||||
IME_CHG, IPC(Z), HWP_CITE,IPC(C), KC_EQL, KC_BSLS, XXXXXXX, _________NUM_123_________, _______, KC_PIPE,
|
KC_LGUI, SNIPING, HWP_CITE,KC_BTN2, KC_BTN1, DRGSCRL, IME_CHG, _________NUM_123_________, _______, KC_PIPE,
|
||||||
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
||||||
_______, _______, _______,/* */HWP_MACRO, LT(_NAV, KC_0),
|
_______, _______, _______,/* */HWP_MACRO, LT(_NAV, KC_0),
|
||||||
QK_BOOT, _______,/* */IME_CHG
|
QK_BOOT, _______,/* */IME_CHG
|
||||||
|
|
@ -98,15 +99,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_ONEHAND] = LAYOUT_charybdis_wrapper(
|
[_ONEHAND] = LAYOUT_charybdis_wrapper(
|
||||||
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
||||||
ALT_F4, CTRL_F1, KC_LEFT, XXXXXXX, KC_RGHT, KC_F5, S_D_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
|
ALT_F4, CTRL_F1, KC_LEFT, XXXXXXX, KC_RGHT, KC_F5, S_D_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
|
||||||
XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, KC_WH_U, XXXXXXX, S_D_RMOD,KC_BTN4, KC_BTN5, XXXXXXX, XXXXXXX, QK_MAKE,
|
XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, KC_WH_U, XXXXXXX, S_D_RMOD,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_MAKE,
|
||||||
XXXXXXX, KC_LCTL, KC_BTN2, KC_LSFT, KC_BTN1, DPI_MOD, C(KC_TAB), KC_BTN3, KC_BTN1, KC_BTN2, DRGSCRL, XXXXXXX,
|
XXXXXXX, KC_LCTL, KC_BTN2, KC_LSFT, KC_BTN1, DPI_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
DRG_TOG, DRGSCRL, KC_BTN2, _______, KC_BTN1, DPI_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, SNIPING, XXXXXXX,
|
DRG_TOG, DRGSCRL, KC_BTN2, _______, KC_BTN1, DPI_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
||||||
KC_LCTL, _______, _______,/* */_______, _______,
|
THUMB_L1, SNIPING, TO(_BASE),/* */_______, _______,
|
||||||
_______, DRG_TOG,/* */_______
|
_______, _______,/* */_______
|
||||||
// ╰───────────────────────────╯ ╰──────────────────╯
|
// ╰───────────────────────────╯ ╰──────────────────╯
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// in keymap.c:
|
// in keymap.c:
|
||||||
// void pointing_device_init_user(void) {
|
// void pointing_device_init_user(void) {
|
||||||
// set_auto_mouse_layer(_ONEHAND); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of <mouse_layer>
|
// set_auto_mouse_layer(_ONEHAND); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of <mouse_layer>
|
||||||
|
|
|
||||||
13
keymap_charybdis.json
Normal file
13
keymap_charybdis.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"keyboard": "bastardkb/charybdis/4x6/v2/splinky_3",
|
||||||
|
"keymap": "oco9oco",
|
||||||
|
"layers": [
|
||||||
|
["KC_ESC", "__________________NUMROW_L_________________", "__________________NUMROW_R_________________", "KC_MINS", "KC_TAB", "__________________QWERTY_L1________________", "__________________QWERTY_R1________________", "KC_EQL", "SFT_CAPS", "__________________QWERTY_SACS_L2___________", "__________________QWERTY_R2________________", "KC_QUOT", "KC_LGUI", "KC_Z", "KC_X", "LT(_ONEHAND,KC_C)", "KC_V", "KC_B", "__________________QWERTY_HOME_R3___________", "KC_BSLS", "THUMB_L1", "THUMB_L2", "THUMB_L3", "THUMB_R3", "THUMB_R2", "USR_LNG", "TT(_ONEHAND)", "THUMB_R1"],
|
||||||
|
["ALT_F4", "C(KC_F1)", "KC_P", "KC_X", "INV_DSP", "TO(_ONEHAND)", "KC_LBRC", "KC_RBRC", "KC_LPRN", "KC_RPRN", "KC_NO", "KC_TRNS", "ALT_TAB", "INV_DSP", "KC_LEFT", "KC_RGHT", "CLASS_A", "HWP_MACRO", "KC_GRV", "_________NUM_789_________", "KC_NO", "KC_TRNS", "KC_TRNS", "IPC(A)", "IPC(S)", "IPC_MIN", "IPC(F)", "KC_DOT", "AT_IPC", "_________NUM_456_________", "KC_COLN", "KC_DQUO", "KC_LGUI", "SNIPING", "HWP_CITE", "KC_BTN2", "KC_BTN1", "DRGSCRL", "IME_CHG", "_________NUM_123_________", "KC_TRNS", "KC_PIPE", "KC_TRNS", "KC_TRNS", "KC_TRNS", "HWP_MACRO", "LT(_NAV, KC_0)", "QK_BOOT", "KC_TRNS", "IME_CHG"],
|
||||||
|
["KC_TRNS", "CTRL_F1", "KC_F2", "KC_F3", "ALT_F4", "KC_F5", "KC_NO", "A(KC_7)", "A(KC_5)", "A(KC_9)", "A(KC_0)", "KC_NO", "ALT_TAB", "NAV_NS", "LCA(KC_J)", "LCA(KC_K)", "LCA(KC_L)", "KC_F6", "S(A(KC_3))", "A(KC_4)", "A(KC_8)", "A(KC_6)", "KC_NO", "KC_NO", "KC_LGUI", "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_LSFT", "KC_F7", "KC_INS", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT", "DPI_MOD", "G(C(KC_D))", "NAV(Z)", "C(KC_X)", "C(KC_C)", "C(KC_V)", "C(KC_B)", "KC_APP", "KC_HOME", "KC_PGDN", "KC_PGUP", "KC_END", "DPI_RMOD", "KC_TRNS", "KC_BSPC", "KC_DEL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"],
|
||||||
|
["KC_TRNS", "CTRL_F1", "KC_F2", "KC_F3", "ALT_F4", "KC_F5", "KC_F8", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "QK_BOOT", "KC_U", "KC_BTN4", "KC_WH_D", "KC_MS_U", "KC_WH_U", "KC_F6", "KC_F9", "KC_WH_L", "KC_WH_R", "KC_NO", "KC_NO", "QK_MAKE", "KC_P", "KC_LSFT", "KC_MS_L", "KC_MS_D", "KC_MS_R", "KC_F7", "KC_F10", "KC_ACL0", "KC_BTN1", "KC_BTN2", "KC_BTN3", "KC_ENT", "KC_X", "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_LSFT", "BOLDFACE", "KC_APP", "KC_ACL0", "KC_BTN4", "KC_BTN5", "KC_NO", "KC_NO", "KC_TRNS", "KC_BSPC", "KC_DEL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"],
|
||||||
|
["KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "QK_BOOT", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_F12", "KC_F7", "KC_F8", "KC_F9", "KC_NO", "KC_NO", "KC_NO", "KC_LSFT", "KC_LALT", "KC_LCTL", "KC_LSFT", "KC_NO", "KC_F11", "KC_F4", "KC_F5", "KC_F6", "KC_NO", "KC_NO", "KC_NO", "KC_LGUI", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_F10", "KC_F1", "KC_F2", "KC_F3", "KC_NO", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"],
|
||||||
|
["ALT_F4", "CTRL_F1", "KC_LEFT", "KC_NO", "KC_RGHT", "KC_F5", "S_D_MOD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "QK_BOOT", "KC_NO", "KC_NO", "KC_WH_D", "KC_NO", "KC_WH_U", "KC_NO", "S_D_RMOD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "QK_MAKE", "KC_NO", "KC_LCTL", "KC_BTN2", "KC_LSFT", "KC_BTN1", "DPI_MOD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "DRG_TOG", "DRGSCRL", "KC_BTN2", "KC_TRNS", "KC_BTN1", "DPI_RMOD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "THUMB_L1", "THUMB_L2", "THUMB_L3", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"]
|
||||||
|
],
|
||||||
|
"layout": "LAYOUT_charybdis_wrapper"
|
||||||
|
}
|
||||||
|
|
@ -570,12 +570,24 @@ case LSFT_T(KC_F):
|
||||||
} else {return false;}
|
} else {return false;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LALT_T(KC_S):
|
||||||
|
if (other_keycode == THUMB_L1) {
|
||||||
|
return true;
|
||||||
|
} else {return false;}
|
||||||
|
break;
|
||||||
|
|
||||||
case THUMB_L1:
|
case THUMB_L1:
|
||||||
case THUMB_L2:
|
case THUMB_L2:
|
||||||
case THUMB_L3:
|
case THUMB_L3:
|
||||||
|
case TT(_ONEHAND):
|
||||||
case THUMB_R1:
|
case THUMB_R1:
|
||||||
case THUMB_R2:
|
case THUMB_R2:
|
||||||
case THUMB_R3:
|
case THUMB_R3:
|
||||||
|
case IPC(A):
|
||||||
|
case IPC(S):
|
||||||
|
case IPC_MIN:
|
||||||
|
case IPC(F):
|
||||||
|
case IPC(Z):
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -584,3 +596,57 @@ return get_chordal_hold_default(tap_hold_record, other_record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// charybdis trackball angular alignment calibration
|
||||||
|
// This code rotates the mouse report by 15 degrees counter-clockwise.
|
||||||
|
|
||||||
|
// #include "math.h"
|
||||||
|
|
||||||
|
// #define FIXED_POINT 256
|
||||||
|
// #define COS_15 ((int16_t)(cosf(15.0 * M_PI / 180.0) * FIXED_POINT)) // 0.9659
|
||||||
|
// #define SIN_15 ((int16_t)(sinf(15.0 * M_PI / 180.0) * FIXED_POINT)) // 0.2588
|
||||||
|
|
||||||
|
// report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
|
||||||
|
// report_mouse_t new_report = mouse_report;
|
||||||
|
|
||||||
|
// int16_t x = mouse_report.x;
|
||||||
|
// int16_t y = mouse_report.y;
|
||||||
|
|
||||||
|
// int16_t new_x = (COS_15 * x - SIN_15 * y) / FIXED_POINT;
|
||||||
|
// int16_t new_y = (SIN_15 * x + COS_15 * y) / FIXED_POINT;
|
||||||
|
|
||||||
|
// new_report.x = (int8_t)new_x;
|
||||||
|
// new_report.y = (int8_t)new_y;
|
||||||
|
|
||||||
|
// return new_report;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// charybdis trackball angular alignment calibration(floating point)
|
||||||
|
// This code rotates the mouse report by 15 degrees counter-clockwise.
|
||||||
|
|
||||||
|
|
||||||
|
// #include "math.h"
|
||||||
|
|
||||||
|
// report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
|
||||||
|
// report_mouse_t new_report = mouse_report;
|
||||||
|
|
||||||
|
// // 15도 회전 변환 공식 (반시계 방향)
|
||||||
|
// // x' = cos(15°) * x - sin(15°) * y
|
||||||
|
// // y' = sin(15°) * x + cos(15°) * y
|
||||||
|
|
||||||
|
// float angle = 15.0 * M_PI / 180.0; // 라디안 변환
|
||||||
|
// float cos_a = cosf(angle); // 약 0.9659
|
||||||
|
// float sin_a = sinf(angle); // 약 0.2588
|
||||||
|
|
||||||
|
// float old_x = (float)mouse_report.x;
|
||||||
|
// float old_y = (float)mouse_report.y;
|
||||||
|
|
||||||
|
// float new_x = cos_a * old_x - sin_a * old_y;
|
||||||
|
// float new_y = sin_a * old_x + cos_a * old_y;
|
||||||
|
|
||||||
|
// new_report.x = (int8_t)roundf(new_x);
|
||||||
|
// new_report.y = (int8_t)roundf(new_y);
|
||||||
|
|
||||||
|
// return new_report;
|
||||||
|
// }
|
||||||
|
|
@ -12,3 +12,6 @@ SRC+=oco9oco.c
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes
|
||||||
# RGB 라이트 기능 활성화
|
# RGB 라이트 기능 활성화
|
||||||
RGBLIGHT_ENABLE = no
|
RGBLIGHT_ENABLE = no
|
||||||
|
|
||||||
|
# 트랙볼 캘리브레이션용. 버벅거린다면 주석처리
|
||||||
|
# FLOAT_ENABLE = yes
|
||||||
Loading…
Reference in a new issue