summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2015-01-05 15:55:27 +0000
committerRichard Hughes <richard@hughsie.com>2015-01-05 15:55:27 +0000
commit57b4a061eb31e35bfa69bb3b8f538c483451d940 (patch)
treefb619814cefa5cfd658454d685bc64cec0318859
parent8223c11a04b5e54761c7142690fb8c766293f3f1 (diff)
downloadgusb-57b4a061eb31e35bfa69bb3b8f538c483451d940.tar.gz
Add g_usb_device_get_parent()
This allows us to create something more than a flat list of devices.
-rw-r--r--gusb/gusb-device.c22
-rw-r--r--gusb/gusb-device.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/gusb/gusb-device.c b/gusb/gusb-device.c
index 45e2623..2a1474d 100644
--- a/gusb/gusb-device.c
+++ b/gusb/gusb-device.c
@@ -70,6 +70,28 @@ G_DEFINE_TYPE_WITH_CODE (GUsbDevice, g_usb_device, G_TYPE_OBJECT,
g_usb_device_initable_iface_init))
/**
+ * g_usb_device_get_parent:
+ * @device: a #GUsbDevice instance
+ *
+ * Gets the device parent if one exists.
+ *
+ * Return value: (transfer full): #GUsbDevice or %NULL
+ **/
+GUsbDevice *
+g_usb_device_get_parent (GUsbDevice *device)
+{
+ GUsbDevicePrivate *priv = device->priv;
+ libusb_device *parent;
+ parent = libusb_get_parent (priv->device);
+ if (parent == NULL)
+ return NULL;
+ return g_usb_context_find_by_bus_address (priv->context,
+ libusb_get_bus_number (parent),
+ libusb_get_device_address (parent),
+ NULL);
+}
+
+/**
* g_usb_device_error_quark:
*
* Return value: Our personal error quark.
diff --git a/gusb/gusb-device.h b/gusb/gusb-device.h
index e72dd53..c738a26 100644
--- a/gusb/gusb-device.h
+++ b/gusb/gusb-device.h
@@ -121,6 +121,7 @@ GType g_usb_device_get_type (void);
GQuark g_usb_device_error_quark (void);
const gchar *g_usb_device_get_platform_id (GUsbDevice *device);
+GUsbDevice *g_usb_device_get_parent (GUsbDevice *device);
guint8 g_usb_device_get_bus (GUsbDevice *device);
guint8 g_usb_device_get_address (GUsbDevice *device);