diff --git a/libfwupdplugin/fu-plugin.c b/libfwupdplugin/fu-plugin.c index d45b43709..a4a487052 100644 --- a/libfwupdplugin/fu-plugin.c +++ b/libfwupdplugin/fu-plugin.c @@ -1753,14 +1753,32 @@ fu_plugin_set_device_gtype (FuPlugin *self, GType device_gtype) priv->device_gtype = device_gtype; } +static gchar * +fu_common_string_uncamelcase (const gchar *str) +{ + GString *tmp = g_string_new (NULL); + for (guint i = 0; str[i] != '\0'; i++) { + if (g_ascii_islower (str[i]) || + g_ascii_isdigit (str[i])) { + g_string_append_c (tmp, str[i]); + continue; + } + if (i > 0) + g_string_append_c (tmp, '-'); + g_string_append_c (tmp, g_ascii_tolower (str[i])); + } + return g_string_free (tmp, FALSE); +} + /** * fu_plugin_add_firmware_gtype: * @self: a #FuPlugin - * @id: A string describing the type - * @gtype: a #GType `FU_TYPE_DEVICE` + * @id: (nullable): An optional string describing the type, e.g. "ihex" + * @gtype: a #GType e.g. `FU_TYPE_FOO_FIRMWARE` + * + * Adds a firmware #GType which is used when creating devices. If @id is not + * specified then it is guessed using the #GType name. * - * Adds a firmware #GType which is used when creating devices. - * * * Plugins can use this method only in fu_plugin_init() * * Since: 1.3.3 @@ -1768,7 +1786,17 @@ fu_plugin_set_device_gtype (FuPlugin *self, GType device_gtype) void fu_plugin_add_firmware_gtype (FuPlugin *self, const gchar *id, GType gtype) { - g_signal_emit (self, signals[SIGNAL_ADD_FIRMWARE_GTYPE], 0, id, gtype); + g_autofree gchar *id_safe = NULL; + if (id != NULL) { + id_safe = g_strdup (id); + } else { + GString *str = g_string_new (g_type_name (gtype)); + if (g_str_has_prefix (str->str, "Fu")) + g_string_erase (str, 0, 2); + fu_common_string_replace (str, "Firmware", ""); + id_safe = fu_common_string_uncamelcase (str->str); + } + g_signal_emit (self, signals[SIGNAL_ADD_FIRMWARE_GTYPE], 0, id_safe, gtype); } static gboolean diff --git a/plugins/altos/fu-plugin-altos.c b/plugins/altos/fu-plugin-altos.c index 636e6a277..09c1cad2a 100644 --- a/plugins/altos/fu-plugin-altos.c +++ b/plugins/altos/fu-plugin-altos.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_ALTOS_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "altos", FU_TYPE_ALTOS_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_ALTOS_FIRMWARE); } diff --git a/plugins/bcm57xx/fu-plugin-bcm57xx.c b/plugins/bcm57xx/fu-plugin-bcm57xx.c index a36f5f345..a3905fa8f 100644 --- a/plugins/bcm57xx/fu-plugin-bcm57xx.c +++ b/plugins/bcm57xx/fu-plugin-bcm57xx.c @@ -21,7 +21,7 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_udev_subsystem (plugin, "pci"); fu_plugin_set_device_gtype (plugin, FU_TYPE_BCM57XX_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "bcm57xx", FU_TYPE_BCM57XX_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_BCM57XX_FIRMWARE); fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_BETTER_THAN, "optionrom"); g_type_ensure (FU_TYPE_BCM57XX_DICT_IMAGE); g_type_ensure (FU_TYPE_BCM57XX_STAGE1_IMAGE); diff --git a/plugins/ccgx/fu-plugin-ccgx.c b/plugins/ccgx/fu-plugin-ccgx.c index 7fc816f88..29477c078 100644 --- a/plugins/ccgx/fu-plugin-ccgx.c +++ b/plugins/ccgx/fu-plugin-ccgx.c @@ -19,8 +19,8 @@ void fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); - fu_plugin_add_firmware_gtype (plugin, "ccgx", FU_TYPE_CCGX_FIRMWARE); - fu_plugin_add_firmware_gtype (plugin, "ccgx", FU_TYPE_CCGX_DMC_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_CCGX_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_CCGX_DMC_FIRMWARE); fu_plugin_set_device_gtype (plugin, FU_TYPE_CCGX_HID_DEVICE); fu_plugin_set_device_gtype (plugin, FU_TYPE_CCGX_HPI_DEVICE); fu_plugin_set_device_gtype (plugin, FU_TYPE_CCGX_DMC_DEVICE); diff --git a/plugins/cros-ec/fu-plugin-cros-ec.c b/plugins/cros-ec/fu-plugin-cros-ec.c index 5c1f430c1..2b0bc66b3 100644 --- a/plugins/cros-ec/fu-plugin-cros-ec.c +++ b/plugins/cros-ec/fu-plugin-cros-ec.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_CROS_EC_USB_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "cros-ec", FU_TYPE_CROS_EC_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_CROS_EC_FIRMWARE); } diff --git a/plugins/ebitdo/fu-plugin-ebitdo.c b/plugins/ebitdo/fu-plugin-ebitdo.c index 4f40dc71e..c30ba2143 100644 --- a/plugins/ebitdo/fu-plugin-ebitdo.c +++ b/plugins/ebitdo/fu-plugin-ebitdo.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_EBITDO_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "8bitdo", FU_TYPE_EBITDO_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_EBITDO_FIRMWARE); } diff --git a/plugins/elantp/fu-plugin-elantp.c b/plugins/elantp/fu-plugin-elantp.c index e29db3e7c..b001dcd72 100644 --- a/plugins/elantp/fu-plugin-elantp.c +++ b/plugins/elantp/fu-plugin-elantp.c @@ -33,7 +33,7 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_udev_subsystem (plugin, "i2c-dev"); fu_plugin_add_udev_subsystem (plugin, "hidraw"); - fu_plugin_add_firmware_gtype (plugin, "elantp", FU_TYPE_ELANTP_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_ELANTP_FIRMWARE); fu_plugin_set_device_gtype (plugin, FU_TYPE_ELANTP_I2C_DEVICE); fu_plugin_set_device_gtype (plugin, FU_TYPE_ELANTP_HID_DEVICE); } diff --git a/plugins/ep963x/fu-plugin-ep963x.c b/plugins/ep963x/fu-plugin-ep963x.c index b9fa6dc78..13d435851 100644 --- a/plugins/ep963x/fu-plugin-ep963x.c +++ b/plugins/ep963x/fu-plugin-ep963x.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_EP963X_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "ep963x", FU_TYPE_EP963X_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_EP963X_FIRMWARE); } diff --git a/plugins/fresco-pd/fu-plugin-fresco-pd.c b/plugins/fresco-pd/fu-plugin-fresco-pd.c index 88fd54730..311c59a11 100644 --- a/plugins/fresco-pd/fu-plugin-fresco-pd.c +++ b/plugins/fresco-pd/fu-plugin-fresco-pd.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_FRESCO_PD_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "fresco-pd", FU_TYPE_FRESCO_PD_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_FRESCO_PD_FIRMWARE); } diff --git a/plugins/hailuck/fu-plugin-hailuck.c b/plugins/hailuck/fu-plugin-hailuck.c index 2c43c158a..dccfb2ff1 100644 --- a/plugins/hailuck/fu-plugin-hailuck.c +++ b/plugins/hailuck/fu-plugin-hailuck.c @@ -17,7 +17,7 @@ void fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); - fu_plugin_add_firmware_gtype (plugin, "hailuck", FU_TYPE_HAILUCK_KBD_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_HAILUCK_KBD_FIRMWARE); fu_plugin_set_device_gtype (plugin, FU_TYPE_HAILUCK_BL_DEVICE); fu_plugin_set_device_gtype (plugin, FU_TYPE_HAILUCK_KBD_DEVICE); } diff --git a/plugins/solokey/fu-plugin-solokey.c b/plugins/solokey/fu-plugin-solokey.c index c266ff226..a9a2dc559 100644 --- a/plugins/solokey/fu-plugin-solokey.c +++ b/plugins/solokey/fu-plugin-solokey.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_SOLOKEY_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "solokey", FU_TYPE_SOLOKEY_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_SOLOKEY_FIRMWARE); } diff --git a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c index ab7685be3..53ffa3570 100644 --- a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c +++ b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_SYNAPTICS_CXAUDIO_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "conexant", FU_TYPE_SYNAPTICS_CXAUDIO_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_SYNAPTICS_CXAUDIO_FIRMWARE); } diff --git a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c index 7a6d4596c..750c39529 100644 --- a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c +++ b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c @@ -17,5 +17,5 @@ fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_set_device_gtype (plugin, FU_TYPE_SYNAPROM_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "synaprom", FU_TYPE_SYNAPROM_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_SYNAPROM_FIRMWARE); } diff --git a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c b/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c index 366bcd488..86518eca4 100644 --- a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c +++ b/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c @@ -18,5 +18,5 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_udev_subsystem (plugin, "hidraw"); fu_plugin_set_device_gtype (plugin, FU_TYPE_SYNAPTICS_RMI_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "rmi", FU_TYPE_SYNAPTICS_RMI_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_SYNAPTICS_RMI_FIRMWARE); } diff --git a/plugins/thunderbolt/fu-plugin-thunderbolt.c b/plugins/thunderbolt/fu-plugin-thunderbolt.c index ea8a00805..ac7d75882 100644 --- a/plugins/thunderbolt/fu-plugin-thunderbolt.c +++ b/plugins/thunderbolt/fu-plugin-thunderbolt.c @@ -77,8 +77,8 @@ fu_plugin_init (FuPlugin *plugin) fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); fu_plugin_add_udev_subsystem (plugin, "thunderbolt"); fu_plugin_set_device_gtype (plugin, FU_TYPE_THUNDERBOLT_DEVICE); - fu_plugin_add_firmware_gtype (plugin, "thunderbolt", FU_TYPE_THUNDERBOLT_FIRMWARE); - fu_plugin_add_firmware_gtype (plugin, "thunderbolt-update", FU_TYPE_THUNDERBOLT_FIRMWARE_UPDATE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_THUNDERBOLT_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_THUNDERBOLT_FIRMWARE_UPDATE); /* dell-dock plugin uses a slower bus for flashing */ fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_BETTER_THAN, "dell_dock"); } diff --git a/plugins/vli/fu-plugin-vli.c b/plugins/vli/fu-plugin-vli.c index 6505b002c..31d845be3 100644 --- a/plugins/vli/fu-plugin-vli.c +++ b/plugins/vli/fu-plugin-vli.c @@ -18,8 +18,8 @@ void fu_plugin_init (FuPlugin *plugin) { fu_plugin_set_build_hash (plugin, FU_BUILD_HASH); - fu_plugin_add_firmware_gtype (plugin, "vli-usbhub", FU_TYPE_VLI_USBHUB_FIRMWARE); - fu_plugin_add_firmware_gtype (plugin, "vli-pd", FU_TYPE_VLI_PD_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_VLI_USBHUB_FIRMWARE); + fu_plugin_add_firmware_gtype (plugin, NULL, FU_TYPE_VLI_PD_FIRMWARE); /* register the custom types */ g_type_ensure (FU_TYPE_VLI_USBHUB_DEVICE);