mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-16 15:33:12 +00:00
logitech_hidpp: Ignore detach failures (Fixes: #1183)
Some logitech devices seem to reboot immediately and the failures then look like a broken pipe, but are actually the device rebooting. If the device really did fail to detach after the timeout is done we'll see a message that the device failed to come back instead.
This commit is contained in:
parent
38d7074215
commit
ddfc72db56
@ -270,6 +270,7 @@ fu_logitech_hidpp_runtime_detach (FuDevice *device, GError **error)
|
|||||||
{
|
{
|
||||||
FuLogitechHidPpRuntime *self = FU_UNIFYING_RUNTIME (device);
|
FuLogitechHidPpRuntime *self = FU_UNIFYING_RUNTIME (device);
|
||||||
g_autoptr(FuLogitechHidPpHidppMsg) msg = fu_logitech_hidpp_msg_new ();
|
g_autoptr(FuLogitechHidPpHidppMsg) msg = fu_logitech_hidpp_msg_new ();
|
||||||
|
g_autoptr(GError) error_local = NULL;
|
||||||
msg->report_id = HIDPP_REPORT_ID_SHORT;
|
msg->report_id = HIDPP_REPORT_ID_SHORT;
|
||||||
msg->device_id = HIDPP_DEVICE_ID_RECEIVER;
|
msg->device_id = HIDPP_DEVICE_ID_RECEIVER;
|
||||||
msg->sub_id = HIDPP_SUBID_SET_REGISTER;
|
msg->sub_id = HIDPP_SUBID_SET_REGISTER;
|
||||||
@ -279,9 +280,14 @@ fu_logitech_hidpp_runtime_detach (FuDevice *device, GError **error)
|
|||||||
msg->data[2] = 'P';
|
msg->data[2] = 'P';
|
||||||
msg->hidpp_version = 1;
|
msg->hidpp_version = 1;
|
||||||
msg->flags = FU_UNIFYING_HIDPP_MSG_FLAG_LONGER_TIMEOUT;
|
msg->flags = FU_UNIFYING_HIDPP_MSG_FLAG_LONGER_TIMEOUT;
|
||||||
if (!fu_logitech_hidpp_send (self->io_channel, msg, FU_UNIFYING_DEVICE_TIMEOUT_MS, error)) {
|
if (!fu_logitech_hidpp_send (self->io_channel, msg, FU_UNIFYING_DEVICE_TIMEOUT_MS, &error_local)) {
|
||||||
g_prefix_error (error, "failed to detach to bootloader: ");
|
if (g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_WRITE)) {
|
||||||
return FALSE;
|
g_debug ("failed to detach to bootloader: %s", error_local->message);
|
||||||
|
} else {
|
||||||
|
g_prefix_error (&error_local, "failed to detach to bootloader: ");
|
||||||
|
g_propagate_error (error, g_steal_pointer (&error_local));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG);
|
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
Loading…
Reference in New Issue
Block a user