Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Mar 2000 22:48:34 -0800 (PST)
From:      David Wolfskill <dhw@whistle.com>
To:        freebsd-mobile@freebsd.org
Subject:   Re: Touchpad (on NEC Versa 6030X), FreeBSD 4.0-RC (20000307), & XF86 3.3.6
Message-ID:  <200003110648.WAA46423@pau-amma.whistle.com>
In-Reply-To: <200003110014.QAA45467@pau-amma.whistle.com>

next in thread | previous in thread | raw e-mail | index | archive | help
>Date: Fri, 10 Mar 2000 16:14:00 -0800 (PST)
>From: David Wolfskill <dhw>

>The problem, however, is that -- according to XF86Setup -- button 1 is
>normally depressed; tapping the touchpad releases it briefly.  (That is,
>in XF86Setup's "mouse diagram", the left mouse button stays black unless
>I tap the touchpad, in whcih case it goes white... briefly.)

>This, of course, is a simple logic reversal of my understanding of the
>desired behavior.  (The other buttons do seem to behave rationally.)

Well, I started poking around, and I'm getting confused.  Perhaps this
is better for -hackers (or a therapist).

In src/sys/isa/psm.c, around lines 54966-54968, I see:

        /* `tapping' action */
        if (sc->config & PSM_CONFIG_FORCETAP)
            ms.button |= ((c & MOUSE_PS2_TAP)) ? 0 : MOUSE_BUTTON4DOWN;

(There is similar code for the case of the GlidePoint mouse, though it's
conditional only on the mouse being of the GlidePoint type, not on the
PSM_CONFIG_FORCETAP flag having been specified.)

And this confuses me because in the case in question, it appears to
generate reults that are reveresed from what I would naively expect...
so I think I'm missing something.

At that point in the code, c was assigned to the first byte of the
response from the mouse, which is:

  0x01 for button 1
  0x02 for button 2
  0x04 for button 3
  0x08 for button 4

The constant MOUSE_PS2_TAP is "8" (from /usr/include/machine/mouse.h).
I tried enabling some debugging statements so I could see what is
happening:  if I tap on the touchscreen, "c"" gets a value of 8, so the
"(c & MOUSE_PS2_TAP)" conditional is true, thus causing ms.button to be
unchanged (|= 0).  If some other buttonn is pressed, but I do not tap on
the touchscreen, "c" gets "8" (the value of the MOUSE_BUTTON4DOWN
constant) ORed in.

I even went so far as to re-compile the kernel with the 2nd & 3rd
operands of the ?:operator reversed... and XF86Setup seemed much
happier with the results.... until I tried to start up the X server
(which never happened; it just hung).

So since I'm using moused, I thought that perhaps I could see about
doing the reversal there.

I started by killing off moused, then starting it again:

sudo kill `cat /var/run/moused.pid ` && \
	sudo moused -m 1=4 -m 2=1 -p /dev/psm0 -t auto -f -d

Then for the left-hand mouse, it shows... well, rather more than I want
to include.  But the critical part is:

moused:   :  0 0
moused: button 1  count 1
moused:   :  0 0
moused: button 2  count 1

(That's from depressing it.) and

moused: button 2  count 0

(from releasing it).


The same trick with the right-hand button is similar:

moused:   :  0 0
moused: button 3  count 1

and

moused: button 3  count 0


But for the touchpad, I see:

moused: button 1  count 0
moused: button 1  count 2
moused: button 1  count 3
...

and the "count" for that button keeps increasing.

Curiouser and curiouser,
david
-- 
David Wolfskill		dhw@whistle.com		UNIX System Administrator
voice: (650) 577-7158	pager: (888) 347-0197	FAX: (650) 372-5915


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003110648.WAA46423>