mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-03 07:47:24 +00:00
Add fu_firmware_set_version_raw()
A few plugins need this now, so move it into the base class.
This commit is contained in:
parent
a862473928
commit
86c6c2d4a3
@ -24,6 +24,7 @@ typedef struct {
|
||||
FuFirmwareFlags flags;
|
||||
GPtrArray *images; /* FuFirmwareImage */
|
||||
gchar *version;
|
||||
guint64 version_raw;
|
||||
} FuFirmwarePrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (FuFirmware, fu_firmware, G_TYPE_OBJECT)
|
||||
@ -157,6 +158,45 @@ fu_firmware_set_version (FuFirmware *self, const gchar *version)
|
||||
priv->version = g_strdup (version);
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_firmware_get_version_raw:
|
||||
* @self: A #FuFirmware
|
||||
*
|
||||
* Gets an raw version that represents the firmware. This is most frequently
|
||||
* used when building firmware with `<version_raw>0x123456</version_raw>` in a
|
||||
* `firmware.builder.xml` file to avoid string splitting and sanity checks.
|
||||
*
|
||||
* Returns: an integer, or %G_MAXUINT64 for invalid
|
||||
*
|
||||
* Since: 1.5.7
|
||||
**/
|
||||
guint64
|
||||
fu_firmware_get_version_raw (FuFirmware *self)
|
||||
{
|
||||
FuFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||
g_return_val_if_fail (FU_IS_FIRMWARE (self), G_MAXUINT64);
|
||||
return priv->version_raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_firmware_set_version_raw:
|
||||
* @self: A #FuFirmware
|
||||
* @version: A raw version, or %G_MAXUINT64 for invalid
|
||||
*
|
||||
* Sets an raw version that represents the firmware.
|
||||
*
|
||||
* This is optional, and is typically only used for debugging.
|
||||
*
|
||||
* Since: 1.5.7
|
||||
**/
|
||||
void
|
||||
fu_firmware_set_version_raw (FuFirmware *self, guint64 version_raw)
|
||||
{
|
||||
FuFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||
g_return_if_fail (FU_IS_FIRMWARE (self));
|
||||
priv->version_raw = version_raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_firmware_tokenize:
|
||||
* @self: A #FuFirmware
|
||||
@ -316,6 +356,7 @@ fu_firmware_build (FuFirmware *self, XbNode *n, GError **error)
|
||||
{
|
||||
FuFirmwareClass *klass = FU_FIRMWARE_GET_CLASS (self);
|
||||
const gchar *tmp;
|
||||
guint64 version_raw;
|
||||
g_autoptr(GPtrArray) xb_images = NULL;
|
||||
|
||||
g_return_val_if_fail (FU_IS_FIRMWARE (self), FALSE);
|
||||
@ -326,6 +367,9 @@ fu_firmware_build (FuFirmware *self, XbNode *n, GError **error)
|
||||
tmp = xb_node_query_text (n, "version", NULL);
|
||||
if (tmp != NULL)
|
||||
fu_firmware_set_version (self, tmp);
|
||||
version_raw = xb_node_query_text_as_uint (n, "version_raw", NULL);
|
||||
if (version_raw != G_MAXUINT64)
|
||||
fu_firmware_set_version_raw (self, version_raw);
|
||||
|
||||
/* parse images */
|
||||
xb_images = xb_node_query (n, "image", 0, NULL);
|
||||
@ -847,6 +891,8 @@ fu_firmware_to_string (FuFirmware *self)
|
||||
}
|
||||
if (priv->version != NULL)
|
||||
fu_common_string_append_kv (str, 0, "Version", priv->version);
|
||||
if (priv->version_raw != 0x0)
|
||||
fu_common_string_append_kx (str, 0, "VersionRaw", priv->version_raw);
|
||||
|
||||
/* vfunc */
|
||||
if (klass->to_string != NULL)
|
||||
|
@ -73,6 +73,9 @@ gchar *fu_firmware_to_string (FuFirmware *self);
|
||||
const gchar *fu_firmware_get_version (FuFirmware *self);
|
||||
void fu_firmware_set_version (FuFirmware *self,
|
||||
const gchar *version);
|
||||
guint64 fu_firmware_get_version_raw (FuFirmware *self);
|
||||
void fu_firmware_set_version_raw (FuFirmware *self,
|
||||
guint64 version_raw);
|
||||
void fu_firmware_add_flag (FuFirmware *firmware,
|
||||
FuFirmwareFlags flag);
|
||||
gboolean fu_firmware_has_flag (FuFirmware *firmware,
|
||||
|
@ -288,6 +288,9 @@ fu_smbios_parse_ep32 (FuSmbios *self, const gchar *buf, gsize sz, GError **error
|
||||
ep->smbios_major_ver,
|
||||
ep->smbios_minor_ver);
|
||||
fu_firmware_set_version (FU_FIRMWARE (self), version_str);
|
||||
fu_firmware_set_version_raw (FU_FIRMWARE (self),
|
||||
(((guint16) ep->smbios_major_ver) << 8) +
|
||||
ep->smbios_minor_ver);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -759,3 +759,10 @@ LIBFWUPDPLUGIN_1.5.6 {
|
||||
fu_plugin_runner_backend_device_changed;
|
||||
local: *;
|
||||
} LIBFWUPDPLUGIN_1.5.5;
|
||||
|
||||
LIBFWUPDPLUGIN_1.5.7 {
|
||||
global:
|
||||
fu_firmware_get_version_raw;
|
||||
fu_firmware_set_version_raw;
|
||||
local: *;
|
||||
} LIBFWUPDPLUGIN_1.5.6;
|
||||
|
@ -298,6 +298,7 @@ fu_ccgx_dmc_firmware_parse (FuFirmware *firmware,
|
||||
ver = fu_common_version_from_uint32 (self->fwct_info.composite_version,
|
||||
FWUPD_VERSION_FORMAT_QUAD);
|
||||
fu_firmware_set_version (firmware, ver);
|
||||
fu_firmware_set_version_raw (firmware, self->fwct_info.composite_version);
|
||||
}
|
||||
|
||||
/* read fwct data */
|
||||
|
@ -249,6 +249,7 @@ fu_ccgx_firmware_parse_md_block (FuCcgxFirmware *self, FuFirmwareImage *img, GEr
|
||||
self->app_type = version & 0xffff;
|
||||
version_str = fu_ccgx_version_to_string (version);
|
||||
fu_firmware_set_version (FU_FIRMWARE (self), version_str);
|
||||
fu_firmware_set_version_raw (FU_FIRMWARE (self), version);
|
||||
}
|
||||
|
||||
/* work out the FWMode */
|
||||
|
@ -76,6 +76,7 @@ fu_ebitdo_firmware_parse (FuFirmware *firmware,
|
||||
/* parse version */
|
||||
version = g_strdup_printf ("%.2f", GUINT32_FROM_LE(hdr->version) / 100.f);
|
||||
fu_firmware_set_version (firmware, version);
|
||||
fu_firmware_set_version_raw (firmware, GUINT32_FROM_LE(hdr->version));
|
||||
|
||||
/* add header */
|
||||
fw_hdr = fu_common_bytes_new_offset (fw, 0x0,
|
||||
|
@ -119,6 +119,7 @@ fu_vli_pd_firmware_parse (FuFirmware *firmware,
|
||||
}
|
||||
fwver_str = fu_common_version_from_uint32 (fwver, FWUPD_VERSION_FORMAT_QUAD);
|
||||
fu_firmware_set_version (firmware, fwver_str);
|
||||
fu_firmware_set_version_raw (firmware, fwver);
|
||||
|
||||
/* check size */
|
||||
if (bufsz != fu_vli_common_device_kind_get_size (self->device_kind)) {
|
||||
|
@ -115,6 +115,7 @@ fu_vli_usbhub_firmware_parse (FuFirmware *firmware,
|
||||
g_autofree gchar *version_str = NULL;
|
||||
version_str = fu_common_version_from_uint16 (version, FWUPD_VERSION_FORMAT_BCD);
|
||||
fu_firmware_set_version (firmware, version_str);
|
||||
fu_firmware_set_version_raw (firmware, version);
|
||||
}
|
||||
|
||||
/* get device type from firmware image */
|
||||
|
Loading…
Reference in New Issue
Block a user