aboutsummaryrefslogtreecommitdiff
path: root/src/linux
diff options
context:
space:
mode:
authorNicolas James <Eele1Ephe7uZahRie@tutanota.com>2025-04-14 13:32:55 +1000
committerNicolas James <Eele1Ephe7uZahRie@tutanota.com>2025-04-14 13:32:55 +1000
commit1249653b654bca6caaecc407a2128c4f1ccabd52 (patch)
tree444622eb6c90217c54a2beb6044db1a68a38f495 /src/linux
parent12ad6ebd615f57b7b1032953ab9ea9b29ca1bc87 (diff)
Move impl to header single file, fix linking etc
Diffstat (limited to 'src/linux')
-rw-r--r--src/linux/hid-core.c2
-rw-r--r--src/linux/hid-input.c148
2 files changed, 6 insertions, 144 deletions
diff --git a/src/linux/hid-core.c b/src/linux/hid-core.c
index 5a64a10..9dc8422 100644
--- a/src/linux/hid-core.c
+++ b/src/linux/hid-core.c
@@ -35,6 +35,8 @@
#include "hid-ids.h"
+#include "fastmouse.h"
+
/*
* Version Information
*/
diff --git a/src/linux/hid-input.c b/src/linux/hid-input.c
index 56e1bb7..552bb63 100644
--- a/src/linux/hid-input.c
+++ b/src/linux/hid-input.c
@@ -14,7 +14,6 @@
*/
#include <linux/module.h>
-#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/kernel.h>
@@ -23,6 +22,10 @@
#include "hid-ids.h"
+#define FASTMOUSE_IMPL
+#include "fastmouse.h"
+#undef FASTMOUSE_IMPL
+
#define unk KEY_UNKNOWN
static const unsigned char hid_keyboard[256] = {
@@ -1506,149 +1509,6 @@ static void hid_report_set_tool(struct hid_report *report, struct input_dev *inp
report->tool = new_tool;
}
-struct fastmouse_state {
- int division;
- long frame_x, frame_y;
- long accum_x, accum_y;
- int rise, run;
- /* TODO
- int polling_rate;
- long accel;
- */
-};
-static struct fastmouse_state fastmouse = {
- .division = 1,
- .frame_x = 0,
- .frame_y = 0,
- .accum_x = 0,
- .accum_y = 0,
- .rise = 0,
- .run = INT_MAX,
- /* TODO
- .polling_rate = 4000,
- .accel = 1,
- */
-};
-
-static int set_division(const char *val, const struct kernel_param *kp) {
- const int ret = kstrtoint(val, 0, &fastmouse.division);
- if (ret != 0 || fastmouse.division <= 0) {
- return -EINVAL;
- }
- return ret;
-}
-static const struct kernel_param_ops division_ops = {
- .set = set_division,
- .get = param_get_int,
-};
-module_param_cb(division, &division_ops, &fastmouse.division, 0664);
-MODULE_PARM_DESC(division, "Mouse movement division amount (default: 1)");
-
-static int set_rise(const char *val, const struct kernel_param *kp) {
- const int ret = kstrtoint(val, 0, &fastmouse.rise);
- if (ret != 0) {
- return -EINVAL;
- }
- return ret;
-}
-static const struct kernel_param_ops rise_ops = {
- .set = set_rise,
- .get = param_get_int,
-};
-module_param_cb(rise, &rise_ops, &fastmouse.rise, 0664);
-MODULE_PARM_DESC(rise, "Mouse movement rise amount (default: 0)");
-
-static int set_run(const char *val, const struct kernel_param *kp) {
- const int ret = kstrtoint(val, 0, &fastmouse.run);
- if (ret != 0) {
- return -EINVAL;
- }
- return ret;
-}
-static const struct kernel_param_ops run_ops = {
- .set = set_run,
- .get = param_get_int,
-};
-module_param_cb(run, &run_ops, &fastmouse.run, 0664);
-MODULE_PARM_DESC(run, "Mouse movement run amount (default: INT_MAX)");
-
-/* TODO
-static int set_polling_rate(const char *val, const struct kernel_param *kp) {
- const int ret = kstrtoint(val, 0, &fastmouse.polling_rate);
- if (ret != 0) {
- return -EINVAL;
- }
- return ret;
-}
-static const struct kernel_param_ops poll_ops = {
- .set = set_polling_rate,
- .get = param_get_int,
-};
-module_param_cb(polling_rate, &poll_ops, &fastmouse.polling_rate, 0664);
-MODULE_PARM_DESC(polling_rate, "Mouse polling rate (default: 4000)");
-
-static int set_accel(const char *val, const struct kernel_param *kp) {
- const int ret = kstrtol(val, 0, &fastmouse.accel);
- if (ret != 0) {
- return -EINVAL;
- }
- return ret;
-}
-static const struct kernel_param_ops accel_ops = {
- .set = set_accel,
- .get = param_get_int,
-};
-module_param_cb(acceleration, &accel_ops, &fastmouse.accel, 0664);
-MODULE_PARM_DESC(acceleration, "Mouse acceleration (default: 1)");
-*/
-
-static void input_event_fastmouse_log(
- struct input_dev *input,
- const unsigned int type,
- const unsigned int code,
- __s32 value) {
- fastmouse.frame_x += (code == REL_X) * value;
- fastmouse.frame_y += (code == REL_Y) * value;
-}
-
-/* TODO (for accel)
-static unsigned __int128 i128_sqrt(const unsigned __int128 v) {
- unsigned __int128 left = 0;
- unsigned __int128 right = v;
- while (left < right) {
- const unsigned __int128 mid = left + ((right - left) / 2);
- if (mid >= ~(u64)0 || mid * mid > v) {
- right = mid;
- } else if (mid * mid == v) {
- return mid;
- } else {
- left = mid + 1;
- }
- }
- return left != 0 ? left - 1 : 0;
-}
-*/
-
-void fastmouse_input_emit(struct input_dev *input) {
- const long rise = fastmouse.rise / fastmouse.division;
- const long run = fastmouse.run / fastmouse.division;
-
- fastmouse.accum_x += fastmouse.frame_x * run - fastmouse.frame_y * rise;
- fastmouse.accum_y += fastmouse.frame_x * rise + fastmouse.frame_y * run;
-
- const long emit_x = fastmouse.accum_x / INT_MAX;
- if (emit_x != 0) {
- input_event(input, EV_REL, REL_X, emit_x);
- }
- const long emit_y = fastmouse.accum_y / INT_MAX;
- if (emit_y != 0) {
- input_event(input, EV_REL, REL_Y, emit_y);
- }
- fastmouse.accum_x %= INT_MAX;
- fastmouse.accum_y %= INT_MAX;
-
- fastmouse.frame_x = fastmouse.frame_y = 0;
-}
void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value)
{