From e5441115a2dda5d81de2e9a336fc34e23d20b309 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 2 Oct 2009 22:31:16 -0700 Subject: bluetooth: recognize rfcomm devices Two hacks here: 1) rfcomm ports don't have an easily accessible driver name, so we just match the parent's subsystem to 'bluetooth' and use that 2) libgudev doesn't seem be be able to get the rfcomm device's device file, which would normally be /dev/rfcommX. Oh well, we don't use the device file yet anyway --- plugins/mm-plugin-generic.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'plugins/mm-plugin-generic.c') diff --git a/plugins/mm-plugin-generic.c b/plugins/mm-plugin-generic.c index 802ab888..3b6cd198 100644 --- a/plugins/mm-plugin-generic.c +++ b/plugins/mm-plugin-generic.c @@ -108,16 +108,27 @@ grab_port (MMPluginBase *base, { GUdevDevice *port = NULL, *physdev = NULL; MMModem *modem = NULL; - const char *name, *subsys, *devfile, *sysfs_path; + const char *name, *subsys, *devfile, *sysfs_path, *driver; guint32 caps; port = mm_plugin_base_supports_task_get_port (task); g_assert (port); + subsys = g_udev_device_get_subsystem (port); + name = g_udev_device_get_name (port); + devfile = g_udev_device_get_device_file (port); if (!devfile) { - g_set_error (error, 0, 0, "Could not get port's sysfs file."); - return NULL; + driver = mm_plugin_base_supports_task_get_driver (task); + if (!driver || strcmp (driver, "bluetooth")) { + g_set_error (error, 0, 0, "Could not get port's sysfs file."); + return NULL; + } else { + g_message ("%s: (%s/%s) WARNING: missing udev 'device' file", + mm_plugin_get_name (MM_PLUGIN (base)), + subsys, + name); + } } physdev = mm_plugin_base_supports_task_get_physdev (task); @@ -128,9 +139,6 @@ grab_port (MMPluginBase *base, return NULL; } - subsys = g_udev_device_get_subsystem (port); - name = g_udev_device_get_name (port); - caps = mm_plugin_base_supports_task_get_probed_capabilities (task); if (!existing) { if (caps & MM_PLUGIN_BASE_PORT_CAP_GSM) { -- cgit v1.2.3-70-g09d2