2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 11:35:59 +02:00
|
|
|
--[[
|
|
|
|
|
|
|
|
smapi.lua
|
|
|
|
Interface with thinkpad battery information
|
|
|
|
|
2013-09-26 07:20:29 +02:00
|
|
|
Licensed under GNU General Public License v2
|
2013-09-26 11:35:59 +02:00
|
|
|
* (c) 2013, Conor Heine
|
2013-09-26 07:20:29 +02:00
|
|
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
local first_line = require("lain.helpers").first_line
|
|
|
|
|
|
|
|
local string = { format = string.format }
|
|
|
|
local tonumber = tonumber
|
|
|
|
local setmetatable = setmetatable
|
|
|
|
|
|
|
|
local smapi = {}
|
|
|
|
|
|
|
|
local apipath = "/sys/devices/platform/smapi"
|
|
|
|
|
|
|
|
-- Most are readable values, but some can be written to (not implemented, yet?)
|
|
|
|
local readable = {
|
2013-09-26 11:35:59 +02:00
|
|
|
barcoding = true,
|
|
|
|
charging_max_current = true,
|
|
|
|
charging_max_voltage = true,
|
|
|
|
chemistry = true,
|
|
|
|
current_avg = true,
|
|
|
|
current_now = true,
|
|
|
|
cycle_count = true,
|
|
|
|
design_capacity = true,
|
|
|
|
design_voltage = true,
|
|
|
|
dump = true,
|
|
|
|
first_use_date = true,
|
|
|
|
force_discharge = false,
|
|
|
|
group0_voltage = true,
|
|
|
|
group1_voltage = true,
|
|
|
|
group2_voltage = true,
|
|
|
|
group3_voltage = true,
|
|
|
|
inhibit_charge_minutes = false,
|
|
|
|
installed = true,
|
|
|
|
last_full_capacity = true,
|
|
|
|
manufacture_date = true,
|
|
|
|
manufacturer = true,
|
|
|
|
model = true,
|
|
|
|
power_avg = true,
|
|
|
|
power_now = true,
|
|
|
|
remaining_capacity = true,
|
|
|
|
remaining_charging_time = true,
|
|
|
|
remaining_percent = true,
|
|
|
|
remaining_percent_error = true,
|
|
|
|
remaining_running_time = true,
|
2013-09-26 07:30:39 +02:00
|
|
|
remaining_running_time_now = true,
|
2013-09-26 11:35:59 +02:00
|
|
|
serial = true,
|
|
|
|
start_charge_thresh = false,
|
|
|
|
state = true,
|
|
|
|
stop_charge_thresh = false,
|
|
|
|
temperature = true,
|
|
|
|
voltage = true,
|
2013-09-26 07:20:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function smapi:battery(name)
|
2013-09-26 07:30:39 +02:00
|
|
|
local bat = {}
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
bat.name = name
|
|
|
|
bat.path = apipath .. "/" .. name
|
2013-09-26 11:35:59 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
function bat:get(item)
|
|
|
|
return self.path ~= nil and readable[item] and first_line(self.path .. "/" .. item) or nil
|
|
|
|
end
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
function bat:installed()
|
|
|
|
return self:get("installed") == "1"
|
|
|
|
end
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
function bat:status()
|
|
|
|
return self:get('state')
|
|
|
|
end
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
-- Remaining time can either be time until battery dies or time until charging completes
|
|
|
|
function bat:remaining_time()
|
|
|
|
local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time'
|
|
|
|
local mins_left = self:get(time_val)
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 11:35:59 +02:00
|
|
|
if mins_left:find("^%d+") == nil
|
|
|
|
then
|
|
|
|
return "N/A"
|
2013-09-26 07:30:39 +02:00
|
|
|
end
|
2013-09-26 11:35:59 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
local hrs = mins_left / 60
|
|
|
|
local min = mins_left % 60
|
|
|
|
return string.format("%02d:%02d", hrs, min)
|
|
|
|
end
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
function bat:percent()
|
|
|
|
return tonumber(self:get("remaining_percent"))
|
|
|
|
end
|
2013-09-26 07:20:29 +02:00
|
|
|
|
2013-09-26 07:30:39 +02:00
|
|
|
return setmetatable(bat, {__metatable = false, __newindex = false})
|
2013-09-26 07:20:29 +02:00
|
|
|
end
|
|
|
|
|
2013-09-26 11:35:59 +02:00
|
|
|
return smapi
|