Skip to content

Commit

Permalink
udev clean-up
Browse files Browse the repository at this point in the history
Signed-off-by: Philippe De Swert <phdeswer@lumi.maa>
  • Loading branch information
Philippe De Swert committed Apr 12, 2011
1 parent 2582564 commit 322e7e3
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 65 deletions.
2 changes: 1 addition & 1 deletion debian/control
Expand Up @@ -2,7 +2,7 @@ Source: usb-moded
Section: misc
Priority: optional
Maintainer: Philippe De Swert <philippe.de-swert@nokia.com>
Build-Depends: debhelper (>= 5), autoconf, automake, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libgconf2-dev, doxygen, aegis-builder
Build-Depends: debhelper (>= 5), autoconf, automake, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libgconf2-dev, doxygen, aegis-builder, libudev-dev
Standards-Version: 3.8.0

Package: usb-moded
Expand Down
2 changes: 1 addition & 1 deletion src/usb_moded-modesetting.c
Expand Up @@ -167,7 +167,7 @@ int set_ovi_suite_mode(GList *applist)
system("echo 1 > /sys/devices/platform/musb_hdrc/gadget/softconnect");
#endif /* APP_SYNC */
/* bring network interface up in case no other network is up */
net = system("route -n | grep default");
net = system("route | grep default");
if(net)
net = system("ifdown usb0 ; ifup usb0");

Expand Down
104 changes: 41 additions & 63 deletions src/usb_moded-udev.c
Expand Up @@ -21,14 +21,12 @@ struct udev_device *dev;

/* static function definitions */
gpointer monitor_udev(gpointer data) __attribute__ ((noreturn));

/* TODO: write udev property parsing in seperate function to avoid code duplication */
static void udev_parse(struct udev_device *dev);

gboolean hwal_init(void)
{
GThread * thread;
const gchar *udev_path = NULL;
const char *tmp;

/* Create the udev object */
udev = udev_new();
Expand Down Expand Up @@ -58,31 +56,7 @@ gboolean hwal_init(void)
udev_monitor_enable_receiving (mon);

/* check if we are already connected */
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_PRESENT");
if(!tmp)
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_ONLINE");
if(!tmp)
{
log_err("No usable power supply indicator\n");
return 0;
}
if(!strcmp(tmp, "1"))
{
/* power supply type might not exist */
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_TYPE");
if(!tmp)
{
/* power supply type might not exist also :( Send connected event but this will not be able
to discriminate between charger/cable */
log_warning("Fallback since cable detecion cannot be accurate. Will connect on any voltage on usb.\n");
set_usb_connected(TRUE);
}
if(!strcmp(tmp, "USB")||!strcmp(tmp, "USB_CDP"))
{
log_debug("UDEV:USB cable connected\n");
set_usb_connected(TRUE);
}
}
udev_parse(dev);

thread = g_thread_create(monitor_udev, NULL, FALSE, NULL);

Expand All @@ -97,49 +71,15 @@ gboolean hwal_init(void)

gpointer monitor_udev(gpointer data)
{
const char *tmp;

while(1)
{
dev = udev_monitor_receive_device (mon);
if (dev)
{
if(!strcmp(udev_device_get_action(dev), "change"))
{
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_ONLINE");
if(!tmp)
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_PRESENT");
if(!tmp)
{
log_err("No usable power supply indicator\n");
exit(1);
}
if(!strcmp(tmp, "1"))
{
log_debug("UDEV:power supply present\n");
/* POWER_SUPPLY_TYPE is USB if usb cable is connected, USB_CDP for charging hub or USB_DCP for charger */
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_TYPE");
if(!tmp)
{
/* power supply type might not exist also :( Send connected event but this will not be able
to discriminate between charger/cable */
log_warning("Fallback since cable detecion cannot be accurate. Will connect on any voltage on usb.\n");
set_usb_connected(TRUE);
}
if(!strcmp(tmp, "USB")||!strcmp(tmp, "USB_CDP"))
{
log_debug("UDEV:USB cable connected\n");
set_usb_connected(TRUE);
}

}
else
{
log_debug("UDEV:USB cable disconnected\n");
set_usb_connected(FALSE);
}
udev_parse(dev);
}
udev_device_unref(dev);
}
}
}
Expand All @@ -150,4 +90,42 @@ void hwal_cleanup(void)
udev_unref(udev);
}

static void udev_parse(struct udev_device *dev)
{
const char *tmp;

tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_ONLINE");
if(!tmp)
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_PRESENT");
if(!tmp)
{
log_err("No usable power supply indicator\n");
exit(1);
}
if(!strcmp(tmp, "1"))
{
log_debug("UDEV:power supply present\n");
/* power supply type might not exist */
tmp = udev_device_get_property_value(dev, "POWER_SUPPLY_TYPE");
if(!tmp)
{
/* power supply type might not exist also :( Send connected event but this will not be able
to discriminate between charger/cable */
log_warning("Fallback since cable detecion cannot be accurate. Will connect on any voltage on usb.\n");
set_usb_connected(TRUE);
goto END;
}
if(!strcmp(tmp, "USB")||!strcmp(tmp, "USB_CDP"))
{
log_debug("UDEV:USB cable connected\n");
set_usb_connected(TRUE);
}
}
else
{
log_debug("UDEV:USB cable disconnected\n");
set_usb_connected(FALSE);
}
END:
udev_device_unref(dev);
}

0 comments on commit 322e7e3

Please sign in to comment.