114 lines
3.2 KiB
C
114 lines
3.2 KiB
C
#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();
|
|
}
|
|
|