Author: wmb Date: 2008-11-06 09:47:40 +0100 (Thu, 06 Nov 2008) New Revision: 996
Modified: dev/olpc/touchpad/touchpad.fth Log: OLPC trac #8940 - fixed glitches in selftest for OLPC ALPS touchpad. The problem was that the display routine was looking at the mode variable to determine how to display the dot, but that variable had sometimes already been switched to the new mode, before the packet from the old mode had been displayed. I also changed the display to overlay cyan and yellow in the center of the screen, with registration to corresponding positions on the touchpad.
Modified: dev/olpc/touchpad/touchpad.fth =================================================================== --- dev/olpc/touchpad/touchpad.fth 2008-11-06 05:46:47 UTC (rev 995) +++ dev/olpc/touchpad/touchpad.fth 2008-11-06 08:47:40 UTC (rev 996) @@ -90,15 +90,16 @@ : alps-prefix ( -- ) 3 0 do h# f2 read1 drop loop ;
variable mode \ 0 - unknown 1 - GS 2 - PT 3 - mouse +0 instance value packet-type
\ Ref: 5.2.10 (3) of Hybrid-GP2B-T-1.pdf : gs-only ( -- ) - mode @ dup 1 = swap 3 = or if exit then + mode @ 3 = if exit then alps-prefix mouse1:1 \ f2 f2 f2 e6 1 mode ! ; : pt-only ( -- ) - mode @ dup 2 = swap 3 = or if exit then + mode @ swap 3 = if exit then alps-prefix mouse2:1 \ f2 f2 f2 e7 2 mode ! ; @@ -172,7 +173,7 @@ \ variable py \ Pen mode y value variable gx \ Glide pad x value variable gy \ Glide pad y value -variable gz \ Glide pad z value, also used fo pen mode x +variable gz \ Glide pad z value, also used for pen mode x variable taps \ Bitmask of tap flags variable switches \ Bitmask of switch flags
@@ -233,6 +234,7 @@ \ Ref: 5.2.9 (2) (1) of Hybrid-GP2B-T-1.pdf : decode-pt ( -- ) show-raw? if ." P " then + 2 to packet-type decode-common taps @ 0= if d# 10 exit-pt ! then ; @@ -240,6 +242,7 @@ \ Ref: 5.2.9 (2) (2) of Hybrid-GP2B-T-1.pdf : decode-gs ( -- ) show-raw? if ." G " then + 1 to packet-type \ In case we get out of sync decode-common taps @ 1 and if pt-only then \ Switch to pen mode ; @@ -395,7 +398,7 @@ ;
: track ( x y z buttons -- ) - mode @ 2 = if yellow else cyan then pixcolor ! ( x y z but ) + packet-type 2 = if yellow else cyan then pixcolor ! ( x y z but )
dup 3 and 3 = if background load-base ptr ! then dup 1 and if green else black then d# 100 button @@ -406,7 +409,23 @@
show-pressure ( x y )
- relative? if abs>rel then + relative? if ( x y ) + abs>rel ( x' y' ) + else ( x y ) + \ Display cyan dots (GS) in the center of the screen + \ The offset attempts to register the GS with the PT. + \ The offset should be 333, but the PT is expanded, + \ so we have to scale the 333 to match. + packet-type 1 = if ( x y ) + swap d# 400 + ( y x' ) \ GS + swap ( x' y ) + then ( x y ) + \ Expand the PT (0..999) to the screen width (1200) + packet-type 2 = if ( x y ) + swap d# 1200 d# 1000 */ + swap d# 1200 d# 1000 */ + then ( x y ) + then ( x y )
dot ;
openfirmware@openfirmware.info