## FuPlugin FuPlugin — a daemon plugin |

## Functions

const gchar * | fu_plugin_get_name ()
FuPluginData * | fu_plugin_get_data ()
FuPluginData * | fu_plugin_alloc_data ()
gboolean | fu_plugin_get_enabled ()
void | fu_plugin_set_enabled ()
GUsbContext * | fu_plugin_get_usb_context ()
GPtrArray * | fu_plugin_get_supported ()
void | fu_plugin_device_add ()
void | fu_plugin_device_add_delay ()
void | fu_plugin_device_remove ()
void | fu_plugin_device_register ()
void | fu_plugin_set_status ()
void | fu_plugin_set_percentage ()
void | fu_plugin_recoldplug ()
void | fu_plugin_set_coldplug_delay ()
gpointer | fu_plugin_cache_lookup ()
void | fu_plugin_cache_remove ()
void | fu_plugin_cache_add ()
gboolean | fu_plugin_check_hwid ()
gboolean | fu_plugin_check_supported ()
const gchar * | fu_plugin_get_dmi_value ()
const gchar * | fu_plugin_get_smbios_string ()
GBytes * | fu_plugin_get_smbios_data ()
void | fu_plugin_add_rule ()

## Types and Values

#define | FU_TYPE_PLUGIN
struct | FuPluginClass
enum | FuPluginVerifyFlags
enum | FuPluginRule
typedef | FuPluginData
| FuPlugin

## Description

An object that represents a plugin run by the daemon.

See also: FuDevice

## Functions

### fu_plugin_get_name ()

    const gchar *
    fu_plugin_get_name (FuPlugin *plugin);

Gets the plugin name.

#### Parameters

plugin | A FuPlugin |

#### Returns

a plugin name, or `NULL` for unknown.

Since: 0.8.0

### fu_plugin_get_data ()

    FuPluginData *
    fu_plugin_get_data (FuPlugin *plugin);

Gets the per-plugin allocated private data. This will return `NULL` unless `fu_plugin_alloc_data()` has been called by the plugin.

#### Parameters

plugin | A FuPlugin |

#### Returns

a pointer to a structure, or `NULL` for unset.

[transfer none]

Since: 0.8.0

### fu_plugin_alloc_data ()

    FuPluginData *
    fu_plugin_alloc_data (FuPlugin *plugin,
                          gsize data_sz);

Allocates the per-plugin allocated private data.

#### Parameters

plugin | A FuPlugin |
data_sz | the size to allocate |

#### Returns

a pointer to a structure, or `NULL` for unset.

[transfer full]

Since: 0.8.0

### fu_plugin_get_enabled ()

    gboolean
    fu_plugin_get_enabled (FuPlugin *plugin);

Returns if the plugin is enabled. Plugins may self-disable using `fu_plugin_set_enabled()` or can be disabled by the daemon.

#### Parameters

plugin | A FuPlugin |

#### Returns

`TRUE` if the plugin is currently enabled.

Since: 0.8.0

### fu_plugin_set_enabled ()

    void
    fu_plugin_set_enabled (FuPlugin *plugin,
                           gboolean enabled);

Enables or disables a plugin. Plugins can self-disable at any point.

#### Parameters

plugin | A FuPlugin |
enabled | the enabled value |

Since: 0.8.0

### fu_plugin_get_usb_context ()

    GUsbContext *
    fu_plugin_get_usb_context (FuPlugin *plugin);

Gets the shared USB context that all plugins can use.

#### Parameters

plugin | A FuPlugin |

#### Returns

a GUsbContext.

[transfer none]

Since: 0.8.0

### fu_plugin_get_supported ()

    GPtrArray *
    fu_plugin_get_supported (FuPlugin *plugin);

Gets all the device GUIDs supported by the daemon.

#### Parameters

plugin | A FuPlugin |

#### Returns

GUIDs.

[element-type utf8][transfer none]

Since: 1.0.0

### fu_plugin_device_add ()

    void
    fu_plugin_device_add (FuPlugin *plugin,
                          FuDevice *device);

Asks the daemon to add a device to the exported list. If this device ID has already been added by a different plugin then this request will be ignored.

Plugins should use `fu_plugin_device_add_delay()` if they are not capable of actually flashing an image to the hardware so that higher-priority plugins can add the device themselves.

#### Parameters

plugin | A FuPlugin |
device | A FuDevice |

Since: 0.8.0

### fu_plugin_device_add_delay ()

    void
    fu_plugin_device_add_delay (FuPlugin *plugin,
                                FuDevice *device);

Asks the daemon to add a device to the exported list after a small delay.

#### Parameters

plugin | A FuPlugin |
device | A FuDevice |

Since: 0.8.0

### fu_plugin_device_remove ()

    void
    fu_plugin_device_remove (FuPlugin *plugin,
                             FuDevice *device);

Asks the daemon to remove a device from the exported list.

#### Parameters

plugin | A FuPlugin |
device | A FuDevice |

Since: 0.8.0

### fu_plugin_device_register ()

    void
    fu_plugin_device_register (FuPlugin *plugin,
                               FuDevice *device);

Registers the device with other plugins so they can set metadata.

Plugins do not have to call this manually as this is done automatically when using `fu_plugin_device_add()`. They may wish to use this manually if for intance the coldplug should be ignored based on the metadata set from other plugins.

#### Parameters

plugin | A FuPlugin |
device | A FuDevice |

Since: 0.9.7

### fu_plugin_set_status ()

    void
    fu_plugin_set_status (FuPlugin *plugin,
                          FwupdStatus status);

Sets the global state of the daemon according to the current plugin action.

#### Parameters

plugin | A FuPlugin |
status | A FwupdStatus, e.g. FWUPD_STATUS_DECOMPRESSING |

Since: 0.8.0

### fu_plugin_set_percentage ()

    void
    fu_plugin_set_percentage (FuPlugin *plugin,
                              guint percentage);

Sets the global completion of the daemon according to the current plugin action.

#### Parameters

plugin | A FuPlugin |
percentage | the percentage complete |

Since: 0.8.0

### fu_plugin_recoldplug ()

    void
    fu_plugin_recoldplug (FuPlugin *plugin);

Ask all the plugins to coldplug all devices, which will include the `prepare()` and `cleanup()` phases. Duplicate devices added will be ignored.

#### Parameters

plugin | A FuPlugin |

Since: 0.8.0

### fu_plugin_set_coldplug_delay ()

    void
    fu_plugin_set_coldplug_delay (FuPlugin *plugin,
                                  guint duration);

Set the minimum time that should be waited inbetween the call to `fu_plugin_coldplug_prepare()` and `fu_plugin_coldplug()`. This is usually going to be the minimum hardware initialisation time from a datasheet.

It is better to use this function rather than using a `sleep()` in the plugin itself as then only one delay is done in the daemon rather than waiting for each coldplug prepare in a serial way.

Additionally, very long delays should be avoided as the daemon will be blocked from processing requests whilst the coldplug delay is being performed.

#### Parameters

plugin | A FuPlugin |
duration | A delay in milliseconds |

Since: 0.8.0

### fu_plugin_cache_lookup ()

    gpointer
    fu_plugin_cache_lookup (FuPlugin *plugin,
                            const gchar *id);

Finds an object in the per-plugin cache.

#### Parameters

plugin | A FuPlugin |
id | the key |

#### Returns

a GObject, or `NULL` for unfound.

[transfer none]

Since: 0.8.0

### fu_plugin_cache_remove ()

    void
    fu_plugin_cache_remove (FuPlugin *plugin,
                            const gchar *id);

Removes an object from the per-plugin cache.

#### Parameters

plugin | A FuPlugin |
id | the key |

Since: 0.8.0

### fu_plugin_cache_add ()

    void
    fu_plugin_cache_add (FuPlugin *plugin,
                         const gchar *id,
                         gpointer dev);

Adds an object to the per-plugin cache.

#### Parameters

plugin | A FuPlugin |
id | the key |
dev | a GObject, typically a FuDevice |

Since: 0.8.0

### fu_plugin_check_hwid ()

    gboolean
    fu_plugin_check_hwid (FuPlugin *plugin,
                          const gchar *hwid);

Checks to see if a specific GUID exists. All hardware IDs on a specific system can be shown using the `fwupdmgr hwids` command.

#### Parameters

plugin | A FuPlugin |
hwid | A Hardware ID GUID, e.g. `6de5d951-d755-576b-bd09-c5cf66b27234` |

#### Returns

`TRUE` if the HwId is found on the system.

Since: 0.9.1

### fu_plugin_check_supported ()

    gboolean
    fu_plugin_check_supported (FuPlugin *plugin,
                               const gchar *guid);

Checks to see if a specific device GUID is supported, i.e. available in the AppStream metadata.

#### Parameters

plugin | A FuPlugin |
guid | A Hardware ID GUID, e.g. `6de5d951-d755-576b-bd09-c5cf66b27234` |

#### Returns

`TRUE` if the device is supported.

Since: 1.0.0

### fu_plugin_get_dmi_value ()

    const gchar *
    fu_plugin_get_dmi_value (FuPlugin *plugin,
                             const gchar *dmi_id);

Gets a hardware DMI value.

#### Parameters

plugin | A FuPlugin |
dmi_id | A DMI ID, e.g. `BiosVersion` |

#### Returns

The string, or `NULL`

Since: 0.9.7

### fu_plugin_get_smbios_string ()

    const gchar *
    fu_plugin_get_smbios_string (FuPlugin *plugin,
                                 guint8 structure_type,
                                 guint8 offset);

Gets a hardware SMBIOS string.

The `type` and `offset` can be referenced from the DMTF SMBIOS specification: https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.1.1.pdf

#### Parameters

plugin | A FuPlugin |
structure_type | A SMBIOS structure type, e.g. `FU_SMBIOS_STRUCTURE_TYPE_BIOS` |
offset | A SMBIOS offset |

#### Returns

A string, or `NULL`

Since: 0.9.8

### fu_plugin_get_smbios_data ()

    GBytes *
    fu_plugin_get_smbios_data (FuPlugin *plugin,
                               guint8 structure_type);

Gets a hardware SMBIOS data.

#### Parameters

plugin | A FuPlugin |
structure_type | A SMBIOS structure type, e.g. `FU_SMBIOS_STRUCTURE_TYPE_BIOS` |

#### Returns

A GBytes, or `NULL`.

[transfer none]

Since: 0.9.8

### fu_plugin_add_rule ()

    void
    fu_plugin_add_rule (FuPlugin *plugin,
                        FuPluginRule rule,
                        const gchar *name);

If the plugin name is found, the rule will be used to sort the plugin list, for example the plugin specified by `name` will be ordered after this plugin when `FU_PLUGIN_RULE_RUN_AFTER` is used.

NOTE: The depsolver is iterative and may not solve overly-complicated rules; If depsolving fails then fwupd will not start.

#### Parameters

plugin | a FuPlugin |
rule | a FuPluginRule, e.g. `FU_PLUGIN_RULE_CONFLICTS` |
name | a plugin name, e.g. `upower` |

## Types and Values

### FU_TYPE_PLUGIN

    #define FU_TYPE_PLUGIN (fu_plugin_get_type ())

### struct FuPluginClass

    struct FuPluginClass {
    	GObjectClass	 parent_class;
    	/* signals */
    	void		 (* device_added)		(FuPlugin *plugin,
    							 FuDevice *device);
    	void		 (* device_removed)		(FuPlugin *plugin,
    							 FuDevice *device);
    	void		 (* status_changed)		(FuPlugin *plugin,
    							 FwupdStatus	 status);
    	void		 (* percentage_changed)		(FuPlugin *plugin,
    							 guint		 percentage);
    	void		 (* recoldplug)			(FuPlugin *plugin);
    	void		 (* set_coldplug_delay)		(FuPlugin *plugin,
    							 guint		 duration);
    	void		 (* device_register)		(FuPlugin *plugin,
    							 FuDevice *device);
    };

### enum FuPluginVerifyFlags

Flags used when verifying, currently unused.

#### Members

FU_PLUGIN_VERIFY_FLAG_NONE | No flags set |

### enum FuPluginRule

The rules used for ordering plugins. Plugins are expected to add rules in `fu_plugin_initialize()`.

#### Members

FU_PLUGIN_RULE_CONFLICTS | The plugin conflicts with another |
FU_PLUGIN_RULE_RUN_AFTER | Order the plugin after another |
FU_PLUGIN_RULE_RUN_BEFORE | Order the plugin before another |

### FuPluginData

### FuPlugin

    typedef struct _FuPlugin FuPlugin;