gboolean trigger_init(void) { const gchar *udev_path = NULL; struct udev_device *dev; int ret = 0; /* Create the udev object */ udev = udev_new(); if (!udev) { log_err("Can't create udev\n"); return 1; } udev_path = check_trigger(); if(udev_path) dev = udev_device_new_from_syspath(udev, udev_path); else { log_err("No trigger path. Not starting trigger.\n"); return 1; } if (!dev) { log_err("Unable to find the trigger device."); return 1; } else { dev_name = udev_device_get_sysname(dev); log_debug("device name = %s\n", dev_name); } mon = udev_monitor_new_from_netlink (udev, "udev"); if (!mon) { log_err("Unable to monitor the netlink\n"); /* communicate failure, mainloop will exit and call appropriate clean-up */ return 1; } ret = udev_monitor_filter_add_match_subsystem_devtype(mon, get_trigger_subsystem(), NULL); if(ret != 0) { log_err("Udev match failed.\n"); return 1; } ret = udev_monitor_enable_receiving (mon); if(ret != 0) { log_err("Failed to enable monitor recieving.\n"); return 1; } /* check if we are already connected */ udev_parse(dev); iochannel = g_io_channel_unix_new(udev_monitor_get_fd(mon)); watch_id = g_io_add_watch_full(iochannel, 0, G_IO_IN, monitor_udev, NULL, notify_issue); /* everything went well */ log_debug("Trigger enabled!\n"); return 0; }
gboolean hwal_init(void) { const gchar *udev_path = NULL, *udev_subsystem = NULL; struct udev_device *dev; int ret = 0; /* Create the udev object */ udev = udev_new(); if (!udev) { log_err("Can't create udev\n"); return FALSE; } udev_path = find_udev_path(); if(udev_path) { dev = udev_device_new_from_syspath(udev, udev_path); g_free((gpointer *)udev_path); } else dev = udev_device_new_from_syspath(udev, "/sys/class/power_supply/usb"); if (!dev) { log_err("Unable to find $power_supply device."); /* communicate failure, mainloop will exit and call appropriate clean-up */ return FALSE; } else { dev_name = udev_device_get_sysname(dev); log_debug("device name = %s\n", dev_name); } mon = udev_monitor_new_from_netlink (udev, "udev"); if (!mon) { log_err("Unable to monitor the netlink\n"); /* communicate failure, mainloop will exit and call appropriate clean-up */ return FALSE; } udev_subsystem = find_udev_subsystem(); if(udev_subsystem) { ret = udev_monitor_filter_add_match_subsystem_devtype(mon, udev_subsystem, NULL); g_free((gpointer *)udev_subsystem); } else ret = udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL); if(ret != 0) { log_err("Udev match failed.\n"); return FALSE; } ret = udev_monitor_enable_receiving (mon); if(ret != 0) { log_err("Failed to enable monitor recieving.\n"); return FALSE; } /* check if we are already connected */ udev_parse(dev); iochannel = g_io_channel_unix_new(udev_monitor_get_fd(mon)); watch_id = g_io_add_watch_full(iochannel, 0, G_IO_IN, monitor_udev, NULL,notify_issue); /* everything went well */ return TRUE; }