tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Adding mouse sensitivity adjustment to wsmouse



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


Home | Main Index | Thread Index | Old Index