From a145c2fb3db811efb0167b468d5a0026ba6716b8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 12 Jun 2012 19:02:20 +0100 Subject: [PATCH] does some tooltips --- xbatmon-simple-tray | 89 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 9 deletions(-) diff --git a/xbatmon-simple-tray b/xbatmon-simple-tray index 2a3948c..b245b0e 100755 --- a/xbatmon-simple-tray +++ b/xbatmon-simple-tray @@ -34,6 +34,36 @@ proc tt-show {} { applet::tooltip-set [tt-string] } +proc append-energies {av energy power eunit punit} { + upvar 1 o o + upvar 1 $av a + append o [format " %.0f%s / %.0f%s / %.0f%s %.0f%s" \ + [expr { $a(${energy}_NOW) * 1e-3 }] $eunit \ + [expr { $a(${energy}_FULL) * 1e-3 }] $eunit \ + [expr { $a(${energy}_FULL_DESIGN) * 1e-3 }] $eunit \ + [expr { $a(${power}_NOW) * 1e-3 }] $punit] +} + +proc append-percents {qv} { + upvar 1 o o + upvar 1 $qv q + append o [format " %.0f%% (%.0f%%/%.0f%%)" \ + [expr { $q(energy_NOW) * 100.0 / $q(energy_FULL_DESIGN) }] \ + [expr { $q(energy_NOW) * 100.0 / $q(energy_FULL) }] \ + [expr { $q(energy_FULL) * 100.0 / $q(energy_FULL_DESIGN) }]] + if {$q(power_NOW) < -1} { + set endpoint 0 + } elseif {$q(power_NOW) > -1} { + set endpoint $q(energy_FULL) + } + if {[info exists endpoint]} { + set until [expr {($endpoint - $q(energy_NOW)) * 60.0/ $q(power_NOW)}] + if {$until < 72*60} { + append o [format " %.fmins" $until] + } + } +} + proc tt-string {} { global errorInfo set lines {} @@ -56,26 +86,52 @@ proc tt-string {} { lappend lines "error scanning: $emsg" debug::debug "scanning $errorInfo" } + if {$nbatts} { + set o "Total: $nbatts present " + append o [join [lsort [array names states]] /] + append-energies tot energy power mWh mW + append-percents tot + lappend lines $o + } if {![llength $lines]} { lappend lines "no power information" } return [join $lines "\n"] } -proc compute {power energy factor} { +proc compute {power energy factor punit eunit sign} { upvar 1 a a upvar 1 q q + upvar 1 tot tot + upvar 1 o o debug::debug "COMPUTE $power $energy $factor" - foreach ent {energy NOW} {energy FULL} {energy FULL_DESIGN} {power NOW} { + set energy_sign 1 + set power_sign $sign + set entl {{energy NOW} {energy FULL} {energy FULL_DESIGN} {power NOW}} + foreach ent $entl { manyset $ent pe k + set kq "${pe}_${k}" set kv "[set $pe]_$k" if {![info exists a($kv)]} { return 0 } - set q("${pe}_${k}") [expr {$a($kv) * $factor}] + set a($kv) [expr {$a($kv) * [set "${pe}_sign"]}] + set q($kq) [expr {$a($kv) * $factor}] } + debug::debug "COMPUTE OK [array names q]" + foreach ent $entl { + manyset $ent pe k + set kq "${pe}_${k}" + if {![info exists tot($kq)]} { set tot($kq) 0 } + set tot($kq) [expr {$tot($kq) + $q($kq)}] + } + append-energies a $energy $power $eunit $punit + append-percents q return 1 } proc tt-info {chan} { + upvar 1 tot tot + upvar 1 nbatts nbatts + upvar 1 states states while {[gets $chan l] >= 0} { if {[regexp {^POWER_SUPPLY_([A-Z0-9_]+)=(.*)$} $l dummy k v]} { debug::debug " uevent ok $l" @@ -84,7 +140,9 @@ proc tt-info {chan} { debug::debug " uevent unk $l" } } + debug::debug "GOT [array names a]" set o "$a(TYPE)" + set nbatts 0 switch -exact -- $a(TYPE) { Mains { switch -exact -- $a(ONLINE) { @@ -99,15 +157,28 @@ proc tt-info {chan} { 1 { append o " Present" } default { apend o " ?$o" } } - append o " $a(STATUS)" - if {[compute POWER ENERGY 1.0] || - [compute CURRENT CHARGE [expr {$a(VOLTAGE_NOW) * 1e-6}]]} { - debug::debug "COMPUTE OK" - } else { - append o " ?" + set sign 1 + append o " " + switch -exact -- $a(STATUS) { + Charging { } + Discharging { set sign -1 } + default { append o "Status=" } + } + set states($a(STATUS)) 1 + append o $a(STATUS) + foreach power {POWER CURRENT} energy {ENERGY CHARGE} \ + punit {mW mA} eunit {mWh mAh} { + switch -exact $power { + POWER { set factor 1.0 } + CURRENT { set factor [expr {$a(VOLTAGE_NOW) * 1e-6}] } + } + if {![compute $power $energy $factor $punit $eunit $sign]} \ + continue + incr nbatts } } } + return $o } #----- modes ----- -- 2.30.2