aboutsummaryrefslogtreecommitdiff
path: root/mousmain.c
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2026-03-01 18:00:45 +0100
committerJavier <dev.git@javispedro.com>2026-03-01 18:00:45 +0100
commit0c2b1b6a5d80f2dd5f03e73efa52d6a921f1f98c (patch)
treebdbb136ca398ed75d3601725331086bbd92eeb9c /mousmain.c
parent58fe8e22096863f86b2916dd388401f7afc1d26c (diff)
downloadvbados-0c2b1b6a5d80f2dd5f03e73efa52d6a921f1f98c.tar.gz
vbados-0c2b1b6a5d80f2dd5f03e73efa52d6a921f1f98c.zip
add initial support for emulating left/right arrow keys from horizontal wheelHEADmaster
Diffstat (limited to 'mousmain.c')
-rw-r--r--mousmain.c56
1 files changed, 48 insertions, 8 deletions
diff --git a/mousmain.c b/mousmain.c
index 80ea1fb..07ba05a 100644
--- a/mousmain.c
+++ b/mousmain.c
@@ -71,6 +71,12 @@ static int set_wheel(LPTSRDATA data, bool enable)
return 0;
}
+static void set_wheel_keys(LPTSRDATA data, int wheel, uint8_t scancode_up, uint8_t scancode_down)
+{
+ data->wheel_key[wheel][WHEEL_DIR_UP] = scancode_up;
+ data->wheel_key[wheel][WHEEL_DIR_DOWN] = scancode_down;
+}
+
static int set_wheel_key(LPTSRDATA data, const char *keyname)
{
if (!data->usewheel) {
@@ -79,12 +85,10 @@ static int set_wheel_key(LPTSRDATA data, const char *keyname)
}
if (keyname) {
if (stricmp(keyname, "updn") == 0) {
- data->wheel_up_key = 0x48;
- data->wheel_down_key = 0x50;
+ set_wheel_keys(data, 0, 0x48, 0x50);
printf(_(1, 4, "Generate Up Arrow / Down Arrow key presses on wheel movement\n"));
} else if (stricmp(keyname, "pageupdn") == 0) {
- data->wheel_up_key = 0x49;
- data->wheel_down_key = 0x51;
+ set_wheel_keys(data, 0, 0x49, 0x51);
printf(_(1, 5, "Generate PageUp / PageDown key presses on wheel movement\n"));
} else {
fprintf(stderr, _(3, 2, "Unknown key '%s'\n"), keyname);
@@ -92,8 +96,28 @@ static int set_wheel_key(LPTSRDATA data, const char *keyname)
}
} else {
printf(_(1, 6, "Disabling wheel keystroke generation\n"));
- data->wheel_up_key = 0;
- data->wheel_down_key = 0;
+ set_wheel_keys(data, 0, 0, 0);
+ }
+ return EXIT_SUCCESS;
+}
+
+static int set_hwheel_key(LPTSRDATA data, const char *keyname)
+{
+ if (!data->usewheel) {
+ fprintf(stderr, _(3, 1, "Wheel not detected or support not enabled\n"));
+ return EXIT_FAILURE;
+ }
+ if (keyname) {
+ if (stricmp(keyname, "lr") == 0) {
+ set_wheel_keys(data, 1, 0x4B, 0x4D);
+ printf(_(1, 4, "Generate Up Arrow / Down Arrow key presses on wheel movement\n"));
+ } else {
+ fprintf(stderr, _(3, 2, "Unknown key '%s'\n"), keyname);
+ return EXIT_FAILURE;
+ }
+ } else {
+ printf(_(1, 6, "Disabling wheel keystroke generation\n"));
+ set_wheel_keys(data, 1, 0, 0);
}
return EXIT_SUCCESS;
}
@@ -267,8 +291,6 @@ static int configure_driver(LPTSRDATA data)
#if USE_WHEEL
// Let's utilize the wheel by default
data->usewheel = true;
- data->wheel_up_key = 0;
- data->wheel_down_key = 0;
detect_wheel(data); // Prints message if wheel found
#endif
@@ -536,6 +558,24 @@ int main(int argc, const char *argv[])
} else {
return set_wheel_key(data, 0);
}
+ } else if (stricmp(argv[argi], "hwheelkey") == 0) {
+ bool enable = true;
+ const char *key = 0;
+
+ if (!data) return driver_not_found();
+
+ argi++;
+ if (argi < argc) {
+ if (is_false(argv[argi])) enable = false;
+ else key = argv[argi];
+ }
+
+ if (enable) {
+ if (!key) return arg_required("hwheelkey");
+ return set_hwheel_key(data, key);
+ } else {
+ return set_hwheel_key(data, 0);
+ }
#endif
#if USE_INTEGRATION
} else if (stricmp(argv[argi], "integ") == 0) {