From cef569b6f17cb18bf11b453dcf1887ff81fe0974 Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Mon, 3 Aug 2009 04:40:55 +0200 Subject: 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. --- cpufreq.lua | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 cpufreq.lua (limited to 'cpufreq.lua') 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. +---------------------------------------------------------- + +-- {{{ 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 }) -- cgit v1.2.3