From cd24662e9fc2b7318b22bffb16d84ab84eea5451 Mon Sep 17 00:00:00 2001 From: Stephen 'Okra' Houston Date: Fri, 6 Jan 2017 16:12:20 -0600 Subject: [PATCH] Enlightenment: Add the sysinfo gadget that includes battery, temp, frequency, cpu, mem, and net This is a gadget using the new api that has separate gadgets for battery, temperature, net status, cpu load, mem usage, cpu frequency, and one gadget called sysinfo that combines all of the above. --- src/modules/sysinfo/e-module-sysinfo.edj | Bin 0 -> 7340 bytes src/modules/sysinfo/mod.c | 181 +++++++++++++++++ src/modules/sysinfo/module.desktop.in | 7 + src/modules/sysinfo/sysinfo.c | 129 ++++++++++++ src/modules/sysinfo/sysinfo.h | 238 +++++++++++++++++++++++ 5 files changed, 555 insertions(+) create mode 100644 src/modules/sysinfo/e-module-sysinfo.edj create mode 100644 src/modules/sysinfo/mod.c create mode 100644 src/modules/sysinfo/module.desktop.in create mode 100644 src/modules/sysinfo/sysinfo.c create mode 100644 src/modules/sysinfo/sysinfo.h diff --git a/src/modules/sysinfo/e-module-sysinfo.edj b/src/modules/sysinfo/e-module-sysinfo.edj new file mode 100644 index 0000000000000000000000000000000000000000..b861ae1b16fb3f6f36b7d2ad85b148b3a3adf9d9 GIT binary patch literal 7340 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 = 0; + ci->esm = E_SYSINFO_MODULE_NONE; + + ci->batman.poll_interval = 512; + ci->batman.alert = 30; + ci->batman.alert_p = 10; + ci->batman.alert_timeout = 0; + ci->batman.suspend_below = 0; + ci->batman.force_mode = 0; + ci->batman.full = -2; + ci->batman.time_left = -2; + ci->batman.time_full = -2; + ci->batman.have_battery = -2; + ci->batman.have_power = -2; +#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ + ci->batman.fuzzy = 0; +#endif + ci->batman.desktop_notifications = 0; + ci->thermal.poll_interval = 128; + ci->thermal.low = 30; + ci->thermal.high = 80; + ci->thermal.sensor_type = SENSOR_TYPE_NONE; + ci->thermal.sensor_name = NULL; + ci->thermal.temp = -900; + ci->thermal.units = CELSIUS; + ci->cpuclock.poll_interval = 32; + ci->cpuclock.restore_governor = 0; + ci->cpuclock.auto_powersave = 1; + ci->cpuclock.powersave_governor = NULL; + ci->cpuclock.governor = NULL; + ci->cpuclock.pstate_min = 1; + ci->cpuclock.pstate_max = 101; + ci->cpumonitor.poll_interval = 32; + ci->cpumonitor.total = 0; + ci->cpumonitor.idle = 0; + ci->memusage.poll_interval = 32; + ci->netstatus.poll_interval = 32; + ci->netstatus.in = 0; + ci->netstatus.out = 0; + + E_CONFIG_LIMIT(ci->batman.poll_interval, 4, 4096); + E_CONFIG_LIMIT(ci->batman.alert, 0, 60); + E_CONFIG_LIMIT(ci->batman.alert_p, 0, 100); + E_CONFIG_LIMIT(ci->batman.alert_timeout, 0, 300); + E_CONFIG_LIMIT(ci->batman.suspend_below, 0, 50); + E_CONFIG_LIMIT(ci->batman.force_mode, 0, 2); + E_CONFIG_LIMIT(ci->batman.desktop_notifications, 0, 1); + E_CONFIG_LIMIT(ci->thermal.poll_interval, 1, 1024); + E_CONFIG_LIMIT(ci->thermal.low, 0, 100); + E_CONFIG_LIMIT(ci->thermal.high, 0, 220); + E_CONFIG_LIMIT(ci->thermal.units, CELSIUS, FAHRENHEIT); + E_CONFIG_LIMIT(ci->cpuclock.poll_interval, 1, 1024); + E_CONFIG_LIMIT(ci->cpumonitor.poll_interval, 1, 1024); + E_CONFIG_LIMIT(ci->memusage.poll_interval, 1, 1024); + E_CONFIG_LIMIT(ci->netstatus.poll_interval, 1, 1024); + + sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); + } + e_gadget_type_add("Batman", batman_create, NULL); + e_gadget_type_add("Thermal", thermal_create, NULL); + e_gadget_type_add("CpuClock", cpuclock_create, NULL); + e_gadget_type_add("CpuMonitor", cpumonitor_create, NULL); + e_gadget_type_add("MemUsage", memusage_create, NULL); + e_gadget_type_add("NetStatus", netstatus_create, NULL); + e_gadget_type_add("SysInfo", sysinfo_create, NULL); +} + +EINTERN void +sysinfo_shutdown(void) +{ + if (sysinfo_config) + { + Config_Item *ci; + EINA_LIST_FREE(sysinfo_config->items, ci) + { + free(ci); + } + E_FREE(sysinfo_config); + } + E_CONFIG_DD_FREE(conf_edd); + E_CONFIG_DD_FREE(conf_item_edd); + + e_gadget_type_del("Batman"); + e_gadget_type_del("Thermal"); + e_gadget_type_del("CpuClock"); + e_gadget_type_del("CpuMonitor"); + e_gadget_type_del("MemUsage"); + e_gadget_type_del("NetStatus"); + e_gadget_type_del("SysInfo"); +} + +E_API E_Module_Api e_modapi = +{ + E_MODULE_API_VERSION, + "Sysinfo" +}; + +E_API void * +e_modapi_init(E_Module *m) +{ + sysinfo_init(); + + module = m; + sysinfo_config->module = m; + return m; +} + +E_API int +e_modapi_shutdown(E_Module *m EINA_UNUSED) +{ + sysinfo_shutdown(); + return 1; +} + +E_API int +e_modapi_save(E_Module *m EINA_UNUSED) +{ + e_config_domain_save("module.sysinfo", conf_edd, sysinfo_config); + return 1; +} + diff --git a/src/modules/sysinfo/module.desktop.in b/src/modules/sysinfo/module.desktop.in new file mode 100644 index 000000000..b3a69d994 --- /dev/null +++ b/src/modules/sysinfo/module.desktop.in @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Link +Name=Sysinfo +Comment=A gadget to visualize your system info +Icon=e-module-sysinfo +X-Enlightenment-ModuleType=system diff --git a/src/modules/sysinfo/sysinfo.c b/src/modules/sysinfo/sysinfo.c new file mode 100644 index 000000000..4da8a392c --- /dev/null +++ b/src/modules/sysinfo/sysinfo.c @@ -0,0 +1,129 @@ +#include "sysinfo.h" + +static void +_sysinfo_removed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_data) +{ + Instance *inst = data; + + if (inst->o_main != event_data) return; + + sysinfo_batman_remove(inst); + sysinfo_thermal_remove(inst); + sysinfo_cpuclock_remove(inst); + sysinfo_cpumonitor_remove(inst); + sysinfo_memusage_remove(inst); + sysinfo_netstatus_remove(inst); + + sysinfo_config->items = eina_list_remove(sysinfo_config->items, inst->cfg); + E_FREE(inst->cfg); +} + +static void +_sysinfo_created_cb(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) +{ + Instance *inst = data; + + inst->cfg->sysinfo.o_batman = sysinfo_batman_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_batman, 0, 0, 1, 1); + inst->cfg->sysinfo.o_thermal = sysinfo_thermal_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_thermal, 1, 0, 1, 1); + inst->cfg->sysinfo.o_cpuclock = sysinfo_cpuclock_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_cpuclock, 0, 1, 1, 1); + inst->cfg->sysinfo.o_cpumonitor = sysinfo_cpumonitor_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_cpumonitor, 1, 1, 1, 1); + inst->cfg->sysinfo.o_memusage = sysinfo_memusage_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_memusage, 0, 2, 1, 1); + inst->cfg->sysinfo.o_netstatus = sysinfo_netstatus_create(inst->o_main, inst); + elm_table_pack(inst->o_main, inst->cfg->sysinfo.o_netstatus, 1, 2, 1, 1); + + E_EXPAND(inst->o_main); + E_FILL(inst->o_main); + + evas_object_smart_callback_del_full(obj, "gadget_created", _sysinfo_created_cb, data); +} + +static Config_Item * +_conf_item_get(int *id) +{ + Config_Item *ci; + Eina_List *l; + + if (*id > 0) + { + EINA_LIST_FOREACH(sysinfo_config->items, l, ci) + if (*id == ci->id && ci->esm == E_SYSINFO_MODULE_SYSINFO) return ci; + } + + ci = E_NEW(Config_Item, 1); + + if (*id != -1) + ci->id = eina_list_count(sysinfo_config->items)+1; + else + ci->id = -1; + + ci->esm = E_SYSINFO_MODULE_SYSINFO; + ci->batman.poll_interval = 512; + ci->batman.alert = 30; + ci->batman.alert_p = 10; + ci->batman.alert_timeout = 0; + ci->batman.suspend_below = 0; + ci->batman.force_mode = 0; + ci->batman.full = -2; + ci->batman.time_left = -2; + ci->batman.time_full = -2; + ci->batman.have_battery = -2; + ci->batman.have_power = -2; +#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ + ci->batman.fuzzy = 0; +#endif + ci->batman.desktop_notifications = 0; + ci->thermal.poll_interval = 128; + ci->thermal.low = 30; + ci->thermal.high = 80; + ci->thermal.sensor_type = SENSOR_TYPE_NONE; + ci->thermal.sensor_name = NULL; + ci->thermal.units = CELSIUS; + ci->cpuclock.poll_interval = 32; + ci->cpuclock.restore_governor = 0; + ci->cpuclock.auto_powersave = 1; + ci->cpuclock.powersave_governor = NULL; + ci->cpuclock.governor = NULL; + ci->cpuclock.pstate_min = 1; + ci->cpuclock.pstate_max = 101; + ci->cpumonitor.poll_interval = 32; + ci->cpumonitor.total = 0; + ci->cpumonitor.idle = 0; + ci->memusage.poll_interval = 32; + ci->netstatus.poll_interval = 32; + ci->netstatus.in = 0; + ci->netstatus.out = 0; + + sysinfo_config->items = eina_list_append(sysinfo_config->items, ci); + + return ci; +} + +Evas_Object * +sysinfo_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient EINA_UNUSED) +{ + Instance *inst; + + inst = E_NEW(Instance, 1); + inst->cfg = _conf_item_get(id); + *id = inst->cfg->id; + inst->o_main = elm_table_add(parent); + elm_table_homogeneous_set(inst->o_main, EINA_TRUE); + E_EXPAND(inst->o_main); + evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + evas_object_smart_callback_add(parent, "gadget_created", _sysinfo_created_cb, inst); + evas_object_smart_callback_add(parent, "gadget_removed", _sysinfo_removed_cb, inst); + evas_object_show(inst->o_main); + + if (inst->cfg->id < 0) return inst->o_main; + + sysinfo_instances = + eina_list_append(sysinfo_instances, inst); + + return inst->o_main; +} + diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h new file mode 100644 index 000000000..a6191ba81 --- /dev/null +++ b/src/modules/sysinfo/sysinfo.h @@ -0,0 +1,238 @@ +#ifndef SYSINFO_H +#define SYSINFO_H + +#include "e.h" +#ifdef HAVE_EEZE +# include +#else +# include +#endif + +E_API extern E_Module_Api e_modapi; + +E_API void *e_modapi_init (E_Module *m); +E_API int e_modapi_shutdown (E_Module *m); +E_API int e_modapi_save (E_Module *m); + +typedef enum _E_Sysinfo_Module E_Sysinfo_Module; +enum _E_Sysinfo_Module +{ + E_SYSINFO_MODULE_NONE = 0, + E_SYSINFO_MODULE_BATMAN , + E_SYSINFO_MODULE_THERMAL, + E_SYSINFO_MODULE_CPUCLOCK, + E_SYSINFO_MODULE_CPUMONITOR, + E_SYSINFO_MODULE_MEMUSAGE, + E_SYSINFO_MODULE_NETSTATUS, + E_SYSINFO_MODULE_SYSINFO +}; + +typedef enum _Sensor_Type +{ + SENSOR_TYPE_NONE, +#if defined __FreeBSD__ || defined __OpenBSD__ || defined __DragonflyBSD__ + SENSOR_TYPE_FREEBSD, + SENSOR_TYPE_OPENBSD, +#else + SENSOR_TYPE_OMNIBOOK, + SENSOR_TYPE_LINUX_MACMINI, + SENSOR_TYPE_LINUX_I2C, + SENSOR_TYPE_LINUX_ACPI, + SENSOR_TYPE_LINUX_PCI, + SENSOR_TYPE_LINUX_PBOOK, + SENSOR_TYPE_LINUX_INTELCORETEMP, + SENSOR_TYPE_LINUX_THINKPAD, + SENSOR_TYPE_LINUX_SYS +#endif +} Sensor_Type; + +typedef enum _Unit +{ + CELSIUS, + FAHRENHEIT +} Unit; + +typedef struct _Tempthread Tempthread; +typedef struct _Cpu_Status Cpu_Status; +typedef struct _Config Config; +typedef struct _Config_Item Config_Item; +typedef struct _Instance Instance; + +struct _Tempthread +{ + Instance *inst; + int poll_interval; + Sensor_Type sensor_type; + const char *sensor_name; + const char *sensor_path; + void *extn; +#ifdef HAVE_EEZE + Eina_List *tempdevs; +#endif + Eina_Bool initted : 1; +}; + +struct _Cpu_Status +{ + Eina_List *frequencies; + Eina_List *governors; + int cur_frequency; +#ifdef __OpenBSD__ + int cur_percent; +#endif + int cur_min_frequency; + int cur_max_frequency; + int can_set_frequency; + int pstate_min; + int pstate_max; + char *cur_governor; + const char *orig_governor; + unsigned char active; + unsigned char pstate; + unsigned char pstate_turbo; +}; + +struct _Config +{ + Eina_List *items; + + E_Module *module; + Evas_Object *config_dialog; +}; + +struct _Config_Item +{ + int id; + E_Sysinfo_Module esm; + struct + { + Evas_Object *o_gadget; + /* saved * loaded config values */ + int poll_interval; + int alert; /* Alert on minutes remaining */ + int alert_p; /* Alert on percentage remaining */ + int alert_timeout; /* Popup dismissal timeout */ + int suspend_below; /* Suspend if battery drops below this level */ + int suspend_method; /* Method used to suspend the machine */ + int force_mode; /* force use of batget or hal */ + /* just config state */ + Ecore_Exe *batget_exe; + Ecore_Event_Handler *batget_data_handler; + Ecore_Event_Handler *batget_del_handler; + Ecore_Timer *alert_timer; + int full; + int time_left; + int time_full; + int have_battery; + int have_power; + int desktop_notifications; +#ifdef HAVE_EEZE + Eeze_Udev_Watch *acwatch; + Eeze_Udev_Watch *batwatch; +#endif +#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__ + Eina_Bool fuzzy; + int fuzzcount; +#endif + } batman; + struct + { + Evas_Object *o_gadget; + int poll_interval; + int low, high; + int sensor_type; + int temp; + const char *sensor_name; + Unit units; +#ifdef HAVE_EEZE + Ecore_Poller *poller; + Tempthread *tth; +#endif + Ecore_Thread *th; + + Eina_Bool have_temp:1; + } thermal; + struct + { + Evas_Object *o_gadget; + int poll_interval; + int restore_governor; + int auto_powersave; + const char *powersave_governor; + const char *governor; + int pstate_min; + int pstate_max; + Cpu_Status *status; + Ecore_Thread *frequency_check_thread; + Ecore_Event_Handler *handler; + } cpuclock; + struct + { + Evas_Object *o_gadget; + int poll_interval; + long total; + long idle; + Ecore_Thread *usage_check_thread; + } cpumonitor; + struct + { + Evas_Object *o_gadget; + int poll_interval; + Ecore_Thread *usage_check_thread; + } memusage; + struct + { + Evas_Object *o_gadget; + int poll_interval; + long in; + long out; + Ecore_Thread *usage_check_thread; + } netstatus; + struct { + Evas_Object *o_batman; + Evas_Object *o_thermal; + Evas_Object *o_cpuclock; + Evas_Object *o_cpumonitor; + Evas_Object *o_memusage; + Evas_Object *o_netstatus; + } sysinfo; +}; + +struct _Instance +{ + Evas_Object *o_main; + Evas_Object *popup_battery; + Evas_Object *warning; + Config_Item *cfg; + unsigned int notification_id; +}; + +EINTERN Evas_Object *config_sysinfo(E_Zone *zone, Instance *inst, E_Sysinfo_Module esm); +EINTERN Evas_Object *batman_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *thermal_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *cpuclock_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *cpumonitor_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *memusage_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *netstatus_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); +EINTERN Evas_Object *sysinfo_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient); + +EINTERN Evas_Object *config_sysinfo(E_Zone *zone, Instance *inst, E_Sysinfo_Module esm); +EINTERN Evas_Object *sysinfo_batman_create(Evas_Object *parent, Instance *inst); +EINTERN Evas_Object *sysinfo_thermal_create(Evas_Object *parent, Instance *inst); +EINTERN Evas_Object *sysinfo_cpuclock_create(Evas_Object *parent, Instance *inst); +EINTERN Evas_Object *sysinfo_cpumonitor_create(Evas_Object *parent, Instance *inst); +EINTERN Evas_Object *sysinfo_memusage_create(Evas_Object *parent, Instance *inst); +EINTERN Evas_Object *sysinfo_netstatus_create(Evas_Object *parent, Instance *inst); + +EINTERN void sysinfo_batman_remove(Instance *inst); +EINTERN void sysinfo_thermal_remove(Instance *inst); +EINTERN void sysinfo_cpuclock_remove(Instance *inst); +EINTERN void sysinfo_cpumonitor_remove(Instance *inst); +EINTERN void sysinfo_memusage_remove(Instance *inst); +EINTERN void sysinfo_netstatus_remove(Instance *inst); + +extern Config *sysinfo_config; +extern Eina_List *sysinfo_instances; +extern E_Module *module; + +#endif