1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/*
* Copyright 1999-2021 Logitech, Inc.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
#include "config.h"
#include "fu-logitech-bulkcontroller-child.h"
#include "fu-logitech-bulkcontroller-device.h"
#include "fu-logitech-bulkcontroller-plugin.h"
struct _FuLogitechBulkcontrollerPlugin {
FuPlugin parent_instance;
gboolean post_install;
};
G_DEFINE_TYPE(FuLogitechBulkcontrollerPlugin, fu_logitech_bulkcontroller_plugin, FU_TYPE_PLUGIN)
static void
fu_logitech_bulkcontroller_plugin_to_string(FuPlugin *plugin, guint idt, GString *str)
{
FuLogitechBulkcontrollerPlugin *self = FU_LOGITECH_BULKCONTROLLER_PLUGIN(plugin);
fwupd_codec_string_append_bool(str, idt, "PostInstall", self->post_install);
}
static void
fu_logitech_bulkcontroller_plugin_init(FuLogitechBulkcontrollerPlugin *self)
{
}
static gboolean
fu_logitech_bulkcontroller_plugin_write_firmware(FuPlugin *plugin,
FuDevice *device,
FuFirmware *firmware,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
FuLogitechBulkcontrollerPlugin *self = FU_LOGITECH_BULKCONTROLLER_PLUGIN(plugin);
g_autoptr(FuDeviceLocker) locker = NULL;
locker = fu_device_locker_new(device, error);
if (locker == NULL)
return FALSE;
if (!fu_device_write_firmware(device, firmware, progress, flags, error))
return FALSE;
self->post_install = TRUE;
return TRUE;
}
static gboolean
fu_logitech_bulkcontroller_plugin_device_created(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuLogitechBulkcontrollerPlugin *self = FU_LOGITECH_BULKCONTROLLER_PLUGIN(plugin);
if (self->post_install) {
fu_device_add_private_flag(device,
FU_LOGITECH_BULKCONTROLLER_DEVICE_FLAG_POST_INSTALL);
self->post_install = FALSE;
}
return TRUE;
}
static void
fu_logitech_bulkcontroller_plugin_constructed(GObject *obj)
{
FuPlugin *plugin = FU_PLUGIN(obj);
fu_plugin_add_udev_subsystem(plugin, "usb");
fu_plugin_set_device_gtype_default(plugin, FU_TYPE_LOGITECH_BULKCONTROLLER_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_LOGITECH_BULKCONTROLLER_CHILD); /* coverage */
}
static void
fu_logitech_bulkcontroller_plugin_class_init(FuLogitechBulkcontrollerPluginClass *klass)
{
FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass);
plugin_class->constructed = fu_logitech_bulkcontroller_plugin_constructed;
plugin_class->write_firmware = fu_logitech_bulkcontroller_plugin_write_firmware;
plugin_class->device_created = fu_logitech_bulkcontroller_plugin_device_created;
plugin_class->to_string = fu_logitech_bulkcontroller_plugin_to_string;
}
|