Am 18.05.10 23:17, schrieb Sverre Froyen: > I would like to adjust the sensitivity of my external mouse but leave the > sensitivity of my laptop touchpad as is. As far as I can tell, NetBSD has no > facility to do this. I found a couple of mouse ioctl definitions (but no > implementations) that seem relevant and also kern/12132 that partially > implements what I need. I propose changing wsmouse.c as indicated in the > attached diff. It adds scaling factors for x, y, z, and w into the > wsmouse_softc structure and uses a higher resolution internally in order to > handle fractions without adding floats. > > WSCONS_MOUSE_RES is (the inverse of) the internal resolution and > sc_mx, sc_my, etc are the scaling factors (multiplied with WSCONS_MOUSE_RES). > > It appears to work for my case with a regular bluetooth mouse but it has not > been tested for a device producing absolute positions. > > If this looks OK, we need to decide how to set the scaling factors. There are > two ioctls that appear relevant (from wsconsio.h): > > /* Set resolution. Not applicable to all mouse types. */ > #define WSMOUSEIO_SRES _IOW('W', 33, u_int) > #define WSMOUSE_RES_MIN 0 > #define WSMOUSE_RES_DEFAULT 75 > #define WSMOUSE_RES_MAX 100 > > /* Set scale factor (num / den). Not applicable to all mouse types. */ > #define WSMOUSEIO_SSCALE _IOW('W', 34, u_int[2]) > > WSMOUSEIO_SRES has been implemented for one driver > (sys/arch/hpcmips/vr/vrpiu.c) but I'm not sure what is does. WSMOUSEIO_SSCALE > has not been implemented for any driver (but see kern/12132). My current test > implementaion ignores WSMOUSEIO_SRES and changes WSMOUSEIO_SSCALE to take a > single integer which is used to set the x and y scaling factors. Because > WSMOUSE_RES_MAX is 100, the WSMOUSEIO_SSCALE value can be described as a > percent scaling. This is sufficient for my needs but we might want to scale x > and y differently and also set scaling factors for z and w. > > If there is interest and we can reach a consensus on the ioctl question I can > clean this up and submit it. Please let me know.
In the diff you attched you set the resolution value to a constant which you then use. That is certainly not what you intend, i.e. it should at least be a variable. I am not sure if applying the resolution to absolute posititioning devices is a good idea either, but I doubt it. Have you tested your patch on a device that does absolute positioning? That said, I think your patch needs some more work.