/* * Copyright (C) 2015 Richard Hughes * * SPDX-License-Identifier: LGPL-2.1+ */ #pragma once #include #include #include #include #include "fu-dfu-common.h" #include "fu-dfu-target.h" #define FU_TYPE_DFU_DEVICE (fu_dfu_device_get_type()) G_DECLARE_DERIVABLE_TYPE(FuDfuDevice, fu_dfu_device, FU, DFU_DEVICE, FuUsbDevice) /** * FuDfuDeviceAttrs: * @FU_DFU_DEVICE_ATTR_NONE: No attributes set * @FU_DFU_DEVICE_ATTR_CAN_DOWNLOAD: Can download from host->device * @FU_DFU_DEVICE_ATTR_CAN_UPLOAD: Can upload from device->host * @FU_DFU_DEVICE_ATTR_MANIFEST_TOL: Can answer GetStatus in manifest * @FU_DFU_DEVICE_ATTR_WILL_DETACH: Will self-detach * @FU_DFU_DEVICE_ATTR_CAN_ACCELERATE: Use a larger transfer size for speed * * The device DFU attributes. **/ typedef enum { FU_DFU_DEVICE_ATTR_NONE = 0, FU_DFU_DEVICE_ATTR_CAN_DOWNLOAD = (1 << 0), FU_DFU_DEVICE_ATTR_CAN_UPLOAD = (1 << 1), FU_DFU_DEVICE_ATTR_MANIFEST_TOL = (1 << 2), FU_DFU_DEVICE_ATTR_WILL_DETACH = (1 << 3), FU_DFU_DEVICE_ATTR_CAN_ACCELERATE = (1 << 7), /*< private >*/ FU_DFU_DEVICE_ATTR_LAST } FuDfuDeviceAttrs; struct _FuDfuDeviceClass { FuUsbDeviceClass parent_class; }; FuDfuDevice * fu_dfu_device_new(GUsbDevice *usb_device); const gchar * fu_dfu_device_get_platform_id(FuDfuDevice *self); GPtrArray * fu_dfu_device_get_targets(FuDfuDevice *self); FuDfuTarget * fu_dfu_device_get_target_by_alt_setting(FuDfuDevice *self, guint8 alt_setting, GError **error); FuDfuTarget * fu_dfu_device_get_target_by_alt_name(FuDfuDevice *self, const gchar *alt_name, GError **error); const gchar * fu_dfu_device_get_chip_id(FuDfuDevice *self); void fu_dfu_device_set_chip_id(FuDfuDevice *self, const gchar *chip_id); guint16 fu_dfu_device_get_runtime_vid(FuDfuDevice *self); guint16 fu_dfu_device_get_runtime_pid(FuDfuDevice *self); guint16 fu_dfu_device_get_runtime_release(FuDfuDevice *self); gboolean fu_dfu_device_reset(FuDfuDevice *self, GError **error); FuFirmware * fu_dfu_device_upload(FuDfuDevice *self, FuDfuTargetTransferFlags flags, GError **error); gboolean fu_dfu_device_refresh(FuDfuDevice *self, GError **error); gboolean fu_dfu_device_refresh_and_clear(FuDfuDevice *self, GError **error); gboolean fu_dfu_device_abort(FuDfuDevice *self, GError **error); gboolean fu_dfu_device_clear_status(FuDfuDevice *self, GError **error); guint8 fu_dfu_device_get_interface(FuDfuDevice *self); FuDfuState fu_dfu_device_get_state(FuDfuDevice *self); FuDfuStatus fu_dfu_device_get_status(FuDfuDevice *self); guint16 fu_dfu_device_get_transfer_size(FuDfuDevice *self); guint16 fu_dfu_device_get_version(FuDfuDevice *self); guint fu_dfu_device_get_timeout(FuDfuDevice *self); gboolean fu_dfu_device_can_upload(FuDfuDevice *self); gboolean fu_dfu_device_can_download(FuDfuDevice *self); gboolean fu_dfu_device_has_attribute(FuDfuDevice *self, FuDfuDeviceAttrs attribute); void fu_dfu_device_remove_attribute(FuDfuDevice *self, FuDfuDeviceAttrs attribute); void fu_dfu_device_set_transfer_size(FuDfuDevice *self, guint16 transfer_size); void fu_dfu_device_set_timeout(FuDfuDevice *self, guint timeout_ms); void fu_dfu_device_error_fixup(FuDfuDevice *self, GError **error); guint fu_dfu_device_get_download_timeout(FuDfuDevice *self); gchar * fu_dfu_device_get_attributes_as_string(FuDfuDevice *self); gboolean fu_dfu_device_ensure_interface(FuDfuDevice *self, GError **error);