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
This commit is contained in:
Dan Williams
2009-10-02 22:31:16 -07:00
parent f2a3825f9d
commit e5441115a2
2 changed files with 24 additions and 7 deletions
+14 -6
View File
@@ -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) {
+10 -1
View File
@@ -664,7 +664,7 @@ static char *
get_driver_name (GUdevDevice *device)
{
GUdevDevice *parent = NULL;
const char *driver;
const char *driver, *subsys;
char *ret = NULL;
driver = g_udev_device_get_driver (device);
@@ -672,6 +672,15 @@ get_driver_name (GUdevDevice *device)
parent = g_udev_device_get_parent (device);
if (parent)
driver = g_udev_device_get_driver (parent);
/* Check for bluetooth; it's driver is a bunch of levels up so we
* just check for the subsystem of the parent being bluetooth.
*/
if (!driver && parent) {
subsys = g_udev_device_get_subsystem (parent);
if (subsys && !strcmp (subsys, "bluetooth"))
driver = "bluetooth";
}
}
if (driver)