Enlightenment CVS committal
Author : raster
Project : e17
Module : apps/e
Dir : e17/apps/e/src/modules/cpufreq
Modified Files:
e_mod_main.c e_mod_main.h
Log Message:
e packages build again - also not much point having an enlightenment-data as
it's built as an arch specific package and it is intrinsically required by e
and cannot work without it nor is the data shared betwene e and other apps
unless e itself is installed too
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/cpufreq/e_mod_main.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- e_mod_main.c 12 Mar 2006 16:12:57 -0000 1.34
+++ e_mod_main.c 20 Apr 2006 11:30:24 -0000 1.35
@@ -1,296 +1,302 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
-#include <Ecore.h>
-#include <errno.h>
-#include <ctype.h>
+#include "e.h"
#include "e_mod_main.h"
-#include "config.h"
#ifdef __FreeBSD__
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
-/* FIXME: check permissions (can execute) setfreq before trying
- * FIXME: display throttling state ???
- * FIXME: handle multiple cpu's (yes it's likely rare - but possible)
- */
-
-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_restore_governor(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_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);
+/***************************************************************************/
+/**/
+/* gadcon requirements */
+static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id, char
*style);
+static void _gc_shutdown(E_Gadcon_Client *gcc);
+static void _gc_orient(E_Gadcon_Client *gcc);
+/* and actually define the gadcon class that this module provides (just 1) */
+static const E_Gadcon_Client_Class _gadcon_class =
+{
+ GADCON_CLIENT_CLASS_VERSION,
+ "cpufreq",
+ {
+ _gc_init, _gc_shutdown, _gc_orient
+ }
+};
+/**/
+/***************************************************************************/
-static E_Config_DD *conf_edd;
-static E_Config_DD *conf_face_edd;
+/***************************************************************************/
+/**/
+/* actual module specifics */
-static int cpufreq_count;
+typedef struct _Instance Instance;
-/* public module routines */
-EAPI E_Module_Api e_modapi =
+struct _Instance
{
- E_MODULE_API_VERSION,
- "Cpufreq"
+ E_Gadcon_Client *gcc;
+ Evas_Object *o_cpu;
};
-EAPI void *
-e_modapi_init(E_Module *module)
-{
- Cpufreq *freq;
-
- freq = _cpufreq_new(module);
- module->config_menu = freq->config_menu;
- return freq;
-}
-
-EAPI int
-e_modapi_shutdown(E_Module *module)
-{
- Cpufreq *cpufreq;
+static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void
*event_info);
+static void _menu_cb_post(void *data, E_Menu *m);
+static void _cpufreq_set_governor(const char *governor);
+static void _cpufreq_set_frequency(int frequency);
+static int _cpufreq_cb_check(void *data);
+static Status *_cpufreq_status_new();
+static void _cpufreq_status_free(Status *s);
+static int _cpufreq_status_check_available(Status *s);
+static int _cpufreq_status_check_current(Status *s);
+static int _cpufreq_cb_sort(void *item1, void *item2);
+static void _cpufreq_face_update_available(Instance *inst);
+static void _cpufreq_face_update_current(Instance *inst);
+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 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_restore_governor(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);
- if (module->config_menu)
- module->config_menu = NULL;
+static E_Config_DD *conf_edd = NULL;
- cpufreq = module->data;
- if (cpufreq)
- _cpufreq_free(cpufreq);
-
- return 1;
-}
+Config *cpufreq_config = NULL;
-EAPI int
-e_modapi_save(E_Module *module)
+static E_Gadcon_Client *
+_gc_init(E_Gadcon *gc, char *name, char *id, char *style)
{
- Cpufreq *e;
-
- e = module->data;
- e_config_domain_save("module.cpufreq", conf_edd, e->conf);
- return 1;
+ Evas_Object *o;
+ E_Gadcon_Client *gcc;
+ Instance *inst;
+
+ inst = E_NEW(Instance, 1);
+
+ o = edje_object_add(gc->evas);
+ e_theme_edje_object_set(o, "base/theme/modules/cpufreq",
+ "modules/cpufreq/main");
+ edje_object_signal_callback_add(o, "next_governor", "governor",
_cpufreq_face_cb_set_governor, NULL);
+ edje_object_signal_callback_add(o, "increase_frequency", "frequency",
_cpufreq_face_cb_set_frequency, NULL);
+ edje_object_signal_callback_add(o, "decrease_frequency", "frequency",
_cpufreq_face_cb_set_frequency, NULL);
+
+ gcc = e_gadcon_client_new(gc, name, id, style, o);
+ gcc->data = inst;
+
+ inst->gcc = gcc;
+ inst->o_cpu = o;
+
+ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
+ _button_cb_mouse_down, inst);
+ cpufreq_config->instances = evas_list_append(cpufreq_config->instances,
inst);
+ if (cpufreq_config->status) _cpufreq_status_free(cpufreq_config->status);
+ cpufreq_config->status = _cpufreq_status_new();
+ _cpufreq_cb_check(NULL);
+ _cpufreq_face_update_available(inst);
+ return gcc;
}
-EAPI int
-e_modapi_info(E_Module *module)
+static void
+_gc_shutdown(E_Gadcon_Client *gcc)
{
- char buf[4096];
+ Instance *inst;
- snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(module));
- module->icon_file = strdup(buf);
- return 1;
+ inst = gcc->data;
+ cpufreq_config->instances = evas_list_remove(cpufreq_config->instances,
inst);
+ evas_object_del(inst->o_cpu);
+ free(inst);
}
-EAPI int
-e_modapi_about(E_Module *module)
+static void
+_gc_orient(E_Gadcon_Client *gcc)
{
- e_module_dialog_show(_("CPU Frequency Controller Module"),
- _("A simple module to control the frequency of the
system CPU.<br>"
- "This is especially useful to save power on
laptops."));
- return 1;
+ Instance *inst;
+
+ inst = gcc->data;
+ e_gadcon_client_aspect_set(gcc, 16, 16);
+ e_gadcon_client_min_size_set(gcc, 16, 16);
}
+/**/
+/***************************************************************************/
-static Cpufreq *
-_cpufreq_new(E_Module *module)
+/***************************************************************************/
+/**/
+static void
+_button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
- Cpufreq *e;
- Evas_List *managers, *l, *l2, *cl;
- E_Menu_Item *mi;
- char buf[4096];
+ Instance *inst;
+ Evas_Event_Mouse_Down *ev;
- cpufreq_count = 0;
- e = E_NEW(Cpufreq, 1);
- if (!e) return NULL;
+ inst = data;
+ ev = event_info;
+ if ((ev->button == 3) && (!cpufreq_config->menu))
+ {
+ E_Menu *mn;
+ E_Menu_Item *mi;
+ int cx, cy, cw, ch;
+ Evas_List *l;
+ char buf[256];
+
+ mn = e_menu_new();
+ cpufreq_config->menu_poll = mn;
+
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Fast (0.5 sec)"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ if (cpufreq_config->poll_time <= 0.5) e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_fast, 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, UCHAR);
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Medium (1 sec)"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ if (cpufreq_config->poll_time > 0.5) e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_medium, NULL);
- 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_CONFIG_VAL(D, T, restore_governor, INT);
- E_CONFIG_VAL(D, T, governor, STR);
-
- 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->conf->restore_governor = 0;
- e->conf->governor = NULL;
- }
- E_CONFIG_LIMIT(e->conf->poll_time, 0.5, 60.0);
-#ifdef __FreeBSD__
- /* does e_module_dir_get(module) work correctly in linux??? - yes it
does... what's wrong in bsd? */
- snprintf(buf, sizeof(buf), "%s/%s/cpufreq/freqset",
e_module_dir_get(module), MODULE_ARCH);
-#else
- snprintf(buf, sizeof(buf), "%s/%s/freqset", e_module_dir_get(module),
MODULE_ARCH);
-#endif
- 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();
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Normal (2 sec)"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ if (cpufreq_config->poll_time >= 2.0) e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_normal, NULL);
- _cpufreq_status_check_available(e->status);
- if ((e->conf->restore_governor) && (e->conf->governor))
- {
- /* If the governor is available, restore it */
- for (l = e->status->governors; l; l = l->next)
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Slow (5 sec)"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ if (cpufreq_config->poll_time >= 5.0) e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_slow, NULL);
+
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Very Slow (30 sec)"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ if (cpufreq_config->poll_time >= 30.0) e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_very_slow, NULL);
+
+ if (cpufreq_config->status->governors)
{
- if (!strcmp(l->data, e->conf->governor))
- _cpufreq_set_governor(e, e->conf->governor);
+ mn = e_menu_new();
+ cpufreq_config->menu_governor = mn;
+
+ for (l = cpufreq_config->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"));
+ else if (!strcmp(l->data, "conservative"))
+ e_menu_item_label_set(mi, _("Lower Power Automatic"));
+ else if (!strcmp(l->data, "powersave"))
+ e_menu_item_label_set(mi, _("Minimum Speed"));
+ else if (!strcmp(l->data, "performance"))
+ e_menu_item_label_set(mi, _("Maximum Speed"));
+ e_menu_item_radio_set(mi, 1);
+ e_menu_item_radio_group_set(mi, 1);
+ e_object_data_set(E_OBJECT(mi), l->data);
+ if (!strcmp(cpufreq_config->status->cur_governor, l->data))
+ e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_governor, NULL);
+ }
}
- }
- _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)
+ if ((cpufreq_config->status->frequencies) &&
+ (cpufreq_config->status->can_set_frequency))
+ {
+ mn = e_menu_new();
+ cpufreq_config->menu_frequency = mn;
+
+ for (l = cpufreq_config->status->frequencies; l; l = l->next)
{
- 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)
- {
- mi = e_menu_item_new(ef->menu);
- e_menu_item_label_set(mi, _("Restore Controller on
Startup"));
- e_menu_item_check_set(mi, 1);
- e_menu_item_toggle_set(mi, e->conf->restore_governor);
- e_menu_item_callback_set(mi,
_cpufreq_menu_restore_governor, e);
-
- /* 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);
- }
+ int frequency;
- 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);
+ 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) /
100000);
+ 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);
+ if (cpufreq_config->status->cur_frequency == frequency)
+ e_menu_item_toggle_set(mi, 1);
+ e_menu_item_callback_set(mi, _cpufreq_menu_frequency, NULL);
}
}
- }
+
+ mn = e_menu_new();
+ cpufreq_config->menu = mn;
+ e_menu_post_deactivate_callback_set(mn, _menu_cb_post, inst);
+
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Time Between Updates"));
+ e_menu_item_submenu_set(mi, cpufreq_config->menu_poll);
- _cpufreq_cb_check(e);
+ if (cpufreq_config->menu_governor)
+ {
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Restore CPU Power Policy"));
+ e_menu_item_check_set(mi, 1);
+ e_menu_item_toggle_set(mi, cpufreq_config->restore_governor);
+ e_menu_item_callback_set(mi, _cpufreq_menu_restore_governor, NULL);
+
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Set CPU Power Policy"));
+ e_menu_item_submenu_set(mi, cpufreq_config->menu_governor);
+ }
+
+ if (cpufreq_config->menu_frequency)
+ {
+ mi = e_menu_item_new(mn);
+ e_menu_item_label_set(mi, _("Set CPU Speed"));
+ e_menu_item_submenu_set(mi, cpufreq_config->menu_frequency);
+ }
+
+ e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0);
+
+ e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,
+ &cx, &cy, &cw, &ch);
+ e_menu_activate_mouse(mn,
+ e_util_zone_current_get(e_manager_current_get()),
+ cx + ev->output.x, cy + ev->output.y, 1, 1,
+ E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
+ evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button,
+ EVAS_BUTTON_NONE, ev->timestamp, NULL);
+ }
- return e;
}
static void
-_cpufreq_free(Cpufreq *e)
+_menu_cb_post(void *data, E_Menu *m)
{
- 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));
- if (e->menu_governor)
- e_object_del(E_OBJECT(e->menu_governor));
- if (e->menu_frequency)
- e_object_del(E_OBJECT(e->menu_frequency));
-
- ecore_timer_del(e->frequency_check_timer);
-
- _cpufreq_status_free(e->status);
-
- evas_list_free(e->conf->faces);
- free(e->set_exe_path);
- if (e->conf->governor) evas_stringshare_del(e->conf->governor);
- free(e->conf);
- free(e);
+ if (!cpufreq_config->menu) return;
+ e_object_del(E_OBJECT(cpufreq_config->menu));
+ cpufreq_config->menu = NULL;
+ if (cpufreq_config->menu_poll)
e_object_del(E_OBJECT(cpufreq_config->menu_poll));
+ cpufreq_config->menu_poll = NULL;
+ if (cpufreq_config->menu_governor)
e_object_del(E_OBJECT(cpufreq_config->menu_governor));
+ cpufreq_config->menu_governor = NULL;
+ if (cpufreq_config->menu_frequency)
e_object_del(E_OBJECT(cpufreq_config->menu_frequency));
+ cpufreq_config->menu_frequency = NULL;
}
static void
-_cpufreq_set_governor(Cpufreq *e, const char *governor)
+_cpufreq_set_governor(const char *governor)
{
- /* TODO: Use ecore_exe */
char buf[4096];
int ret;
snprintf(buf, sizeof(buf),
- "%s %s %s", e->set_exe_path, "governor", governor);
+ "%s %s %s", cpufreq_config->set_exe_path, "governor", governor);
ret = system(buf);
if (ret != 0)
{
@@ -300,8 +306,9 @@
if (!dia) return;
e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
e_dialog_icon_set(dia, "enlightenment/e", 64);
- e_dialog_text_set(dia, _("There was an error trying to set the cpu
frequency<br>"
- "governor via the module's setfreq utility."));
+ e_dialog_text_set(dia, _("There was an error trying to set the<br>"
+ "cpu frequency governor via the module's<br>"
+ "setfreq utility."));
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
e_win_centered_set(dia->win, 1);
e_dialog_show(dia);
@@ -309,7 +316,7 @@
}
static void
-_cpufreq_set_frequency(Cpufreq *e, int frequency)
+_cpufreq_set_frequency(int frequency)
{
char buf[4096];
int ret;
@@ -317,10 +324,7 @@
#ifdef __FreeBSD__
frequency /= 1000;
#endif
- snprintf(buf, sizeof(buf),
- "%s %s %i", e->set_exe_path, "frequency", frequency);
- ret = system(buf);
- if (ret != 0)
+ if (!cpufreq_config->status->can_set_frequency)
{
E_Dialog *dia;
@@ -328,274 +332,60 @@
if (!dia) return;
e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
e_dialog_icon_set(dia, "enlightenment/e", 64);
- e_dialog_text_set(dia, _("There was an error trying to set the cpu
frequency<br>"
- "setting via the module's setfreq utility."));
+ e_dialog_text_set(dia, _("Your kernel does not support setting the<br>"
+ "CPU frequency at all. You may be missing<br>"
+ "Kernel modules or features, or your CPU<br>"
+ "simply does not support this feature."));
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
e_win_centered_set(dia->win, 1);
e_dialog_show(dia);
+ return;
}
-}
-
-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_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi)
-{
- Cpufreq *e;
-
- e = data;
- e->conf->restore_governor = e_menu_item_toggle_get(mi);
- if ((!e->conf->governor) || strcmp(e->status->cur_governor,
e->conf->governor))
- {
- if (e->conf->governor) evas_stringshare_del(e->conf->governor);
- e->conf->governor = evas_stringshare_add(e->status->cur_governor);
- }
- e_config_save_queue();
-}
-
-static void
-_cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi)
-{
- Cpufreq *e;
- char *governor;
-
- e = data;
- governor = e_object_data_get(E_OBJECT(mi));
- if (governor)
- {
- _cpufreq_set_governor(e, governor);
- if (e->conf->governor) evas_stringshare_del(e->conf->governor);
- e->conf->governor = evas_stringshare_add(governor);
- }
- e_config_save_queue();
-}
-
-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"));
- else if (!strcmp(l->data, "conservative"))
- e_menu_item_label_set(mi, _("Lower Power Automatic"));
- else if (!strcmp(l->data, "powersave"))
- e_menu_item_label_set(mi, _("Minimum Speed"));
- else if (!strcmp(l->data, "performance"))
- e_menu_item_label_set(mi, _("Maximum Speed"));
- 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) / 100000);
- 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)
+ snprintf(buf, sizeof(buf),
+ "%s %s %i", cpufreq_config->set_exe_path, "frequency", frequency);
+ ret = system(buf);
+ if (ret != 0)
{
- mi = e_menu_item_new(mn);
- e_menu_item_label_set(mi, _("Restore Governor on Startup"));
- e_menu_item_check_set(mi, 1);
- e_menu_item_toggle_set(mi, e->conf->restore_governor);
- e_menu_item_callback_set(mi, _cpufreq_menu_restore_governor, e);
+ E_Dialog *dia;
- 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);
+ dia = e_dialog_new(e_container_current_get(e_manager_current_get()));
+ if (!dia) return;
+ e_dialog_title_set(dia, "Enlightenment Cpufreq Module");
+ e_dialog_icon_set(dia, "enlightenment/e", 64);
+ e_dialog_text_set(dia, _("There was an error trying to set the<br>"
+ "cpu frequency setting via the module's<br>"
+ "setfreq utility."));
+ e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
+ e_win_centered_set(dia->win, 1);
+ e_dialog_show(dia);
}
-
- e->config_menu = mn;
}
static int
_cpufreq_cb_check(void *data)
{
- Cpufreq *e;
- Cpufreq_Face *face;
+ Instance *inst;
Evas_List *l;
int active;
- e = data;
- active = e->status->active;
- if (_cpufreq_status_check_current(e->status))
+ active = cpufreq_config->status->active;
+ if (_cpufreq_status_check_current(cpufreq_config->status))
{
- for (l = e->faces; l; l = l->next)
+ for (l = cpufreq_config->instances; l; l = l->next)
{
- face = l->data;
- _cpufreq_face_update_current(face);
+ inst = l->data;
+ _cpufreq_face_update_current(inst);
}
}
- if (active != e->status->active)
+ if (active != cpufreq_config->status->active)
{
- for (l = e->faces; l; l = l->next)
+ for (l = cpufreq_config->instances; l; l = l->next)
{
- face = l->data;
- if (e->status->active == 0)
- edje_object_signal_emit(face->freq_object, "passive", "");
- else if (e->status->active == 1)
- edje_object_signal_emit(face->freq_object, "active", "");
+ inst = l->data;
+ if (cpufreq_config->status->active == 0)
+ edje_object_signal_emit(inst->o_cpu, "passive", "");
+ else if (cpufreq_config->status->active == 1)
+ edje_object_signal_emit(inst->o_cpu, "active", "");
}
}
@@ -605,38 +395,27 @@
static Status *
_cpufreq_status_new()
{
- Status *e;
-
- e = E_NEW(Status, 1);
- if (!e) return NULL;
+ Status *s;
- e->frequencies = NULL;
- e->governors = NULL;
- e->cur_frequency = 0;
- e->can_set_frequency = 0;
- e->cur_governor = NULL;
- e->active = -1;
-
- return e;
+ s = E_NEW(Status, 1);
+ if (!s) return NULL;
+ s->active = -1;
+ return s;
}
static void
-_cpufreq_status_free(Status *e)
+_cpufreq_status_free(Status *s)
{
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 (s->frequencies) evas_list_free(s->frequencies);
+ if (s->governors)
+ {
+ for (l = s->governors; l; l = l->next) free(l->data);
+ evas_list_free(s->governors);
}
- if (e->cur_governor)
- free(e->cur_governor);
-
- free(e);
+ if (s->cur_governor) free(s->cur_governor);
+ free(s);
}
static int
@@ -644,18 +423,15 @@
{
int a, b;
- a = (int) item1;
- b = (int) item2;
- if (a < b)
- return -1;
- else if (a > b)
- return 1;
- else
- return 0;
+ a = (int)item1;
+ b = (int)item2;
+ if (a < b) return -1;
+ else if (a > b) return 1;
+ return 0;
}
static int
-_cpufreq_status_check_available(Status *e)
+_cpufreq_status_check_available(Status *s)
{
char buf[4096];
Evas_List *l;
@@ -669,13 +445,13 @@
if (sysctlbyname("dev.cpu.0.freq_levels", buf, &len, NULL, 0) == 0)
{
/* sysctl returns 0 on success */
- if (e->frequencies)
+ if (s->frequencies)
{
- evas_list_free(e->frequencies);
- e->frequencies = NULL;
+ evas_list_free(s->frequencies);
+ s->frequencies = NULL;
}
- /* parse freqs and store the frequencies in e->frequencies */
+ /* parse freqs and store the frequencies in s->frequencies */
pos = buf;
while (pos)
{
@@ -685,7 +461,7 @@
*q = '\0';
freq = atoi(pos);
freq *= 1000;
- e->frequencies = evas_list_append(e->frequencies, (void *)freq);
+ s->frequencies = evas_list_append(s->frequencies, (void *)freq);
pos = q + 1;
pos = strchr(pos, ' ');
@@ -694,11 +470,11 @@
/* sort is not necessary because freq_levels is already sorted */
/* freebsd doesn't have governors */
- if (e->governors)
+ if (s->governors)
{
- for (l = e->governors; l; l = l->next) free(l->data);
- evas_list_free(e->governors);
- e->governors = NULL;
+ for (l = s->governors; l; l = l->next) free(l->data);
+ evas_list_free(s->governors);
+ s->governors = NULL;
}
#else
FILE *f;
@@ -708,10 +484,10 @@
{
char *freq;
- if (e->frequencies)
+ if (s->frequencies)
{
- evas_list_free(e->frequencies);
- e->frequencies = NULL;
+ evas_list_free(s->frequencies);
+ s->frequencies = NULL;
}
fgets(buf, sizeof(buf), f);
@@ -723,15 +499,15 @@
{
if (atoi(freq) != 0)
{
- e->frequencies = evas_list_append(e->frequencies,
+ s->frequencies = evas_list_append(s->frequencies,
(void *) atoi(freq));
}
freq = strtok(NULL, " ");
}
while (freq != NULL);
- // sort list
- e->frequencies = evas_list_sort(e->frequencies,
evas_list_count(e->frequencies),
+ s->frequencies = evas_list_sort(s->frequencies,
+ evas_list_count(s->frequencies),
_cpufreq_cb_sort);
}
@@ -740,12 +516,12 @@
{
char *gov;
- if (e->governors)
+ if (s->governors)
{
- for (l = e->governors; l; l = l->next)
+ for (l = s->governors; l; l = l->next)
free(l->data);
- evas_list_free(e->governors);
- e->governors = NULL;
+ evas_list_free(s->governors);
+ s->governors = NULL;
}
fgets(buf, sizeof(buf), f);
@@ -757,19 +533,13 @@
{
while ((*gov) && (isspace(*gov))) gov++;
if (strlen(gov) != 0)
- {
-// if ((!strcmp(gov, "ondemand")) ||
-// (!strcmp(gov, "userspace")) ||
-// (!strcmp(gov, "powersave")) ||
-// (!strcmp(gov, "performance"))
-// )
- e->governors = evas_list_append(e->governors, strdup(gov));
- }
+ s->governors = evas_list_append(s->governors, strdup(gov));
gov = strtok(NULL, " ");
}
while (gov != NULL);
- e->governors = evas_list_sort(e->governors,
evas_list_count(e->governors),
+ s->governors = evas_list_sort(s->governors,
+ evas_list_count(s->governors),
(int (*)(void *, void *))strcmp);
}
#endif
@@ -777,7 +547,7 @@
}
static int
-_cpufreq_status_check_current(Status *e)
+_cpufreq_status_check_current(Status *s)
{
char buf[4096];
int i;
@@ -787,21 +557,21 @@
#ifdef __FreeBSD__
int len = 4;
- e->active = 0;
+ s->active = 0;
/* frequency is stored in dev.cpu.0.freq */
if (sysctlbyname("dev.cpu.0.freq", &frequency, &len, NULL, 0) == 0)
{
frequency *= 1000;
- if (frequency != e->cur_frequency) ret = 1;
- e->cur_frequency = frequency;
- e->active = 1;
+ if (frequency != s->cur_frequency) ret = 1;
+ s->cur_frequency = frequency;
+ s->active = 1;
}
/* hardcoded for testing */
- e->can_set_frequency = 1;
- e->cur_governor = NULL;
+ s->can_set_frequency = 1;
+ s->cur_governor = NULL;
#else
- e->active = 0;
+ s->active = 0;
f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
if (f)
@@ -811,21 +581,21 @@
fclose(f);
frequency = atoi(buf);
- if (frequency != e->cur_frequency)
+ if (frequency != s->cur_frequency)
ret = 1;
- e->cur_frequency = frequency;
- e->active = 1;
+ s->cur_frequency = frequency;
+ s->active = 1;
}
f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r");
if (f)
{
- e->can_set_frequency = 1;
+ s->can_set_frequency = 1;
fclose(f);
}
else
{
- e->can_set_frequency = 0;
+ s->can_set_frequency = 0;
}
f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "r");
@@ -835,18 +605,18 @@
buf[sizeof(buf) - 1] = 0;
fclose(f);
- if ((e->cur_governor == NULL) || (strcmp(buf, e->cur_governor)))
+ if ((s->cur_governor == NULL) || (strcmp(buf, s->cur_governor)))
{
ret = 1;
- if (e->cur_governor)
- free(e->cur_governor);
- e->cur_governor = strdup(buf);
+ if (s->cur_governor)
+ free(s->cur_governor);
+ s->cur_governor = strdup(buf);
- for (i = strlen(e->cur_governor) - 1; i >= 0; i--)
+ for (i = strlen(s->cur_governor) - 1; i >= 0; i--)
{
- if (isspace(e->cur_governor[i]))
- e->cur_governor[i] = 0;
+ if (isspace(s->cur_governor[i]))
+ s->cur_governor[i] = 0;
else
break;
}
@@ -856,306 +626,291 @@
return ret;
}
-static Cpufreq_Face *
-_cpufreq_face_new(E_Container *con, Cpufreq *owner)
+static void
+_cpufreq_face_update_available(Instance *inst)
{
- Evas_Object *o;
- Cpufreq_Face *ef;
- E_Gadman_Policy policy;
-
- ef = E_NEW(Cpufreq_Face, 1);
- if (!ef) return NULL;
-
- ef->con = con;
- e_object_ref(E_OBJECT(con));
- ef->owner = owner;
+ Edje_Message_Int_Set *frequency_msg;
+ Edje_Message_String_Set *governor_msg;
+ Evas_List *l;
+ int i;
+ int count;
- evas_event_freeze(con->bg_evas);
+ count = evas_list_count(cpufreq_config->status->frequencies);
+ frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) *
sizeof(int));
+ frequency_msg->count = count;
+ for (l = cpufreq_config->status->frequencies, i = 0; l; l = l->next, i++)
+ frequency_msg->val[i] = (int)l->data;
+ edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 1,
frequency_msg);
+ free(frequency_msg);
- o = edje_object_add(con->bg_evas);
- ef->freq_object = o;
- e_theme_edje_object_set(o, "base/theme/modules/cpufreq",
- "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++);
-
- policy = E_GADMAN_POLICY_ANYWHERE |
- E_GADMAN_POLICY_HMOVE |
- E_GADMAN_POLICY_VMOVE |
- E_GADMAN_POLICY_HSIZE |
- E_GADMAN_POLICY_VSIZE;
-
- e_gadman_client_policy_set(ef->gmc, policy);
- 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);
+ count = evas_list_count(cpufreq_config->status->governors);
+ governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) *
sizeof(char *));
+ governor_msg->count = count;
+ for (l = cpufreq_config->status->governors, i = 0; l; l = l->next, i++)
+ governor_msg->str[i] = (char *)l->data;
+ edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING_SET, 2,
governor_msg);
+ free(governor_msg);
+}
- _cpufreq_face_update_available(ef);
+static void
+_cpufreq_face_update_current(Instance *inst)
+{
+ Edje_Message_Int_Set *frequency_msg;
+ Edje_Message_String governor_msg;
- evas_event_thaw(con->bg_evas);
+ frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + sizeof(int));
+ frequency_msg->count = 2;
+ frequency_msg->val[0] = cpufreq_config->status->cur_frequency;
+ frequency_msg->val[1] = cpufreq_config->status->can_set_frequency;
+ edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 3,
+ frequency_msg);
+ free(frequency_msg);
- return ef;
+ /* BSD crashes here without the if-condition
+ * since it has no governors (yet) */
+ if (cpufreq_config->status->cur_governor != NULL)
+ {
+ governor_msg.str = cpufreq_config->status->cur_governor;
+ edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING, 4,
+ &governor_msg);
+ }
}
static void
-_cpufreq_face_free(Cpufreq_Face *ef)
+_cpufreq_face_cb_set_frequency(void *data, Evas_Object *obj, const char
*emission, const char *src)
{
- 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--;
+ Evas_List *l;
+ int next_frequency = 0;
+
+ for (l = cpufreq_config->status->frequencies; l; l = l->next)
+ {
+ if (cpufreq_config->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(next_frequency);
}
static void
-_cpufreq_face_menu_new(Cpufreq_Face *face)
+_cpufreq_face_cb_set_governor(void *data, Evas_Object *obj, const char
*emission, const char *src)
{
- E_Menu *mn;
- E_Menu_Item *mi;
+ Evas_List *l;
+ char *next_governor = NULL;
- mn = e_menu_new();
- face->menu = mn;
-
- /* 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);
+ for (l = cpufreq_config->status->governors; l; l = l->next)
+ {
+ if (!strcmp(l->data, cpufreq_config->status->cur_governor))
+ {
+ if (l->next)
+ next_governor = l->next->data;
+ else
+ next_governor = cpufreq_config->status->governors->data;
+ break;
+ }
+ }
+ if (next_governor != NULL) _cpufreq_set_governor(next_governor);
}
static void
-_cpufreq_face_enable(Cpufreq_Face *face)
+_cpufreq_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi)
{
- face->conf->enabled = 1;
- evas_object_show(face->freq_object);
- evas_object_show(face->event_object);
+ cpufreq_config->poll_time = 0.5;
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
-_cpufreq_face_disable(Cpufreq_Face *face)
+_cpufreq_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi)
{
- face->conf->enabled = 0;
- evas_object_hide(face->freq_object);
- evas_object_hide(face->event_object);
+ cpufreq_config->poll_time = 1.0;
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
e_config_save_queue();
}
static void
-_cpufreq_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change
change)
+_cpufreq_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi)
{
- 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;
- case E_GADMAN_CHANGE_EDGE:
- case E_GADMAN_CHANGE_ZONE:
- break;
- }
+ cpufreq_config->poll_time = 2.0;
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ e_config_save_queue();
}
static void
-_cpufreq_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi)
+_cpufreq_menu_slow(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);
+ cpufreq_config->poll_time = 5.0;
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ e_config_save_queue();
}
static void
-_cpufreq_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void
*event_info)
+_cpufreq_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
- Evas_Event_Mouse_Down *ev;
- Cpufreq_Face *ef;
+ cpufreq_config->poll_time = 30.0;
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time, _cpufreq_cb_check, NULL);
+ e_config_save_queue();
+}
- ev = event_info;
- ef = data;
- if (ev->button == 3)
+static void
+_cpufreq_menu_restore_governor(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+ cpufreq_config->restore_governor = e_menu_item_toggle_get(mi);
+ if ((!cpufreq_config->governor) ||
+ (strcmp(cpufreq_config->status->cur_governor,
cpufreq_config->governor)))
{
- 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, ev->timestamp);
- e_util_container_fake_mouse_up_all_later(ef->con);
+ if (cpufreq_config->governor)
evas_stringshare_del(cpufreq_config->governor);
+ cpufreq_config->governor =
evas_stringshare_add(cpufreq_config->status->cur_governor);
}
+ e_config_save_queue();
}
static void
-_cpufreq_face_update_available(Cpufreq_Face *face)
+_cpufreq_menu_governor(void *data, E_Menu *m, E_Menu_Item *mi)
{
- Edje_Message_Int_Set *frequency_msg;
- Edje_Message_String_Set *governor_msg;
- Evas_List *l;
- int i;
- int count;
+ char *governor;
- 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++)
+ governor = e_object_data_get(E_OBJECT(mi));
+ if (governor)
{
- frequency_msg->val[i] = (int) l->data;
+ _cpufreq_set_governor(governor);
+ if (cpufreq_config->governor)
evas_stringshare_del(cpufreq_config->governor);
+ cpufreq_config->governor = evas_stringshare_add(governor);
}
- 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);
+ e_config_save_queue();
}
static void
-_cpufreq_face_update_current(Cpufreq_Face *face)
+_cpufreq_menu_frequency(void * data, E_Menu *m, E_Menu_Item *mi)
{
- 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);
-
- /* BSD crashes here without the if-condition
- * since it has no governors (yet) */
- if (face->owner->status->cur_governor != NULL)
- {
- 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)
+ int frequency;
+
+ frequency = (int)e_object_data_get(E_OBJECT(mi));
+ if (frequency > 0)
{
- 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 (!strcmp(face->owner->status->cur_governor, gov))
- {
- e_menu_item_toggle_set(mi, 1);
- break;
- }
- }
+ _cpufreq_set_frequency(frequency);
}
}
-static void
-_cpufreq_face_cb_set_frequency(void *data, Evas_Object *obj, const char
*emission, const char *src)
+/***************************************************************************/
+/**/
+/* module setup */
+EAPI E_Module_Api e_modapi =
{
- Cpufreq *e;
- Evas_List *l;
- int next_frequency = 0;
+ E_MODULE_API_VERSION,
+ "Cpufreq"
+};
- e = data;
+EAPI void *
+e_modapi_init(E_Module *module)
+{
+ char buf[4096];
+ Evas_List *l;
+
+ 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_VAL(D, T, restore_governor, INT);
+ E_CONFIG_VAL(D, T, governor, STR);
- for (l = e->status->frequencies; l; l = l->next)
+ cpufreq_config = e_config_domain_load("module.cpufreq", conf_edd);
+ if (!cpufreq_config)
{
- if (e->status->cur_frequency == (int) l->data)
+ cpufreq_config = E_NEW(Config, 1);
+ cpufreq_config->poll_time = 2.0;
+ cpufreq_config->restore_governor = 0;
+ cpufreq_config->governor = NULL;
+ }
+ E_CONFIG_LIMIT(cpufreq_config->poll_time, 0.5, 60.0);
+
+ snprintf(buf, sizeof(buf), "%s/%s/freqset",
+ e_module_dir_get(module), MODULE_ARCH);
+ cpufreq_config->set_exe_path = strdup(buf);
+ cpufreq_config->frequency_check_timer =
ecore_timer_add(cpufreq_config->poll_time,
+ _cpufreq_cb_check, NULL);
+ cpufreq_config->status = _cpufreq_status_new();
+
+ _cpufreq_status_check_available(cpufreq_config->status);
+ if ((cpufreq_config->restore_governor) && (cpufreq_config->governor))
+ {
+ /* If the governor is available, restore it */
+ for (l = cpufreq_config->status->governors; l; l = l->next)
{
- if (!strcmp(emission, "increase_frequency"))
+ if (!strcmp(l->data, cpufreq_config->governor))
{
- if (l->next)
- next_frequency = (int) l->next->data;
+ _cpufreq_set_governor(cpufreq_config->governor);
break;
}
- else if (!strcmp(emission, "decrease_frequency"))
- {
- if (l->prev)
- next_frequency = (int) l->prev->data;
- break;
- }
- else
- break;
}
}
+
+ e_gadcon_provider_register(&_gadcon_class);
+ return 1;
+}
- if (next_frequency != 0)
- _cpufreq_set_frequency(e, next_frequency);
+EAPI int
+e_modapi_shutdown(E_Module *module)
+{
+ e_gadcon_provider_unregister(&_gadcon_class);
+
+ if (cpufreq_config->frequency_check_timer)
+ ecore_timer_del(cpufreq_config->frequency_check_timer);
+ if (cpufreq_config->menu) e_object_del(E_OBJECT(cpufreq_config->menu));
+ if (cpufreq_config->menu_poll)
e_object_del(E_OBJECT(cpufreq_config->menu_poll));
+ if (cpufreq_config->menu_governor)
e_object_del(E_OBJECT(cpufreq_config->menu_governor));
+ if (cpufreq_config->menu_frequency)
e_object_del(E_OBJECT(cpufreq_config->menu_frequency));
+ if (cpufreq_config->status) _cpufreq_status_free(cpufreq_config->status);
+ if (cpufreq_config->governor)
+ evas_stringshare_del(cpufreq_config->governor);
+ free(cpufreq_config);
+ cpufreq_config = NULL;
+ E_CONFIG_DD_FREE(conf_edd);
+ return 1;
}
-static void
-_cpufreq_face_cb_set_governor(void *data, Evas_Object *obj, const char
*emission, const char *src)
+EAPI int
+e_modapi_save(E_Module *module)
{
- Cpufreq *e;
- Evas_List *l;
- char *next_governor = NULL;
+ e_config_domain_save("module.cpufreq", conf_edd, cpufreq_config);
+ return 1;
+}
- e = data;
+EAPI int
+e_modapi_info(E_Module *module)
+{
+ char buf[4096];
- 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;
- }
- }
+ snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(module));
+ module->icon_file = strdup(buf);
+ return 1;
+}
- if (next_governor != NULL)
- _cpufreq_set_governor(e, next_governor);
+EAPI int
+e_modapi_about(E_Module *module)
+{
+ e_module_dialog_show(_("CPU Frequency Controller Module"),
+ _("A simple module to control the frequency of the
system CPU.<br>"
+ "This is especially useful to save power on
laptops."));
+ return 1;
}
+/**/
+/***************************************************************************/
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/cpufreq/e_mod_main.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- e_mod_main.h 12 Mar 2006 16:12:57 -0000 1.9
+++ e_mod_main.h 20 Apr 2006 11:30:24 -0000 1.10
@@ -1,67 +1,34 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
-#include <e.h>
-#include <Evas.h>
-
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;
- unsigned char active;
+ Evas_List *frequencies;
+ Evas_List *governors;
+ int cur_frequency;
+ int can_set_frequency;
+ char *cur_governor;
+ unsigned char active;
};
struct _Config
{
- double poll_time;
- Evas_List *faces;
-
- int restore_governor;
- char *governor;
-};
-
-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;
-
+ /* saved * loaded config values */
+ double poll_time;
+ int restore_governor;
+ char *governor;
+ /* just config state */
+ Evas_List *instances;
E_Menu *menu;
- Config_Face *conf;
- Cpufreq *owner;
-
- Evas_Object *freq_object;
- Evas_Object *event_object;
-
- E_Gadman_Client *gmc;
+ E_Menu *menu_poll;
+ E_Menu *menu_governor;
+ E_Menu *menu_frequency;
+ Status *status;
+ char *set_exe_path;
+ Ecore_Timer *frequency_check_timer;
};
EAPI extern E_Module_Api e_modapi;
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs