Author: wmb Date: 2009-12-09 13:30:19 +0100 (Wed, 09 Dec 2009) New Revision: 1552
Modified: dev/olpc/keyboard/selftest.fth Log: OLPC keyboard selftest - test game buttons in SMT stage.
Modified: dev/olpc/keyboard/selftest.fth =================================================================== --- dev/olpc/keyboard/selftest.fth 2009-12-08 08:30:48 UTC (rev 1551) +++ dev/olpc/keyboard/selftest.fth 2009-12-09 12:30:19 UTC (rev 1552) @@ -100,7 +100,9 @@ 3 0 do make-single-key loop make-space-key 5 0 do make-single-key loop - +; +: make-buttons + h# 59 to #keys d# 80 d# 30 make-button \ Rocker up 65 d# 30 d# 80 make-button \ Rocker left 67 d# 130 d# 80 make-button \ Rocker right 68 @@ -173,14 +175,19 @@ h# ffd5ab57 constant funny-map create all-keys-bitmap 57 c, ab c, d5 c, ff c, ff c, ff c, ff c, ff c, \ Omits the intermediate slider keys -\ ff c, ff c, ff c, ff c, ff c, ff c, ff c, ff c, ff c, ff c, ff c, ff c, 03 c, 00 c, 00 c, 00 c,
+defer all-tested? : all-keys-tested? ( -- flag ) key-bitmap @ funny-map and key-bitmap ! key-bitmap all-keys-bitmap #key-bytes comp 0= ; +' all-keys-tested? to all-tested?
+: all-buttons-tested? ( -- flag ) + key-bitmap h# b + w@ h# 3fe and h# 3fe = +; + \ This table is indexed by the (unescaped) scanset1 code, giving \ an IBM physical key number.
@@ -432,12 +439,12 @@ drop ( ) else ( scan key# ) swap h# 80 and if \ Up ( key# ) - final-test? if ( key# ) + final-test? smt-test? or if ( key# ) dup 0= last-1 0= and last-2 0= and if ( key# ) drop true ( exit? ) else ( key# ) last-1 to last-2 to last-1 ( ) - all-keys-tested? ( exit? ) + all-tested? ( exit? ) then else ( key# ) dup key-up ( key# ) @@ -465,7 +472,7 @@ process-raw get-msecs to last-timestamp else - final-test? if + final-test? smt-test? or if false \ Final test exit inside process-raw else get-msecs last-timestamp - d# 10,000 >= @@ -482,9 +489,18 @@ open 0= if true exit then
\ Being able to open the keyboard is good enough in SMT mode - smt-test? if close false exit then +\ smt-test? if close false exit then
- make-keys + smt-test? if + ['] all-buttons-tested? + else + make-keys + ['] all-keys-tested? + then + to all-tested? + + make-buttons + cursor-off draw-keyboard true to locked? \ Disable the keyboard alarm handler; it steals our scancodes selftest-keys @@ -494,8 +510,8 @@ page close
- final-test? if - all-keys-tested? 0= + final-test? smt-test? or if + all-tested? 0= dup if ." Some keys were not pressed" cr then else confirm-selftest?