usb/125264: [patch] sysctl for set usb mouse rate (very useful
for gamers - FPS games)
VVD
vvd at quakeworld.ru
Sun Jul 13 04:20:04 UTC 2008
The following reply was made to PR usb/125264; it has been noted by GNATS.
From: "VVD" <vvd at quakeworld.ru>
To: <bug-followup at FreeBSD.org>
Cc: <freebsd-usb at freebsd.org>,
"'Paul B. Mahol'" <onemda at gmail.com>
Subject: RE: usb/125264: [patch] sysctl for set usb mouse rate (very useful for gamers - FPS games)
Date: Sun, 13 Jul 2008 08:12:59 +0400
I find speed - always LOW (tested on 6 Logitech mice: G5, MX300, RX250 and 3
different 5$-cost mice).
But I wrote another patch:
--- ums.c.orig 2008-06-16 19:51:35.000000000 +0400
+++ ums.c 2008-07-13 07:48:58.000000000 +0400
@@ -673,6 +673,7 @@
void *v;
{
struct ums_softc *sc = v;
+ int usb_interval;
usbd_status err;
@@ -696,11 +697,21 @@
*/
usbd_set_protocol(sc->sc_iface, 1);
+ /*
+ * Calculate USB interval in ms from rate in Hz (moused command line
option -F).
+ * Possible values are from 1 to 1000, else use
USBD_DEFAULT_INTERVAL.
+ * Modern gaming mice have 500Hz by default, other 100Hz or 125Hz.
+ */
+ usb_interval = (sc->mode.rate > 0 && sc->mode.rate <= 1000) ?
+ 1000 / sc->mode.rate : USBD_DEFAULT_INTERVAL;
+ DPRINTF(("ums_enable: mouse rate is %d, usb interval is %d\n",
+ sc->mode.rate, usb_interval));
+
/* Set up interrupt pipe. */
err = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ep_addr,
USBD_SHORT_XFER_OK, &sc->sc_intrpipe, sc,
sc->sc_ibuf, sc->sc_isize, ums_intr,
- USBD_DEFAULT_INTERVAL);
+ usb_interval);
if (err) {
DPRINTF(("ums_enable: usbd_open_pipe_intr failed,
error=%d\n",
err));
@@ -900,6 +911,29 @@
sc->mode.syncmask[1] = MOUSE_SYS_SYNC;
}
+ /*
+ * Most modern gaming mice support customized resolution,
but I don't know
+ * how to set it. For support this feature in
ums_ioctl(MOUSE_SETMODE)
+ * need to uncomment next line:
+ * sc->mode.resolution = mode.resolution > 0 ?
+ * mode.resolution :
MOUSE_RES_UNKNOWN;
+ * and may be call ums_disable() and ums_enable() if
resolution was changed.
+ */
+
+ /*
+ * Call ums_disable() and ums_enable() because of what rate
was set in
+ * ums_enable() and can't to change it on the fly (if can -
how?).
+ * For example: during moused startup (with options "-F rate
-r resolution")
+ * 1st call ums_enable() and then ums_ioctl(MOUSE_SETMODE)
and, as result,
+ * mouse initialized with default values of the rate and
resolution,
+ * but not with custom from command line.
+ */
+ if (sc->mode.rate != mode.rate) {
+ sc->mode.rate = mode.rate;
+ ums_disable(sc);
+ ums_enable(sc);
+ }
+
bzero(sc->qbuf, sizeof(sc->qbuf));
sc->qhead = sc->qtail = sc->qcount = 0;
splx(s);
I want to ask about to make another PR with patch:
--- usbdi.c.orig 2008-07-12 20:43:42.000000000 +0400
+++ usbdi.c 2008-07-12 20:43:47.000000000 +0400
@@ -231,23 +231,19 @@
xfer = usbd_alloc_xfer(iface->device);
if (xfer == NULL) {
err = USBD_NOMEM;
- goto bad1;
- }
+ } else {
usbd_setup_xfer(xfer, ipipe, priv, buffer, len, flags,
USBD_NO_TIMEOUT, cb);
ipipe->intrxfer = xfer;
ipipe->repeat = 1;
err = usbd_transfer(xfer);
*pipe = ipipe;
- if (err != USBD_IN_PROGRESS && err)
- goto bad2;
+ if (err == USBD_IN_PROGRESS || !err)
return (USBD_NORMAL_COMPLETION);
-
- bad2:
ipipe->intrxfer = NULL;
ipipe->repeat = 0;
usbd_free_xfer(xfer);
- bad1:
+ }
usbd_close_pipe(ipipe);
return (err);
}
IMHO/AFAIK, using of "goto" is not a good practice. But who know... :-)
P.S. Sorry for my English.
-----Original Message-----
From: Paul B. Mahol [mailto:onemda at gmail.com]
Sent: Saturday, July 05, 2008 9:19 PM
To: VVD
Cc: freebsd-usb at freebsd.org
Subject: Re: usb/125264: [patch] sysctl for set usb mouse rate (very useful
for gamers - FPS games)
On 7/5/08, VVD <vvd at quakeworld.ru> wrote:
> The following reply was made to PR usb/125264; it has been noted by GNATS.
>
> From: "VVD" <vvd at quakeworld.ru>
> To: <bug-followup at FreeBSD.org>,
> <hselasky at c2i.net>
> Cc:
> Subject: Re: usb/125264: [patch] sysctl for set usb mouse rate (very
> useful for gamers - FPS games)
> Date: Sat, 5 Jul 2008 06:10:01 +0400
>
> Hi,
>
> AFAIK, all mice are LOW speed usb devices. Didn't understand how to
> use
> usbd_get_speed() for ums - have no field like speed. High rate need
> only for more smooth mouse moving.
> Linux have custom mouse rate patch from ~2.6.1x. Logitech have
> Setpoint drivers for Win with possibility to set mouse rate from 125
> to 1000. Time for FreeBSD to have this feature. :-]
>
But what about moused -F option? Is it supported at all by ums driver?
> With best regards.
>
>
> _______________________________________________
> freebsd-usb at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-usb
> To unsubscribe, send any mail to "freebsd-usb-unsubscribe at freebsd.org"
>
More information about the freebsd-usb
mailing list