From 989acf12e717a73b576da3123ad51394e794a3fa Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Sat, 5 Oct 2019 20:16:47 +0100 Subject: [PATCH] Create the custom plugin GType in common code This reduces the amount of boilerplate in plugins. --- plugins/colorhug/fu-colorhug-device.c | 9 ---- plugins/colorhug/fu-colorhug-device.h | 2 - plugins/colorhug/fu-plugin-colorhug.c | 18 +------- plugins/csr/fu-csr-device.c | 8 ---- plugins/csr/fu-csr-device.h | 2 - plugins/csr/fu-plugin-csr.c | 14 +----- plugins/ebitdo/fu-ebitdo-device.c | 18 -------- plugins/ebitdo/fu-ebitdo-device.h | 2 - plugins/ebitdo/fu-plugin-ebitdo.c | 18 +------- plugins/fastboot/fu-fastboot-device.c | 8 ---- plugins/fastboot/fu-fastboot-device.h | 2 - plugins/fastboot/fu-plugin-fastboot.c | 14 +----- plugins/nitrokey/fu-nitrokey-device.c | 8 ---- plugins/nitrokey/fu-nitrokey-device.h | 2 - plugins/nitrokey/fu-plugin-nitrokey.c | 18 +------- plugins/rts54hid/fu-plugin-rts54hid.c | 18 +------- plugins/rts54hid/fu-rts54hid-device.c | 8 ---- plugins/rts54hid/fu-rts54hid-device.h | 1 - plugins/rts54hub/fu-plugin-rts54hub.c | 18 +------- plugins/rts54hub/fu-rts54hub-device.c | 8 ---- plugins/rts54hub/fu-rts54hub-device.h | 2 - plugins/solokey/fu-plugin-solokey.c | 18 +------- plugins/solokey/fu-solokey-device.c | 9 ---- plugins/solokey/fu-solokey-device.h | 2 - plugins/steelseries/fu-plugin-steelseries.c | 14 +----- plugins/steelseries/fu-steelseries-device.c | 8 ---- plugins/steelseries/fu-steelseries-device.h | 2 - .../fu-plugin-synaptics-cxaudio.c | 14 +----- .../fu-synaptics-cxaudio-device.c | 8 ---- .../fu-synaptics-cxaudio-device.h | 2 - .../fu-plugin-synaptics-prometheus.c | 18 +------- plugins/thelio-io/fu-plugin-thelio-io.c | 14 +----- plugins/thelio-io/fu-thelio-io-device.c | 8 ---- plugins/thelio-io/fu-thelio-io-device.h | 2 - plugins/wacom-usb/fu-plugin-wacom-usb.c | 14 +----- plugins/wacom-usb/fu-wac-device.c | 8 ---- plugins/wacom-usb/fu-wac-device.h | 1 - src/fu-plugin.c | 44 ++++++++++++++++++- src/fu-plugin.h | 2 + 39 files changed, 58 insertions(+), 328 deletions(-) diff --git a/plugins/colorhug/fu-colorhug-device.c b/plugins/colorhug/fu-colorhug-device.c index 76ae0b559..a91cd01b2 100644 --- a/plugins/colorhug/fu-colorhug-device.c +++ b/plugins/colorhug/fu-colorhug-device.c @@ -469,12 +469,3 @@ fu_colorhug_device_class_init (FuColorhugDeviceClass *klass) klass_usb_device->open = fu_colorhug_device_open; klass_usb_device->probe = fu_colorhug_device_probe; } - -FuColorhugDevice * -fu_colorhug_device_new (FuUsbDevice *device) -{ - FuColorhugDevice *self = NULL; - self = g_object_new (FU_TYPE_COLORHUG_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/colorhug/fu-colorhug-device.h b/plugins/colorhug/fu-colorhug-device.h index c54762963..2d86ec9ff 100644 --- a/plugins/colorhug/fu-colorhug-device.h +++ b/plugins/colorhug/fu-colorhug-device.h @@ -13,6 +13,4 @@ G_BEGIN_DECLS #define FU_TYPE_COLORHUG_DEVICE (fu_colorhug_device_get_type ()) G_DECLARE_FINAL_TYPE (FuColorhugDevice, fu_colorhug_device, FU, COLORHUG_DEVICE, FuUsbDevice) -FuColorhugDevice *fu_colorhug_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/colorhug/fu-plugin-colorhug.c b/plugins/colorhug/fu-plugin-colorhug.c index 449c5f719..5dfe9e416 100644 --- a/plugins/colorhug/fu-plugin-colorhug.c +++ b/plugins/colorhug/fu-plugin-colorhug.c @@ -16,21 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.hughski.colorhug"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuColorhugDevice) dev = NULL; - - /* open the device */ - dev = fu_colorhug_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* insert to hash */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_COLORHUG_DEVICE); } diff --git a/plugins/csr/fu-csr-device.c b/plugins/csr/fu-csr-device.c index 550878a5c..6de2a55df 100644 --- a/plugins/csr/fu-csr-device.c +++ b/plugins/csr/fu-csr-device.c @@ -565,11 +565,3 @@ fu_csr_device_class_init (FuCsrDeviceClass *klass) klass_usb_device->close = fu_csr_device_close; klass_usb_device->probe = fu_csr_device_probe; } - -FuCsrDevice * -fu_csr_device_new (FuUsbDevice *device) -{ - FuCsrDevice *self = g_object_new (FU_TYPE_CSR_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/csr/fu-csr-device.h b/plugins/csr/fu-csr-device.h index f376bb3f4..654f5ee94 100644 --- a/plugins/csr/fu-csr-device.h +++ b/plugins/csr/fu-csr-device.h @@ -13,6 +13,4 @@ G_BEGIN_DECLS #define FU_TYPE_CSR_DEVICE (fu_csr_device_get_type ()) G_DECLARE_FINAL_TYPE (FuCsrDevice, fu_csr_device, FU, CSR_DEVICE, FuUsbDevice) -FuCsrDevice *fu_csr_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/csr/fu-plugin-csr.c b/plugins/csr/fu-plugin-csr.c index 0d350dd5a..337188dfe 100644 --- a/plugins/csr/fu-plugin-csr.c +++ b/plugins/csr/fu-plugin-csr.c @@ -16,17 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.qualcomm.dfu"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuCsrDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_csr_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_CSR_DEVICE); } diff --git a/plugins/ebitdo/fu-ebitdo-device.c b/plugins/ebitdo/fu-ebitdo-device.c index 1ee9d2a68..41caca041 100644 --- a/plugins/ebitdo/fu-ebitdo-device.c +++ b/plugins/ebitdo/fu-ebitdo-device.c @@ -610,21 +610,3 @@ fu_ebitdo_device_class_init (FuEbitdoDeviceClass *klass) klass_usb_device->open = fu_ebitdo_device_open; klass_usb_device->probe = fu_ebitdo_device_probe; } - -/** - * fu_ebitdo_device_new: - * - * Creates a new #FuEbitdoDevice. - * - * Returns: (transfer full): a #FuEbitdoDevice, or %NULL if not a game pad - * - * Since: 0.1.0 - **/ -FuEbitdoDevice * -fu_ebitdo_device_new (FuUsbDevice *device) -{ - FuEbitdoDevice *self; - self = g_object_new (FU_TYPE_EBITDO_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return FU_EBITDO_DEVICE (self); -} diff --git a/plugins/ebitdo/fu-ebitdo-device.h b/plugins/ebitdo/fu-ebitdo-device.h index 617e1060b..808a4432d 100644 --- a/plugins/ebitdo/fu-ebitdo-device.h +++ b/plugins/ebitdo/fu-ebitdo-device.h @@ -13,8 +13,6 @@ G_BEGIN_DECLS #define FU_TYPE_EBITDO_DEVICE (fu_ebitdo_device_get_type ()) G_DECLARE_FINAL_TYPE (FuEbitdoDevice, fu_ebitdo_device, FU, EBITDO_DEVICE, FuUsbDevice) -FuEbitdoDevice *fu_ebitdo_device_new (FuUsbDevice *device); - /* getters */ const guint32 *fu_ebitdo_device_get_serial (FuEbitdoDevice *device); diff --git a/plugins/ebitdo/fu-plugin-ebitdo.c b/plugins/ebitdo/fu-plugin-ebitdo.c index 3e7b53cbb..c69ef93d7 100644 --- a/plugins/ebitdo/fu-plugin-ebitdo.c +++ b/plugins/ebitdo/fu-plugin-ebitdo.c @@ -16,23 +16,7 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.8bitdo"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuEbitdoDevice) dev = NULL; - - /* open the device */ - dev = fu_ebitdo_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* success */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_EBITDO_DEVICE); } gboolean diff --git a/plugins/fastboot/fu-fastboot-device.c b/plugins/fastboot/fu-fastboot-device.c index 190569210..eba706a04 100644 --- a/plugins/fastboot/fu-fastboot-device.c +++ b/plugins/fastboot/fu-fastboot-device.c @@ -712,11 +712,3 @@ fu_fastboot_device_class_init (FuFastbootDeviceClass *klass) klass_usb_device->open = fu_fastboot_device_open; klass_usb_device->close = fu_fastboot_device_close; } - -FuFastbootDevice * -fu_fastboot_device_new (FuUsbDevice *device) -{ - FuFastbootDevice *self = g_object_new (FU_TYPE_FASTBOOT_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/fastboot/fu-fastboot-device.h b/plugins/fastboot/fu-fastboot-device.h index 92886190e..630fdc3e1 100644 --- a/plugins/fastboot/fu-fastboot-device.h +++ b/plugins/fastboot/fu-fastboot-device.h @@ -13,6 +13,4 @@ G_BEGIN_DECLS #define FU_TYPE_FASTBOOT_DEVICE (fu_fastboot_device_get_type ()) G_DECLARE_FINAL_TYPE (FuFastbootDevice, fu_fastboot_device, FU, FASTBOOT_DEVICE, FuUsbDevice) -FuFastbootDevice *fu_fastboot_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/fastboot/fu-plugin-fastboot.c b/plugins/fastboot/fu-plugin-fastboot.c index 74e3322e7..ab3bad3af 100644 --- a/plugins/fastboot/fu-plugin-fastboot.c +++ b/plugins/fastboot/fu-plugin-fastboot.c @@ -16,17 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.google.fastboot"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuFastbootDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_fastboot_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_FASTBOOT_DEVICE); } diff --git a/plugins/nitrokey/fu-nitrokey-device.c b/plugins/nitrokey/fu-nitrokey-device.c index f369f4793..d03f0e6d7 100644 --- a/plugins/nitrokey/fu-nitrokey-device.c +++ b/plugins/nitrokey/fu-nitrokey-device.c @@ -229,11 +229,3 @@ fu_nitrokey_device_class_init (FuNitrokeyDeviceClass *klass) klass_usb_device->open = fu_nitrokey_device_open; klass_usb_device->close = fu_nitrokey_device_close; } - -FuNitrokeyDevice * -fu_nitrokey_device_new (FuUsbDevice *device) -{ - FuNitrokeyDevice *self = g_object_new (FU_TYPE_NITROKEY_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return FU_NITROKEY_DEVICE (self); -} diff --git a/plugins/nitrokey/fu-nitrokey-device.h b/plugins/nitrokey/fu-nitrokey-device.h index 7b77fd405..b43bfb5e5 100644 --- a/plugins/nitrokey/fu-nitrokey-device.h +++ b/plugins/nitrokey/fu-nitrokey-device.h @@ -18,6 +18,4 @@ struct _FuNitrokeyDeviceClass FuUsbDeviceClass parent_class; }; -FuNitrokeyDevice *fu_nitrokey_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/nitrokey/fu-plugin-nitrokey.c b/plugins/nitrokey/fu-plugin-nitrokey.c index 4061ee7d7..0c7764365 100644 --- a/plugins/nitrokey/fu-plugin-nitrokey.c +++ b/plugins/nitrokey/fu-plugin-nitrokey.c @@ -16,21 +16,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuNitrokeyDevice) dev = NULL; - - /* open the device */ - dev = fu_nitrokey_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* success */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_NITROKEY_DEVICE); } diff --git a/plugins/rts54hid/fu-plugin-rts54hid.c b/plugins/rts54hid/fu-plugin-rts54hid.c index 255c836ec..cfdf25a17 100644 --- a/plugins/rts54hid/fu-plugin-rts54hid.c +++ b/plugins/rts54hid/fu-plugin-rts54hid.c @@ -17,24 +17,8 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.realtek.rts54"); + fu_plugin_set_device_gtype (plugin, FU_TYPE_RTS54HID_DEVICE); /* register the custom types */ g_type_ensure (FU_TYPE_RTS54HID_MODULE); } - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuRts54HidDevice) dev = NULL; - - /* open the device */ - dev = fu_rts54hid_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* success */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; -} diff --git a/plugins/rts54hid/fu-rts54hid-device.c b/plugins/rts54hid/fu-rts54hid-device.c index 346f14336..c239ae6af 100644 --- a/plugins/rts54hid/fu-rts54hid-device.c +++ b/plugins/rts54hid/fu-rts54hid-device.c @@ -390,11 +390,3 @@ fu_rts54hid_device_class_init (FuRts54HidDeviceClass *klass) klass_usb_device->open = fu_rts54hid_device_open; klass_usb_device->close = fu_rts54hid_device_close; } - -FuRts54HidDevice * -fu_rts54hid_device_new (FuUsbDevice *device) -{ - FuRts54HidDevice *self = g_object_new (FU_TYPE_RTS54HID_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/rts54hid/fu-rts54hid-device.h b/plugins/rts54hid/fu-rts54hid-device.h index 2e2f80c7d..be779b758 100644 --- a/plugins/rts54hid/fu-rts54hid-device.h +++ b/plugins/rts54hid/fu-rts54hid-device.h @@ -13,7 +13,6 @@ G_BEGIN_DECLS #define FU_TYPE_RTS54HID_DEVICE (fu_rts54hid_device_get_type ()) G_DECLARE_FINAL_TYPE (FuRts54HidDevice, fu_rts54hid_device, FU, RTS54HID_DEVICE, FuUsbDevice) -FuRts54HidDevice *fu_rts54hid_device_new (FuUsbDevice *device); gboolean fu_rts54hid_device_set_report (FuRts54HidDevice *self, guint8 *buf, gsize buf_sz, diff --git a/plugins/rts54hub/fu-plugin-rts54hub.c b/plugins/rts54hub/fu-plugin-rts54hub.c index 9f6837dac..cd27b6d07 100644 --- a/plugins/rts54hub/fu-plugin-rts54hub.c +++ b/plugins/rts54hub/fu-plugin-rts54hub.c @@ -16,21 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.realtek.rts54"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuRts54HubDevice) dev = NULL; - - /* open the device */ - dev = fu_rts54hub_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* success */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_RTS54HUB_DEVICE); } diff --git a/plugins/rts54hub/fu-rts54hub-device.c b/plugins/rts54hub/fu-rts54hub-device.c index a12750ef0..8bd04d97f 100644 --- a/plugins/rts54hub/fu-rts54hub-device.c +++ b/plugins/rts54hub/fu-rts54hub-device.c @@ -430,11 +430,3 @@ fu_rts54hub_device_class_init (FuRts54HubDeviceClass *klass) klass_device->prepare_firmware = fu_rts54hub_device_prepare_firmware; klass_usb_device->close = fu_rts54hub_device_close; } - -FuRts54HubDevice * -fu_rts54hub_device_new (FuUsbDevice *device) -{ - FuRts54HubDevice *self = g_object_new (FU_TYPE_RTS54HUB_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/rts54hub/fu-rts54hub-device.h b/plugins/rts54hub/fu-rts54hub-device.h index de0f8f438..a4d849fc4 100644 --- a/plugins/rts54hub/fu-rts54hub-device.h +++ b/plugins/rts54hub/fu-rts54hub-device.h @@ -13,6 +13,4 @@ G_BEGIN_DECLS #define FU_TYPE_RTS54HUB_DEVICE (fu_rts54hub_device_get_type ()) G_DECLARE_FINAL_TYPE (FuRts54HubDevice, fu_rts54hub_device, FU, RTS54HUB_DEVICE, FuUsbDevice) -FuRts54HubDevice *fu_rts54hub_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/solokey/fu-plugin-solokey.c b/plugins/solokey/fu-plugin-solokey.c index 04fc50d13..c2db2ffd9 100644 --- a/plugins/solokey/fu-plugin-solokey.c +++ b/plugins/solokey/fu-plugin-solokey.c @@ -16,21 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.solokeys"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuSolokeyDevice) dev = NULL; - - /* open the device */ - dev = fu_solokey_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* insert to hash */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_SOLOKEY_DEVICE); } diff --git a/plugins/solokey/fu-solokey-device.c b/plugins/solokey/fu-solokey-device.c index 1aa38b7ae..715d2a1c6 100644 --- a/plugins/solokey/fu-solokey-device.c +++ b/plugins/solokey/fu-solokey-device.c @@ -499,12 +499,3 @@ fu_solokey_device_class_init (FuSolokeyDeviceClass *klass) klass_usb_device->close = fu_solokey_device_close; klass_usb_device->probe = fu_solokey_device_probe; } - -FuSolokeyDevice * -fu_solokey_device_new (FuUsbDevice *device) -{ - FuSolokeyDevice *self = NULL; - self = g_object_new (FU_TYPE_SOLOKEY_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/solokey/fu-solokey-device.h b/plugins/solokey/fu-solokey-device.h index e82225b31..8461eeec7 100644 --- a/plugins/solokey/fu-solokey-device.h +++ b/plugins/solokey/fu-solokey-device.h @@ -13,6 +13,4 @@ G_BEGIN_DECLS #define FU_TYPE_SOLOKEY_DEVICE (fu_solokey_device_get_type ()) G_DECLARE_FINAL_TYPE (FuSolokeyDevice, fu_solokey_device, FU, SOLOKEY_DEVICE, FuUsbDevice) -FuSolokeyDevice *fu_solokey_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/steelseries/fu-plugin-steelseries.c b/plugins/steelseries/fu-plugin-steelseries.c index 78395cf48..8d10aeb30 100644 --- a/plugins/steelseries/fu-plugin-steelseries.c +++ b/plugins/steelseries/fu-plugin-steelseries.c @@ -15,17 +15,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuSteelseriesDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_steelseries_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_STEELSERIES_DEVICE); } diff --git a/plugins/steelseries/fu-steelseries-device.c b/plugins/steelseries/fu-steelseries-device.c index 0e019c33a..38b951fba 100644 --- a/plugins/steelseries/fu-steelseries-device.c +++ b/plugins/steelseries/fu-steelseries-device.c @@ -125,11 +125,3 @@ fu_steelseries_device_class_init (FuSteelseriesDeviceClass *klass) klass_usb_device->open = fu_steelseries_device_open; klass_usb_device->close = fu_steelseries_device_close; } - -FuSteelseriesDevice * -fu_steelseries_device_new (FuUsbDevice *device) -{ - FuSteelseriesDevice *self = g_object_new (FU_TYPE_STEELSERIES_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/steelseries/fu-steelseries-device.h b/plugins/steelseries/fu-steelseries-device.h index 90068b105..ab42a8d0e 100644 --- a/plugins/steelseries/fu-steelseries-device.h +++ b/plugins/steelseries/fu-steelseries-device.h @@ -18,6 +18,4 @@ struct _FuSteelseriesDeviceClass FuUsbDeviceClass parent_class; }; -FuSteelseriesDevice *fu_steelseries_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c index 67780b6ae..1b96c0931 100644 --- a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c +++ b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c @@ -15,17 +15,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuSynapticsCxaudioDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_synaptics_cxaudio_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_SYNAPTICS_CXAUDIO_DEVICE); } diff --git a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c index 71ac0d541..7b2839e5b 100644 --- a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c +++ b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c @@ -867,11 +867,3 @@ fu_synaptics_cxaudio_device_class_init (FuSynapticsCxaudioDeviceClass *klass) klass_usb_device->open = fu_synaptics_cxaudio_device_open; klass_usb_device->close = fu_synaptics_cxaudio_device_close; } - -FuSynapticsCxaudioDevice * -fu_synaptics_cxaudio_device_new (FuUsbDevice *usb_device) -{ - FuSynapticsCxaudioDevice *self = g_object_new (FU_TYPE_SYNAPTICS_CXAUDIO_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (usb_device)); - return self; -} diff --git a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.h b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.h index 2e06f540a..a0b7f4f3f 100644 --- a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.h +++ b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.h @@ -18,6 +18,4 @@ struct _FuSynapticsCxaudioDeviceClass FuUsbDeviceClass parent_class; }; -FuSynapticsCxaudioDevice *fu_synaptics_cxaudio_device_new (FuUsbDevice *usb_device); - G_END_DECLS diff --git a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c index 68f8cfd07..b35360786 100644 --- a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c +++ b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c @@ -16,21 +16,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.synaptics.prometheus"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuDeviceLocker) locker = NULL; - g_autoptr(FuSynapromDevice) dev = NULL; - - /* open the device */ - dev = fu_synaprom_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - - /* success */ - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_SYNAPROM_DEVICE); } diff --git a/plugins/thelio-io/fu-plugin-thelio-io.c b/plugins/thelio-io/fu-plugin-thelio-io.c index 97cd55b3a..845a717a8 100644 --- a/plugins/thelio-io/fu-plugin-thelio-io.c +++ b/plugins/thelio-io/fu-plugin-thelio-io.c @@ -16,17 +16,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuThelioIoDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_thelio_io_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_THELIO_IO_DEVICE); } diff --git a/plugins/thelio-io/fu-thelio-io-device.c b/plugins/thelio-io/fu-thelio-io-device.c index 2d8f73a2a..968156791 100644 --- a/plugins/thelio-io/fu-thelio-io-device.c +++ b/plugins/thelio-io/fu-thelio-io-device.c @@ -96,11 +96,3 @@ fu_thelio_io_device_class_init (FuThelioIoDeviceClass *klass) klass_device->probe = fu_thelio_io_device_probe; klass_device->detach = fu_thelio_io_device_detach; } - -FuThelioIoDevice * -fu_thelio_io_device_new (FuUsbDevice *device) -{ - FuThelioIoDevice *self = g_object_new (FU_TYPE_THELIO_IO_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/thelio-io/fu-thelio-io-device.h b/plugins/thelio-io/fu-thelio-io-device.h index 2e8bd58e8..1665a6df5 100644 --- a/plugins/thelio-io/fu-thelio-io-device.h +++ b/plugins/thelio-io/fu-thelio-io-device.h @@ -14,6 +14,4 @@ G_BEGIN_DECLS #define FU_TYPE_THELIO_IO_DEVICE (fu_thelio_io_device_get_type ()) G_DECLARE_FINAL_TYPE (FuThelioIoDevice, fu_thelio_io_device, FU, THELIO_IO_DEVICE, FuUsbDevice) -FuThelioIoDevice *fu_thelio_io_device_new (FuUsbDevice *device); - G_END_DECLS diff --git a/plugins/wacom-usb/fu-plugin-wacom-usb.c b/plugins/wacom-usb/fu-plugin-wacom-usb.c index 69469a2f2..14a0c35f1 100644 --- a/plugins/wacom-usb/fu-plugin-wacom-usb.c +++ b/plugins/wacom-usb/fu-plugin-wacom-usb.c @@ -16,19 +16,7 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_REQUIRES_QUIRK, FU_QUIRKS_PLUGIN); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_SUPPORTS_PROTOCOL, "com.wacom.usb"); -} - -gboolean -fu_plugin_usb_device_added (FuPlugin *plugin, FuUsbDevice *device, GError **error) -{ - g_autoptr(FuWacDevice) dev = NULL; - g_autoptr(FuDeviceLocker) locker = NULL; - dev = fu_wac_device_new (device); - locker = fu_device_locker_new (dev, error); - if (locker == NULL) - return FALSE; - fu_plugin_device_add (plugin, FU_DEVICE (dev)); - return TRUE; + fu_plugin_set_device_gtype (plugin, FU_TYPE_WAC_DEVICE); } gboolean diff --git a/plugins/wacom-usb/fu-wac-device.c b/plugins/wacom-usb/fu-wac-device.c index e6c1775cb..4b06c93da 100644 --- a/plugins/wacom-usb/fu-wac-device.c +++ b/plugins/wacom-usb/fu-wac-device.c @@ -880,11 +880,3 @@ fu_wac_device_class_init (FuWacDeviceClass *klass) klass_usb_device->open = fu_wac_device_open; klass_usb_device->close = fu_wac_device_close; } - -FuWacDevice * -fu_wac_device_new (FuUsbDevice *device) -{ - FuWacDevice *self = g_object_new (FU_TYPE_WAC_DEVICE, NULL); - fu_device_incorporate (FU_DEVICE (self), FU_DEVICE (device)); - return self; -} diff --git a/plugins/wacom-usb/fu-wac-device.h b/plugins/wacom-usb/fu-wac-device.h index 69564ebb7..9d9e5344b 100644 --- a/plugins/wacom-usb/fu-wac-device.h +++ b/plugins/wacom-usb/fu-wac-device.h @@ -20,7 +20,6 @@ typedef enum { FU_WAC_DEVICE_FEATURE_FLAG_LAST } FuWacDeviceFeatureFlags; -FuWacDevice *fu_wac_device_new (FuUsbDevice *device); gboolean fu_wac_device_update_reset (FuWacDevice *self, GError **error); gboolean fu_wac_device_get_feature_report (FuWacDevice *self, diff --git a/src/fu-plugin.c b/src/fu-plugin.c index 7850b9aec..810061ec8 100644 --- a/src/fu-plugin.c +++ b/src/fu-plugin.c @@ -51,6 +51,7 @@ typedef struct { GHashTable *compile_versions; GPtrArray *udev_subsystems; FuSmbios *smbios; + GType device_gtype; GHashTable *devices; /* platform_id:GObject */ GRWLock devices_mutex; GHashTable *report_metadata; /* key:value */ @@ -1375,6 +1376,42 @@ fu_plugin_add_udev_subsystem (FuPlugin *self, const gchar *subsystem) g_ptr_array_add (priv->udev_subsystems, g_strdup (subsystem)); } +/** + * fu_plugin_set_device_gtype: + * @self: a #FuPlugin + * @device_gtype: a #GType `FU_TYPE_DEVICE` + * + * Sets the device #GType which is used when creating devices. + * + * If this method is used then fu_plugin_usb_device_added() is not called, and + * instead the object is created in the daemon for the plugin. + * + * Plugins can use this method only in fu_plugin_init() + * + * Since: 1.3.3 + **/ +void +fu_plugin_set_device_gtype (FuPlugin *self, GType device_gtype) +{ + FuPluginPrivate *priv = GET_PRIVATE (self); + priv->device_gtype = device_gtype; +} + +static gboolean +fu_plugin_usb_device_added (FuPlugin *self, FuUsbDevice *device, GError **error) +{ + FuPluginPrivate *priv = GET_PRIVATE (self); + g_autoptr(FuDevice) dev = NULL; + g_autoptr(FuDeviceLocker) locker = NULL; + dev = g_object_new (priv->device_gtype, NULL); + fu_device_incorporate (FU_DEVICE (dev), FU_DEVICE (device)); + locker = fu_device_locker_new (dev, error); + if (locker == NULL) + return FALSE; + fu_plugin_device_add (self, FU_DEVICE (dev)); + return TRUE; +} + gboolean fu_plugin_runner_usb_device_added (FuPlugin *self, FuUsbDevice *device, GError **error) { @@ -1392,8 +1429,13 @@ fu_plugin_runner_usb_device_added (FuPlugin *self, FuUsbDevice *device, GError * /* optional */ g_module_symbol (priv->module, "fu_plugin_usb_device_added", (gpointer *) &func); - if (func == NULL) + if (func == NULL) { + if (priv->device_gtype != G_TYPE_INVALID) { + g_debug ("using generic usb_device_added() on %s", priv->name); + return fu_plugin_usb_device_added (self, device, error); + } return TRUE; + } g_debug ("performing usb_device_added() on %s", priv->name); if (!func (self, device, &error_local)) { if (error_local == NULL) { diff --git a/src/fu-plugin.h b/src/fu-plugin.h index fbbfe54cf..93ec97d9b 100644 --- a/src/fu-plugin.h +++ b/src/fu-plugin.h @@ -109,6 +109,8 @@ void fu_plugin_device_register (FuPlugin *self, void fu_plugin_request_recoldplug (FuPlugin *self); void fu_plugin_set_coldplug_delay (FuPlugin *self, guint duration); +void fu_plugin_set_device_gtype (FuPlugin *self, + GType device_gtype); gpointer fu_plugin_cache_lookup (FuPlugin *self, const gchar *id); void fu_plugin_cache_remove (FuPlugin *self,