/* * Copyright (C) 2015 Richard Hughes * * SPDX-License-Identifier: LGPL-2.1+ */ #pragma once #include #ifdef HAVE_GUSB #include #endif #include "fu-bluez-device.h" #include "fu-common-guid.h" #include "fu-common-version.h" #include "fu-common.h" #include "fu-context.h" #include "fu-device-locker.h" #include "fu-device.h" #include "fu-usb-device.h" //#include "fu-hid-device.h" #ifdef HAVE_GUDEV #include "fu-udev-device.h" #endif #include #include #define FU_TYPE_PLUGIN (fu_plugin_get_type()) G_DECLARE_DERIVABLE_TYPE(FuPlugin, fu_plugin, FU, PLUGIN, FwupdPlugin) #define fu_plugin_get_flags(p) fwupd_plugin_get_flags(FWUPD_PLUGIN(p)) #define fu_plugin_has_flag(p, f) fwupd_plugin_has_flag(FWUPD_PLUGIN(p), f) #define fu_plugin_add_flag(p, f) fwupd_plugin_add_flag(FWUPD_PLUGIN(p), f) #define fu_plugin_remove_flag(p, f) fwupd_plugin_remove_flag(FWUPD_PLUGIN(p), f) struct _FuPluginClass { FwupdPluginClass parent_class; /* signals */ void (*device_added)(FuPlugin *self, FuDevice *device); void (*device_removed)(FuPlugin *self, FuDevice *device); void (*status_changed)(FuPlugin *self, FwupdStatus status); void (*percentage_changed)(FuPlugin *self, guint percentage); void (*device_register)(FuPlugin *self, FuDevice *device); gboolean (*check_supported)(FuPlugin *self, const gchar *guid); void (*rules_changed)(FuPlugin *self); void (*config_changed)(FuPlugin *self); /*< private >*/ gpointer padding[19]; }; /** * FuPluginVerifyFlags: * @FU_PLUGIN_VERIFY_FLAG_NONE: No flags set * * Flags used when verifying, currently unused. **/ typedef enum { FU_PLUGIN_VERIFY_FLAG_NONE = 0, /*< private >*/ FU_PLUGIN_VERIFY_FLAG_LAST } FuPluginVerifyFlags; /** * FuPluginRule: * @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 * @FU_PLUGIN_RULE_BETTER_THAN: Is better than another plugin * @FU_PLUGIN_RULE_INHIBITS_IDLE: The plugin inhibits the idle shutdown * @FU_PLUGIN_RULE_METADATA_SOURCE: Uses another plugin as a source of report metadata * * The rules used for ordering plugins. * Plugins are expected to add rules in fu_plugin_initialize(). **/ typedef enum { FU_PLUGIN_RULE_CONFLICTS, FU_PLUGIN_RULE_RUN_AFTER, FU_PLUGIN_RULE_RUN_BEFORE, FU_PLUGIN_RULE_BETTER_THAN, FU_PLUGIN_RULE_INHIBITS_IDLE, FU_PLUGIN_RULE_METADATA_SOURCE, /* Since: 1.3.6 */ /*< private >*/ FU_PLUGIN_RULE_LAST } FuPluginRule; /** * FuPluginData: * * The plugin-allocated private data. **/ typedef struct FuPluginData FuPluginData; /* for plugins to use */ const gchar * fu_plugin_get_name(FuPlugin *self); FuPluginData * fu_plugin_get_data(FuPlugin *self); FuPluginData * fu_plugin_alloc_data(FuPlugin *self, gsize data_sz); FuContext * fu_plugin_get_context(FuPlugin *self); void fu_plugin_set_build_hash(FuPlugin *self, const gchar *build_hash); void fu_plugin_device_add(FuPlugin *self, FuDevice *device); void fu_plugin_device_remove(FuPlugin *self, FuDevice *device); void fu_plugin_device_register(FuPlugin *self, FuDevice *device); void fu_plugin_add_device_gtype(FuPlugin *self, GType device_gtype); void fu_plugin_add_firmware_gtype(FuPlugin *self, const gchar *id, GType gtype); void fu_plugin_add_udev_subsystem(FuPlugin *self, const gchar *subsystem); gpointer fu_plugin_cache_lookup(FuPlugin *self, const gchar *id); void fu_plugin_cache_remove(FuPlugin *self, const gchar *id); void fu_plugin_cache_add(FuPlugin *self, const gchar *id, gpointer dev); GPtrArray * fu_plugin_get_devices(FuPlugin *self); void fu_plugin_add_rule(FuPlugin *self, FuPluginRule rule, const gchar *name); void fu_plugin_add_report_metadata(FuPlugin *self, const gchar *key, const gchar *value); gchar * fu_plugin_get_config_value(FuPlugin *self, const gchar *key); gboolean fu_plugin_get_config_value_boolean(FuPlugin *self, const gchar *key); gboolean fu_plugin_has_custom_flag(FuPlugin *self, const gchar *flag);