summaryrefslogtreecommitdiff
path: root/src/cd-sensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cd-sensor.c')
-rw-r--r--src/cd-sensor.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/cd-sensor.c b/src/cd-sensor.c
index ba75048..d3aa099 100644
--- a/src/cd-sensor.c
+++ b/src/cd-sensor.c
@@ -105,6 +105,7 @@ typedef struct
gboolean locked;
guint64 caps;
gchar *object_path;
+ gchar *usb_path;
guint watcher_id;
GDBusConnection *connection;
guint registration_id;
@@ -1307,6 +1308,16 @@ cd_sensor_get_device_path (CdSensor *sensor)
#endif
}
+/**
+ * cd_sensor_get_usb_path:
+ **/
+const gchar *
+cd_sensor_get_usb_path (CdSensor *sensor)
+{
+ CdSensorPrivate *priv = GET_PRIVATE (sensor);
+ return priv->usb_path;
+}
+
#ifdef HAVE_GUSB
/**
* cd_sensor_open_usb_device:
@@ -1409,6 +1420,8 @@ cd_sensor_set_from_device (CdSensor *sensor,
gboolean use_database;
gchar *tmp;
guint i;
+ guint8 busnum;
+ guint8 devnum;
/* only use the database if we found both the VID and the PID */
use_database = g_udev_device_has_property (device, "ID_VENDOR_FROM_DATABASE") &&
@@ -1490,6 +1503,12 @@ cd_sensor_set_from_device (CdSensor *sensor,
* device changes as this is only a snapshot */
priv->device = g_object_ref (device);
+ /* create USB path */
+ busnum = g_udev_device_get_sysfs_attr_as_int (priv->device, "busnum");
+ devnum = g_udev_device_get_sysfs_attr_as_int (priv->device, "devnum");
+ priv->usb_path = g_strdup_printf ("/dev/bus/usb/%03i/%03i",
+ busnum, devnum);
+
/* success */
return TRUE;
}
@@ -1758,6 +1777,7 @@ cd_sensor_finalize (GObject *object)
g_free (priv->serial);
g_free (priv->id);
g_free (priv->object_path);
+ g_free (priv->usb_path);
g_hash_table_unref (priv->options);
g_hash_table_unref (priv->metadata);
#ifdef HAVE_GUSB