[OpenBIOS] r632 - cpu/x86/pc/olpc dev dev/olpc/dcon
svn at openbios.org
svn at openbios.org
Thu Sep 20 00:22:02 CEST 2007
Author: wmb
Date: 2007-09-20 00:22:01 +0200 (Thu, 20 Sep 2007)
New Revision: 632
Modified:
cpu/x86/pc/olpc/fw.bth
dev/olpc/dcon/dcon.fth
dev/pckbd.fth
Log:
OLPC - made it possible to control screen brightness and startup sound
volume from the keyboard.
Modified: cpu/x86/pc/olpc/fw.bth
===================================================================
--- cpu/x86/pc/olpc/fw.bth 2007-09-19 22:21:09 UTC (rev 631)
+++ cpu/x86/pc/olpc/fw.bth 2007-09-19 22:22:01 UTC (rev 632)
@@ -347,6 +347,39 @@
' olpc-power-off to power-off
[then]
+: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ;
+: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ;
+
+dev /8042/keyboard
+0 value waiting-up?
+: olpc-check-abort ( scan-code -- abort? ) \ Square pressed?
+ last-scan over to last-scan ( scan-code old-scan-code )
+ h# e0 <> if drop false exit then ( scan-code )
+
+ check-abort? 0= if drop false exit then ( scan-code )
+
+ dup h# 7f and h# 5d <> if drop false exit then ( scan-code )
+
+ h# 80 and if \ Up
+ false to waiting-up?
+ false ( abort? )
+ else
+ secure? if false else waiting-up? 0= then ( abort? )
+ true to waiting-up?
+ then
+;
+patch olpc-check-abort check-abort get-scan
+
+: handle-volume? ( scan-code -- scan-code flag )
+ dup h# 43 = if dimmer true exit then
+ dup h# 44 = if brighter true exit then
+ dup h# 57 = if softer true exit then
+ dup h# 58 = if louder true exit then
+ false
+;
+' handle-volume? to scan-handled?
+dend
+
\ Eliminate 4 second delay in install console for the case where
\ there is no keyboard. The delay is unnecessary because the screen
\ does not go blank when the device is closed.
@@ -477,14 +510,6 @@
?usb-keyboard
;
-: start-sound ( -- )
- playback-volume >r d# -9 to playback-volume
- ['] load-started behavior >r
- ['] noop to load-started
- " rom:splash" ['] $play-wav catch if 2drop then
- r> to load-started
- r> to playback-volume
-;
: go-hook-freeze
[ ' go-hook behavior compile, ]
0 " set-source" $call-screen
@@ -492,11 +517,11 @@
: freeze ( -- ) ['] go-hook-freeze to go-hook ;
: unfreeze ( -- ) ['] usb-quiet to go-hook ;
-: ?start-sound ( -- )
- game-key-mask h# 40 and 0= if start-sound then
+: ?sound ( -- )
+ game-key-mask h# 40 and 0= if sound then
;
: ?freeze ( -- )
- game-key-mask h# 10 and 0= if freeze then
+ game-key-mask h# 40 and 0= if freeze then
;
: ?games ( -- )
game-key-mask h# 20 and if
@@ -517,7 +542,8 @@
fast-boot? if
stdout off
probe-pci
- ?start-sound
+ ?sound
+ open-keyboard
?freeze
['] false to interrupt-auto-boot?
probe-usb
@@ -528,12 +554,11 @@
[then]
auto-boot
screen-ih stdout !
- open-keyboard
?usb-keyboard
else
banner
probe-pci
- ?start-sound
+ ?sound
open-keyboard
?games
?freeze
Modified: dev/olpc/dcon/dcon.fth
===================================================================
--- dev/olpc/dcon/dcon.fth 2007-09-19 22:21:09 UTC (rev 631)
+++ dev/olpc/dcon/dcon.fth 2007-09-19 22:22:01 UTC (rev 632)
@@ -117,6 +117,9 @@
: timeout! ( to -- ) 8 dcon! ; \ def: h# ffff
: scanint! ( si -- ) 9 dcon! ; \ def: h# 0000
: bright! ( level -- ) d# 10 dcon! ; \ def: h# xxxF
+: bright@ ( -- level ) d# 10 dcon@ ;
+: brighter ( -- ) bright@ 1+ h# f min bright! ;
+: dimmer ( -- ) bright@ 1- 0 max bright! ;
\ Colour swizzle, AA, no passthrough, backlight
: set-color ( color? -- )
Modified: dev/pckbd.fth
===================================================================
--- dev/pckbd.fth 2007-09-19 22:21:09 UTC (rev 631)
+++ dev/pckbd.fth 2007-09-19 22:22:01 UTC (rev 632)
@@ -386,6 +386,8 @@
init-data
kbd-reset 0= to keyboard-present?
;
+defer scan-handled?
+' false to scan-handled?
headerless
: check-abort ( scan-code -- flag ) \ Ctrl-break pressed?
check-abort? if
@@ -409,12 +411,11 @@
begin
get-data?
while ( scan-code )
- dup enque ( scan-code )
-
\ In the following code, we must be careful to unlock the
\ queue before calling user-abort, because a timer interrupt
\ can occur at any time after user-abort is executed.
- check-abort if
+ dup check-abort if ( scan-code )
+ drop
unlock user-abort
\ Wait here for long enough to ensure that an alarm timer tick
\ will happen if it is going to happen. This is the safest
@@ -430,7 +431,8 @@
\ if the alarm tick is turned off.
d# 20 ms
exit
- then
+ then ( scan-code )
+ scan-handled? if drop else enque then ( )
repeat
unlock
;
More information about the OpenBIOS
mailing list