Hi!
I have a 3-button microsoft-type serial mouse (I do not know the vendor,
only FCC ID if needed) which generates the `middle button down' event as
previous `button down/up' event (any). Attached are:
1. the script(1) output of unmodified moused(8) with comments on events.
2. the patch that makes my mouse's 3rd button work.
Cheers,
--
Ruslan Ermilov Oracle Developer/DBA,
[EMAIL PROTECTED] Sunbay Software AG,
[EMAIL PROTECTED] FreeBSD committer,
+380.652.512.251 Simferopol, Ukraine
http://www.FreeBSD.org The Power To Serve
http://www.oracle.com Enabling The Information Age
Script started on Mon Aug 21 18:55:26 2000
perl# moused -d -f -p /dev/cuaa1
moused: PnP COM device rev 1.0 probe...
moused: modem status 03
moused: alternate probe...
moused: pnpwakeup2(): valid response.
moused: M 4d
moused: non-PnP mouse 'M'
moused: PnP serial mouse: 'PNP0F01' '' ''
moused: proto params: 40 40 40 00 3 dc 00
moused: port: /dev/cuaa1 interface: serial type: microsoft model: generic
Left button pressed:
moused: received char 0x60
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 60,0,0,0,0,0,0,0
moused: tv: 966873379 603859
moused: : 966873377 3320
moused: flags:00000001 buttons:00000001 obuttons:00000000
moused: activity : buttons 0x00000001 dx 0 dy 0 dz 0
moused: mstate[0]->count:1
moused: button 1 count 1
Left button released:
moused: received char 0x40
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 40,0,0,0,0,0,0,0
moused: tv: 966873380 693550
moused: flags:00000001 buttons:00000000 obuttons:00000001
moused: activity : buttons 0x00000000 dx 0 dy 0 dz 0
moused: mstate[0]->count:1
moused: button 1 count 0
Right button pressed:
moused: received char 0x50
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 50,0,0,0,0,0,0,0
moused: tv: 966873382 523875
moused: : 966873377 3320
moused: flags:00000004 buttons:00000004 obuttons:00000000
moused: activity : buttons 0x00000004 dx 0 dy 0 dz 0
moused: mstate[2]->count:1
moused: button 3 count 1
Right button released:
moused: received char 0x40
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 40,0,0,0,0,0,0,0
moused: tv: 966873383 493579
moused: flags:00000004 buttons:00000000 obuttons:00000004
moused: activity : buttons 0x00000000 dx 0 dy 0 dz 0
moused: mstate[2]->count:1
moused: button 3 count 0
Middle button pressed:
moused: received char 0x40
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 40,0,0,0,0,0,0,0
Middle button released:
moused: received char 0x40
moused: received char 0x0
moused: received char 0x0
moused: assembled full packet (len 3) 40,0,0,0,0,0,0,0
perl# exit
Script done on Mon Aug 21 18:56:28 2000
Index: moused.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/moused/moused.c,v
retrieving revision 1.45
diff -u -p -r1.45 moused.c
--- moused.c 2000/04/21 14:20:25 1.45
+++ moused.c 2000/08/21 16:09:44
@@ -1660,8 +1660,7 @@ r_protocol(u_char rBuf, mousestatus_t *a
? MOUSE_BUTTON2DOWN
: butmapmss[(pBuf[0] & MOUSE_MSS_BUTTONS) >> 4];
else
- act->button |= (act->obutton & MOUSE_BUTTON2DOWN)
- | butmapmss[(pBuf[0] & MOUSE_MSS_BUTTONS) >> 4];
+ act->button |= butmapmss[(pBuf[0] & MOUSE_MSS_BUTTONS) >> 4];
/* Send X10 btn events to remote client (ensure -128-+127 range) */
if ((rodent.rtype == MOUSE_PROTO_X10MOUSEREM) &&
@@ -1676,6 +1675,10 @@ r_protocol(u_char rBuf, mousestatus_t *a
act->dx = (char)(((pBuf[0] & 0x03) << 6) | (pBuf[1] & 0x3F));
act->dy = (char)(((pBuf[0] & 0x0C) << 4) | (pBuf[2] & 0x3F));
+
+ if (act->button == act->obutton && !act->dx && !act->dy)
+ act->button |= MOUSE_BUTTON2DOWN;
+
break;
case MOUSE_PROTO_GLIDEPOINT: /* GlidePoint */