Make the 'id' for fu_plugin_add_firmware_gtype() optional

We can work out the correct value automatically in all cases but one, and it's
less for the plugin author to get wrong...
This commit is contained in:
Richard Hughes 2021-01-03 20:35:36 +00:00
parent 2e5c1d15bc
commit 9f71fe3dc9
16 changed files with 51 additions and 23 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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");
}

View File

@ -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);