focaltech_moc: Simplify interface claiming error handling

This commit is contained in:
Marco Trevisan (Treviño)
2026-07-02 13:18:26 +02:00
parent 4061d76218
commit 0e64435628
+13 -25
View File
@@ -460,17 +460,16 @@ get_g_usb_device_direction_des (GUsbDeviceDirection dir)
} }
} }
static int static gboolean
usb_claim_interface_probe (FpDevice *device, int claim, GError **error) usb_claim_interface_probe (FpDevice *device, gboolean claim, GError **error)
{ {
g_autoptr(GPtrArray) interfaces = NULL; g_autoptr(GPtrArray) interfaces = NULL;
FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device); FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device);
int ret = -1;
int i; int i;
interfaces = g_usb_device_get_interfaces (fpi_device_get_usb_device (device), error); interfaces = g_usb_device_get_interfaces (fpi_device_get_usb_device (device), error);
if (interfaces == NULL) if (interfaces == NULL)
return ret; return FALSE;
for (i = 0; i < interfaces->len; i++) for (i = 0; i < interfaces->len; i++)
{ {
@@ -482,11 +481,9 @@ usb_claim_interface_probe (FpDevice *device, int claim, GError **error)
g_usb_interface_get_subclass (cur_iface), g_usb_interface_get_subclass (cur_iface),
g_usb_interface_get_protocol (cur_iface)); g_usb_interface_get_protocol (cur_iface));
if (claim == 1) if (claim)
{ {
int j; for (int j = 0; j < endpoints->len; j++)
for (j = 0; j < endpoints->len; j++)
{ {
GUsbEndpoint *endpoint = g_ptr_array_index (endpoints, j); GUsbEndpoint *endpoint = g_ptr_array_index (endpoints, j);
GBytes *bytes = g_usb_endpoint_get_extra (endpoint); GBytes *bytes = g_usb_endpoint_get_extra (endpoint);
@@ -513,21 +510,17 @@ usb_claim_interface_probe (FpDevice *device, int claim, GError **error)
if (!g_usb_device_claim_interface (fpi_device_get_usb_device (device), if (!g_usb_device_claim_interface (fpi_device_get_usb_device (device),
g_usb_interface_get_number (cur_iface), g_usb_interface_get_number (cur_iface),
0, error)) 0, error))
return ret; return FALSE;
} }
else if (!g_usb_device_release_interface (fpi_device_get_usb_device (device), else if (!g_usb_device_release_interface (fpi_device_get_usb_device (device),
g_usb_interface_get_number (cur_iface), g_usb_interface_get_number (cur_iface),
0, error)) 0, error))
{ {
return ret; return FALSE;
}
} }
return TRUE;
}
ret = 0;
return ret;
} }
static void static void
@@ -536,7 +529,7 @@ task_ssm_init_done (FpiSsm *ssm, FpDevice *device, GError *error)
FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device); FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device);
if (error) if (error)
usb_claim_interface_probe (device, 0, NULL); usb_claim_interface_probe (device, FALSE, NULL);
fpi_device_open_complete (FP_DEVICE (self), g_steal_pointer (&error)); fpi_device_open_complete (FP_DEVICE (self), g_steal_pointer (&error));
} }
@@ -651,8 +644,8 @@ dev_init_handler (FpiSsm *ssm, FpDevice *device)
static void static void
focaltech_moc_open (FpDevice *device) focaltech_moc_open (FpDevice *device)
{ {
g_autoptr(GError) error = NULL;
FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device); FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device);
GError *error = NULL;
if (!g_usb_device_reset (fpi_device_get_usb_device (device), &error)) if (!g_usb_device_reset (fpi_device_get_usb_device (device), &error))
{ {
@@ -660,7 +653,7 @@ focaltech_moc_open (FpDevice *device)
return; return;
} }
if (usb_claim_interface_probe (device, 1, &error) != 0) if (!usb_claim_interface_probe (device, TRUE, &error))
{ {
fpi_device_open_complete (FP_DEVICE (self), g_steal_pointer (&error)); fpi_device_open_complete (FP_DEVICE (self), g_steal_pointer (&error));
return; return;
@@ -676,12 +669,7 @@ task_ssm_exit_done (FpiSsm *ssm, FpDevice *device, GError *error)
FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device); FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device);
if (!error) if (!error)
{ usb_claim_interface_probe (device, FALSE, &error);
GError *local_error = NULL;
if (usb_claim_interface_probe (device, 0, &local_error) < 0)
g_propagate_error (&error, g_steal_pointer (&local_error));
}
fpi_device_close_complete (FP_DEVICE (self), error); fpi_device_close_complete (FP_DEVICE (self), error);
self->task_ssm = NULL; self->task_ssm = NULL;