From 2da415aa837d8d9abd89f25091379828f504ef6b Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 18 Apr 2005 14:33:24 +0000 Subject: [PATCH] cpufreq module - cleaned up a bit, some fearyes i removed (not well done enough) it only supports userspace and ondemand right now. it doesnt SET them until u hit the toggle. it needs to support powersave and performance - theme has no way to indicate this. that's the problem. SVN revision: 14223 --- configure.in | 1 + data/themes/Makefile.am | 3 +- data/themes/default.edc | 1 + data/themes/default_cpufreq.edc | 421 +++++++ data/themes/images/Makefile.am | 20 +- data/themes/images/e17_cpufreq_cpu1.png | Bin 0 -> 7313 bytes data/themes/images/e17_cpufreq_cpu2.png | Bin 0 -> 5946 bytes data/themes/images/e17_cpufreq_decrease1.png | Bin 0 -> 1460 bytes data/themes/images/e17_cpufreq_decrease2.png | Bin 0 -> 5161 bytes data/themes/images/e17_cpufreq_freq00.png | Bin 0 -> 6262 bytes data/themes/images/e17_cpufreq_freq01.png | Bin 0 -> 6283 bytes data/themes/images/e17_cpufreq_freq02.png | Bin 0 -> 6260 bytes data/themes/images/e17_cpufreq_freq03.png | Bin 0 -> 6256 bytes data/themes/images/e17_cpufreq_freq04.png | Bin 0 -> 6266 bytes data/themes/images/e17_cpufreq_freq05.png | Bin 0 -> 6240 bytes data/themes/images/e17_cpufreq_freq06.png | Bin 0 -> 6273 bytes data/themes/images/e17_cpufreq_freq07.png | Bin 0 -> 6238 bytes data/themes/images/e17_cpufreq_freq08.png | Bin 0 -> 6238 bytes data/themes/images/e17_cpufreq_freq09.png | Bin 0 -> 6180 bytes data/themes/images/e17_cpufreq_freq10.png | Bin 0 -> 6099 bytes data/themes/images/e17_cpufreq_increase1.png | Bin 0 -> 1425 bytes data/themes/images/e17_cpufreq_increase2.png | Bin 0 -> 4944 bytes src/modules/Makefile.am | 3 +- src/modules/cpufreq/Makefile.am | 47 + src/modules/cpufreq/e_mod_main.c | 1026 ++++++++++++++++++ src/modules/cpufreq/e_mod_main.h | 69 ++ src/modules/cpufreq/freqset.c | 57 + src/modules/cpufreq/module_icon.png | Bin 0 -> 795 bytes src/modules/temperature/e_mod_main.c | 2 +- 29 files changed, 1645 insertions(+), 5 deletions(-) create mode 100644 data/themes/default_cpufreq.edc create mode 100644 data/themes/images/e17_cpufreq_cpu1.png create mode 100644 data/themes/images/e17_cpufreq_cpu2.png create mode 100644 data/themes/images/e17_cpufreq_decrease1.png create mode 100644 data/themes/images/e17_cpufreq_decrease2.png create mode 100644 data/themes/images/e17_cpufreq_freq00.png create mode 100644 data/themes/images/e17_cpufreq_freq01.png create mode 100644 data/themes/images/e17_cpufreq_freq02.png create mode 100644 data/themes/images/e17_cpufreq_freq03.png create mode 100644 data/themes/images/e17_cpufreq_freq04.png create mode 100644 data/themes/images/e17_cpufreq_freq05.png create mode 100644 data/themes/images/e17_cpufreq_freq06.png create mode 100644 data/themes/images/e17_cpufreq_freq07.png create mode 100644 data/themes/images/e17_cpufreq_freq08.png create mode 100644 data/themes/images/e17_cpufreq_freq09.png create mode 100644 data/themes/images/e17_cpufreq_freq10.png create mode 100644 data/themes/images/e17_cpufreq_increase1.png create mode 100644 data/themes/images/e17_cpufreq_increase2.png create mode 100644 src/modules/cpufreq/Makefile.am create mode 100644 src/modules/cpufreq/e_mod_main.c create mode 100644 src/modules/cpufreq/e_mod_main.h create mode 100644 src/modules/cpufreq/freqset.c create mode 100644 src/modules/cpufreq/module_icon.png diff --git a/configure.in b/configure.in index 064389f3d..f2ce3e7f0 100644 --- a/configure.in +++ b/configure.in @@ -212,6 +212,7 @@ src/modules/clock/Makefile src/modules/pager/Makefile src/modules/battery/Makefile src/modules/temperature/Makefile +src/modules/cpufreq/Makefile data/Makefile data/fonts/Makefile data/images/Makefile diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 7d8606ec7..ad2b12e97 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -25,7 +25,8 @@ default_pager.edc \ default_resize.edc \ default_move.edc \ default_temperature.edc \ -default_error.edc +default_error.edc \ +default_cpufreq.edc default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ diff --git a/data/themes/default.edc b/data/themes/default.edc index 70bd2afaa..40cd72b0f 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -35,5 +35,6 @@ collections { #include "default_move.edc" #include "default_temperature.edc" #include "default_error.edc" +#include "default_cpufreq.edc" } diff --git a/data/themes/default_cpufreq.edc b/data/themes/default_cpufreq.edc new file mode 100644 index 000000000..723715b33 --- /dev/null +++ b/data/themes/default_cpufreq.edc @@ -0,0 +1,421 @@ +images { + image: "e17_cpufreq_freq00.png" COMP; + image: "e17_cpufreq_freq01.png" COMP; + image: "e17_cpufreq_freq02.png" COMP; + image: "e17_cpufreq_freq03.png" COMP; + image: "e17_cpufreq_freq04.png" COMP; + image: "e17_cpufreq_freq05.png" COMP; + image: "e17_cpufreq_freq06.png" COMP; + image: "e17_cpufreq_freq07.png" COMP; + image: "e17_cpufreq_freq08.png" COMP; + image: "e17_cpufreq_freq09.png" COMP; + image: "e17_cpufreq_freq10.png" COMP; + image: "e17_cpufreq_increase1.png" COMP; + image: "e17_cpufreq_increase2.png" COMP; + image: "e17_cpufreq_decrease1.png" COMP; + image: "e17_cpufreq_decrease2.png" COMP; + image: "e17_cpufreq_cpu1.png" COMP; + image: "e17_cpufreq_cpu2.png" COMP; +} + +group { + name: "modules/cpufreq/main"; + min: 4 4; + max: 128 128; + + script { + public available_frequencies; + public available_governors; + + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT_SET) && (id == 1)) { + while (count(available_frequencies) > 0) { + remove(available_frequencies, 0); + } + for (new i = 2; i < numargs(); i++) { + append_int(available_frequencies, getarg(i)); + } + } else if ((type == MSG_STRING_SET) && (id == 2)) { + new text[100]; + + while (count(available_governors) > 0) { + remove(available_governors, 0); + } + + for (new i = 2; i < numargs(); i++) { + snprintf(text, 100, "%s", getarg(i)); + append_str(available_governors, text); + } + } else if ((type == MSG_INT_SET) && (id == 3)) { + new f = getarg(2); + new use_buttons = getarg(3); + new Float:freq, Float:min_freq, Float:max_freq; + new text[100]; + + freq = f; + min_freq = fetch_int(available_frequencies, 0); + max_freq = fetch_int(available_frequencies, + count(available_frequencies) - 1); + + freq = (freq - min_freq) / (max_freq - min_freq); + set_state(PART:"meter", "default", freq); + + if (f < 1000000) { + snprintf(text, 100, "%i Mhz", f / 1000); + } else { + snprintf(text, 100, "%i.%i Ghz", f / 1000000, + (f % 1000000) / 100000); + } + set_text(PART:"readout", text); + + if (use_buttons == 0) { + set_state(PART:"increase_button", "inactive", 0.0); + set_state(PART:"decrease_button", "inactive", 0.0); + set_state(PART:"increase", "inactive", 0.0); + set_state(PART:"decrease", "inactive", 0.0); + } else { + set_state(PART:"increase_button", "default", 0.0); + set_state(PART:"decrease_button", "default", 0.0); + set_state(PART:"increase", "default", 0.0); + set_state(PART:"decrease", "default", 0.0); + } + } else if((type == MSG_STRING) && (id == 4)) { + new text[100]; + snprintf(text, 100, "%s", getarg(2)); +/* + if (!strcmp(text, "performance") || !strcmp(text, "powersave") || + !strcmp(text, "userspace") || !strcmp(text, "ondemand")) { + set_state(PART:"governor", text, 0.0); + set_state(PART:"governorbackground", text, 0.0); + } else { + set_state(PART:"governor", "default", 0.0); + set_state(PART:"governorbackground", "default", 0.0); + } + */ + } + } + } + + parts { + part { + name: "meter"; + type: IMAGE; + + description { + state: "default" 0.0; + rel1 { + relative: 0.078125 0.0; + offset: 0 0; + } + rel2 { + relative: 0.921875 0.375; + offset: -1 -1; + } + image { + normal: "e17_cpufreq_freq00.png"; + } + } + description { + state: "default" 0.1; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq01.png"; + } + } + description { + state: "default" 0.2; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq02.png"; + } + } + description { + state: "default" 0.3; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq03.png"; + } + } + description { + state: "default" 0.4; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq04.png"; + } + } + description { + state: "default" 0.5; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq05.png"; + } + } + description { + state: "default" 0.6; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq06.png"; + } + } + description { + state: "default" 0.7; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq07.png"; + } + } + description { + state: "default" 0.8; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq08.png"; + } + } + description { + state: "default" 0.9; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq09.png"; + } + } + description { + state: "default" 1.00; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_freq10.png"; + } + } + } + + part { + name: "decrease_button"; + type: IMAGE; + mouse_events: 1; + + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.; + offset: 0 0; + } + rel2 { + relative: 1.0 0.375; + offset: -1 -1; + } + image { + normal: "e17_cpufreq_decrease1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_decrease2.png"; + } + } + description { + state: "inactive" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "increase_button"; + type: IMAGE; + mouse_events: 1; + + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.; + offset: 0 0; + } + rel2 { + relative: 1.0 0.375; + offset: -1 -1; + } + image { + normal: "e17_cpufreq_increase1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_increase2.png"; + } + } + description { + state: "inactive" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "cpu"; + type: IMAGE; + mouse_events: 1; + + description { + state: "default" 0.0; + rel1 { + relative: 0.1953125 0.3671875; + offset: 0 0; + } + rel2 { + relative: 0.8359375 1.0; + offset: -1 -1; + } + image { + normal: "e17_cpufreq_cpu1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_cpufreq_cpu2.png"; + } + } + } + + part { + name: "readout"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: 0.5 0.7; + offset: 0 0; + } + rel2 { + relative: 0.5 0.7; + offset: 0 0; + } + color: 255 255 255 255; + color3: 0 0 0 32; + text { + text: "??? Ghz"; + font: "Edje Vera"; + size: 7; + align: 0.5 0.5; + min: 1 1; + } + } + } + + part { + name: "decrease"; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + rel1 { + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 0.5 0.375; + offset: -1 -1; + } + color: 0 0 0 0; + } + description { + state: "inactive" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { + name: "increase"; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + rel1 { + relative: 0.5 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 0.375; + offset: -1 -1; + } + color: 0 0 0 0; + } + description { + state: "inactive" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + } /* end parts */ + + programs { + program { + name: "next_governor"; + signal: "mouse,down,1"; + source: "cpu"; + action: SIGNAL_EMIT "next_governor" "governor"; + } + program { + name: "next_governor2"; + signal: "mouse,down,1"; + source: "cpu"; + action: STATE_SET "clicked" 0.0; + target: "cpu"; + } + program { + name: "next_governor3"; + signal: "mouse,up,1"; + source: "cpu"; + action: STATE_SET "default" 0.0; + target: "cpu"; + } + program { + name: "increase_frequency"; + signal: "mouse,down,1"; + source: "increase"; + action: SIGNAL_EMIT "increase_frequency" "frequency"; + } + program { + name: "increase_frequency2"; + signal: "mouse,down,1"; + source: "increase"; + action: STATE_SET "clicked" 0.0; + target: "increase_button"; + } + program { + name: "increase_frequency3"; + signal: "mouse,up,1"; + source: "increase"; + action: STATE_SET "default" 0.0; + target: "increase_button"; + } + program { + name: "decrease_frequency"; + signal: "mouse,down,1"; + source: "decrease"; + action: SIGNAL_EMIT "decrease_frequency" "frequency"; + } + program { + name: "decrease_frequency2"; + signal: "mouse,down,1"; + source: "decrease"; + action: STATE_SET "clicked" 0.0; + target: "decrease_button"; + } + program { + name: "decrease_frequency3"; + signal: "mouse,up,1"; + source: "decrease"; + action: STATE_SET "default" 0.0; + target: "decrease_button"; + } + } +} diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index c9d1936b7..2e03d31d7 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -255,5 +255,21 @@ e17_temperature_mid.png \ e17_temperature_overlay.png \ e17_gadman_indicator.png \ e17_gadman_overlay.png \ -e17_logo.png - +e17_logo.png \ +e17_cpufreq_freq00.png \ +e17_cpufreq_freq01.png \ +e17_cpufreq_freq02.png \ +e17_cpufreq_freq03.png \ +e17_cpufreq_freq04.png \ +e17_cpufreq_freq05.png \ +e17_cpufreq_freq06.png \ +e17_cpufreq_freq07.png \ +e17_cpufreq_freq08.png \ +e17_cpufreq_freq09.png \ +e17_cpufreq_freq10.png \ +e17_cpufreq_increase1.png \ +e17_cpufreq_increase2.png \ +e17_cpufreq_decrease1.png \ +e17_cpufreq_decrease2.png \ +e17_cpufreq_cpu1.png \ +e17_cpufreq_cpu2.png diff --git a/data/themes/images/e17_cpufreq_cpu1.png b/data/themes/images/e17_cpufreq_cpu1.png new file mode 100644 index 0000000000000000000000000000000000000000..45e9acb63e521e119ca1ad0b2456255c636d79cd GIT binary patch literal 7313 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_decrease1.png b/data/themes/images/e17_cpufreq_decrease1.png new file mode 100644 index 0000000000000000000000000000000000000000..350c384143ea66eeca6799e9401be72869382c52 GIT binary patch literal 1460 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq01.png b/data/themes/images/e17_cpufreq_freq01.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6f7ce52dab64aa227853fa6759a9af84041706 GIT binary patch literal 6283 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq02.png b/data/themes/images/e17_cpufreq_freq02.png new file mode 100644 index 0000000000000000000000000000000000000000..8d31ecc264bcbc76287e01fcff928e0675f4a041 GIT binary patch literal 6260 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 Awg3PC literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq03.png b/data/themes/images/e17_cpufreq_freq03.png new file mode 100644 index 0000000000000000000000000000000000000000..481741f72df23aa284b71708b0441173babb3067 GIT binary patch literal 6256 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq04.png b/data/themes/images/e17_cpufreq_freq04.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b027f30775a380661c18aa56c027824083a97b GIT binary patch literal 6266 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 AdH?_b literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq05.png b/data/themes/images/e17_cpufreq_freq05.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc213431431182322c458893ce54abb6646305f GIT binary patch literal 6240 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq06.png b/data/themes/images/e17_cpufreq_freq06.png new file mode 100644 index 0000000000000000000000000000000000000000..a47f3f2bb9e54961e8a323d6a294eeb70971631b GIT binary patch literal 6273 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq09.png b/data/themes/images/e17_cpufreq_freq09.png new file mode 100644 index 0000000000000000000000000000000000000000..6350f81732f20923bc48acdd69950db12af8a631 GIT binary patch literal 6180 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 literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_freq10.png b/data/themes/images/e17_cpufreq_freq10.png new file mode 100644 index 0000000000000000000000000000000000000000..79d420fd89b3f1350cde6350d454323e4bd566dd GIT binary patch literal 6099 zcmWkybzDVL`4bHEnV*uTGD(DRYaY*Z^KQ;@R{a!HR114m~ zcg%)32l_9m8_%ojNQoL}-3o5i$ijef$@k{?eS#TCZyW6wWVh;Hrh&eKbnGC8QG>l? zJy~!Yc0mt&?YtF3-!1H-MTN9DpCOX9!dM{y~sxuyPA#6k+D)#WDKdq%@oYt zZ>0RJdRinaRN8E#{VLQ#LV7ke*_m(+Bv<^8t1_}VI;eGLnu@jhGt<2JY!10S4Wyd{!;&&n<={;8ynQt_SQk&J=wy-y{dN^&tLlB3<7 zIIp!}%iQI&-?`t&Lo>xWUQi^Be7}^SrH%qE9Sa0y>c*N>s@GY*hYCT3SSz-nqEwct zNOK2+2DZ9+&?7cP737c`S>DDEt>;UJ=v8T{{-mH!n7YT`c>R0Y$i~lKzusdo$yr(K zCY7vN@RBXLO0y*3%MSqal*Hw17ue>}dC?!h(%p<9nI9 zZwKI>b1u%#(c9ZzO-)VH)6?&uLbZ*J8jaS;6PA@`)3dWq;o*gijSp#JRkUzh(z`!y~ z<5v2+va;yQ%a_+EDP;qGFp`mxJ^g6)rtfx~qq=ZNdW0jVW|cpfa;_;iKYw+!Olxpx z=)Sac&)>gtlOAk6zC!G;YA~3(=H}knS!=6K8_;@WFfkp}EW&EZ2q751-MDIus+|BkKQ?YC-E34(N$=nJ-yOA?9R*$5mDMbLN|6R~&sn#; zyIzDA-zhcJn`=Ds(W1Jpsp;$5+HF%))4{<(s0jPrOkELi@dxtq+zKzxgSc{-c6mwd zse`JMX3Ti9I7s!Q-gs=XUVOVrOmM?H$&b#?_IGxI0G9wqtgWp%`S>;(33kq&p091i z;;~!l$Lqno*e#Pvv*%z+0%9w&!YD!jDqOGts(QX+n7EnHW$?bm{wQ_qUM4?D6#qLj zVc)CEaHX?f54;y!`+#h9JEh0QQn|TKuL;BMmg3 zyui6M8N`EjmsC&~Bog_75?R|1HY||&&&H>%TTi@A9r(QfN5Bt^MV(i^H70H&m~O~) zUcGy0()(MHhNG{LFLblX!w)Z^PCx)f^fN&2kF{W@A8s(3lHp`6!zd>&FR36uo`FwN zQSoAWzcs#-XB17*`f%CHLfw92ha;y%s7fQ}lUk>-gKdK&|2PnqbOEg&o13=^4gJ@8 znTCs%M}Cf%yL)@5C^UF9>eg9yHF<%19*;Nl3O<>$3-7o4c2tI47<4E*va;5)_mZAU6b5$kOR>piJOz zFpxz66j3IQ07M)fBEUU~a$eLz^tvI@ey36nXUKz^^~@9@xX1C?vsWmTU{bdexz1tzO6|(#EL~Or z{+P6p`&}D2^&&@`EeGvxl+&f@VjL?-KsmFKljQ2hH8nk|pApG|FU!!|zdRM}xIFxT zi?~wy?w1Rc2UaocWH+!gg6s)J!<)_5Zb{LjcP9>DM9RLWe#EuDjQ8X2V?U*o|Bj{x z?X(>Oxc*jG(89vP($cci7YqP=7F;9!8np<$f%%kolF7}7H1gYzf?nDMwvY0MNRQm7 z_mmzNa;*IJUdxm78i34;i*|ob6(&70l`r>F&o`fRyeX+$0cvGYoc&b?1v*BJS@ssQ zWyW){VUjDCymj11*AZrN5};ep&o`7^ot&anOF9n@q*8emlfGyss^9XEWc-}pvQp*o z^m4^JTtG-%ZniGl-Lqldi~j?*2ifQQeYGd`^kCe`7nZ#fadie(40-GMXaK0n)9>OD zeP6ziI&xy|S^|D5>!QZ^khoVI;@5mSE?yXnOA%OaLQK`WK!q}|&;eI&1k1|8(WC$Vq1b4eklD94%8Z3Sk7Hu~&pRt=`E}}6W zmvV7&$;r(vX>80~Uw5gR^jLcfj1~}#z{ShEzM85$1pse{!`RK5V(K60H-(slAAj;T zg7Ii~6Cu{-fS=5{`q!3@%UDd<1a4OTOm41UsS3&ad8P+W@+mc%+eXfc>N0mI;U$DJ zb;B-CH$1((e1A>f7a1tEsGbbY0x;E>71hzfm)>AdjbcFWD%mdYkC2VuyLYer?C;+} zV88(+0`0E(*y`UUNyo;avRr4e4K^KnB8!XrLT(+psg$qH5Bo;mS3Mn+qE!Ph4L_7G zT{d5QLq7AuzR?=)@1KFiiUB~5H0fuAe?)yzNdIF;>OC?zIL`+LgY%1v%gf9EF(r%z z-nXFT2X51)hqBw3(plVeychFwmjBoaq}jnl4y|UI@*v6(Til8$vDb?z+f&)&V%j_Q zJLD-BPTSq`&`8HfY_vP`jcYlOJa~y9a|~K1N1G9n5wjAghhheD@)Uu{+}ra77*D3I z;O1)BQjafK7sY)2`t<@iL{hf>OD@4`SUQ_+l}#R~!cph&P{^eH8^6-6p z8k9h-p8>STez$A!Xu-fJfxxk#bsA3X2?WMgtS9z52V+&9#VuYe+P%GUVxjLwoR!0$ z%ZoFuv$HcJ3t=|TIY_Sl8(mZ>GN92~FjIFqcoD19RjvU((nb7Yhj^U8Mxs?ok~C_! z3n6Uvgyg9PsvJn?M6M6TN;`SPn%^r5Bsm~F2w7z_{ePxIbOOO%JEPKz>a zcC<7!NVV40`C_Z9Us+=`F&1Uk7=Qqjc~wgOe9IZP*G1<;{_MknMp+PyGmiY(vlwpf zTAU8FT9NwVuI&5f5Ho(Dsa0t42~z^%pC0oXs?y^b4Sc1dB)X0jlA4Bmu8t#c0HypF zl=*pmYARc4zccs}FeEmH3(G!z;vi-vEROVpYSHd5!JPe;o(5}fSVIE?9>s{uFe8*n ziLF>h-_ugKTw%%=QvmlXS#f5?x7cjU&fnN(+nG0no#*WCIe$4skP;Ru=`)uSQ7T8P zN!8N!<5B?#CYO8@e0GaOX~6xe1u>#+Lz? zvUa_qz(#A7neacVn)|>N)TBW?ZmNCp$UghEGKqf3>#^?QdaqD`VjqQ;m6ch8^Jw%_ zI#w>SS}PV-o(sPdT7ikJii@+~E04g;v$nkR@Vt_ynZ~ ztdW2GD>co#9XVJ2DzWt}M-OD@+S#r(?)iqaeD)Q21x5a95d(yPJ_L{R-{^JuNCk(n zS$JRHec$qe48oI!FphW*_wev&?&yfnCm?`H3BaRTA!!u~e}2K@fFXAfz)u1xdp#@#_Xs)G#holt!@sTku(*`l5aeEj)Hw*4Eua#=+= z-L#R_5TN-dW_y6y>34qOtB#vDcU+i?OhUUO5WMSRE=w%IIfCgFJhbupW0e zr@&V-6LjkaEU?NRi7$-!eTioe^$Fb-7Wb`Ow`@9&NAu*(ljFYk8 zj5~SUS%{N;dDYEfiSFy_rD|v(HhZ&jW(lqoZTKGjvI3+VlZNb*7;~E^JjoXz)74k^ zO3BX8XB(fzFNJJjEasZFOoacaPOj+T>aByOq#S6pwvq!#p+gj2tfR(7qBGMqxWQ zJuOq;+#Iw_{4aXC36_0j;;$}woo8tW^I_FoxH&6!e6)_N!Wz}o#`9mgQPF&gnrTMV zpTy*Bc5N+{yx|}VOVJzQ!ZntDk8<^$;2$m9jp}W`3bWsj2Eopc&S!5#ocww~rS_GQ za@5AA(o8r;wXmLXQi66dXq66-R*df;u@C3w4PZuO=$6whC&s|D{i>Fpjm>W#D*ut*qk0rUqXf9TD~MjxE(zFt@6u<+DK=2l{m_!-HH%HIiI?7cWU zX5f*3G59uCnu(Q(C1cUK)hMIC(xQ4)l3w5Np@)ypzd8Q{GVT>?pkef!x#yGpW;T=-P*fqLpzk(%9Q9$YrTCdUNgI|whv$1_y# zsZJ(~|6X@fV33$3$tA(o)YJqhzdS#o#Mz1&3$fmM(r7ED#rC1<@B16_^735V+^b!Q zEWqYOhb@?NxK!qpf+@?&blpOUWk7d<=89uzwa-%-k2`f0(=FYeAsi`T# z)YOaTPEIQ-b(X)1ii#e6uxsnb*nF~t!Mcyb0TET&k`3Hb0!;wZxqr#e%aZ}pys)r9 z1$`1TIXgQr8pP|cC$lQbuPiG&bH1MMQzV|L8|Ohk=`QEU3A6+k56^dChXPi9SpaZO zu4))7$*>hul2yVG%4CB{I&buYb);+6#~F=qbg2?sQ2`ktd*D00fxbSiA#lXR#rbjy z3MQ0J*I2N&I8~hOI)D-vpX{x+p04Nr^C&=0bZFsq?ULW(+k%jflOU4? z`3Fb)tV*sInq`5pUCWI^rr5RCX8hdT9KPdp$mh>a$CVPWI|24~6rFT<{_KIhuiQSn z8O7%@fa+)74J8J4y4JTGyN46@Ni)8!{mP2&?EUub+q2cx)gA`0%yT(fJo@P9#n-Q2 zgAOO3$c7wLoG(Ukb}zBLTLV{~G>lP=NmFca-K^SO8IS&Mi(|Tv-{|GA4;wvRj_32+ z80PVuL!(f!4_t?L+jhcJfje*Q-ruD(R#PVPbkDO0HD>u+gqAv;Xe3*lot^E7cRcxU z8m5$~4}lkdx(!lfG%&omz$y@eSa}rjO#2M_PL8A_vGCO2uYcEZR8u%p*QW&PW>`M1 zsZ=cfit>eSk29Tfzn1h8F@dO?j~>!U-sAj0FXR`daD zknd!rcWFU8GbZ8({Xk{QrNlj4iWF>9@00i|(L_t(|+U=S_ZyZ?_ zg}?J&RdtuU+ig2`5<8hpB*M&)z=RRD*dSQ(lae11|0XulzGMP*!lgVTlzGMP+f=}}&Sn?X8wCP0!RAlotQ?N71+{!j4X^AZ@?UX|3h4R9*yLc1?c zvjJ{)_4g#L10NZFAlNb(`!(<26koqinje) z(gE-laIW1K-!nmxmvHGRfi2(*g}CRkc;d2JmqMVKKhSJ?o0JmvTj0;Y_Y4s7`YmriZWziK_I9@Z-2eZeE3{!sU9faPuhk|bcR zlqv^Bs|0$WK7>^$HgHw<2=O-3JxOCpWj4SKDSyC%(jiPSjj&J!svr!Y*h1wv(67f1 z;lAxn+c6v9W)Qn_r;w?nP(fi7KoL|z7(uZbsQLqict_GbV8w^eLpH#2kAMOS+XG<7 zF%AiZ2tA>d?s!0D*9zho7j-0tEns`m0+bD~yy8b-sII5~gb+Sa2;1)U`V<=r;X@Y? z>OrxI%DQrhBcwIkqpLQM&jFUD-yc5LRpi?qN!l@dDurJXi!T_h-BRyvB(BpXz?HNm zsKTL!s_Of4vesSf5+EC3Im8b@1&nOp1wKQ1st_K#SO1WD__2mtLwX;Hcx&MkU5yH$ z0tE*{fm8qkNg*3xd3O6f;I^cvgz!``e(s|9lwQ4~!FWV}v!MS_6x&_(D|W(nH$%FF z6cVVBT^J^|oerKU8{qm^f8X{UNuOK#wPO4kgV95+jMnI_RaBdi@-CG3K*LUa)Co@l z&%jgMo=Vf{rQu|8gn)KmI2+*lM}J?^9ZSEUD1ORd^$~-$b?VK6Y8#3j2rJ!g|6f&~ zK<>nE-{R>Jnw*}|&c9JguaJ&`c}{@qAN>&+Abl+90Y!O_mEpR3t5M}0h?}5#v8Myv z0!{ayE}=b!=__;b*BS3lPH38!hOe~ zo=2KDa(a(cf*YJ#E1k*hJkeYv%_iqeFV2`wj+o8FNd90M~mDU`Z3;2>Z~fO-wExYc|~`oUb4SLqkdvn)y5Ix7dI04C7aZZv@|BpGdl} z-G;q=fB24Ufa}jCaBTZa!5cTtOH$gzvjLK^8>Bbb$G|D}vEdB(PSPbX1FYQ_=|4R@ ze-*qO<6yP;&VLB>B#nW_c6C+RlHS{%Ed)=J(n5Iuw`XSqEYDO>0$zLv7`2%BZKuUG f1OE4j|6lwQsF^Ogwo!;^00000NkvXXu0mjf;nS9V literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_cpufreq_increase2.png b/data/themes/images/e17_cpufreq_increase2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ea37cc250ad538b3e7ff0598304cd5b7d0355b GIT binary patch literal 4944 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 +#include +#include "e_mod_main.h" + +/* FIXME: need to handle performance and powersave convernors (only auto/manual now) + * FIXME: check permissions (can execute) before trying + * FIXME: display throttling state + * FIXME: if system doesnt support cpufreq - fade out + */ + +static Cpufreq *_cpufreq_new(E_Module *module); +static void _cpufreq_free(Cpufreq *cpufreq); +static void _cpufreq_set_governor(Cpufreq *cpufreq, const char *governor); +static void _cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_menu_frequency(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_config_menu_new(Cpufreq *cpufreq); +static int _cpufreq_cb_check(void *data); + +static Status * _cpufreq_status_new(); +static void _cpufreq_status_free(Status *e); +static int _cpufreq_status_check_available(Status *e); +static int _cpufreq_status_check_current(Status *e); +static int _cpufreq_cb_sort(void *item1, void *item2); + +static Cpufreq_Face *_cpufreq_face_new(E_Container *con, Cpufreq *owner); +static void _cpufreq_face_free(Cpufreq_Face *face); +static void _cpufreq_face_menu_new(Cpufreq_Face *face); +static void _cpufreq_face_enable(Cpufreq_Face *face); +static void _cpufreq_face_disable(Cpufreq_Face *face); +static void _cpufreq_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); +static void _cpufreq_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cpufreq_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _cpufreq_face_update_available(Cpufreq_Face *face); +static void _cpufreq_face_update_current(Cpufreq_Face *face); +static void _cpufreq_face_cb_set_frequency(void *data, Evas_Object *o, const char *emission, const char *source); +static void _cpufreq_face_cb_set_governor(void *data, Evas_Object *o, const char *emission, const char *source); + +static E_Config_DD *conf_edd; +static E_Config_DD *conf_face_edd; + +static int cpufreq_count; + +/* public module routines */ +void * +e_modapi_init(E_Module *module) +{ + Cpufreq *freq; + + if (module->api->version < E_MODULE_API_VERSION) + { + e_error_dialog_show(_("Module API Error"), + _("Error initializing Module: cpufreq\n" + "It requires a minimum module API version of: %i.\n" + "The module API advertized by Enlightenment is %i.\n" + "Aborting module."), + E_MODULE_API_VERSION, + module->api->version); + return NULL; + } + + freq = _cpufreq_new(module); + module->config_menu = freq->config_menu; + return freq; +} + +int +e_modapi_shutdown(E_Module *module) +{ + Cpufreq *cpufreq; + + if (module->config_menu) + module->config_menu = NULL; + + cpufreq = module->data; + if (cpufreq) + _cpufreq_free(cpufreq); + + return 1; +} + +int +e_modapi_save(E_Module *module) +{ + return 1; +} + +int +e_modapi_info(E_Module *module) +{ + char buf[4096]; + + module->label = strdup(_("CpuFreq")); + snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(module)); + module->icon_file = strdup(buf); + return 1; +} + +int +e_modapi_about(E_Module *module) +{ + e_error_dialog_show(_("CPU Frequency Controller Module"), + _("A simple module to control the frequency of the system CPU. " + "This is especially useful to save power on laptops.")); + return 1; +} + +static Cpufreq * +_cpufreq_new(E_Module *module) +{ + Cpufreq *e; + Evas_List *managers, *l, *l2, *cl; + E_Menu_Item *mi; + char buf[4096]; + + cpufreq_count = 0; + e = E_NEW(Cpufreq, 1); + if (!e) return NULL; + + conf_face_edd = E_CONFIG_DD_NEW("Cpufreq_Config_Face", Config_Face); +#undef T +#undef D +#define T Config_Face +#define D conf_face_edd + E_CONFIG_VAL(D, T, enabled, INT); + + conf_edd = E_CONFIG_DD_NEW("Cpufreq_Config", Config); +#undef T +#undef D +#define T Config +#define D conf_edd + E_CONFIG_VAL(D, T, poll_time, DOUBLE); + E_CONFIG_LIST(D, T, faces, conf_face_edd); + + e->conf = e_config_domain_load("module.cpufreq", conf_edd); + if (!e->conf) + { + e->conf = E_NEW(Config, 1); + e->conf->poll_time = 2.0; + } + E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 60.0); + + snprintf(buf, sizeof(buf), "%s/%s/freqset", e_module_dir_get(module), MODULE_ARCH); + buf[sizeof(buf) - 1] = 0; + e->set_exe_path = strdup(buf); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e->status = _cpufreq_status_new(); + + _cpufreq_status_check_available(e->status); + _cpufreq_config_menu_new(e); + + managers = e_manager_list(); + cl = e->conf->faces; + for (l = managers; l; l = l->next) + { + E_Manager *man; + + man = l->data; + for (l2 = man->containers; l2; l2 = l2->next) + { + E_Container *con; + Cpufreq_Face *ef; + + con = l2->data; + ef = _cpufreq_face_new(con, e); + if (ef) + { + e->faces = evas_list_append(e->faces, ef); + + if (!cl) + { + ef->conf = E_NEW(Config_Face, 1); + ef->conf->enabled = 1; + e->conf->faces = evas_list_append(e->conf->faces, ef->conf); + } + else + { + ef->conf = cl->data; + cl = cl->next; + } + + _cpufreq_face_menu_new(ef); + + /* Add poll time menu to this face */ + mi = e_menu_item_new(ef->menu); + e_menu_item_label_set(mi, _("Set Poll Time")); + e_menu_item_submenu_set(mi, e->config_menu_poll); + + if (e->menu_governor) + { + /* Add governors menu to this face */ + mi = e_menu_item_new(ef->menu); + e_menu_item_label_set(mi, _("Set Controller")); + e_menu_item_submenu_set(mi, e->menu_governor); + } + + if (e->menu_frequency) + { + /* Add frequency menu to this face */ + mi = e_menu_item_new(ef->menu); + e_menu_item_label_set(mi, _("Set Speed")); + e_menu_item_submenu_set(mi, e->menu_frequency); + } + + /* Add this face to the main menu */ + mi = e_menu_item_new(e->config_menu); + e_menu_item_label_set(mi, con->name); + e_menu_item_submenu_set(mi, ef->menu); + + if (!ef->conf->enabled) + _cpufreq_face_disable(ef); + } + } + } + + _cpufreq_cb_check(e); + + return e; +} + +static void +_cpufreq_free(Cpufreq *e) +{ + Evas_List *l; + + E_CONFIG_DD_FREE(conf_edd); + E_CONFIG_DD_FREE(conf_face_edd); + + for (l = e->faces; l; l = l->next) + _cpufreq_face_free(l->data); + evas_list_free(e->faces); + + e_object_del(E_OBJECT(e->config_menu)); + e_object_del(E_OBJECT(e->config_menu_poll)); + e_object_del(E_OBJECT(e->menu_governor)); + e_object_del(E_OBJECT(e->menu_frequency)); + + ecore_timer_del(e->frequency_check_timer); + + _cpufreq_status_free(e->status); + + free(e->set_exe_path); +// while (e->conf->faces) +// { +// free(e->conf->faces->data); +// e->conf->faces = evas_list_remove_list(e->conf->faces, e->conf->faces); +// } + free(e->conf); + free(e); +} + +static void +_cpufreq_set_governor(Cpufreq *e, const char *governor) +{ + char buf[4096]; + int ret; + + snprintf(buf, sizeof(buf), + "%s %s %s", e->set_exe_path, "governor", governor); + ret = system(buf); + if (ret != 0) + { + e_error_dialog_show("CPU Frequency ERROR", + "There was an error trying to set the cpu frequency\n" + "governor via the module's setfreq utility."); + } +} + +static void +_cpufreq_set_frequency(Cpufreq *e, int frequency) +{ + char buf[4096]; + int ret; + + snprintf(buf, sizeof(buf), + "%s %s %i", e->set_exe_path, "frequency", frequency); + ret = system(buf); + if (ret != 0) + { + e_error_dialog_show("CPU Frequency ERROR", + "There was an error trying to set the cpu frequency\n" + "setting via the module's setfreq utility."); + } +} + +static void +_cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq *e; + + e = data; + e->conf->poll_time = 0.5; + ecore_timer_del(e->frequency_check_timer); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e_config_save_queue(); +} + +static void +_cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq *e; + + e = data; + e->conf->poll_time = 1.0; + ecore_timer_del(e->frequency_check_timer); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e_config_save_queue(); +} + +static void +_cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq *e; + + e = data; + e->conf->poll_time = 2.0; + ecore_timer_del(e->frequency_check_timer); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e_config_save_queue(); +} + +static void +_cpufreq_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq *e; + + e = data; + e->conf->poll_time = 5.0; + ecore_timer_del(e->frequency_check_timer); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e_config_save_queue(); +} + +static void +_cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq *e; + + e = data; + e->conf->poll_time = 30.0; + ecore_timer_del(e->frequency_check_timer); + e->frequency_check_timer = ecore_timer_add(e->conf->poll_time, _cpufreq_cb_check, e); + e_config_save_queue(); +} + +static void +_cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi) +{ + char *governor; + + governor = e_object_data_get(E_OBJECT(mi)); + if (governor) + { + _cpufreq_set_governor(data, governor); + } +} + +static void +_cpufreq_menu_frequency(void * data, E_Menu *m, E_Menu_Item *mi) +{ + int frequency; + + frequency = (int) e_object_data_get(E_OBJECT(mi)); + if (frequency > 0) + { + _cpufreq_set_frequency(data, frequency); + } +} + +static void +_cpufreq_config_menu_new(Cpufreq *e) +{ + E_Menu *mn; + E_Menu_Item *mi; + Evas_List *l; + char buf[256]; + + mn = e_menu_new(); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Check Fast (0.5 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (e->conf->poll_time <= 0.5) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_menu_fast, e); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Check Medium (1 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (e->conf->poll_time > 0.5) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_menu_medium, e); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Check Normal (2 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (e->conf->poll_time >= 2.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_menu_normal, e); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Check Slow (5 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (e->conf->poll_time >= 5.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_menu_slow, e); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Check Very Slow (30 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (e->conf->poll_time >= 30.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_menu_very_slow, e); + + e->config_menu_poll = mn; + + if (e->status->governors) + { + mn = e_menu_new(); + + for (l = e->status->governors; l; l = l->next) + { + mi = e_menu_item_new(mn); + if (!strcmp(l->data, "userspace")) + e_menu_item_label_set(mi, _("Manual")); + else if (!strcmp(l->data, "ondemand")) + e_menu_item_label_set(mi, _("Automatic")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + e_object_data_set(E_OBJECT(mi), l->data); + e_menu_item_callback_set(mi, _cpufreq_menu_governor, e); + } + + e->menu_governor = mn; + } + + if (e->status->frequencies) + { + mn = e_menu_new(); + + /* FIXME: sotring ints in pointers for freq's? BAD! */ + for (l = e->status->frequencies; l; l = l->next) + { + int frequency; + + frequency = (int)l->data; + mi = e_menu_item_new(mn); + if (frequency < 1000000) + snprintf(buf, sizeof(buf), _("%i Mhz"), frequency / 1000); + else + snprintf(buf, sizeof(buf), _("%i.%i Ghz"), frequency / 1000000, (frequency % 1000000) / 1000); + buf[sizeof(buf) - 1] = 0; + e_menu_item_label_set(mi, buf); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + e_object_data_set(E_OBJECT(mi), l->data); + e_menu_item_callback_set(mi, _cpufreq_menu_frequency, e); + } + } + + e->menu_frequency = mn; + + mn = e_menu_new(); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Set Poll Time")); + e_menu_item_submenu_set(mi, e->config_menu_poll); + + if (e->menu_governor) + { + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Set Controller")); + e_menu_item_submenu_set(mi, e->menu_governor); + } + + if (e->menu_frequency) + { + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Set Speed")); + e_menu_item_submenu_set(mi, e->menu_frequency); + } + + e->config_menu = mn; +} + +static int +_cpufreq_cb_check(void *data) +{ + Cpufreq *e; + Cpufreq_Face *face; + Evas_List *l; + + e = data; + + if (_cpufreq_status_check_current(e->status)) + { + for (l = e->faces; l; l = l->next) + { + face = l->data; + _cpufreq_face_update_current(face); + } + } + + return 1; +} + +static Status * +_cpufreq_status_new() +{ + Status *e; + + e = E_NEW(Status, 1); + if (!e) return NULL; + + e->frequencies = NULL; + e->governors = NULL; + e->cur_frequency = 0; + e->can_set_frequency = 0; + e->cur_governor = NULL; + + return e; +} + +static void +_cpufreq_status_free(Status *e) +{ + Evas_List *l; + + if (e->frequencies) + evas_list_free(e->frequencies); + if (e->governors) + { + for (l = e->governors; l; l = l->next) + free(l->data); + evas_list_free(e->governors); + } + if (e->cur_governor) + free(e->cur_governor); + + free(e); +} + +static int +_cpufreq_cb_sort(void *item1, void *item2) +{ + int a, b; + + a = (int) item1; + b = (int) item2; + if (a < b) + return -1; + else if (a > b) + return 1; + else + return 0; +} + +static int +_cpufreq_status_check_available(Status *e) +{ + char buf[4096]; + FILE *f; + Evas_List *l; + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", "r"); + if (f) + { + char *freq; + + if (e->frequencies) + { + evas_list_free(e->frequencies); + e->frequencies = NULL; + } + + fgets(buf, sizeof(buf), f); + buf[sizeof(buf) - 1] = 0; + fclose(f); + + freq = strtok(buf, " "); + do + { + if (atoi(freq) != 0) + { + e->frequencies = evas_list_append(e->frequencies, + (void *) atoi(freq)); + } + freq = strtok(NULL, " "); + } + while (freq != NULL); + + // sort list + e->frequencies = evas_list_sort(e->frequencies, evas_list_count(e->frequencies), + _cpufreq_cb_sort); + } + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors", "r"); + if (f) + { + char *gov; + + if (e->governors) + { + for (l = e->governors; l; l = l->next) + free(l->data); + evas_list_free(e->governors); + e->governors = NULL; + } + + fgets(buf, sizeof(buf), f); + buf[sizeof(buf) - 1] = 0; + fclose(f); + + gov = strtok(buf, " "); + do + { + while (isspace(*gov)) gov++; + if (strlen(gov) != 0) + { + if ((!strcmp(gov, "ondemand")) || + (!strcmp(gov, "userspace"))) + e->governors = evas_list_append(e->governors, strdup(gov)); + } + gov = strtok(NULL, " "); + } + while (gov != NULL); + + e->governors = evas_list_sort(e->governors, evas_list_count(e->governors), + (int (*)(void *, void *))strcmp); + } + + return 1; +} + +static int +_cpufreq_status_check_current(Status *e) +{ + char buf[4096]; + int i; + FILE *f; + int ret; + int frequency; + + ret = 0; + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r"); + if (f) + { + fgets(buf, sizeof(buf), f); buf[sizeof(buf) - 1] = 0; + fclose(f); + + frequency = atoi(buf); + if(frequency != e->cur_frequency) + ret = 1; + e->cur_frequency = frequency; + } + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r"); + if (f) + { + e->can_set_frequency = 1; + fclose(f); + } + else + { + e->can_set_frequency = 0; + } + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "r"); + if (f) + { + fgets(buf, sizeof(buf), f); buf[sizeof(buf) - 1] = 0; + fclose(f); + + if ((e->cur_governor == NULL) || (strcmp(buf, e->cur_governor))) + { + ret = 1; + + if(e->cur_governor) + free(e->cur_governor); + e->cur_governor = strdup(buf); + + for (i = strlen(e->cur_governor) - 1; i >= 0; i--) + { + if (isspace(e->cur_governor[i])) + e->cur_governor[i] = 0; + else + break; + } + } + } + + return ret; +} + +static Cpufreq_Face * +_cpufreq_face_new(E_Container *con, Cpufreq *owner) +{ + Evas_Object *o; + Cpufreq_Face *ef; + + ef = E_NEW(Cpufreq_Face, 1); + if (!ef) return NULL; + + ef->con = con; + e_object_ref(E_OBJECT(con)); + ef->owner = owner; + + evas_event_freeze(con->bg_evas); + + o = edje_object_add(con->bg_evas); + ef->freq_object = o; + edje_object_file_set(o, + e_path_find(path_themes, "default.edj"), + "modules/cpufreq/main"); + edje_object_signal_callback_add(o, "next_governor", "governor", _cpufreq_face_cb_set_governor, owner); + edje_object_signal_callback_add(o, "increase_frequency", "frequency", _cpufreq_face_cb_set_frequency, owner); + edje_object_signal_callback_add(o, "decrease_frequency", "frequency", _cpufreq_face_cb_set_frequency, owner); + evas_object_show(o); + + o = evas_object_rectangle_add(con->bg_evas); + ef->event_object = o; + evas_object_layer_set(o, 0); + evas_object_repeat_events_set(o, 1); + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _cpufreq_face_cb_mouse_down, ef); + evas_object_show(o); + + ef->gmc = e_gadman_client_new(ef->con->gadman); + e_gadman_client_domain_set(ef->gmc, "module.cpufreq", cpufreq_count++); + e_gadman_client_policy_set(ef->gmc, E_GADMAN_POLICY_ANYWHERE | + E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE | + E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE); + e_gadman_client_min_size_set(ef->gmc, 4, 4); + e_gadman_client_max_size_set(ef->gmc, 128, 128); + /* This module needs a slightly higher min size */ + e_gadman_client_auto_size_set(ef->gmc, 40, 40); + e_gadman_client_align_set(ef->gmc, 1.0, 1.0); + e_gadman_client_resize(ef->gmc, 40, 40); + e_gadman_client_change_func_set(ef->gmc, _cpufreq_face_cb_gmc_change, ef); + e_gadman_client_load(ef->gmc); + + _cpufreq_face_update_available(ef); + + evas_event_thaw(con->bg_evas); + + return ef; +} + +static void +_cpufreq_face_free(Cpufreq_Face *ef) +{ + e_object_unref(E_OBJECT(ef->con)); + e_object_del(E_OBJECT(ef->gmc)); + e_object_del(E_OBJECT(ef->menu)); + evas_object_del(ef->freq_object); + evas_object_del(ef->event_object); + + free(ef->conf); + free(ef); + cpufreq_count--; +} + +static void +_cpufreq_face_menu_new(Cpufreq_Face *face) +{ + E_Menu *mn; + E_Menu_Item *mi; + + mn = e_menu_new(); + face->menu = mn; + + /* Enabled */ + /*mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Enabled"); + e_menu_item_check_set(mi, 1); + if (face->conf->enabled) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _cpufreq_face_cb_menu_enabled, face); + */ + + /* Edit */ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Edit Mode"); + e_menu_item_callback_set(mi, _cpufreq_face_cb_menu_edit, face); +} + +static void +_cpufreq_face_enable(Cpufreq_Face *face) +{ + face->conf->enabled = 1; + evas_object_show(face->freq_object); + evas_object_show(face->event_object); + e_config_save_queue(); +} + +static void +_cpufreq_face_disable(Cpufreq_Face *face) +{ + face->conf->enabled = 0; + evas_object_hide(face->freq_object); + evas_object_hide(face->event_object); + e_config_save_queue(); +} + +static void +_cpufreq_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change) +{ + Cpufreq_Face *ef; + Evas_Coord x, y, w, h; + + ef = data; + switch (change) + { + case E_GADMAN_CHANGE_MOVE_RESIZE: + e_gadman_client_geometry_get(ef->gmc, &x, &y, &w, &h); + evas_object_move(ef->freq_object, x, y); + evas_object_move(ef->event_object, x, y); + evas_object_resize(ef->freq_object, w, h); + evas_object_resize(ef->event_object, w, h); + break; + case E_GADMAN_CHANGE_RAISE: + evas_object_raise(ef->freq_object); + evas_object_raise(ef->event_object); + break; + } +} + +static void +_cpufreq_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq_Face *face; + unsigned char enabled; + + face = data; + enabled = e_menu_item_toggle_get(mi); + if ((face->conf->enabled) && (!enabled)) + { + _cpufreq_face_disable(face); + } + else if ((!face->conf->enabled) && (enabled)) + { + _cpufreq_face_enable(face); + } +} + +static void +_cpufreq_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Cpufreq_Face *face; + + face = data; + e_gadman_mode_set(face->gmc->gadman, E_GADMAN_MODE_EDIT); +} + +static void +_cpufreq_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev; + Cpufreq_Face *ef; + + ev = event_info; + ef = data; + if (ev->button == 3) + { + e_menu_activate_mouse(ef->menu, e_zone_current_get(ef->con), + ev->output.x, ev->output.y, 1, 1, + E_MENU_POP_DIRECTION_DOWN); + e_util_container_fake_mouse_up_all_later(ef->con); + } +} + +static void +_cpufreq_face_update_available(Cpufreq_Face *face) +{ + Edje_Message_Int_Set *frequency_msg; + Edje_Message_String_Set *governor_msg; + Evas_List *l; + int i; + int count; + + count = evas_list_count(face->owner->status->frequencies); + frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * sizeof(int)); + frequency_msg->count = count; + for (l = face->owner->status->frequencies, i = 0; l; l = l->next, i++) + { + frequency_msg->val[i] = (int) l->data; + } + edje_object_message_send(face->freq_object, EDJE_MESSAGE_INT_SET, 1, frequency_msg); + free(frequency_msg); + + count = evas_list_count(face->owner->status->governors); + governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * sizeof(char *)); + governor_msg->count = count; + for (l = face->owner->status->governors, i = 0; l; l = l->next, i++) + governor_msg->str[i] = (char *) l->data; + edje_object_message_send(face->freq_object, EDJE_MESSAGE_STRING_SET, 2, governor_msg); + free(governor_msg); +} + +static void +_cpufreq_face_update_current(Cpufreq_Face *face) +{ + Edje_Message_Int_Set *frequency_msg; + Edje_Message_String governor_msg; + + frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + sizeof(int)); + frequency_msg->count = 2; + frequency_msg->val[0] = face->owner->status->cur_frequency; + frequency_msg->val[1] = face->owner->status->can_set_frequency; + edje_object_message_send(face->freq_object, EDJE_MESSAGE_INT_SET, 3, frequency_msg); + free(frequency_msg); + + governor_msg.str = face->owner->status->cur_governor; + edje_object_message_send(face->freq_object, EDJE_MESSAGE_STRING, 4, &governor_msg); + + if (face->owner->menu_frequency) + { + Evas_List *l; + + for (l = face->owner->menu_frequency->items; l; l = l->next) + { + E_Menu_Item *mi; + int freq; + + mi = l->data; + freq = (int)e_object_data_get(E_OBJECT(mi)); + if (freq == face->owner->status->cur_frequency) + { + e_menu_item_toggle_set(mi, 1); + break; + } + } + } + if (face->owner->menu_governor) + { + Evas_List *l; + + for (l = face->owner->menu_governor->items; l; l = l->next) + { + E_Menu_Item *mi; + char *gov; + + mi = l->data; + gov = (char *)e_object_data_get(E_OBJECT(mi)); + if ((face->owner->status->can_set_frequency) && + (!strcmp(gov, "userspace"))) + { + e_menu_item_toggle_set(mi, 1); + break; + } + else if ((!face->owner->status->can_set_frequency) && + (!strcmp(gov, "ondemand"))) + { + e_menu_item_toggle_set(mi, 1); + break; + } + } + } +} + +static void +_cpufreq_face_cb_set_frequency(void *data, Evas_Object *obj, const char *emission, const char *src) +{ + int pid; + Cpufreq *e; + Evas_List *l; + int next_frequency = 0; + char buf[128]; + + e = data; + + for (l = e->status->frequencies; l; l = l->next) + { + if (e->status->cur_frequency == (int) l->data) + { + if (!strcmp(emission, "increase_frequency")) + { + if (l->next) + next_frequency = (int) l->next->data; + break; + } + else if (!strcmp(emission, "decrease_frequency")) + { + if (l->prev) + next_frequency = (int) l->prev->data; + break; + } + else + break; + } + } + + if (next_frequency != 0) + _cpufreq_set_frequency(e, next_frequency); +} + +static void +_cpufreq_face_cb_set_governor(void *data, Evas_Object *obj, const char *emission, const char *src) +{ + int pid; + Cpufreq *e; + Evas_List *l; + char *next_governor = NULL; + + e = data; + + for (l = e->status->governors; l; l = l->next) + { + if (!strcmp(l->data, e->status->cur_governor)) + { + if (l->next) + next_governor = l->next->data; + else + next_governor = e->status->governors->data; + break; + } + } + + if (next_governor != NULL) + _cpufreq_set_governor(e, next_governor); +} diff --git a/src/modules/cpufreq/e_mod_main.h b/src/modules/cpufreq/e_mod_main.h new file mode 100644 index 000000000..667df298c --- /dev/null +++ b/src/modules/cpufreq/e_mod_main.h @@ -0,0 +1,69 @@ +#ifndef E_MOD_MAIN_H +#define E_MOD_MAIN_H + +#include +#include + +typedef struct _Status Status; +typedef struct _Config Config; +typedef struct _Config_Face Config_Face; +typedef struct _Cpufreq Cpufreq; +typedef struct _Cpufreq_Face Cpufreq_Face; + +struct _Status +{ + Evas_List *frequencies; + Evas_List *governors; + int cur_frequency; + int can_set_frequency; + char *cur_governor; +}; + +struct _Config +{ + double poll_time; + Evas_List *faces; +}; + +struct _Config_Face +{ + unsigned char enabled; +}; + +struct _Cpufreq +{ + E_Menu *config_menu; + E_Menu *config_menu_poll; + E_Menu *menu_governor; + E_Menu *menu_frequency; + Evas_List *faces; + + Config *conf; + Status *status; + + char *set_exe_path; + + Ecore_Timer *frequency_check_timer; +}; + +struct _Cpufreq_Face +{ + E_Container *con; + + E_Menu *menu; + Config_Face *conf; + Cpufreq *owner; + + Evas_Object *freq_object; + Evas_Object *event_object; + + E_Gadman_Client *gmc; +}; + +EAPI void *init (E_Module *module); +EAPI int shutdown (E_Module *module); +EAPI int save (E_Module *module); +EAPI int info (E_Module *module); +EAPI int about (E_Module *module); + +#endif diff --git a/src/modules/cpufreq/freqset.c b/src/modules/cpufreq/freqset.c new file mode 100644 index 000000000..da07e1924 --- /dev/null +++ b/src/modules/cpufreq/freqset.c @@ -0,0 +1,57 @@ +#include + +int +main(int argc, char *argv[]) +{ + int new_frequency = 0; + char *new_governor = NULL; + char buf[4096]; + FILE *f; + + if (argc != 3) + { + fprintf(stderr, "Invalid command. Syntax:\n"); + fprintf(stderr, "\tfreqset \n"); + return 1; + } + + if (seteuid(0)) + { + fprintf(stderr, "Unable to assume root privileges\n"); + } + + if (!strcmp(argv[1], "frequency")) + { + new_frequency = atoi(argv[2]); + + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "w"); + if (!f) + { + fprintf(stderr, "Unable to open frequency interface for writing.\n"); + return 1; + } + fprintf(f, "%d\n", new_frequency); + fclose(f); + + return 0; + } + else if (!strcmp(argv[1], "governor")) + { + f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "w"); + if (!f) + { + fprintf(stderr, "Unable to open governor interface for writing.\n"); + return 1; + } + fprintf(f, "%s\n", argv[2]); + fclose(f); + + return 0; + } + else + { + fprintf(stderr, "Unknown command.\n"); + return 1; + } + seteuid(-1); +} diff --git a/src/modules/cpufreq/module_icon.png b/src/modules/cpufreq/module_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3173ee0de782e4fc592aa7d55f2d62d386ac106d GIT binary patch literal 795 zcmV+$1LXXPP)WFU8GbZ8({Xk{QrNlj4iWF>9@00MtWL_t(Y$L*BOOH@%9 z#(($T`MP(;8ii&?OeP2u(`w;JS}vl3Y*7+TQbNnN(W?G{7SXCUL5p@li;}z4+R3bP&k}z@wtk~Ss(-Y63e9|@ze@)`#y1@7h;orY_G zrPTUw2{HY`;n2E-=x>*0OY(RORJDw%mhgEC_W zh=u!bIuGCfWI(0L-j|@qAU6yr z>k1!$-ZzknfqhAmuGSUa0X?rFy$tpRxV^<+_D^y=fKT5*M7IGBAYFtTeGuIa_>Q(u ZKLMqQ1D`n}*F69L002ovPDHLkV1f)lTVntK literal 0 HcmV?d00001 diff --git a/src/modules/temperature/e_mod_main.c b/src/modules/temperature/e_mod_main.c index 2ae0b980c..6589ed34f 100644 --- a/src/modules/temperature/e_mod_main.c +++ b/src/modules/temperature/e_mod_main.c @@ -660,7 +660,7 @@ _temperature_face_new(E_Container *con) e_gadman_client_min_size_set(ef->gmc, 4, 4); e_gadman_client_max_size_set(ef->gmc, 128, 128); e_gadman_client_auto_size_set(ef->gmc, 40, 40); - e_gadman_client_align_set(ef->gmc, 0.9, 1.0); + e_gadman_client_align_set(ef->gmc, 1.0, 1.0); e_gadman_client_resize(ef->gmc, 40, 40); e_gadman_client_change_func_set(ef->gmc, _temperature_face_cb_gmc_change, ef); e_gadman_client_load(ef->gmc);