aboutsummaryrefslogtreecommitdiff
path: root/cpufreq.lua
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2009-08-03 04:40:55 +0200
committerAdrian C. (anrxc) <anrxc@sysphere.org>2009-08-03 04:40:55 +0200
commitcef569b6f17cb18bf11b453dcf1887ff81fe0974 (patch)
tree278bc5d71e47afce76f5cff21f9f2979d71586e1 /cpufreq.lua
parent3fe67d4311f1f099da9ff13849c70a97d5078228 (diff)
downloadvicious-legacy-cef569b6f17cb18bf11b453dcf1887ff81fe0974.tar.xz
CPU frequency widget included.
The cpufreq widget supplements the cpu widget. It returns the current CPU scaling frequency (in MHz and GHz), voltage (in mV and V) and governor information for a requested CPU. If supported by the processor and correct kernel modules are loaded.
Diffstat (limited to 'cpufreq.lua')
-rw-r--r--cpufreq.lua67
1 files changed, 67 insertions, 0 deletions
diff --git a/cpufreq.lua b/cpufreq.lua
new file mode 100644
index 0000000..550bba3
--- /dev/null
+++ b/cpufreq.lua
@@ -0,0 +1,67 @@
+----------------------------------------------------------
+-- Licensed under the GNU General Public License version 2
+-- * Copyright (C) 2009 Adrian C. <anrxc_sysphere_org>
+----------------------------------------------------------
+
+-- {{{ Grab environment
+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
+function worker(format, cpuid)
+ -- Initialise tables
+ --local governor_state = {
+ -- ["ondemand"] = "↯",
+ -- ["powersave"] = "⌁",
+ -- ["userspace"] = "°",
+ -- ["performance"] = "⚡",
+ -- ["conservative"] = "↯"
+ --}
+
+ -- Get the current frequency
+ local ffreq = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_cur_freq")
+ local freq = ffreq:read("*line")
+ ffreq:close()
+
+ -- Calculate MHz and GHz
+ local freqmhz = freq / 1000
+ local freqghz = freqmhz / 1000
+
+
+ -- Get the current voltage
+ local fvolt = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_voltages")
+ for line in fvolt:lines() do
+ if line:find("^"..freq) then
+ voltagemv = line:match("[%d]+[%s]([%d]+)")
+ break
+ end
+ end
+ fvolt:close()
+
+ -- Calculate voltage from mV
+ local voltagev = voltagemv / 1000
+
+
+ -- Get the current governor
+ local fgov = io.open("/sys/devices/system/cpu/"..cpuid.."/cpufreq/scaling_governor")
+ local governor = fgov:read("*line")
+ fgov:close()
+
+ -- Represent the governor as a symbol
+ --local governor = governor_state[governor] or governor
+
+ return {freqmhz, freqghz, voltagemv, voltagev, governor}
+end
+-- }}}
+
+setmetatable(_M, { __call = function(_, ...) return worker(...) end })