batsys: import battery widget that uses sysfs

Initial widget code was sent by Benedikt Sauer. After some cleanup it
is ready to go into master. It uses data exposed trough /sys and it is
used in the exact same way as the bat widget (and /proc). This widget
will replace batat and acpitool, it will be moved to contrib and
retired.
This commit is contained in:
Adrian C. (anrxc) 2009-11-10 15:46:54 +01:00
parent 896df4dd98
commit e66e5075a0
4 changed files with 95 additions and 1 deletions

9
README
View File

@ -165,6 +165,7 @@ vicious.widgets.uptime
vicious.widgets.bat vicious.widgets.bat
- provides state, charge, and remaining time for a requested battery - provides state, charge, and remaining time for a requested battery
using procfs
- takes battery ID as an argument, i.e. "BAT0" - takes battery ID as an argument, i.e. "BAT0"
- returns 1st value as state of requested battery, 2nd as charge - returns 1st value as state of requested battery, 2nd as charge
level in percent and 3rd as remaining (charging or discharging) level in percent and 3rd as remaining (charging or discharging)
@ -177,6 +178,14 @@ vicious.widgets.batat
level in percent, 3rd as remaining (charging or discharging) time, level in percent, 3rd as remaining (charging or discharging) time,
4th as state of the second battery etc. 4th as state of the second battery etc.
vicious.widgets.batsys
- provides state, charge, and remaining time for a requested battery
using sysfs
- takes battery ID as an argument, i.e. "BAT0"
- returns 1st value as state of requested battery, 2nd as charge
level in percent and 3rd as remaining (charging or discharging)
time
vicious.widgets.mem vicious.widgets.mem
- provides RAM and Swap usage statistics - provides RAM and Swap usage statistics
- returns 1st value as memory usage in percent, 2nd as memory usage, - returns 1st value as memory usage in percent, 2nd as memory usage,

View File

@ -19,7 +19,7 @@ local string = {
-- }}} -- }}}
-- Bat: provides state, charge, and remaining time for a requested battery -- Bat: provides state, charge, and remaining time for a requested battery using procfs
module("vicious.bat") module("vicious.bat")

84
batsys.lua Normal file
View File

@ -0,0 +1,84 @@
---------------------------------------------------
-- Licensed under the GNU General Public License v2
-- * (c) 2009, Adrian C. <anrxc@sysphere.org>
-- * (c) 2009, Benedikt Sauer <filmor@gmail.com>
---------------------------------------------------
-- {{{ Grab environment
local tonumber = tonumber
local io = { open = io.open }
local setmetatable = setmetatable
local string = { format = string.format }
local math = {
min = math.min,
floor = math.floor
}
-- }}}
-- Batsys: provides state, charge, and remaining time for a requested battery using sysfs
module("vicious.batsys")
-- {{{ Battery widget type
local function worker(format, batid)
local battery = setmetatable({}, {__index = function(table, name)
local f = io.open("/sys/class/power_supply/"..batid.."/"..name)
if f then
local s = f:read("*all")
f:close()
return s
end
end})
local battery_state = {
["Full\n"] = "",
["Unknown\n"] = "",
["Charged\n"] = "",
["Charging\n"] = "+",
["Discharging\n"] = "-"
}
-- Check if the battery is present
if not battery.present == "1\n" then
return {battery_state["Unknown\n"], 0, "N/A"}
end
-- Get state information
local state = battery_state[battery.status] or battery_state["Unknown\n"]
-- Get capacity information
if battery.charge_now then
remaining, capacity = battery.charge_now, battery.charge_full
elseif battery.energy_now then
remaining, capacity = battery.energy_now, battery.energy_full
else
return {battery_state["Unknown\n"], 0, "N/A"}
end
-- Get charge information
if battery.current_now then rate = battery.current_now
else return {battery_state["Unknown\n"], 0, "N/A"} end
-- Calculate percentage (but work around broken BAT/ACPI implementations)
local percent = math.min(math.floor(remaining / capacity * 100), 100)
-- Calculate remaining (charging or discharging) time
if state == "+"then
timeleft = (tonumber(capacity) - tonumber(remaining)) / tonumber(rate)
elseif state == "-" then
timeleft = tonumber(remaining) / tonumber(rate)
else
return {state, percent, "N/A"}
end
local hoursleft = math.floor(timeleft)
local minutesleft = math.floor((timeleft - hoursleft) * 60 )
local time = string.format("%02d:%02d", hoursleft, minutesleft)
return {state, percent, time}
end
-- }}}
setmetatable(_M, { __call = function(_, ...) return worker(...) end })

View File

@ -29,6 +29,7 @@ require("vicious.load")
require("vicious.uptime") require("vicious.uptime")
require("vicious.bat") require("vicious.bat")
require("vicious.batat") require("vicious.batat")
require("vicious.batsys")
require("vicious.mem") require("vicious.mem")
require("vicious.fs") require("vicious.fs")
require("vicious.dio") require("vicious.dio")