summaryrefslogtreecommitdiff
path: root/gusb/gusb-device-event.c
diff options
context:
space:
mode:
Diffstat (limited to 'gusb/gusb-device-event.c')
-rw-r--r--gusb/gusb-device-event.c40
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
*