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

Reply via email to