libdfu: Add dfu_context_get_device_by_platform_id()

This lets us get the connection platform ID without exposing the GUsbDevice.
This commit is contained in:
Richard Hughes 2015-11-24 18:30:42 +00:00
parent a45d00eb2c
commit 42ffdf7645
4 changed files with 62 additions and 0 deletions

View File

@ -509,6 +509,46 @@ dfu_context_get_device_by_vid_pid (DfuContext *context,
return g_object_ref (device);
}
/**
* dfu_context_get_device_by_platform_id:
* @context: a #DfuContext
* @platform_id: a platform ID
* @error: a #GError, or %NULL
*
* Finds a device in the context with a specific platform ID.
*
* Return value: (transfer full): a #DfuDevice for success, or %NULL for an error
*
* Since: 0.5.4
**/
DfuDevice *
dfu_context_get_device_by_platform_id (DfuContext *context,
const gchar *platform_id,
GError **error)
{
DfuContextPrivate *priv = GET_PRIVATE (context);
DfuContextItem *item;
guint i;
g_return_val_if_fail (DFU_IS_CONTEXT (context), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
/* search all devices */
for (i = 0; i < priv->devices->len; i++) {
item = g_ptr_array_index (priv->devices, i);
if (g_strcmp0 (dfu_device_get_platform_id (item->device),
platform_id) == 0) {
return g_object_ref (item->device);
}
}
g_set_error (error,
DFU_ERROR,
DFU_ERROR_NOT_FOUND,
"no device matches for %s",
platform_id);
return NULL;
}
/**
* dfu_context_get_device_default:
* @context: a #DfuContext

View File

@ -65,6 +65,9 @@ DfuDevice *dfu_context_get_device_by_vid_pid (DfuContext *context,
guint16 vid,
guint16 pid,
GError **error);
DfuDevice *dfu_context_get_device_by_platform_id (DfuContext *context,
const gchar *platform_id,
GError **error);
DfuDevice *dfu_context_get_device_default (DfuContext *context,
GError **error);

View File

@ -731,6 +731,24 @@ dfu_device_get_target_by_alt_name (DfuDevice *device,
return NULL;
}
/**
* dfu_device_get_platform_id:
* @device: a #DfuDevice
*
* Gets the platform ID which normally corresponds to the port in some way.
*
* Return value: string or %NULL
*
* Since: 0.5.4
**/
const gchar *
dfu_device_get_platform_id (DfuDevice *device)
{
DfuDevicePrivate *priv = GET_PRIVATE (device);
g_return_val_if_fail (DFU_IS_DEVICE (device), NULL);
return g_usb_device_get_platform_id (priv->dev);
}
/**
* dfu_device_get_runtime_vid:
* @device: a #DfuDevice

View File

@ -78,6 +78,7 @@ gboolean dfu_device_open (DfuDevice *device,
GError **error);
gboolean dfu_device_close (DfuDevice *device,
GError **error);
const gchar *dfu_device_get_platform_id (DfuDevice *device);
GPtrArray *dfu_device_get_targets (DfuDevice *device);
DfuTarget *dfu_device_get_target_by_alt_setting (DfuDevice *device,
guint8 alt_setting,