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. Regards, Sverre