1 #include "sysinfo.h"
2 
3 #define CONFIG_VERSION 2
4 
5 static E_Config_DD *conf_edd = NULL;
6 static E_Config_DD *conf_item_edd = NULL;
7 Eina_List *sysinfo_instances = NULL;
8 Config *sysinfo_config = NULL;
9 
10 EINTERN void
sysinfo_init(void)11 sysinfo_init(void)
12 {
13    Eina_List *l;
14    Config_Item *ci;
15 
16    conf_item_edd = E_CONFIG_DD_NEW("Sysinfo_Config_Item", Config_Item);
17 #undef T
18 #undef D
19 #define T Config_Item
20 #define D conf_item_edd
21    E_CONFIG_VAL(D, T, id, INT);
22    E_CONFIG_VAL(D, T, version, INT);
23    E_CONFIG_VAL(D, T, esm, INT);
24    E_CONFIG_VAL(D, T, batman.poll_interval, INT);
25    E_CONFIG_VAL(D, T, batman.alert, INT);
26    E_CONFIG_VAL(D, T, batman.alert_p, INT);
27    E_CONFIG_VAL(D, T, batman.alert_timeout, INT);
28    E_CONFIG_VAL(D, T, batman.suspend_below, INT);
29    E_CONFIG_VAL(D, T, batman.suspend_method, INT);
30    E_CONFIG_VAL(D, T, batman.force_mode, INT);
31 #if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__)
32    E_CONFIG_VAL(D, T, batman.fuzzy, INT);
33 #endif
34    E_CONFIG_VAL(D, T, batman.desktop_notifications, INT);
35    E_CONFIG_VAL(D, T, thermal.poll_interval, INT);
36    E_CONFIG_VAL(D, T, thermal.low, INT);
37    E_CONFIG_VAL(D, T, thermal.high, INT);
38    E_CONFIG_VAL(D, T, thermal.sensor_type, INT);
39    E_CONFIG_VAL(D, T, thermal.sensor_name, STR);
40    E_CONFIG_VAL(D, T, thermal.units, INT);
41    E_CONFIG_VAL(D, T, cpuclock.poll_interval, INT);
42    E_CONFIG_VAL(D, T, cpuclock.restore_governor, INT);
43    E_CONFIG_VAL(D, T, cpuclock.auto_powersave, INT);
44    E_CONFIG_VAL(D, T, cpuclock.powersave_governor, STR);
45    E_CONFIG_VAL(D, T, cpuclock.governor, STR);
46    E_CONFIG_VAL(D, T, cpuclock.pstate_min, INT);
47    E_CONFIG_VAL(D, T, cpuclock.pstate_max, INT);
48    E_CONFIG_VAL(D, T, cpumonitor.poll_interval, INT);
49    E_CONFIG_VAL(D, T, memusage.poll_interval, INT);
50    E_CONFIG_VAL(D, T, netstatus.poll_interval, INT);
51    E_CONFIG_VAL(D, T, netstatus.automax, INT);
52    E_CONFIG_VAL(D, T, netstatus.inmax, INT);
53    E_CONFIG_VAL(D, T, netstatus.outmax, INT);
54    E_CONFIG_VAL(D, T, netstatus.receive_units, INT);
55    E_CONFIG_VAL(D, T, netstatus.send_units, INT);
56 
57    conf_edd = E_CONFIG_DD_NEW("Sysinfo_Config", Config);
58 #undef T
59 #undef D
60 #define T Config
61 #define D conf_edd
62    E_CONFIG_LIST(D, T, items, conf_item_edd);
63 
64    sysinfo_config = e_config_domain_load("module.sysinfo", conf_edd);
65 
66    if (!sysinfo_config)
67      {
68         sysinfo_config = E_NEW(Config, 1);
69         ci = E_NEW(Config_Item, 1);
70         ci->id = 0;
71         ci->version = CONFIG_VERSION;
72         ci->esm = E_SYSINFO_MODULE_NONE;
73 
74         ci->batman.poll_interval = 512;
75         ci->batman.alert = 30;
76         ci->batman.alert_p = 10;
77         ci->batman.alert_timeout = 0;
78         ci->batman.suspend_below = 0;
79         ci->batman.suspend_method = 0;
80         ci->batman.force_mode = 0;
81         ci->batman.full = -2;
82         ci->batman.time_left = -2;
83         ci->batman.have_battery = -2;
84         ci->batman.have_power = -2;
85 #if defined(HAVE_EEZE) || defined(__OpenBSD__) || defined(__NetBSD__)
86         ci->batman.fuzzy = 0;
87 #endif
88         ci->batman.desktop_notifications = 0;
89         ci->batman.popup = NULL;
90         ci->batman.configure = NULL;
91         ci->batman.done = EINA_FALSE;
92         ci->thermal.poll_interval = 128;
93         ci->thermal.low = 30;
94         ci->thermal.high = 80;
95         ci->thermal.sensor_type = SENSOR_TYPE_NONE;
96         ci->thermal.sensor_name = NULL;
97         ci->thermal.temp = -900;
98         ci->thermal.units = CELSIUS;
99         ci->thermal.popup = NULL;
100         ci->thermal.configure = NULL;
101         ci->cpuclock.poll_interval = 32;
102         ci->cpuclock.restore_governor = 0;
103         ci->cpuclock.auto_powersave = 1;
104         ci->cpuclock.powersave_governor = NULL;
105         ci->cpuclock.governor = NULL;
106         ci->cpuclock.pstate_min = 1;
107         ci->cpuclock.pstate_max = 101;
108         ci->cpuclock.popup = NULL;
109         ci->cpuclock.configure = NULL;
110         ci->cpumonitor.poll_interval = 32;
111         ci->cpumonitor.percent = 0;
112         ci->cpumonitor.popup = NULL;
113         ci->cpumonitor.configure = NULL;
114         ci->memusage.poll_interval = 32;
115         ci->memusage.mem_percent = 0;
116         ci->memusage.swp_percent = 0;
117         ci->memusage.popup = NULL;
118         ci->memusage.configure = NULL;
119         ci->netstatus.poll_interval = 32;
120         ci->netstatus.automax = EINA_TRUE;
121         ci->netstatus.inmax = 0;
122         ci->netstatus.outmax = 0;
123         ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
124         ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
125         ci->netstatus.instring = NULL;
126         ci->netstatus.outstring = NULL;
127         ci->netstatus.popup = NULL;
128         ci->netstatus.configure = NULL;
129 
130         E_CONFIG_LIMIT(ci->batman.poll_interval, 4, 4096);
131         E_CONFIG_LIMIT(ci->batman.alert, 0, 60);
132         E_CONFIG_LIMIT(ci->batman.alert_p, 0, 100);
133         E_CONFIG_LIMIT(ci->batman.alert_timeout, 0, 300);
134         E_CONFIG_LIMIT(ci->batman.suspend_below, 0, 50);
135         E_CONFIG_LIMIT(ci->batman.force_mode, 0, 2);
136         E_CONFIG_LIMIT(ci->batman.desktop_notifications, 0, 1);
137         E_CONFIG_LIMIT(ci->thermal.poll_interval, 1, 1024);
138         E_CONFIG_LIMIT(ci->thermal.low, 0, 100);
139         E_CONFIG_LIMIT(ci->thermal.high, 0, 220);
140         E_CONFIG_LIMIT(ci->thermal.units, CELSIUS, FAHRENHEIT);
141         E_CONFIG_LIMIT(ci->cpuclock.poll_interval, 1, 1024);
142         E_CONFIG_LIMIT(ci->cpumonitor.poll_interval, 1, 1024);
143         E_CONFIG_LIMIT(ci->memusage.poll_interval, 1, 1024);
144         E_CONFIG_LIMIT(ci->netstatus.poll_interval, 1, 1024);
145 
146         sysinfo_config->items = eina_list_append(sysinfo_config->items, ci);
147      }
148    EINA_LIST_FOREACH(sysinfo_config->items, l, ci)
149      {
150         if (ci->esm == E_SYSINFO_MODULE_NETSTATUS || ci->esm == E_SYSINFO_MODULE_SYSINFO)
151           {
152              if (ci->version < CONFIG_VERSION)
153                {
154                   ci->version = CONFIG_VERSION;
155                   ci->netstatus.automax = EINA_TRUE;
156                   ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
157                   ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
158                }
159           }
160      }
161    e_gadget_type_add("Batman", batman_create, NULL);
162    e_gadget_type_add("Thermal", thermal_create, NULL);
163    e_gadget_type_add("CpuClock", cpuclock_create, NULL);
164    e_gadget_type_add("CpuMonitor", cpumonitor_create, NULL);
165    e_gadget_type_add("MemUsage", memusage_create, NULL);
166    e_gadget_type_add("NetStatus", netstatus_create, NULL);
167    e_gadget_type_add("SysInfo", sysinfo_create, NULL);
168 }
169 
170 EINTERN void
sysinfo_shutdown(void)171 sysinfo_shutdown(void)
172 {
173    if (sysinfo_config)
174      {
175         Config_Item *ci;
176         EINA_LIST_FREE(sysinfo_config->items, ci)
177           {
178              E_FREE(ci);
179           }
180         E_FREE(sysinfo_config);
181      }
182    E_CONFIG_DD_FREE(conf_edd);
183    E_CONFIG_DD_FREE(conf_item_edd);
184 
185    e_gadget_type_del("Batman");
186    e_gadget_type_del("Thermal");
187    e_gadget_type_del("CpuClock");
188    e_gadget_type_del("CpuMonitor");
189    e_gadget_type_del("MemUsage");
190    e_gadget_type_del("NetStatus");
191    e_gadget_type_del("SysInfo");
192 }
193 
194 E_API E_Module_Api e_modapi =
195 {
196    E_MODULE_API_VERSION,
197    "Sysinfo"
198 };
199 
200 E_API void *
e_modapi_init(E_Module * m)201 e_modapi_init(E_Module *m)
202 {
203    sysinfo_init();
204 
205    sysinfo_config->module = m;
206    return m;
207 }
208 
209 E_API int
e_modapi_shutdown(E_Module * m EINA_UNUSED)210 e_modapi_shutdown(E_Module *m EINA_UNUSED)
211 {
212    sysinfo_shutdown();
213    return 1;
214 }
215 
216 E_API int
e_modapi_save(E_Module * m EINA_UNUSED)217 e_modapi_save(E_Module *m EINA_UNUSED)
218 {
219    e_config_domain_save("module.sysinfo", conf_edd, sysinfo_config);
220    return 1;
221 }
222 
223