[OpenBIOS] r789 - dev/olpc/keyboard

svn at openbios.org svn at openbios.org
Thu Jan 24 10:50:52 CET 2008


Author: wmb
Date: 2008-01-24 10:50:52 +0100 (Thu, 24 Jan 2008)
New Revision: 789

Modified:
   dev/olpc/keyboard/selftest.fth
Log:
OLPC keyboard selftest - Added game key display and timeout after
20 seconds of inactivity.




Modified: dev/olpc/keyboard/selftest.fth
===================================================================
--- dev/olpc/keyboard/selftest.fth	2008-01-24 05:43:01 UTC (rev 788)
+++ dev/olpc/keyboard/selftest.fth	2008-01-24 09:50:52 UTC (rev 789)
@@ -32,9 +32,12 @@
 d#  70 constant single-key-h
 d# 105 constant shift-key-w
 d# 540 constant space-key-w
+d# 400 constant top-row-offset
+d#  40 constant button-w
+d#  40 constant button-h
 
 : key-adr  ( i -- adr )  /key * keys +  ;
-: top-key-row  ( -- )  row-gap to key-y  key-gap to key-x  ;
+: top-key-row  ( -- )  top-row-offset to key-y  key-gap to key-x  ;
 : next-key-row  ( -- )
    key-y single-key-h + row-gap + to key-y
    key-gap to key-x 
@@ -59,6 +62,7 @@
    r> ++key-x
    add-key-gap
 ;
+: make-button  ( x y -- )  button-w button-h (make-key)  ;
 
 : make-keys  ( -- )
    0 to #keys
@@ -85,6 +89,17 @@
    3 0  do  make-single-key  loop
    make-space-key
    5 0  do  make-single-key  loop
+
+   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
+   d#   80 d# 130 make-button  \ Rocker down  66
+   d#   80 d# 230 make-button  \ Rotate       69
+
+   d# 1080 d#  30 make-button  \ O            e0 65
+   d# 1030 d#  80 make-button  \ square       e0 67
+   d# 1130 d#  80 make-button  \ check        e0 68
+   d# 1080 d# 130 make-button  \ X            e0 66
 ;
 
 0 [if]
@@ -146,8 +161,8 @@
 ( 48 )  96 c, 101 c, 105 c,  92 c,  97 c, 102 c, 106 c,  93 c,
 ( 50 )  98 c, 103 c,  99 c, 104 c,   0 c,   0 c,  45 c, 122 c,
 ( 58 ) 123 c,  59 c,   0 c,   0 c, 133 c,   0 c,   0 c,   0 c,  \ scan h# 59 is Fn - ibm# d# 59
-( 60 )   0 c,   0 c,   0 c,   0 c,   0 c,   0 c,   0 c,   0 c,
-( 68 )   0 c,   0 c,   0 c,   0 c,   0 c,   0 c, 135 c,   0 c,
+( 60 )   0 c,   0 c,   0 c,   0 c,   0 c, 150 c, 153 c, 151 c,  \ 66-68 are left rocker
+( 68 ) 152 c, 154 c,   0 c,   0 c,   0 c,   0 c, 135 c,   0 c,  \ 69 is rotate
 ( 70 )   0 c,   0 c,   0 c,  56 c,   0 c,   0 c,   0 c,   0 c,
 ( 78 )   0 c, 130 c,   0 c,   0 c,   0 c,   0 c,   0 c,   0 c,
 
@@ -215,6 +230,10 @@
       h# 56 of  d# 61  endof  \ Fn space
       h# 5c of  d# 128 endof  \ F grab
 
+      h# 65 of  d# 156 endof  \ Button O
+      h# 66 of  d# 159 endof  \ Button X
+      h# 67 of  d# 157 endof  \ Button square
+      h# 68 of  d# 158 endof  \ Button check
       ( default )  0 swap     \ Not recognized
    endcase
 ;
@@ -249,6 +268,11 @@
 
    \ Function row - key#s 0x50 - 0x58
    59 c, 127 c, 60 c, 61 c, 62 c, 128 c, 79 c, 84 c, 89 c,  \ Fn, lgrab, alt, space, altgr, rgrab, left, down, right
+
+   \ Game buttons - key#s 0x59 - 0x61  (these IBM#s are made up just for this program)
+   150 c, 151 c, 152 c, 153 c,        \ Rocker up, left, right, down
+   154 c,                             \ Rotate
+   156 c, 157 c, 158 c, 159 c,        \ Game O, square, check, X
 here ibm#s - constant /ibm#s
 
 : ibm#>key#  ( ibm# -- true | key# false )
@@ -350,7 +374,7 @@
 : draw-keyboard  ( -- )
    kbd-bc fill-screen
    #keys 0  ?do  i key-up  loop
-   0 d# 20 at-xy ." Press the top left key to exit"
+   0 d# 13 at-xy ." X"
 ;
 
 false value verbose?
@@ -375,10 +399,17 @@
    false
 ;
 
+0 value last-timestamp
 : selftest-keys  ( -- )
    false to esc?
+   get-msecs to last-timestamp
    begin
-      get-data?  if  process-raw  else  false  then  ( exit? )
+      get-data?  if
+         process-raw
+         get-msecs to last-timestamp
+      else
+         get-msecs last-timestamp -  d# 20,000 >=
+      then             ( exit? )
    until
 ;
 
@@ -388,11 +419,9 @@
    open  0=  if  true exit  then
    make-keys
    cursor-off draw-keyboard
-\   toss-keys  " translation-off" $call-parent
-   true to locked?
+   true to locked?   \ Disable the keyboard alarm handler; it steals our scancodes
    selftest-keys
    false to locked?
-\   " translation-on" $call-parent  toss-keys
    cursor-on
    screen-ih iselect  erase-screen  iunselect
    page




More information about the OpenBIOS mailing list