more udev battery progress, seems like a good stopping point for tonight.
still no functionality changes. SVN revision: 48943
This commit is contained in:
parent
e65da68f57
commit
bafe1c825f
|
@ -354,7 +354,9 @@ _battery_config_updated(void)
|
||||||
}
|
}
|
||||||
if (battery_config->have_subsystem == UNKNOWN)
|
if (battery_config->have_subsystem == UNKNOWN)
|
||||||
{
|
{
|
||||||
|
#ifndef HAVE_EUDEV
|
||||||
if (!e_dbus_bus_get(DBUS_BUS_SYSTEM))
|
if (!e_dbus_bus_get(DBUS_BUS_SYSTEM))
|
||||||
|
#endif
|
||||||
battery_config->have_subsystem = NOSUBSYSTEM;
|
battery_config->have_subsystem = NOSUBSYSTEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,19 +380,23 @@ _battery_config_updated(void)
|
||||||
else if ((battery_config->have_subsystem == UNKNOWN) ||
|
else if ((battery_config->have_subsystem == UNKNOWN) ||
|
||||||
(battery_config->force_mode == 2))
|
(battery_config->force_mode == 2))
|
||||||
{
|
{
|
||||||
E_DBus_Connection *conn;
|
|
||||||
|
|
||||||
if (battery_config->batget_exe)
|
if (battery_config->batget_exe)
|
||||||
{
|
{
|
||||||
ecore_exe_terminate(battery_config->batget_exe);
|
ecore_exe_terminate(battery_config->batget_exe);
|
||||||
ecore_exe_free(battery_config->batget_exe);
|
ecore_exe_free(battery_config->batget_exe);
|
||||||
battery_config->batget_exe = NULL;
|
battery_config->batget_exe = NULL;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_EUDEV
|
||||||
|
_battery_udev_start();
|
||||||
|
#else
|
||||||
|
E_DBus_Connection *conn;
|
||||||
conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
|
conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
|
||||||
if (conn)
|
if (conn)
|
||||||
{
|
{
|
||||||
battery_config->have_subsystem = SUBSYSTEM;
|
battery_config->have_subsystem = SUBSYSTEM;
|
||||||
|
|
||||||
_battery_dbus_have_dbus();
|
_battery_dbus_have_dbus();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
battery_config->have_subsystem = NOSUBSYSTEM;
|
battery_config->have_subsystem = NOSUBSYSTEM;
|
||||||
|
|
|
@ -42,7 +42,8 @@ struct _Config
|
||||||
int have_power;
|
int have_power;
|
||||||
int have_subsystem;
|
int have_subsystem;
|
||||||
#ifdef HAVE_EUDEV
|
#ifdef HAVE_EUDEV
|
||||||
Eeze_Udev_Watch *watch;
|
Eeze_Udev_Watch *acwatch;
|
||||||
|
Eeze_Udev_Watch *batwatch;
|
||||||
#else
|
#else
|
||||||
struct {
|
struct {
|
||||||
// FIXME: on bat_conf del dbus_pending_call_cancel(dbus.have);
|
// FIXME: on bat_conf del dbus_pending_call_cancel(dbus.have);
|
||||||
|
@ -96,15 +97,16 @@ struct _Ac_Adapter
|
||||||
const char *product;
|
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_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_ac_adapter_props(void *data, void *reply_data, DBusError *error);
|
||||||
void _battery_dbus_battery_property_changed(void *data, DBusMessage *msg);
|
void _battery_dbus_battery_property_changed(void *data, DBusMessage *msg);
|
||||||
void _battery_dbus_battery_add(const char *udi);
|
void _battery_dbus_battery_add(const char *udi);
|
||||||
void _battery_dbus_battery_del(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_add(const char *udi);
|
||||||
void _battery_dbus_ac_adapter_del(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_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_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_is_battery(void *user_data, void *reply_data, DBusError *err);
|
||||||
|
@ -114,7 +116,10 @@ void _battery_dbus_dev_del(void *data, DBusMessage *msg);
|
||||||
void _battery_dbus_have_dbus(void);
|
void _battery_dbus_have_dbus(void);
|
||||||
void _battery_dbus_shutdown(void);
|
void _battery_dbus_shutdown(void);
|
||||||
void _battery_device_update(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_batteries;
|
||||||
Eina_List *device_ac_adapters;
|
Eina_List *device_ac_adapters;
|
||||||
double init_time;
|
double init_time;
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
#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();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue