}
if (battery_config->have_subsystem == UNKNOWN)
{
+#ifndef HAVE_EUDEV
if (!e_dbus_bus_get(DBUS_BUS_SYSTEM))
+#endif
battery_config->have_subsystem = NOSUBSYSTEM;
}
else if ((battery_config->have_subsystem == UNKNOWN) ||
(battery_config->force_mode == 2))
{
- E_DBus_Connection *conn;
-
if (battery_config->batget_exe)
{
ecore_exe_terminate(battery_config->batget_exe);
ecore_exe_free(battery_config->batget_exe);
battery_config->batget_exe = NULL;
}
+#ifdef HAVE_EUDEV
+ _battery_udev_start();
+#else
+ E_DBus_Connection *conn;
conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
if (conn)
{
battery_config->have_subsystem = SUBSYSTEM;
+
_battery_dbus_have_dbus();
+#endif
}
else
battery_config->have_subsystem = NOSUBSYSTEM;
int have_power;
int have_subsystem;
#ifdef HAVE_EUDEV
- Eeze_Udev_Watch *watch;
+ Eeze_Udev_Watch *acwatch;
+ Eeze_Udev_Watch *batwatch;
#else
struct {
// FIXME: on bat_conf del dbus_pending_call_cancel(dbus.have);
const char *product;
};
+Battery *_battery_battery_find(const char *udi);
+Ac_Adapter *_battery_ac_adapter_find(const char *udi);
+/* in e_mod_dbus.c */
void _battery_dbus_battery_props(void *data, void *reply_data, DBusError *error);
void _battery_dbus_ac_adapter_props(void *data, void *reply_data, DBusError *error);
void _battery_dbus_battery_property_changed(void *data, DBusMessage *msg);
void _battery_dbus_battery_add(const char *udi);
void _battery_dbus_battery_del(const char *udi);
-Battery *_battery_battery_find(const char *udi);
void _battery_dbus_ac_adapter_add(const char *udi);
void _battery_dbus_ac_adapter_del(const char *udi);
-Ac_Adapter *_battery_ac_adapter_find(const char *udi);
void _battery_dbus_find_battery(void *user_data, void *reply_data, DBusError *err);
void _battery_dbus_find_ac(void *user_data, void *reply_data, DBusError *err);
void _battery_dbus_is_battery(void *user_data, void *reply_data, DBusError *err);
void _battery_dbus_have_dbus(void);
void _battery_dbus_shutdown(void);
void _battery_device_update(void);
-
+/* end e_mod_dbus.c */
+/* in e_mod_udev.c */
+void _battery_udev_start(void);
+/* end e_mod_udev.c */
Eina_List *device_batteries;
Eina_List *device_ac_adapters;
double init_time;
+#include "e.h"
+#include "e_mod_main.h"
+
+void
+_battery_udev_start()
+{
+ device_batteries = eeze_udev_find_by_type(EEZE_UDEV_TYPE_POWER_BAT, NULL);
+ device_ac_adapters = eeze_udev_find_by_type(EEZE_UDEV_TYPE_POWER_AC, NULL);
+
+ battery_config->batwatch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_BAT, _battery_udev_event_battery, NULL);
+ battery_config->acwatch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_AC, _battery_udev_event_ac, NULL);
+
+ init_time = ecore_time_get();
+}
+
+void
+_battery_udev_event_battery(const char syspath, const char *event, void *data, Eeze_Udev_Watch *watch)
+{
+ if ((!strcmp(event, "add")) || (!strcmp(event, "online")))
+ _battery_udev_battery_add(syspath);
+ else if ((!strcmp(event, "remove")) || (!strcmp(event, "offline")))
+ _battery_udev_battery_del(syspath);
+ else /* must be change */
+ _battery_udev_battery_update(syspath, data);
+}
+
+void
+_battery_udev_event_ac(const char syspath, const char *event, void *data, Eeze_Udev_Watch *watch)
+{
+ if ((!strcmp(event, "add")) || (!strcmp(event, "online")))
+ _battery_udev_ac_add(syspath);
+ else if ((!strcmp(event, "remove")) || (!strcmp(event, "offline")))
+ _battery_udev_ac_del(syspath);
+ else /* must be change */
+ _battery_udev_ac_update(syspath, data);
+}
+
+void
+_battery_udev_battery_add(const char *syspath)
+{
+ Battery *bat;
+
+ if (!(bat = _battery_battery_find(syspath)))
+ {
+ if (!(bat = E_NEW(Battery, 1);
+ {
+ eina_stringshare_del(syspath);
+ return;
+ }
+ bat->udi = syspath; /* already stringshared */
+ device_batteries = eina_list_append(device_batteries, bat);
+ bat->watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_BAT, _battery_udev_event_battery, bat);
+ _battery_udev_battery_init(bat);
+
+ _battery_device_update();
+}
+
+void
+_battery_udev_ac_add(const char *syspath)
+{
+ Ac_Adapter *ac;
+
+ if (!(ac = _battery_ac_adapter_find(syspath)))
+ {
+ if (!(ac = E_NEW(Ac_Adapter, 1);
+ {
+ eina_stringshare_del(syspath);
+ return;
+ }
+ ac->udi = syspath; /* already stringshared */
+ device_ac_adapters = eina_list_append(device_ac_adapters, ac);
+ ac->watch = eeze_udev_watch_add(EEZE_UDEV_TYPE_POWER_AC, _battery_udev_event_ac, ac);
+ _battery_udev_ac_init(ac);
+
+ _battery_device_update();
+}
+
+void
+_battery_udev_battery_del(const char *syspath)
+{
+ Eina_List *l;
+ Battery *bat;
+
+ if ((battery = _battery_battery_find(syspath)))
+ {
+ eeze_udev_watch_del(bat->watch);
+ l = eina_list_data_find(device_batteries, bat);
+ eina_stringshare_del(bat->udi);
+ free(bat);
+ device_batteries = eina_list_remove_list(device_batteries, l);
+ return;
+ }
+ _battery_device_update();
+}
+
+void
+_battery_udev_ac_del(const char *syspath)
+{
+ Eina_List *l;
+ Ac_Adapter *ac;
+
+ if ((ac = _battery_ac_adapter_find(syspath)))
+ {
+ eeze_udev_watch_del(ac->watch);
+ l = eina_list_data_find(device_ac_adapters, ac);
+ eina_stringshare_del(ac->udi);
+ free(ac);
+ device_ac_adapters = eina_list_remove_list(device_ac_adapters, l);
+ return;
+ }
+ _battery_device_update();
+}
+