Author: wmb Date: Fri Dec 3 07:37:40 2010 New Revision: 2063 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2063
Log: XO-1.75 - added battery status reporting (checkin an additional file).
Modified: dev/olpc/kb3700/battery.fth
Modified: dev/olpc/kb3700/battery.fth ============================================================================== --- dev/olpc/kb3700/battery.fth Fri Dec 3 07:35:59 2010 (r2062) +++ dev/olpc/kb3700/battery.fth Fri Dec 3 07:37:40 2010 (r2063) @@ -25,15 +25,12 @@ h# 15 constant ec-debugflag4
: ec-ram@ ec-rambase + ec@ ; -: wextend ( w -- n ) dup h# 8000 and if h# ffff.0000 or then ; : rr ec@ . ; : ww ec! ; : bat-b@ ec-batrambase + ec@ ; : bat-b! ec-batrambase + ec! ; : bat-w@ dup 1+ bat-b@ swap bat-b@ bwjoin ; : eram-w@ h# f400 + dup 1+ ec@ swap ec@ bwjoin ; -\ Base unit for temperature is 1/256 degrees C -: >degrees-c 7 rshift 1+ 2/ ; \ Round to nearest degree \ : uvolt@ 0 bat-w@ d# 9760 d# 32 */ ; \ : cur@ 2 bat-w@ wextend d# 15625 d# 120 */ ; \ : pcb-temp 8 bat-w@ >degrees-c ; @@ -42,126 +39,6 @@ : bat-state h# 11 bat-b@ ; : bat-cause@ h# 70 bat-b@ ;
-: uvolt@ bat-voltage@ d# 9760 d# 32 */ ; -: cur@ bat-current@ wextend d# 15625 d# 120 */ ; -: pcb-temp ambient-temp@ >degrees-c ; -: bat-temp bat-temp@ >degrees-c ; -: soc bat-soc@ ; - -string-array bat-causes -( 00) ," " -( 01) ," Bus Stuck at Zero" -( 02) ," Pack info" -( 03) ," NiMH Temp" -( 04) ," NiMH Over Voltage" -( 05) ," NiMH Over Current" -( 06) ," NiMH No voltage change during use" -( 07) ," " -( 08) ," NiMH Pre-charge fail" -( 09) ," No Battery ID" -( 0a) ," LiFe Over Voltage" -( 0b) ," LiFe Over Temp" -( 0c) ," LiFe No voltage change during use" -( 0d) ," " -( 0e) ," " -( 0f) ," " -( 10) ," ACR error" -( 11) ," NIMH 0xFF count" -( 12) ," FF count" -( 13) ," Voltage Invalid" -( 14) ," Bank 0 Invalid" -( 15) ," Bank 1 Invalid" -( 16) ," Bank 2 Invalid" -end-string-array - -: .bat-cause ( -- ) - bat-cause@ bat-causes count type cr -; - -: .bat-error .bat-cause ; - -string-array bat-states - ," no-battery " - ," charging-idle " - ," charging-normal " - ," charging-equalize " - ," charging-learning " - ," charging-temp-wait" - ," charging-full " - ," discharge " - ," abnormal: " - ," trickle " -end-string-array - -: .bat-type ( -- ) - bat-type@ dup 4 rshift case ( type ) - 0 of ." " endof - 1 of ." GPB " endof - 2 of ." BYD " endof - ." UnknownVendor " - endcase ( type ) - - h# 0f and case ( ) - 0 of ." " endof - 1 of ." NiMH " endof - 2 of ." LiFePO4 " endof - ." UnknownType " - endcase -; - -: .milli ( -- ) - push-decimal - dup abs d# 10,000 / <# u# u# [char] . hold u#s swap sign u#> type - pop-base -; - -: .mppt-active? - h# 3d ec-cmd-b@ h# d and - if ." MPPT" then -; - -\needs 2.d : 2.d ( n -- ) push-decimal <# u# u#s u#> type pop-base ; -: .% ( n -- ) 2.d ." %" ; -: .bat ( -- ) - bat-status@ ( stat ) - ." AC:" dup h# 10 and if ." on " else ." off " then ( stat ) - -\ PCB temp was nver really valid and was removed in Gen 1.5 -\ ." PCB: " pcb-temp 2.d ." C " - - dup h# 81 and if - ." Battery: " - .bat-type - soc .% ." " - uvolt@ .milli ." V " - cur@ .milli ." A " - bat-temp 2.d ." C " - dup 2 and if ." full " then - dup 4 and if ." low " then - dup 8 and if ." error " then - dup h# 20 and if ." charging " then - dup h# 40 and if ." discharging " then - dup h# 80 and if ." trickle " then - else - ." No battery " - then - drop - .mppt-active? -; - -: ?enough-power ( ) - bat-status@ ( stat ) - dup h# 10 and 0= abort" No external power" ( stat ) - dup 1 and 0= abort" No battery" ( stat ) - 4 and abort" Battery low" -; - -: watch-battery ( -- ) - begin (cr .bat kill-line d# 1000 ms key? until - key drop - bat-status@ 8 and if cr .bat-error then -; - \ A few commands for looking at what the EC is doing in \ the battery state machine. \ Unless you are on a serial console with stdout turned off @@ -795,131 +672,7 @@ h# 10 invert and ec-debugflag4 bat-b! ;
-: mppt-off h# 40 ec-cmd ; -: mppt-on h# 41 ec-cmd ; -: mppt-pct 255 * 100 / h# 3f ec-cmd-b! ; - -: .mppt - h# 3e ec-cmd-b@ ( pwr_limit ) - h# 42 ec-cmd-b@ ( pwr_limit VA2 ) - ." Vsa: " d# 14927 * d# 158 / >sd.ddd type ." PWM: " . -; - -: watch-mppt ( -- ) - begin (cr .mppt kill-line d# 500 ms key? until - key drop -; - - -dev / -new-device -" battery" device-name -0 0 reg \ Needed so test-all will run the selftest - -\ Test that the battery is inserted and not broken. -: test-battery ( -- error? ) - bat-status@ h# 01 and 0= if - ." Insert battery to continue.. " - begin d# 100 ms bat-status@ h# 01 and until - cr - then - ." Testing battery status.. " - bat-status@ h# 04 and if - ." error: battery broken" cr - true - else - ." ok: " cr .bat cr - false - then -; - -: wait-no-ac ( -- error? ) - ." Disconnect AC power to continue.. " - begin - bat-status@ h# 10 and ( ac-connected? ) - while - d# 100 ms - - key? if - key h# 1b = if - ." ERROR: AC still connected" cr - true exit - then - then - repeat - cr - false -; - -\ Test that we can run without AC power. -: test-discharging ( -- error? ) - bat-status@ h# 10 and 0<> if - wait-no-ac if true exit then - then - ." Test running from battery.. " - d# 2000 ms - bat-status@ h# 40 and if - ." ok: battery discharging" cr - false - else - ." ERROR: battery not discharging" cr - true - then -; - -: wait-ac ( -- error? ) - ." Connect AC power to continue.. " - begin - bat-status@ h# 10 and 0= ( ac-disconnected? ) - while - d# 100 ms - - key? if - key h# 1b = if - ." ERROR: AC not connected" cr - true exit - then - then - repeat - cr - false -; - -: test-charging ( -- error? ) - bat-status@ h# 10 and 0= if - wait-ac if true exit then - then - ." Test running from AC.. " - d# 4000 ms - bat-status@ h# 40 and 0= if - ." ok: battery is not discharging" cr - false - else - ." ERROR: battery is discharging" cr - true - then -; - -: interactive-test ( -- error? ) - test-battery if true exit then - " test-station" $find if execute else 2drop 0 then ( station# ) - 1 <> if \ Skip this test in SMT - test-discharging if true exit then - then - test-charging if true exit then - false -; - -: selftest ( -- error? ) - diagnostic-mode? if - interactive-test - else - .bat false - then -; - -finish-device -device-end +fload ${BP}/dev/olpc/kb3700/batstat.fth
\ LICENSE_BEGIN \ Copyright (c) 2006 FirmWorks
openfirmware@openfirmware.info