diff options
author | Richard Hughes <richard@hughsie.com> | 2023-02-01 14:33:27 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2023-02-01 16:24:02 +0000 |
commit | 4db790b78afc0642be95416cccba9c05b7ca5c5a (patch) | |
tree | 47e4caebdb110c869cd7f26398e0ebced7a90d22 /gusb/gusb-device-event.c | |
parent | e62f8f76d0bbf755ed5d90f44c10ae8f58605202 (diff) | |
download | gusb-4db790b78afc0642be95416cccba9c05b7ca5c5a.tar.gz |
Save the libusb error if libusb_submit_transfer() fails
If the return code is LIBUSB_ERROR_NO_DEVICE we want to record that.
Diffstat (limited to 'gusb/gusb-device-event.c')
-rw-r--r-- | gusb/gusb-device-event.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gusb/gusb-device-event.c b/gusb/gusb-device-event.c index 0d9eb2e..648dbe2 100644 --- a/gusb/gusb-device-event.c +++ b/gusb/gusb-device-event.c @@ -18,6 +18,7 @@ struct _GUsbDeviceEvent { GObject parent_instance; gchar *id; gint status; + gint rc; GBytes *bytes; }; @@ -62,6 +63,7 @@ _g_usb_device_event_load(GUsbDeviceEvent *self, JsonObject *json_object, GError self->status = json_object_get_int_member_with_default(json_object, "Status", LIBUSB_TRANSFER_COMPLETED); + self->rc = json_object_get_int_member_with_default(json_object, "Error", LIBUSB_SUCCESS); /* extra data */ str = json_object_get_string_member_with_default(json_object, "Data", NULL); @@ -100,6 +102,10 @@ _g_usb_device_event_save(GUsbDeviceEvent *self, JsonBuilder *json_builder, GErro json_builder_set_member_name(json_builder, "Status"); json_builder_add_int_value(json_builder, self->status); } + if (self->rc != LIBUSB_SUCCESS) { + json_builder_set_member_name(json_builder, "Error"); + json_builder_add_int_value(json_builder, self->rc); + } if (self->bytes != NULL) { g_autofree gchar *str = g_base64_encode(g_bytes_get_data(self->bytes, NULL), g_bytes_get_size(self->bytes)); @@ -180,6 +186,40 @@ _g_usb_device_event_set_status(GUsbDeviceEvent *self, gint status) } /** + * g_usb_device_event_get_rc: + * @self: a #GUsbDeviceEvent + * + * Gets any return code from the event. + * + * Return value: a `enum libusb_error` + * + * Since: 0.4.5 + **/ +gint +g_usb_device_event_get_rc(GUsbDeviceEvent *self) +{ + g_return_val_if_fail(G_USB_IS_DEVICE_EVENT(self), LIBUSB_ERROR_OTHER); + return self->rc; +} + +/** + * _g_usb_device_event_set_rc: + * @self: a #GUsbDeviceEvent + * @status: `enum libusb_error` + * + * Set the return code of the event, e.g. `LIBUSB_ERROR_TIMEOUT`. + * + * Since: 0.4.5 + **/ +void +_g_usb_device_event_set_rc(GUsbDeviceEvent *self, gint rc) +{ + g_return_if_fail(G_USB_IS_DEVICE_EVENT(self)); + g_return_if_fail(rc <= 0); + self->rc = rc; +} + +/** * g_usb_device_event_get_bytes: * @self: a #GUsbDeviceEvent * |