1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
---------------------------------------------------
-- Licensed under the GNU General Public License v2
-- * (c) 2009, Adrian C. <anrxc.sysphere.org>
---------------------------------------------------
-- {{{ Grab environment
local tonumber = tonumber
local io = { open = io.open }
local setmetatable = setmetatable
local string = {
find = string.find,
match = string.match
}
-- }}}
-- Cpufreq: provides freq, voltage and governor info for a requested CPU
module("vicious.cpufreq")
-- {{{ CPU frequency widget type
local function worker(format, cpuid)
--local governor_state = {
-- ["ondemand"] = "↯",
-- ["powersave"] = "⌁",
-- ["userspace"] = "°",
-- ["performance"] = "⚡",
-- ["conservative"] = "↯"
--}
-- Default voltage values
local voltage = { v = "N/A", mv = "N/A" }
-- Get the current frequency
local f = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_cur_freq")
local freq = f:read("*line")
f:close()
-- Calculate MHz and GHz
local freqmhz = freq / 1000
local freqghz = freqmhz / 1000
-- Get the current voltage
local f = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_voltages")
if f then for line in f:lines() do
if string.find(line, "^"..freq) then
voltage.mv = tonumber(string.match(line, "[%d]+[%s]([%d]+)"))
break
end
end
f:close()
-- Calculate voltage from mV
voltage.v = voltage.mv / 1000
end
-- Get the current governor
local f = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_governor")
local governor = f:read("*line")
f:close()
-- Represent the governor as a symbol
--local governor = governor_state[governor] or governor
return {freqmhz, freqghz, voltage.mv, voltage.v, governor}
end
-- }}}
setmetatable(_M, { __call = function(_, ...) return worker(...) end })
|