aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--README4
-rw-r--r--cpufreq.lua67
2 files changed, 71 insertions, 0 deletions
diff --git a/README b/README
index 1206353..4a0fa3d 100644
--- a/README
+++ b/README
@@ -83,6 +83,10 @@ in the format string.
vicious.widgets.cpu
- provides CPU usage for all available CPUs/cores
+vicious.widgets.cpufreq
+ - provides freq, voltage and governor info for a requested CPU
+ - takes the CPU ID as an argument, i.e. "cpu0"
+
vicious.widgets.thermal
- provides temperature levels of ACPI thermal zones
- takes the thermal zone as an argument, i.e. "TZS0"
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 })