Am 20.05.10 16:17, schrieb Sverre Froyen: > On Thu May 20 2010 00:17:43 Marc Balmer wrote: >> 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. > > I probably should have been clearer. Take the x-coordinate as an example. The > mouse input is scaled by s_mx/WSCONS_MOUSE_RES. The s_mx parameter can be set > by the user. I need the WSCONS_MOUSE_RES constant for two reasons, one to be > able to specify scaling fractions and two in order to correctly accumulate > mouse input where the mouse delta-x times s_mx/WSCONS_MOUSE_RES is not equal > to an integer. > > I have not tested the patch with an absolute positioning device (If I can get > my hands on one I will). As far as scaling being useful, if your device is > too > sensitive (like the 1000dpi resolution mouse that I purchased), it seems like > it could be useful. In any case, you can always leave the scaling set as one- > to-one.
So I suggest that you leave out the changes for absolute positioning devices, I have some, and I can not imagine how this would be of any good in this case. For relative devices, I think the approach can make sense. Can you provide a complete diff? Make sure the default settings are the same as we have now, i.e. don't break existing setups. - Marc