add trackball calibration (commentated)

This commit is contained in:
oco9oco 2025-05-08 16:30:31 +09:00
commit aa84332739
4 changed files with 96 additions and 11 deletions

View file

@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "oco9oco.h" //look for users/oco9oco/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//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,
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_L3, USR_LNG,/* */THUMB_R1
// ╰───────────────────────────╯ ╰──────────────────╯
THUMB_L1,THUMB_L2, THUMB_L3,/* */THUMB_R3,THUMB_R2,
USR_LNG, TT(_ONEHAND),/* */THUMB_R1
// ╰───────────────────────────╯ ╰──────────────────╯qmk
),
[_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_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,
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),
QK_BOOT, _______,/* */IME_CHG
@ -98,15 +99,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ONEHAND] = LAYOUT_charybdis_wrapper(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
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, KC_LCTL, KC_BTN2, KC_LSFT, KC_BTN1, DPI_MOD, C(KC_TAB), KC_BTN3, KC_BTN1, KC_BTN2, DRGSCRL, XXXXXXX,
DRG_TOG, DRGSCRL, KC_BTN2, _______, KC_BTN1, DPI_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, SNIPING, XXXXXXX,
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, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
DRG_TOG, DRGSCRL, KC_BTN2, _______, KC_BTN1, DPI_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
KC_LCTL, _______, _______,/* */_______, _______,
_______, DRG_TOG,/* */_______
THUMB_L1, SNIPING, TO(_BASE),/* */_______, _______,
_______, _______,/* */_______
// ╰───────────────────────────╯ ╰──────────────────╯
),
};
// in keymap.c:
// 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>

13
keymap_charybdis.json Normal file
View 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"
}

View file

@ -570,12 +570,24 @@ case LSFT_T(KC_F):
} else {return false;}
break;
case LALT_T(KC_S):
if (other_keycode == THUMB_L1) {
return true;
} else {return false;}
break;
case THUMB_L1:
case THUMB_L2:
case THUMB_L3:
case THUMB_L3:
case TT(_ONEHAND):
case THUMB_R1:
case THUMB_R2:
case THUMB_R3:
case IPC(A):
case IPC(S):
case IPC_MIN:
case IPC(F):
case IPC(Z):
return true;
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;
// }

View file

@ -12,3 +12,6 @@ SRC+=oco9oco.c
MOUSEKEY_ENABLE = yes
# RGB 라이트 기능 활성화
RGBLIGHT_ENABLE = no
# 트랙볼 캘리브레이션용. 버벅거린다면 주석처리
# FLOAT_ENABLE = yes