Date: Thu, 30 Jan 2014 13:56:43 +0800 From: Huang Wen Hui <huanghwh@gmail.com> To: Hans Petter Selasky <hps@bitfrost.no> Cc: "kwm@freebsd.org" <kwm@freebsd.org>, Adrian Chadd <adrian@freebsd.org>, freebsd-current <freebsd-current@freebsd.org>, "Lundberg, Johannes" <johannes@brilliantservice.co.jp>, "freebsd-usb@freebsd.org" <freebsd-usb@freebsd.org> Subject: Re: Apple Trackpad driver Message-ID: <CAB8uncZVCbFWhJrEosRtRebRip4HjArsZx9FwKE0q9EjYDncmg@mail.gmail.com> In-Reply-To: <52E8DDA3.3070301@bitfrost.no> References: <CAB8uncaLEn4CaJv8%2BowESe_zUUK%2Bgem_bXpEjhsOJE69m_fWAg@mail.gmail.com> <CAJ-Vmon4Gk6bqoT%2BJf-bRxE0%2BNJ1NjR0wjum-HjoVFDN-2e=8Q@mail.gmail.com> <CAASDrV=pbDpZCGvEjnD8VS0D_HyC8=L3jQ7rfGszG6=PtxaE3Q@mail.gmail.com> <CAASDrVmqijq51OEH7USLutPSgme7YWhXZZX4tGROLHVPoz2VkA@mail.gmail.com> <52E8DDA3.3070301@bitfrost.no>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --] Hans, Thanks for you take care of it and commit it! I found two problems: 1. The selection is not expected when selection with 2 fingers sometimes. 2. Unexpected scrolling when Click with 2 fingers. This patch can fix that. The var "n" modify to "ntouch" seems to be necessary. Cheers, Huang Wen Hui 2014-01-29 Hans Petter Selasky <hps@bitfrost.no> > On 01/29/14 09:49, Lundberg, Johannes wrote: > >> Hi >> >> I tested the driver on a 2012 Macbook Air 11" and it works great! Good >> job! >> >> Is there a way to disable click-by-touch? I always preferred clicking with >> the physical button that is built in to the pad. >> >> > Hi, > > I've added an "#if 0" around the 1 finger tap code until further. Maybe > this feature can be tunable? > > I fixed the code style, added some range checks and cleared some buffer > issues. > > When you assign a signed value to an unsigned variable, you should range > check it, because the sign might cause an overflow when you use it later on. > > int8_t x = -1; > > uint32_t t = x; > > "t" is now "0xffffffffU" and not "255". > > Tested the code on my MacBookPro. Hope I didn't break anything. If so, > send a patch to freebsd-usb. > > http://svnweb.freebsd.org/changeset/base/261260 > > To get the touchpad working with Xorg, I needed to re-compile HALD with > the attached patch. > > kwm: Can you get the attached patch into ports? > > Auto-loading of wsp via devd will be done later. Simply need to > re-generate usb.conf in /etc ... > > --HPS > > [-- Attachment #2 --] --- wsp.c.orig 2014-01-30 08:14:26.000000000 +0800 +++ wsp.c 2014-01-30 13:49:59.000000000 +0800 @@ -957,8 +957,8 @@ if (h->q2 == 4) sc->intr_count++; - if (sc->ntaps < n) { - switch (n) { + if (sc->ntaps < ntouch) { + switch (ntouch) { case 1: if (f[0].touch_major > tun.pressure_tap_threshold) sc->ntaps = 1; @@ -978,7 +978,7 @@ break; } } - if (n == 2) { + if (ntouch == 2) { sc->distance = max(sc->distance, max( abs(sc->pos_x[0] - sc->pos_x[1]), abs(sc->pos_y[0] - sc->pos_y[1]))); @@ -1050,12 +1050,20 @@ if (sc->sc_touch == WSP_SECOND_TOUCH) sc->sc_touch = WSP_TOUCHING; - if (n != 0 && + if (ntouch != 0 && h->q2 == 4 && f[0].touch_major >= tun.pressure_touch_threshold) { dx = sc->pos_x[0] - sc->pre_pos_x; dy = sc->pos_y[0] - sc->pre_pos_y; - if (n == 2 && sc->sc_status.button != 0) { + + /* Ignore movement from ibt=1 to ibt=0 */ + if (sc->sc_status.obutton != 0 && + sc->sc_status.button == 0) { + dx = 0; + dy = 0; + } + + if (ntouch == 2 && sc->sc_status.button != 0) { dx = sc->pos_x[sc->finger] - sc->pre_pos_x; dy = sc->pos_y[sc->finger] - sc->pre_pos_y; if (f[0].origin == 0 || f[1].origin == 0) { @@ -1092,7 +1100,7 @@ sc->dx_sum += dx; sc->dy_sum += dy; - if (n == 2 && sc->sc_status.button == 0) { + if (ntouch == 2 && sc->sc_status.button == 0) { if (sc->scr_mode == WSP_SCR_NONE && abs(sc->dx_sum) + abs(sc->dy_sum) > 50) sc->scr_mode = abs(sc->dx_sum) > @@ -1134,7 +1142,7 @@ sc->pre_pos_x = sc->pos_x[0]; sc->pre_pos_y = sc->pos_y[0]; - if (n == 2 && sc->sc_status.button != 0) { + if (ntouch == 2 && sc->sc_status.button != 0) { sc->pre_pos_x = sc->pos_x[sc->finger]; sc->pre_pos_y = sc->pos_y[sc->finger]; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB8uncZVCbFWhJrEosRtRebRip4HjArsZx9FwKE0q9EjYDncmg>
