[openfirmware] [commit] r3288 - cpu/arm/olpc

repository service svn at openfirmware.info
Wed Sep 5 13:13:15 CEST 2012


Author: quozl
Date: Wed Sep  5 13:13:15 2012
New Revision: 3288
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3288

Log:
OLPC XO-4 - Neonode, graphical Forced LED Levels tool, shows an indicator for each signal, shaded by level, bright for good, black for bad, tiny white dot for inadequate

Modified:
   cpu/arm/olpc/nn-touchscreen.fth

Modified: cpu/arm/olpc/nn-touchscreen.fth
==============================================================================
--- cpu/arm/olpc/nn-touchscreen.fth	Wed Sep  5 05:29:58 2012	(r3287)
+++ cpu/arm/olpc/nn-touchscreen.fth	Wed Sep  5 13:13:15 2012	(r3288)
@@ -16,8 +16,9 @@
 : bytes-out  ( byte .. #bytes -- )  " bytes-out"  $call-parent  ;
 
 create nn-os            \ open short test
-create nn-fll           \ forced led levels test
+create nn-fll           \ forced LED levels test
 create nn-version       \ version display
+create nn-watch-fll     \ forced LED levels test, graphical variant
 
 \ create nn-fss           \ optional fixed signal strength test
 \ create nn-ls            \ optional low signals test
@@ -43,6 +44,8 @@
 : 2u.x  base @ >r hex  0 <# # # #> type  r> base !  ;
 [then]
 
+: x>x'  ( x -- x' )  screen-w swap -  ;  \ reverse x coordinate
+
 : set-gpios
 [ifdef] olpc-cl2
    0 1e2bc io!@ \ TWSI4_SCL
@@ -151,7 +154,7 @@
    in?  if
       \ FIXME: only handles one subpacket
       pbuf 2+ c@ h# 04 = if
-         screen-w pbuf 4 + w@ -         ( x )
+         pbuf 4 + w@  x>x'              ( x )
          pbuf 6 + w@                    ( x y )
          pbuf 8 + c@  3 and  0=         ( x y down? )
          true                           ( x y buttons true )
@@ -496,9 +499,13 @@
 [then]
 ;
 
-: test-fll-axis  ( axis -- )
+: (fll)  ( axis# -- )
    h# 20 h# 02 h# ee  4 bytes-out
    h# 1c d# 200 anticipate
+;
+
+: test-fll-axis  ( axis -- )
+   (fll)
    pbuf 4 + c@  2/  0  do
       i pbuf 5 + over 3 * + >r ( i r:frag )
       2* dup  r@ 1+ c@  r@ c@ 4 rshift h# f and  test-fll-signal
@@ -516,6 +523,86 @@
 
 
 
+[ifdef] nn-watch-fll \ forced LED levels test, graphical variant
+
+
+d# 30 value r \ size of blocks
+d# 1200 2/ r 2/ - value yx \ the y axis' stable x coordinate
+d#  900 2/ r 2/ - value xy \ the x axis' stable y coordinate
+
+: bigdot  ( x y -- )
+   pixcolor @  -rot   r r                   ( color x y w h )
+   fill-rectangle-noff                      ( )
+;
+
+: signal>colour  ( signal-value -- colour )
+   d# 3 rshift dup d# 5 lshift over d# 11 lshift or or
+;
+
+: ys>xy  ( signal# -- x y )
+   yx swap                              ( x signal# )
+   screen-h yleds 2* / *                ( x y )
+   r 2/ +                               ( x y )
+;
+
+: xs>xy  ( signal# -- x y )
+   2+ screen-w xleds 2* / * r -         ( x )
+   x>x'                                 ( x' )
+   r 2/ +
+   xy                                   ( x y )
+;
+
+: big>little  ( x y -- x' y' )
+   r 2/ + 3 -  swap
+   r 2/ + 2 -  swap
+;
+
+0 value axis#
+: watch-fll-signal  ( signal# signal-value led-level -- )
+   >r                                   ( signal# signal-value  r: led-level )
+   signal>colour pixcolor !             ( signal#  r: led-level )
+   axis# if                             ( signal#  r: led-level ) \ y
+      ys>xy
+   else                                 ( signal#  r: led-level ) \ x
+      xs>xy
+   then                                 ( x y  r: led-level )
+   2dup bigdot                          ( x y  r: led-level )
+   r>                                   ( x y led-level )
+   h# c > if                            ( x y )
+      white pixcolor !                  ( x y )
+      big>little                        ( x' y' )
+      dot                               ( )
+   else
+      2drop
+   then                                 ( )
+;
+
+: watch-fll-axis  ( axis# -- )
+   dup to axis#                         ( axis# )
+   (fll)
+   pbuf 4 + c@  2/  0  do
+      i pbuf 5 + over 3 * + >r          ( i r:frag )
+      2* dup  r@ 1+ c@  r@ c@ 4 rshift h# f and  watch-fll-signal
+      1+      r@ 2+ c@  r@ c@          h# f and  watch-fll-signal
+      r> drop                           ( )
+   loop
+;
+
+: watch-fll
+   black 0 0 screen-w screen-h fill-rectangle-noff
+   begin
+      0 watch-fll-axis
+      1 watch-fll-axis  key?
+   until
+   key drop
+   page
+;
+
+
+[then]
+
+
+
 : press  ( line$ -- )
    type
    ." , press a key"
@@ -550,7 +637,7 @@
          pbuf 2+ c@  h# 04 =  if                \ touch notification event
             pbuf 3 + c@  0 do                   \ per subpacket loop
                pbuf 4 + i 9 * + >r              (       r:addr )
-               screen-w r@ w@ -                 ( x     r:addr )
+               r@ w@ x>x'                       ( x     r:addr )
                r@ wa1+ w@                       ( x y   r:addr )
                r> 4 + c@  2 rshift setcolor     ( x y          )
                (ev)                             ( )



More information about the openfirmware mailing list