aboutsummaryrefslogtreecommitdiff
path: root/widgets/cpufreq.lua
blob: a4f2eaad007bcf94dd36482db4713cd850429cab (plain)
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
---------------------------------------------------
-- Licensed under the GNU General Public License v2
--  * (c) 2010, Adrian C. <anrxc@sysphere.org>
---------------------------------------------------

-- {{{ Grab environment
local tonumber = tonumber
local setmetatable = setmetatable
local string = { match = string.match }
local helpers = require("vicious.helpers")
-- }}}


-- Cpufreq: provides freq, voltage and governor info for a requested CPU
module("vicious.widgets.cpufreq")


-- {{{ CPU frequency widget type
local function worker(format, warg)
    if not warg then return end

    local cpufreq = helpers.pathtotable("/sys/devices/system/cpu/"..warg.."/cpufreq")
    local governor_state = {
       ["ondemand\n"]     = "↯",
       ["powersave\n"]    = "⌁",
       ["userspace\n"]    = "¤",
       ["performance\n"]  = "⚡",
       ["conservative\n"] = "⊚"
    }
    -- Default voltage values
    local voltage = { v  = "N/A", mv = "N/A" }


    -- Get the current frequency
    local freq = tonumber(cpufreq.scaling_cur_freq)
    -- Calculate MHz and GHz
    local freqmhz = freq / 1000
    local freqghz = freqmhz / 1000

    -- Get the current voltage
    if cpufreq.scaling_voltages then
        voltage.mv = tonumber(string.match(cpufreq.scaling_voltages, freq.."[%s]([%d]+)"))
        -- Calculate voltage from mV
        voltage.v = voltage.mv / 1000
    end

    -- Get the current governor
    local governor = cpufreq.scaling_governor
    -- Represent the governor as a symbol
    governor = governor_state[governor] or governor

    return {freqmhz, freqghz, voltage.mv, voltage.v, governor}
end
-- }}}

setmetatable(_M, { __call = function(_, ...) return worker(...) end })