diff --git a/daemon/meson.build b/daemon/meson.build index bbaaa94..ae8ac36 100644 --- a/daemon/meson.build +++ b/daemon/meson.build @@ -60,7 +60,7 @@ test('daemon-communication', files('test_daemon_comm.py')[0], x52d_mouse_test_sources = ['x52d_mouse_test.c', 'x52d_mouse.c'] x52d_mouse_test = executable('x52d-mouse-test', x52d_mouse_test_sources, include_directories: includes, - dependencies: [dep_pinelog, dep_cmocka, dep_intl]) + dependencies: [dep_pinelog, dep_cmocka, dep_intl, dep_math]) test('x52d-mouse-test', x52d_mouse_test, protocol: 'tap') diff --git a/daemon/x52d_mouse.c b/daemon/x52d_mouse.c index 6c4e6ab..82ef381 100644 --- a/daemon/x52d_mouse.c +++ b/daemon/x52d_mouse.c @@ -26,18 +26,10 @@ #define MIN_SENSITIVITY 10 #define MAX_SENSITIVITY 500 -static const double MOUSE_CURVE_FACTORS[5] = { - 1.0, 1.2, 1.5, 1.8, 2.2 -}; - -static const double MOUSE_DEADZONES[12] = { - 0.0, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5 -}; - volatile int mouse_scroll_dir = 1; volatile bool mouse_isometric_mode = false; -volatile double mouse_curve_factor = MOUSE_CURVE_FACTORS[2]; // default -volatile double mouse_deadzone = MOUSE_DEADZONES[0]; +volatile int mouse_curve_factor = 3; +volatile int mouse_deadzone_factor = 0; volatile int mouse_sensitivity = 0; static int clamp_int(const char *description, int value, int min, int max) @@ -127,17 +119,14 @@ void x52d_cfg_set_Mouse_Sensitivity(int factor) void x52d_cfg_set_Mouse_CurveFactor(int factor) { // Factor ranges from 1-5, clamp it in this range - factor = clamp_int(_("curve factor"), factor, 1, 5); - - mouse_curve_factor = MOUSE_CURVE_FACTORS[factor-1]; + // Shift by 1 so it uses the correct index + mouse_curve_factor = clamp_int(_("curve factor"), factor, 1, 5) - 1; PINELOG_DEBUG(_("Setting mouse curve factor to %f"), mouse_curve_factor); } void x52d_cfg_set_Mouse_Deadzone(int factor) { // Factor ranges from 0-12, clamp it in this range - factor = clamp_int(_("deadzone factor"), factor, 0, 11); - - mouse_deadzone = MOUSE_DEADZONES[factor]; - PINELOG_DEBUG(_("Setting mouse deadzone to %f"), mouse_deadzone); + mouse_deadzone_factor = clamp_int(_("deadzone factor"), factor, 0, 11); + PINELOG_DEBUG(_("Setting mouse deadzone to %f"), mouse_deadzone_factor); } diff --git a/daemon/x52d_mouse.h b/daemon/x52d_mouse.h index b001ebf..d0f733c 100644 --- a/daemon/x52d_mouse.h +++ b/daemon/x52d_mouse.h @@ -14,8 +14,8 @@ extern volatile bool mouse_isometric_mode; extern volatile int mouse_scroll_dir; -extern volatile double mouse_curve_factor; -extern volatile double mouse_deadzone; +extern volatile int mouse_curve_factor; +extern volatile int mouse_deadzone_factor; extern volatile int mouse_sensitivity; void x52d_mouse_thread_control(bool enabled); diff --git a/daemon/x52d_mouse_handler.c b/daemon/x52d_mouse_handler.c index 9c68b98..1365f8c 100644 --- a/daemon/x52d_mouse_handler.c +++ b/daemon/x52d_mouse_handler.c @@ -91,6 +91,14 @@ static inline int fsgn(double f) return (f >= 0 ? 1 : -1); } +static const double MOUSE_CURVE_FACTORS[5] = { + 1.0, 1.2, 1.5, 1.8, 2.2 +}; + +static const double MOUSE_DEADZONES[12] = { + 0.0, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5 +}; + static int report_axis(void) { #define MAX_TICK_SPEED 250.0 @@ -104,9 +112,10 @@ static int report_axis(void) /* Calculate radial magnitude */ double mag = sqrt((double)(dx * dx + dy * dy)); + double cfg_deadzone = MOUSE_DEADZONES[mouse_deadzone_factor]; /* Radial deadzone check */ - if (mag <= mouse_deadzone) { + if (mag <= cfg_deadzone) { accum_x = 0.0; accum_y = 0.0; return 0; @@ -114,15 +123,16 @@ static int report_axis(void) /* Calculate gain */ double gain = (double)mouse_sensitivity / 100.0; + double exponent = MOUSE_CURVE_FACTORS[mouse_curve_factor]; /* Normalize magnitude */ - double adj_mag = mag - mouse_deadzone; + double adj_mag = mag - cfg_deadzone; double out_x = 0.0; double out_y = 0.0; if (mouse_isometric_mode) { /* Isometric mode: speed is a function of total distance */ - double speed = gain * pow(adj_mag, mouse_curve_factor); + double speed = gain * pow(adj_mag, exponent); /* Clamp total speed before breaking into components */ if (speed > MAX_TICK_SPEED) { @@ -138,8 +148,8 @@ static int report_axis(void) double cur_x = dx * ratio; double cur_y = dy * ratio; - out_x = fsgn(cur_x) * gain * pow(fabs(cur_x), mouse_curve_factor); - out_y = fsgn(cur_y) * gain * pow(fabs(cur_y), mouse_curve_factor); + out_x = fsgn(cur_x) * gain * pow(fabs(cur_x), exponent); + out_y = fsgn(cur_y) * gain * pow(fabs(cur_y), exponent); /* Clamp individual axis speeds */ if (fabs(out_x) > MAX_TICK_SPEED) { diff --git a/po/libx52.pot b/po/libx52.pot index 9cfd855..921b6ce 100644 --- a/po/libx52.pot +++ b/po/libx52.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: libx52 0.3.3\n" "Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\n" -"POT-Creation-Date: 2026-04-01 14:00-0700\n" +"POT-Creation-Date: 2026-04-01 14:23-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -142,13 +142,13 @@ msgstr "" msgid "Unknown LED state %d" msgstr "" -#: libx52/x52_stringify.c:47 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:63 -#: daemon/x52d_mouse.c:103 daemon/x52d_mouse.c:115 +#: libx52/x52_stringify.c:47 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:55 +#: daemon/x52d_mouse.c:95 daemon/x52d_mouse.c:107 msgid "off" msgstr "" -#: libx52/x52_stringify.c:48 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:63 -#: daemon/x52d_mouse.c:103 daemon/x52d_mouse.c:115 +#: libx52/x52_stringify.c:48 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:55 +#: daemon/x52d_mouse.c:95 daemon/x52d_mouse.c:107 msgid "on" msgstr "" @@ -864,64 +864,64 @@ msgstr "" msgid "Shutting down X52 I/O driver thread" msgstr "" -#: daemon/x52d_mouse.c:46 daemon/x52d_mouse.c:52 +#: daemon/x52d_mouse.c:38 daemon/x52d_mouse.c:44 #, c-format msgid "Clamping %s value %d to range [%d..%d]" msgstr "" -#: daemon/x52d_mouse.c:62 +#: daemon/x52d_mouse.c:54 #, c-format msgid "Setting mouse enable to %s" msgstr "" -#: daemon/x52d_mouse.c:79 +#: daemon/x52d_mouse.c:71 msgid "" "Config option 'mouse.speed' is DEPRECATED. Please use 'mouse.sensitivity' " "instead" msgstr "" -#: daemon/x52d_mouse.c:94 +#: daemon/x52d_mouse.c:86 #, c-format msgid "Migrating legacy mouse speed '%d' to sensitivity '%d%%'" msgstr "" -#: daemon/x52d_mouse.c:96 +#: daemon/x52d_mouse.c:88 msgid "speed -> sensitivity" msgstr "" -#: daemon/x52d_mouse.c:102 +#: daemon/x52d_mouse.c:94 #, c-format msgid "Setting mouse reverse scroll to %s" msgstr "" -#: daemon/x52d_mouse.c:114 +#: daemon/x52d_mouse.c:106 #, c-format msgid "Setting mouse isometric mode to %s" msgstr "" -#: daemon/x52d_mouse.c:121 +#: daemon/x52d_mouse.c:113 msgid "sensitivity" msgstr "" -#: daemon/x52d_mouse.c:124 +#: daemon/x52d_mouse.c:116 #, c-format msgid "Setting mouse sensitivity to %d%%" msgstr "" -#: daemon/x52d_mouse.c:130 +#: daemon/x52d_mouse.c:123 msgid "curve factor" msgstr "" -#: daemon/x52d_mouse.c:133 +#: daemon/x52d_mouse.c:124 #, c-format msgid "Setting mouse curve factor to %f" msgstr "" -#: daemon/x52d_mouse.c:139 +#: daemon/x52d_mouse.c:130 msgid "deadzone factor" msgstr "" -#: daemon/x52d_mouse.c:142 +#: daemon/x52d_mouse.c:131 #, c-format msgid "Setting mouse deadzone to %f" msgstr "" @@ -936,33 +936,33 @@ msgstr "" msgid "Error writing mouse wheel event %d" msgstr "" -#: daemon/x52d_mouse_handler.c:175 +#: daemon/x52d_mouse_handler.c:185 #, c-format msgid "Error %d writing mouse axis event (dx %d, dy %d)" msgstr "" -#: daemon/x52d_mouse_handler.c:187 +#: daemon/x52d_mouse_handler.c:197 msgid "Error writing mouse sync event" msgstr "" -#: daemon/x52d_mouse_handler.c:206 +#: daemon/x52d_mouse_handler.c:216 msgid "Starting X52 virtual mouse driver thread" msgstr "" -#: daemon/x52d_mouse_handler.c:225 +#: daemon/x52d_mouse_handler.c:235 #, c-format msgid "Error %d initializing mouse thread: %s" msgstr "" -#: daemon/x52d_mouse_handler.c:232 +#: daemon/x52d_mouse_handler.c:242 msgid "Shutting down X52 virtual mouse driver thread" msgstr "" -#: daemon/x52d_mouse_handler.c:239 +#: daemon/x52d_mouse_handler.c:249 msgid "Virtual mouse not created. Ignoring thread state change" msgstr "" -#: daemon/x52d_mouse_handler.c:291 daemon/x52d_mouse_handler.c:299 +#: daemon/x52d_mouse_handler.c:301 daemon/x52d_mouse_handler.c:309 #, c-format msgid "Error %d creating X52 virtual mouse" msgstr "" diff --git a/po/xx_PL.po b/po/xx_PL.po index 367d8b0..7a1b2a5 100644 --- a/po/xx_PL.po +++ b/po/xx_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: libx52 0.2.3\n" "Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\n" -"POT-Creation-Date: 2026-04-01 14:00-0700\n" +"POT-Creation-Date: 2026-04-01 14:23-0700\n" "PO-Revision-Date: 2026-03-27 08:33-0700\n" "Last-Translator: Nirenjan Krishnan \n" "Language-Team: Dummy Language for testing i18n\n" @@ -142,13 +142,13 @@ msgstr "YYay-MMay-DDay" msgid "Unknown LED state %d" msgstr "Unknownay EDLay atestay %d" -#: libx52/x52_stringify.c:47 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:63 -#: daemon/x52d_mouse.c:103 daemon/x52d_mouse.c:115 +#: libx52/x52_stringify.c:47 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:55 +#: daemon/x52d_mouse.c:95 daemon/x52d_mouse.c:107 msgid "off" msgstr "offay" -#: libx52/x52_stringify.c:48 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:63 -#: daemon/x52d_mouse.c:103 daemon/x52d_mouse.c:115 +#: libx52/x52_stringify.c:48 daemon/x52d_clock.c:29 daemon/x52d_mouse.c:55 +#: daemon/x52d_mouse.c:95 daemon/x52d_mouse.c:107 msgid "on" msgstr "onay" @@ -917,64 +917,64 @@ msgstr "Erroray %d initializingay I/O iverdray eadthray: %s" msgid "Shutting down X52 I/O driver thread" msgstr "Uttingshay ownday X52 I/O iverdray eadthray" -#: daemon/x52d_mouse.c:46 daemon/x52d_mouse.c:52 +#: daemon/x52d_mouse.c:38 daemon/x52d_mouse.c:44 #, c-format msgid "Clamping %s value %d to range [%d..%d]" msgstr "" -#: daemon/x52d_mouse.c:62 +#: daemon/x52d_mouse.c:54 #, c-format msgid "Setting mouse enable to %s" msgstr "Ettingsay ousemay enableay otay %s" -#: daemon/x52d_mouse.c:79 +#: daemon/x52d_mouse.c:71 msgid "" "Config option 'mouse.speed' is DEPRECATED. Please use 'mouse.sensitivity' " "instead" msgstr "" -#: daemon/x52d_mouse.c:94 +#: daemon/x52d_mouse.c:86 #, c-format msgid "Migrating legacy mouse speed '%d' to sensitivity '%d%%'" msgstr "" -#: daemon/x52d_mouse.c:96 +#: daemon/x52d_mouse.c:88 msgid "speed -> sensitivity" msgstr "" -#: daemon/x52d_mouse.c:102 +#: daemon/x52d_mouse.c:94 #, c-format msgid "Setting mouse reverse scroll to %s" msgstr "Ettingsay ousemay everseray ollscray otay %s" -#: daemon/x52d_mouse.c:114 -#, c-format +#: daemon/x52d_mouse.c:106 +#, c-format msgid "Setting mouse isometric mode to %s" msgstr "Ettingsay ousemay isometricay odemay otay %s" -#: daemon/x52d_mouse.c:121 +#: daemon/x52d_mouse.c:113 msgid "sensitivity" msgstr "ensitivitysay" -#: daemon/x52d_mouse.c:124 +#: daemon/x52d_mouse.c:116 #, c-format msgid "Setting mouse sensitivity to %d%%" msgstr "Ettingsay ousemay ensitivitysay otay %s" -#: daemon/x52d_mouse.c:130 +#: daemon/x52d_mouse.c:123 msgid "curve factor" msgstr "urvecay actorfay" -#: daemon/x52d_mouse.c:133 +#: daemon/x52d_mouse.c:124 #, c-format msgid "Setting mouse curve factor to %f" msgstr "Ettingsay ousemay urvecay actorfay otay %s" -#: daemon/x52d_mouse.c:139 +#: daemon/x52d_mouse.c:130 msgid "deadzone factor" msgstr "eadzoneday actorfay" -#: daemon/x52d_mouse.c:142 +#: daemon/x52d_mouse.c:131 #, c-format msgid "Setting mouse deadzone to %f" msgstr "Ettingsay ousemay eadzoneday otay %s" @@ -990,33 +990,33 @@ msgstr "" msgid "Error writing mouse wheel event %d" msgstr "Erroray itingwray ousemay eelwhay eventay %d" -#: daemon/x52d_mouse_handler.c:175 +#: daemon/x52d_mouse_handler.c:185 #, c-format msgid "Error %d writing mouse axis event (dx %d, dy %d)" msgstr "Erroray %d itingwray ousemay axisay eventay (xday %d, yday %d)" -#: daemon/x52d_mouse_handler.c:187 +#: daemon/x52d_mouse_handler.c:197 msgid "Error writing mouse sync event" msgstr "Erroray itingwray ousemay yncsay eventay" -#: daemon/x52d_mouse_handler.c:206 +#: daemon/x52d_mouse_handler.c:216 msgid "Starting X52 virtual mouse driver thread" msgstr "Artingstay X52 irtualvay ousemay iverdray eadthray" -#: daemon/x52d_mouse_handler.c:225 +#: daemon/x52d_mouse_handler.c:235 #, c-format msgid "Error %d initializing mouse thread: %s" msgstr "Erroray %d initializingay ousemay eadthray: %s" -#: daemon/x52d_mouse_handler.c:232 +#: daemon/x52d_mouse_handler.c:242 msgid "Shutting down X52 virtual mouse driver thread" msgstr "Uttingshay ownday X52 irtualvay ousemay iverdray eadthray" -#: daemon/x52d_mouse_handler.c:239 +#: daemon/x52d_mouse_handler.c:249 msgid "Virtual mouse not created. Ignoring thread state change" msgstr "Irtualvay ousemay otnay eatedcray. Ignoringa eadthray atestay angechay" -#: daemon/x52d_mouse_handler.c:291 daemon/x52d_mouse_handler.c:299 +#: daemon/x52d_mouse_handler.c:301 daemon/x52d_mouse_handler.c:309 #, c-format msgid "Error %d creating X52 virtual mouse" msgstr "Erroray %d eatingcray X52 irtualvay ousemay"