Do not attempt to add DFU devices not in runtime mode

This commit is contained in:
Richard Hughes 2016-08-25 13:05:42 +01:00
parent fdf46169f3
commit cec5c1dd88

View File

@ -45,10 +45,11 @@ fu_provider_dfu_get_name (FuProvider *provider)
return "DFU"; return "DFU";
} }
static void static gboolean
fu_provider_dfu_device_update (FuProviderDfu *provider_dfu, fu_provider_dfu_device_update (FuProviderDfu *provider_dfu,
FuDevice *dev, FuDevice *dev,
DfuDevice *device) DfuDevice *device,
GError **error)
{ {
const gchar *platform_id; const gchar *platform_id;
guint16 release; guint16 release;
@ -60,8 +61,12 @@ fu_provider_dfu_device_update (FuProviderDfu *provider_dfu,
/* check mode */ /* check mode */
platform_id = dfu_device_get_platform_id (device); platform_id = dfu_device_get_platform_id (device);
if (dfu_device_get_runtime_vid (device) == 0xffff) { if (dfu_device_get_runtime_vid (device) == 0xffff) {
g_debug ("Ignoring DFU device not in runtime: %s", platform_id); g_set_error (error,
return; FWUPD_ERROR,
FWUPD_ERROR_INTERNAL,
"device not in runtime: %s",
platform_id);
return FALSE;
} }
/* check capabilities */ /* check capabilities */
@ -90,6 +95,7 @@ fu_provider_dfu_device_update (FuProviderDfu *provider_dfu,
dfu_device_get_runtime_pid (device), dfu_device_get_runtime_pid (device),
dfu_device_get_runtime_release (device)); dfu_device_get_runtime_release (device));
fu_device_add_guid (dev, devid2); fu_device_add_guid (dev, devid2);
return TRUE;
} }
static void static void
@ -100,6 +106,7 @@ fu_provider_dfu_device_changed_cb (DfuContext *ctx,
FuProviderDfuPrivate *priv = GET_PRIVATE (provider_dfu); FuProviderDfuPrivate *priv = GET_PRIVATE (provider_dfu);
FuDevice *dev; FuDevice *dev;
const gchar *platform_id; const gchar *platform_id;
g_autoptr(GError) error = NULL;
/* convert DfuDevice to FuDevice */ /* convert DfuDevice to FuDevice */
platform_id = dfu_device_get_platform_id (device); platform_id = dfu_device_get_platform_id (device);
@ -108,7 +115,10 @@ fu_provider_dfu_device_changed_cb (DfuContext *ctx,
g_warning ("cannot find device %s", platform_id); g_warning ("cannot find device %s", platform_id);
return; return;
} }
fu_provider_dfu_device_update (provider_dfu, dev, device); if (!fu_provider_dfu_device_update (provider_dfu, dev, device, &error)) {
g_warning ("ignoring device: %s", error->message);
return;
}
} }
static void static void
@ -141,7 +151,10 @@ fu_provider_dfu_device_added_cb (DfuContext *ctx,
/* create new device */ /* create new device */
dev = fu_device_new (); dev = fu_device_new ();
fu_device_set_id (dev, platform_id); fu_device_set_id (dev, platform_id);
fu_provider_dfu_device_update (provider_dfu, dev, device); if (!fu_provider_dfu_device_update (provider_dfu, dev, device, &error)) {
g_debug ("ignoring device: %s", error->message);
return;
}
/* open device to get display name */ /* open device to get display name */
if (!dfu_device_open (device, DFU_DEVICE_OPEN_FLAG_NO_AUTO_REFRESH, if (!dfu_device_open (device, DFU_DEVICE_OPEN_FLAG_NO_AUTO_REFRESH,