Project

General

Profile

Actions

Bug #92

closed

Make ums(4) present the mouse as a sysmouse type device by default

Added by lsartran over 18 years ago. Updated over 17 years ago.

Status:
Closed
Priority:
Low
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

Hello,

I've ran into problems trying to get all the buttons of my Logitech MX 310 USB
mouse to work on DragonFly 1.4-RELEASE with Xorg 6.9.

I had the following lines in my xorg.conf:
Option "Protocol" "auto"
Option "Device" "/dev/ums0"

and these are the relevant lines of my dmesg:
ums0: Logitech USB-PS/2 Optical Mouse, rev 2.00/18.00, addr 2, iclass 3/1
ums0: 6 buttons and Z dir.

I could only use the first 3 buttons (left, middle and right click). The wheel,
and 3 other buttons didn't work. xev showed that Xorg was receiving no events
when I clicked these buttons or moved the wheel.

Indeed, hexdump /dev/ums0 revealed that the actions performed on the extra
buttons didn't appear correctly in the mouse protocol:

Left-click:
0000000 0083 0000 8700 0000 0000 0083 0000 8700
0000010 0000 0000
0000014

Click with button #4 (left thumb-button, which doesn't work under X):
0000000 0087 0000 8700 0000 0000 0087 0000 8700
0000010 0000 0000
0000014

This protocol uses 5 bytes for one event (so it must be mousesystems ?), and
pressing the button #4 looks like a button release... strange.

The solution I found is to force ums(4) to use the 8-byte SysMouse protocol,
which is able to express the actions on the extra buttons. This is the patch to
apply to /usr/src/sys/dev/usbmisc/ums/ums.c:

diff uw ums.c.old ums.c
--
ums.c.old 2005-12-11 02:54:09.000000000 0100
++ ums.c 2006-02-10 18:33:33.000000000 +0100
@ -323,22 +323,22 @
DPRINTF);
#endif

- if (sc->nbuttons > MOUSE_MSC_MAXBUTTON)
- sc->hw.buttons = MOUSE_MSC_MAXBUTTON;
+ if (sc->nbuttons > MOUSE_SYS_MAXBUTTON)
+ sc->hw.buttons = MOUSE_SYS_MAXBUTTON;
else
sc->hw.buttons = sc->nbuttons;
sc->hw.iftype = MOUSE_IF_USB;
sc->hw.type = MOUSE_MOUSE;
sc->hw.model = MOUSE_MODEL_GENERIC;
sc->hw.hwid = 0;
- sc->mode.protocol = MOUSE_PROTO_MSC;
+ sc->mode.protocol = MOUSE_PROTO_SYSMOUSE;
sc->mode.rate = 1;
sc
>mode.resolution = MOUSE_RES_UNKNOWN;
sc->mode.accelfactor = 0;
- sc->mode.level = 0;
- sc->mode.packetsize = MOUSE_MSC_PACKETSIZE;
- sc->mode.syncmask0 = MOUSE_MSC_SYNCMASK;
- sc->mode.syncmask1 = MOUSE_MSC_SYNC;
+ sc->mode.level = 1;
+ sc->mode.packetsize = MOUSE_SYS_PACKETSIZE;
+ sc->mode.syncmask0 = MOUSE_SYS_SYNCMASK;
+ sc->mode.syncmask1 = MOUSE_SYS_SYNC;

sc->status.flags = 0;
sc->status.button = sc->status.obutton = 0;

Of course, xorg.conf needs to be modified to use this protocol:
Option "Protocol" "sysmouse"
Option "Device" "/dev/ums0"

Now the wheel and the extra buttons (to go back/forward in a browser) all work,
which makes me a happy DFBSD user !
I don't know if this patch is the right way to fix the problem (IIRC, I didn't
manage to fix it using moused), but it works for me, so it may be useful to
someone else.

Regards,

Laurent Sartran

Actions

Also available in: Atom PDF