On Wed, 22 May 2024, Joel wrote:
wsmuxctl -f 0 -l wsmouse0 wsmouse2
Can you run this program on the console (no X; no wsmoused) and see if it reports any scroll events when you move the mouse? Run on /dev/wsmouse2 first, then on /dev/wsmouse. Both should report the same type of events, I think. -RVP --- START mousetest.c --- /** * 64-bit systems: hexdump -e '24/1 "%02x " "\n"' /dev/wsmouseN * 32-bit systems: hexdump -e '20/1 "%02x " "\n"' /dev/wsmouseN */ #include <err.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dev/wscons/wsconsio.h> int main(int argc, char* argv[]) { struct wscons_event e[16], *ep; char* dev; int fd; if (argc != 2) { fprintf(stderr, "Usage: %s mouse-dev\n", getprogname()); exit(EXIT_FAILURE); } dev = argv[1]; if ((fd = open(dev, O_RDONLY)) == -1) err(EXIT_FAILURE, "%s: open failed", dev); for (;;) { ssize_t i, n; if ((n = read(fd, e, sizeof e)) <= 0) { close(fd); err(EXIT_FAILURE, "%s: packet read failed", dev); } if (n % sizeof(e[0])) { close(fd); err(EXIT_FAILURE, "%s: partial packet read", dev); } n /= sizeof(e[0]); for (i = 0, ep = e; i < n; i++, ep++) { switch (ep->type) { case WSCONS_EVENT_MOUSE_UP: printf(" release: %d\n", ep->value); break; case WSCONS_EVENT_MOUSE_DOWN: printf(" press: %d\n", ep->value); break; case WSCONS_EVENT_MOUSE_DELTA_X: printf(" move: %d (%s)\n", ep->value, ep->value < 0 ? "left" : "right"); break; case WSCONS_EVENT_MOUSE_DELTA_Y: printf(" move: %d (%s)\n", ep->value, ep->value < 0 ? "down" : "up"); break; case WSCONS_EVENT_MOUSE_ABSOLUTE_X: printf(" loc X: %d\n", ep->value); break; case WSCONS_EVENT_MOUSE_ABSOLUTE_Y: printf(" loc Y: %d\n", ep->value); break; case WSCONS_EVENT_MOUSE_DELTA_Z: printf(" scroll: %d (%s)\n", ep->value, ep->value < 0 ? "up" : "down"); break; case WSCONS_EVENT_MOUSE_ABSOLUTE_Z: printf(" loc Z: %d\n", ep->value); break; case WSCONS_EVENT_MOUSE_DELTA_W: printf(" delta-w: %d (%s)\n", ep->value, ep->value < 0 ? "left" : "right"); break; case WSCONS_EVENT_MOUSE_ABSOLUTE_W: printf(" loc W: %d\n", ep->value); break; case WSCONS_EVENT_HSCROLL: printf("H-scroll: %d\n", ep->value); break; case WSCONS_EVENT_VSCROLL: printf("V-scroll: %d\n", ep->value); break; default: printf("Unknown: %u %d\n", ep->type, ep->value); break; } } } return 0; } --- END mousetest.c ---