aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-manager.c66
-rw-r--r--src/mm-device.c55
-rw-r--r--src/mm-device.h6
-rw-r--r--src/mm-plugin-manager.c6
-rw-r--r--src/mm-plugin.c2
-rw-r--r--src/mm-plugin.h2
6 files changed, 71 insertions, 66 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 275a855f..cdc5d54a 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -111,18 +111,17 @@ find_device_by_port (MMBaseManager *manager,
}
static MMDevice *
-find_device_by_sysfs_path (MMBaseManager *self,
- const gchar *sysfs_path)
+find_device_by_physdev_uid (MMBaseManager *self,
+ const gchar *physdev_uid)
{
- return g_hash_table_lookup (self->priv->devices,
- sysfs_path);
+ return g_hash_table_lookup (self->priv->devices, physdev_uid);
}
static MMDevice *
find_device_by_udev_device (MMBaseManager *manager,
GUdevDevice *udev_device)
{
- return find_device_by_sysfs_path (manager, g_udev_device_get_sysfs_path (udev_device));
+ return find_device_by_physdev_uid (manager, g_udev_device_get_sysfs_path (udev_device));
}
/*****************************************************************************/
@@ -151,8 +150,8 @@ device_support_check_ready (MMPluginManager *plugin_manager,
/* Receive plugin result from the plugin manager */
plugin = mm_plugin_manager_device_support_check_finish (plugin_manager, res, &error);
if (!plugin) {
- mm_info ("Couldn't check support for device at '%s': %s",
- mm_device_get_path (ctx->device), error->message);
+ mm_info ("Couldn't check support for device '%s': %s",
+ mm_device_get_uid (ctx->device), error->message);
g_error_free (error);
find_device_support_context_free (ctx);
return;
@@ -163,16 +162,16 @@ device_support_check_ready (MMPluginManager *plugin_manager,
g_object_unref (plugin);
if (!mm_device_create_modem (ctx->device, ctx->self->priv->object_manager, &error)) {
- mm_warn ("Couldn't create modem for device at '%s': %s",
- mm_device_get_path (ctx->device), error->message);
+ mm_warn ("Couldn't create modem for device '%s': %s",
+ mm_device_get_uid (ctx->device), error->message);
g_error_free (error);
find_device_support_context_free (ctx);
return;
}
/* Modem now created */
- mm_info ("Modem for device at '%s' successfully created",
- mm_device_get_path (ctx->device));
+ mm_info ("Modem for device '%s' successfully created",
+ mm_device_get_uid (ctx->device));
find_device_support_context_free (ctx);
}
@@ -268,19 +267,16 @@ device_removed (MMBaseManager *self,
/* Handle tty/net/wdm port removal */
device = find_device_by_port (self, udev_device);
if (device) {
- mm_info ("(%s/%s): released by modem %s",
- subsys,
- name,
- g_udev_device_get_sysfs_path (mm_device_peek_udev_device (device)));
+ mm_info ("(%s/%s): released by device '%s'", subsys, name, mm_device_get_uid (device));
mm_device_release_port (device, udev_device);
/* If port probe list gets empty, remove the device object iself */
if (!mm_device_peek_port_probe_list (device)) {
- mm_dbg ("Removing empty device '%s'", mm_device_get_path (device));
+ mm_dbg ("Removing empty device '%s'", mm_device_get_uid (device));
if (mm_plugin_manager_device_support_check_cancel (self->priv->plugin_manager, device))
mm_dbg ("Device support check has been cancelled");
mm_device_remove_modem (device);
- g_hash_table_remove (self->priv->devices, mm_device_get_path (device));
+ g_hash_table_remove (self->priv->devices, mm_device_get_uid (device));
}
}
@@ -297,9 +293,9 @@ device_removed (MMBaseManager *self,
*/
device = find_device_by_udev_device (self, udev_device);
if (device) {
- mm_dbg ("Removing device '%s'", mm_device_get_path (device));
+ mm_dbg ("Removing device '%s'", mm_device_get_uid (device));
mm_device_remove_modem (device);
- g_hash_table_remove (self->priv->devices, mm_device_get_path (device));
+ g_hash_table_remove (self->priv->devices, mm_device_get_uid (device));
return;
}
@@ -314,7 +310,7 @@ device_added (MMBaseManager *manager,
gboolean manual_scan)
{
MMDevice *device;
- const char *subsys, *name, *physdev_path, *physdev_subsys;
+ const char *subsys, *name, *physdev_uid, *physdev_subsys;
gboolean is_candidate;
GUdevDevice *physdev = NULL;
@@ -389,21 +385,21 @@ device_added (MMBaseManager *manager,
goto out;
}
- physdev_path = g_udev_device_get_sysfs_path (physdev);
- if (!physdev_path) {
+ physdev_uid = g_udev_device_get_sysfs_path (physdev);
+ if (!physdev_uid) {
mm_dbg ("(%s/%s): could not get port's parent device sysfs path", subsys, name);
goto out;
}
/* See if we already created an object to handle ports in this device */
- device = find_device_by_sysfs_path (manager, physdev_path);
+ device = find_device_by_physdev_uid (manager, physdev_uid);
if (!device) {
FindDeviceSupportContext *ctx;
/* Keep the device listed in the Manager */
device = mm_device_new (physdev, hotplugged);
g_hash_table_insert (manager->priv->devices,
- g_strdup (physdev_path),
+ g_strdup (physdev_uid),
device);
/* Launch device support check */
@@ -754,15 +750,15 @@ handle_set_profile (MmGdbusTest *skeleton,
{
MMPlugin *plugin;
MMDevice *device;
- gchar *physdev;
+ gchar *physdev_uid;
GError *error = NULL;
mm_info ("Test profile set to: '%s'", id);
/* Create device and keep it listed in the Manager */
- physdev = g_strdup_printf ("/virtual/%s", id);
- device = mm_device_virtual_new (physdev, TRUE);
- g_hash_table_insert (self->priv->devices, physdev, device);
+ physdev_uid = g_strdup_printf ("/virtual/%s", id);
+ device = mm_device_virtual_new (physdev_uid, TRUE);
+ g_hash_table_insert (self->priv->devices, physdev_uid, device);
/* Grab virtual ports */
mm_device_virtual_grab_ports (device, (const gchar **)ports);
@@ -774,8 +770,8 @@ handle_set_profile (MmGdbusTest *skeleton,
MM_CORE_ERROR_NOT_FOUND,
"Requested plugin '%s' not found",
plugin_name);
- mm_warn ("Couldn't set plugin for virtual device at '%s': %s",
- mm_device_get_path (device),
+ mm_warn ("Couldn't set plugin for virtual device '%s': %s",
+ mm_device_get_uid (device),
error->message);
goto out;
}
@@ -783,20 +779,20 @@ handle_set_profile (MmGdbusTest *skeleton,
/* Create modem */
if (!mm_device_create_modem (device, self->priv->object_manager, &error)) {
- mm_warn ("Couldn't create modem for virtual device at '%s': %s",
- mm_device_get_path (device),
+ mm_warn ("Couldn't create modem for virtual device '%s': %s",
+ mm_device_get_uid (device),
error->message);
goto out;
}
- mm_info ("Modem for virtual device at '%s' successfully created",
- mm_device_get_path (device));
+ mm_info ("Modem for virtual device '%s' successfully created",
+ mm_device_get_uid (device));
out:
if (error) {
mm_device_remove_modem (device);
- g_hash_table_remove (self->priv->devices, mm_device_get_path (device));
+ g_hash_table_remove (self->priv->devices, mm_device_get_uid (device));
g_dbus_method_invocation_return_gerror (invocation, error);
g_error_free (error);
} else
diff --git a/src/mm-device.c b/src/mm-device.c
index b9ffdf83..a293149f 100644
--- a/src/mm-device.c
+++ b/src/mm-device.c
@@ -31,7 +31,7 @@ G_DEFINE_TYPE (MMDevice, mm_device, G_TYPE_OBJECT);
enum {
PROP_0,
- PROP_PATH,
+ PROP_UID,
PROP_UDEV_DEVICE,
PROP_PLUGIN,
PROP_MODEM,
@@ -53,8 +53,8 @@ struct _MMDevicePrivate {
/* Whether the device is real or virtual */
gboolean virtual;
- /* Device path */
- gchar *path;
+ /* Unique id */
+ gchar *uid;
/* Parent UDev device */
GUdevDevice *udev_device;
@@ -324,7 +324,7 @@ mm_device_grab_port (MMDevice *self,
&self->priv->vendor,
&self->priv->product)) {
mm_dbg ("(%s) could not get vendor/product ID",
- self->priv->path);
+ self->priv->uid);
}
}
@@ -447,7 +447,7 @@ export_modem (MMDevice *self)
mm_dbg ("Exported modem '%s' at path '%s'",
(self->priv->virtual ?
- self->priv->path :
+ self->priv->uid :
g_udev_device_get_sysfs_path (self->priv->udev_device)),
path);
@@ -496,12 +496,12 @@ modem_valid (MMBaseModem *modem,
GError *error = NULL;
if (!mm_device_create_modem (self, self->priv->object_manager, &error)) {
- mm_warn ("Could not recreate modem for device at '%s': %s",
- mm_device_get_path (self),
- error ? error->message : "unknown");
+ mm_warn ("Could not recreate modem for device '%s': %s",
+ self->priv->uid,
+ error ? error->message : "unknown");
g_error_free (error);
} else {
- mm_dbg ("Modem recreated for device '%s'", mm_device_get_path (self));
+ mm_dbg ("Modem recreated for device '%s'", self->priv->uid);
}
}
} else {
@@ -568,9 +568,9 @@ mm_device_create_modem (MMDevice *self,
/*****************************************************************************/
const gchar *
-mm_device_get_path (MMDevice *self)
+mm_device_get_uid (MMDevice *self)
{
- return self->priv->path;
+ return self->priv->uid;
}
const gchar **
@@ -726,23 +726,29 @@ MMDevice *
mm_device_new (GUdevDevice *udev_device,
gboolean hotplugged)
{
+ const gchar *uid;
+
g_return_val_if_fail (udev_device != NULL, NULL);
+ uid = g_udev_device_get_property (udev_device, "ID_MM_PHYSDEV_UID");
+ if (uid)
+ mm_dbg ("device with an explicit physdev UID: %s", uid);
+
return MM_DEVICE (g_object_new (MM_TYPE_DEVICE,
MM_DEVICE_UDEV_DEVICE, udev_device,
- MM_DEVICE_PATH, g_udev_device_get_sysfs_path (udev_device),
+ MM_DEVICE_UID, uid ? uid : g_udev_device_get_sysfs_path (udev_device),
MM_DEVICE_HOTPLUGGED, hotplugged,
NULL));
}
MMDevice *
-mm_device_virtual_new (const gchar *path,
+mm_device_virtual_new (const gchar *uid,
gboolean hotplugged)
{
- g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (uid != NULL, NULL);
return MM_DEVICE (g_object_new (MM_TYPE_DEVICE,
- MM_DEVICE_PATH, path,
+ MM_DEVICE_UID, uid,
MM_DEVICE_HOTPLUGGED, hotplugged,
MM_DEVICE_VIRTUAL, TRUE,
NULL));
@@ -766,9 +772,9 @@ set_property (GObject *object,
MMDevice *self = MM_DEVICE (object);
switch (prop_id) {
- case PROP_PATH:
+ case PROP_UID:
/* construct only */
- self->priv->path = g_value_dup_string (value);
+ self->priv->uid = g_value_dup_string (value);
break;
case PROP_UDEV_DEVICE:
/* construct only */
@@ -803,6 +809,9 @@ get_property (GObject *object,
MMDevice *self = MM_DEVICE (object);
switch (prop_id) {
+ case PROP_UID:
+ g_value_set_string (value, self->priv->uid);
+ break;
case PROP_UDEV_DEVICE:
g_value_set_object (value, self->priv->udev_device);
break;
@@ -843,7 +852,7 @@ finalize (GObject *object)
{
MMDevice *self = MM_DEVICE (object);
- g_free (self->priv->path);
+ g_free (self->priv->uid);
g_strfreev (self->priv->drivers);
g_strfreev (self->priv->virtual_ports);
@@ -863,13 +872,13 @@ mm_device_class_init (MMDeviceClass *klass)
object_class->finalize = finalize;
object_class->dispose = dispose;
- properties[PROP_PATH] =
- g_param_spec_string (MM_DEVICE_PATH,
- "Path",
- "Device path",
+ properties[PROP_UID] =
+ g_param_spec_string (MM_DEVICE_UID,
+ "Unique ID",
+ "Unique device id, e.g. the physical device sysfs path",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_PATH, properties[PROP_PATH]);
+ g_object_class_install_property (object_class, PROP_UID, properties[PROP_UID]);
properties[PROP_UDEV_DEVICE] =
g_param_spec_object (MM_DEVICE_UDEV_DEVICE,
diff --git a/src/mm-device.h b/src/mm-device.h
index 2da82223..57726e6c 100644
--- a/src/mm-device.h
+++ b/src/mm-device.h
@@ -34,7 +34,7 @@ typedef struct _MMDevice MMDevice;
typedef struct _MMDeviceClass MMDeviceClass;
typedef struct _MMDevicePrivate MMDevicePrivate;
-#define MM_DEVICE_PATH "path"
+#define MM_DEVICE_UID "uid"
#define MM_DEVICE_UDEV_DEVICE "udev-device"
#define MM_DEVICE_PLUGIN "plugin"
#define MM_DEVICE_MODEM "modem"
@@ -78,7 +78,7 @@ gboolean mm_device_create_modem (MMDevice *self,
GError **error);
void mm_device_remove_modem (MMDevice *self);
-const gchar *mm_device_get_path (MMDevice *self);
+const gchar *mm_device_get_uid (MMDevice *self);
const gchar **mm_device_get_drivers (MMDevice *self);
guint16 mm_device_get_vendor (MMDevice *self);
guint16 mm_device_get_product (MMDevice *self);
@@ -104,7 +104,7 @@ gboolean mm_device_get_hotplugged (MMDevice *self);
/* For testing purposes */
-MMDevice *mm_device_virtual_new (const gchar *path,
+MMDevice *mm_device_virtual_new (const gchar *uid,
gboolean hotplugged);
void mm_device_virtual_grab_ports (MMDevice *self,
const gchar **ports);
diff --git a/src/mm-plugin-manager.c b/src/mm-plugin-manager.c
index 22965fdb..8408dc33 100644
--- a/src/mm-plugin-manager.c
+++ b/src/mm-plugin-manager.c
@@ -1355,7 +1355,7 @@ plugin_manager_peek_device_context (MMPluginManager *self,
device_context = (DeviceContext *)(l->data);
if ((device == device_context->device) ||
- (! g_strcmp0 (mm_device_get_path (device_context->device), mm_device_get_path (device))))
+ (!g_strcmp0 (mm_device_get_uid (device_context->device), mm_device_get_uid (device))))
return device_context;
}
return NULL;
@@ -1427,7 +1427,7 @@ mm_plugin_manager_device_support_check (MMPluginManager *self,
if (device_context) {
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_IN_PROGRESS,
"Device support check task already available for device '%s'",
- mm_device_get_path (device));
+ mm_device_get_uid (device));
g_object_unref (task);
return;
}
@@ -1439,7 +1439,7 @@ mm_plugin_manager_device_support_check (MMPluginManager *self,
self->priv->device_contexts = g_list_prepend (self->priv->device_contexts, device_context);
mm_dbg ("[plugin manager] task %s: new support task for device: %s",
- device_context->name, mm_device_get_path (device_context->device));
+ device_context->name, mm_device_get_uid (device_context->device));
/* Run device context */
device_context_run (self,
diff --git a/src/mm-plugin.c b/src/mm-plugin.c
index 78b767d8..0d9b4087 100644
--- a/src/mm-plugin.c
+++ b/src/mm-plugin.c
@@ -865,7 +865,7 @@ mm_plugin_create_modem (MMPlugin *self,
/* Let the plugin create the modem from the port probe results */
modem = MM_PLUGIN_GET_CLASS (self)->create_modem (MM_PLUGIN (self),
- mm_device_get_path (device),
+ mm_device_get_uid (device),
mm_device_get_drivers (device),
mm_device_get_vendor (device),
mm_device_get_product (device),
diff --git a/src/mm-plugin.h b/src/mm-plugin.h
index 04916794..afe300ad 100644
--- a/src/mm-plugin.h
+++ b/src/mm-plugin.h
@@ -104,7 +104,7 @@ struct _MMPluginClass {
/* Plugins need to provide a method to create a modem object given
* a list of port probes (Mandatory) */
MMBaseModem *(*create_modem) (MMPlugin *plugin,
- const gchar *sysfs_path,
+ const gchar *uid,
const gchar **drivers,
guint16 vendor,
guint16 product,