Can someone double check following logic issue? There happens to be two places in log files below were first fingers Y values are same as second fingers Y values on kernel side. In those cases, it looks like this same value is not sent to X driver.
While fingers were in proximity, it meant channel 1 kept its older Y value. When first coming in to proximity, it meant Y was at a zero value (from a memset() it seems) and some events got discarded because less then 3 events were received. Chris On Tue, Feb 9, 2010 at 9:04 PM, Chris Bagwell <[email protected]> wrote: > On Tue, Feb 9, 2010 at 12:25 AM, Ping Cheng <[email protected]> wrote: >> On Mon, Feb 8, 2010 at 9:15 PM, Chris Bagwell <[email protected]> wrote: >>> On Mon, Feb 8, 2010 at 9:43 PM, Jason Childs >>> <[email protected]> wrote: >>> >>> Thanks for feedback. I was hoping to hear about your experience. >>> I've added printk's and looks good to me as well; at least it seems I >>> can't reproduce the same behaviors anymore. I guess I'll switch back >>> to x driver for some more debugging. >> >> Tracking the difference between kernel and X when jump appears would >> help us figure out what might be the root cause. >> > > I've caught it in the act in log files though still haven't issolated > issue yet. Here is an example of me lifting two fingers up, putting > back down and starting an upwards swipe. Kernel logs show good X/Y > values in all cases but in one case X shows invalid Y value for > channel 1 (second finger). > > My initial guess is its related to sending multiple out-of-proximity > events or something similar. that firstFinger/secondFinger logic > seems suspecious. Since I do not know yet how X buffers old data, I > could use any hints you have from here. There are rounding type > errors between what kernel sends and X prints out and I'm not sure > where that is occuring yet and is probably related to were bug is. > > Sorry for such verbose log info; especially with most being personal > printk()'s. Hopefully, it gives someone someone some ideas. > Interesting examples of lines are: > > X/Y values kernel wants to send. tools=333 is 1st finger and > tools=334 is seoncd finger. > > Feb 9 20:15:35 localhost kernel: wacom_bpt_finger_in: x=185 y=272 > pressure=70 i > d=3, tools=333 > > X/Y values Xorg recieves. channel=0 is 1st finger, channel=1 is second > finger. > > (II) /dev/input/event6 (wcmEvent): channel = 1 > (II) /dev/input/event6 (wcmEvent): c=1 i=3 t=2 s=2 x=261 y=171 b=0 p=181 rz=0 > tx > =0 ty=0 aw=0 rw=0 t=0 df=0 px=0 st=1121227792 cs=4 > > Now some detailed log file parts: > > 1) Send two fingers to X > > eb 9 20:15:35 localhost kernel: wacom_bpt_touch_in: data[3]=ffffff80 > data[12]= > ffffff81 firstFinger=1 secondFigner=1 > Feb 9 20:15:35 localhost kernel: wacom_bpt_finger_in: x=185 y=272 > pressure=70 i > d=3, tools=333 > Feb 9 20:15:35 localhost kernel: wacom_bpt_finger_in: x=261 y=272 > pressure=87 i > d=3, tools=334 > Feb 9 20:15:35 localhost kernel: wacom_bpt_touch_in: end data[3]=ffffff80 > data[ > 12]=ffffff81 firstFinger=1 secondFigner=1 > > 2) X parses them > > II) /dev/input/event6 (usbParseChannel): 5 events received > (II) /dev/input/event6 (usbParseChannel): 5 events received > (II) /dev/input/event6 (wcmEvent): channel = 0 > (II) /dev/input/event6 (wcmEvent): c=0 i=3 t=2 s=0 x=185 y=272 b=0 p=196 rz=0 > tx > =0 ty=0 aw=0 rw=0 t=0 df=0 px=1 st=1121227770 cs=4 > (II) /dev/input/event6 (wcmFilterCoord): common->wcmRawSample = 4 > (II) /dev/input/event6 (wcmCheckSuppress): level = 2 return value = 1 > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmTouchFilter): channel = 0, mode > = > 8, ds[0].x = 182, ds[0].y = 254, ds[1].x = 257, ds[1].y = 171, ds[0].sample = > 11 > 21227770, ds[1].sample = 1121227755, wcmGestureState[0].sample = 1121227674, > wcm > GestureState[1].sample = 1121227655, wcmGestureFingers = 2 ds[0].proximity = > tru > e, ds[1].proximity = true > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmFingerScroll): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseChannel): 3 events received > (II) /dev/input/event6 (usbParseChannel): 3 events received > (II) /dev/input/event6 (usbParseChannel): USB Touch second finger detected > 14e ( > value=0) > (II) /dev/input/event6 (wcmEvent): channel = 1 > (II) /dev/input/event6 (wcmEvent): c=1 i=3 t=2 s=2 x=261 y=171 b=0 p=181 rz=0 > tx > =0 ty=0 aw=0 rw=0 t=0 df=0 px=0 st=1121227792 cs=4 > > 3) Kernel sends out of proximity for both fingers when I lift them: > > Feb 9 20:15:35 localhost kernel: wacom_bpt_irq: prox=0 touchOut=1 id[1]=3 > touch > InProx=1 > Feb 9 20:15:35 localhost kernel: wacom_bpt_touch_out: id=3, tools=333 > Feb 9 20:15:35 localhost kernel: wacom_bpt_touch_out: id=3, tools=334 > > 4) X process out of proximity events for both fingers: > > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseChannel): 4 events received > (II) /dev/input/event6 (usbParseChannel): 4 events received > (II) /dev/input/event6 (usbParseChannel): USB Touch detected 14d (value=0) > (II) /dev/input/event6 (wcmEvent): channel = 0 > (II) /dev/input/event6 (wcmEvent): c=0 i=3 t=2 s=0 x=185 y=272 b=0 p=196 rz=0 > tx > =0 ty=0 aw=0 rw=0 t=0 df=0 px=0 st=1121227792 cs=4 > (II) /dev/input/event6 (wcmFilterCoord): common->wcmRawSample = 4 > (II) /dev/input/event6 (wcmCheckSuppress): level = 2 return value = 1 > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmTouchFilter): channel = 0, mode > = > 8, ds[0].x = 184, ds[0].y = 263, ds[1].x = 257, ds[1].y = 171, ds[0].sample = > 11 > 21227792, ds[1].sample = 1121227771, wcmGestureState[0].sample = 1121227770, > wcm > GestureState[1].sample = 1121227755, wcmGestureFingers = 2 > ds[0].proximity = false, ds[1].proximity = true > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmFingerScroll): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseChannel): 3 events received > (II) /dev/input/event6 (usbParseChannel): 3 events received > (II) /dev/input/event6 (usbParseChannel): USB Touch second finger > detected 14e (value=0) > (II) /dev/input/event6 (wcmEvent): channel = 1 > (II) /dev/input/event6 (wcmEvent): c=1 i=3 t=2 s=2 x=261 y=171 b=0 > p=181 rz=0 tx=0 ty=0 aw=0 rw=0 t=0 df=0 px=0 st=1121227792 cs=4 > (II) /dev/input/event6 (wcmFilterCoord): common->wcmRawSample = 4 > (II) /dev/input/event6 (wcmCheckSuppress): level = 2 return value = 1 > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmTouchFilter): channel = > 1, mode = 8, ds[0].x = 184, ds[0].y = 263, ds[1].x = 260, ds[1].y = > 171, ds[0].sample = 1121227792, ds[1].sample = 1121227792, > wcmGestureState[0].sample = 1121227770, wcmGestureState[1].sample = > 1121227755, wcmGestureFingers = 2 ds[0].proximity = false, > ds[1].proximity = false > > 5) Kernel sends new in proxity event for 1st finger and out of > proximity event for finger 2. > > Feb 9 20:15:36 localhost kernel: wacom_bpt_irq: prox=1 touchOut=0 id[1]=3 > touch > InProx=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: tool[0]=333, > id[0]=3 tool[1]=334 id[1]=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: data[3]=ffffff80 > data[12]=0 firstFinger=1 secondFigner=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_finger_in: x=136 y=267 > pressure=89 id=3, tools=333 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_out: id=3, tools=334 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: end > data[3]=ffffff80 data[12]=0 firstFinger=1 secondFigner=0 > > 6) X process 1st finger but not second finger proximity out: > > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseChannel): 7 events received > (II) /dev/input/event6 (usbParseChannel): 7 events received > (II) /dev/input/event6 (usbParseChannel): USB Touch detected 14d (value=1) > (II) /dev/input/event6 (wcmEvent): channel = 0 > (II) /dev/input/event6 (wcmEvent): c=0 i=3 t=2 s=0 x=136 y=269 b=0 > p=89 rz=0 tx=0 ty=0 aw=0 rw=0 t=0 df=0 px=1 st=1121228515 cs=0 > (II) /dev/input/event6 (wcmEvent): initialize Channel data. > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmTouchFilter): channel = > 0, mode = 0, ds[0].x = 136, ds[0].y = 269, ds[1].x = 260, ds[1].y = > 171, ds[0].sample = 1121228515, ds[1].sample = 1121227792, > wcmGestureState[0].sample = 1121227770, wcmGestureState[1].sample = > 1121227755, wcmGestureFingers = 2 ds[0].proximity = true, > ds[1].proximity = false > > 7) Interesting note for X. Probably because last out-of-proxity > event was duplicate? Or could be related to next step. > > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): Wacom Bamboo P&T 4x5 Touch: > dropping empty event for serial 2 > (II) /dev/input/event6 (wcmReadPacket): fd=25 > (II) /dev/input/event6 (wcmReadPacket): pos=0 remaining=256 > (II) /dev/input/event6 (wcmReadPacket): buffer has 96 bytes > > 8) kernel send previous 1 finger value again. I don't really see what > changed. > > Feb 9 20:15:36 localhost kernel: wacom_bpt_irq: prox=1 touchOut=1 > id[1]=1 touchInProx=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: tool[0]=333, > id[0]=3 tool[1]=334 id[1]=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: data[3]=ffffff80 > data[12]=0 firstFinger=1 secondFigner=0 > Feb 9 20:15:36 localhost kernel: wacom_bpt_finger_in: x=136 y=267 > pressure=89 id=3, tools=333 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: end > data[3]=ffffff80 data[12]=0 firstFinger=1 secondFigner=0 > > 9) Looks like X gets this finger: > > II) /dev/input/event6 (wcmEvent): channel = 0 > (II) /dev/input/event6 (wcmEvent): c=0 i=3 t=2 s=0 x=136 y=268 b=0 > p=89 rz=0 tx=0 ty=0 aw=0 rw=0 t=0 df=0 px=1 st=1121228534 cs=1 > (II) /dev/input/event6 (wcmFilterCoord): common->wcmRawSample = 4 > (II) /dev/input/event6 (wcmCheckSuppress): level = 2 return value = 0 > (II) /dev/input/event6 (wcmReadPacket): fd=25 > > 10) Kernel sends 1&2 finger events. 1st finger is similar to first > finger from above. This is first real 2nd finger send since I put my > fingers down. 216/250 look OK. > > Feb 9 20:15:36 localhost kernel: wacom_bpt_irq: prox=1 touchOut=1 > id[1]=1 touchInProx=1 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: tool[0]=333, > id[0]=3 tool[1]=334 id[1]=3 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: data[3]=ffffff80 > data[12]=ffffff80 firstFinger=1 secondFigner=0 > Feb 9 20:15:36 localhost kernel: wacom_bpt_finger_in: x=137 y=250 > pressure=152 id=3, tools=333 > Feb 9 20:15:36 localhost kernel: wacom_bpt_finger_in: x=216 y=250 > pressure=164 id=3, tools=334 > Feb 9 20:15:36 localhost kernel: wacom_bpt_touch_in: end > data[3]=ffffff80 data[12]=ffffff80 firstFinger=1 secondFigner=1 > > 11) X processes 1st finger and 2nd finger. Second finger/channel 1 Y > value is not right (its zero). X value matches. > > (II) /dev/input/event6 (usbParseChannel): 4 events received > (II) /dev/input/event6 (usbParseChannel): 4 events received > (II) /dev/input/event6 (wcmEvent): channel = 0 > (II) /dev/input/event6 (wcmEvent): c=0 i=3 t=2 s=0 x=136 y=250 b=0 > p=89 rz=0 tx=0 ty=0 aw=0 rw=0 t=0 df=0 px=1 st=1121228554 cs=1 > (II) /dev/input/event6 (wcmFilterCoord): common->wcmRawSample = 4 > (II) /dev/input/event6 (wcmCheckSuppress): level = 2 return value = 1 > (II) Wacom Bamboo P&T 4x5 Touch touch (xf86WcmTouchFilter): channel = > 0, mode = 1, ds[0].x = 136, ds[0].y = 264, ds[1].x = 260, ds[1].y = > 171, ds[0].sample = 1121228554, ds[1].sample = 1121227792, > wcmGestureState[0].sample = 1121228515, wcmGestureState[1].sample = > 1121227755, wcmGestureFingers = 1 ds[0].proximity = true, > ds[1].proximity = false > > II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseEvent): > (II) /dev/input/event6 (usbParseChannel): 5 events received > (II) /dev/input/event6 (usbParseChannel): 5 events received > (II) /dev/input/event6 (usbParseChannel): USB Touch second finger > detected 14e (value=1) > (II) /dev/input/event6 (wcmEvent): channel = 1 > (II) /dev/input/event6 (wcmEvent): c=1 i=3 t=2 s=2 x=216 y=0 b=0 p=164 > rz=0 tx=0 ty=0 aw=0 rw=0 t=0 df=0 px=1 st=1121228555 cs=0 > (II) /dev/input/event6 (wcmEvent): initialize Channel data. > > Chris > ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Linuxwacom-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
