tech-kern archive

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

Re: Adding mouse sensitivity adjustment to wsmouse



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


Home | Main Index | Thread Index | Old Index