mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-14 10:22:17 +00:00
srec: Make FuIhexFirmware derivable for possible future use
An ABI change, so probably not a good idea to backport.
This commit is contained in:
parent
7f7e4437fc
commit
776a0890fe
@ -23,12 +23,13 @@
|
|||||||
* See also: #FuFirmware
|
* See also: #FuFirmware
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct _FuSrecFirmware {
|
typedef struct {
|
||||||
FuFirmware parent_instance;
|
FuFirmware parent_instance;
|
||||||
GPtrArray *records;
|
GPtrArray *records;
|
||||||
};
|
} FuSrecFirmwarePrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE (FuSrecFirmware, fu_srec_firmware, FU_TYPE_FIRMWARE)
|
G_DEFINE_TYPE_WITH_PRIVATE (FuSrecFirmware, fu_srec_firmware, FU_TYPE_FIRMWARE)
|
||||||
|
#define GET_PRIVATE(o) (fu_srec_firmware_get_instance_private (o))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fu_srec_firmware_get_records:
|
* fu_srec_firmware_get_records:
|
||||||
@ -46,8 +47,9 @@ G_DEFINE_TYPE (FuSrecFirmware, fu_srec_firmware, FU_TYPE_FIRMWARE)
|
|||||||
GPtrArray *
|
GPtrArray *
|
||||||
fu_srec_firmware_get_records (FuSrecFirmware *self)
|
fu_srec_firmware_get_records (FuSrecFirmware *self)
|
||||||
{
|
{
|
||||||
|
FuSrecFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||||
g_return_val_if_fail (FU_IS_SREC_FIRMWARE (self), NULL);
|
g_return_val_if_fail (FU_IS_SREC_FIRMWARE (self), NULL);
|
||||||
return self->records;
|
return priv->records;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -85,6 +87,7 @@ fu_srec_firmware_tokenize (FuFirmware *firmware, GBytes *fw,
|
|||||||
FwupdInstallFlags flags, GError **error)
|
FwupdInstallFlags flags, GError **error)
|
||||||
{
|
{
|
||||||
FuSrecFirmware *self = FU_SREC_FIRMWARE (firmware);
|
FuSrecFirmware *self = FU_SREC_FIRMWARE (firmware);
|
||||||
|
FuSrecFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||||
const gchar *data;
|
const gchar *data;
|
||||||
gboolean got_eof = FALSE;
|
gboolean got_eof = FALSE;
|
||||||
gsize sz = 0;
|
gsize sz = 0;
|
||||||
@ -253,7 +256,7 @@ fu_srec_firmware_tokenize (FuFirmware *firmware, GBytes *fw,
|
|||||||
fu_byte_array_append_uint8 (rcd->buf, tmp);
|
fu_byte_array_append_uint8 (rcd->buf, tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_ptr_array_add (self->records, rcd);
|
g_ptr_array_add (priv->records, rcd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* no EOF */
|
/* no EOF */
|
||||||
@ -276,6 +279,7 @@ fu_srec_firmware_parse (FuFirmware *firmware,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
FuSrecFirmware *self = FU_SREC_FIRMWARE (firmware);
|
FuSrecFirmware *self = FU_SREC_FIRMWARE (firmware);
|
||||||
|
FuSrecFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||||
gboolean got_hdr = FALSE;
|
gboolean got_hdr = FALSE;
|
||||||
guint16 data_cnt = 0;
|
guint16 data_cnt = 0;
|
||||||
guint32 addr32_last = 0;
|
guint32 addr32_last = 0;
|
||||||
@ -284,8 +288,8 @@ fu_srec_firmware_parse (FuFirmware *firmware,
|
|||||||
g_autoptr(GByteArray) outbuf = g_byte_array_new ();
|
g_autoptr(GByteArray) outbuf = g_byte_array_new ();
|
||||||
|
|
||||||
/* parse records */
|
/* parse records */
|
||||||
for (guint j = 0; j < self->records->len; j++) {
|
for (guint j = 0; j < priv->records->len; j++) {
|
||||||
FuSrecFirmwareRecord *rcd = g_ptr_array_index (self->records, j);
|
FuSrecFirmwareRecord *rcd = g_ptr_array_index (priv->records, j);
|
||||||
|
|
||||||
/* header */
|
/* header */
|
||||||
if (rcd->kind == FU_FIRMWARE_SREC_RECORD_KIND_S0_HEADER) {
|
if (rcd->kind == FU_FIRMWARE_SREC_RECORD_KIND_S0_HEADER) {
|
||||||
@ -500,14 +504,16 @@ static void
|
|||||||
fu_srec_firmware_finalize (GObject *object)
|
fu_srec_firmware_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
FuSrecFirmware *self = FU_SREC_FIRMWARE (object);
|
FuSrecFirmware *self = FU_SREC_FIRMWARE (object);
|
||||||
g_ptr_array_unref (self->records);
|
FuSrecFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||||
|
g_ptr_array_unref (priv->records);
|
||||||
G_OBJECT_CLASS (fu_srec_firmware_parent_class)->finalize (object);
|
G_OBJECT_CLASS (fu_srec_firmware_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fu_srec_firmware_init (FuSrecFirmware *self)
|
fu_srec_firmware_init (FuSrecFirmware *self)
|
||||||
{
|
{
|
||||||
self->records = g_ptr_array_new_with_free_func ((GFreeFunc) fu_srec_firmware_record_free);
|
FuSrecFirmwarePrivate *priv = GET_PRIVATE (self);
|
||||||
|
priv->records = g_ptr_array_new_with_free_func ((GFreeFunc) fu_srec_firmware_record_free);
|
||||||
fu_firmware_add_flag (FU_FIRMWARE (self), FU_FIRMWARE_FLAG_HAS_CHECKSUM);
|
fu_firmware_add_flag (FU_FIRMWARE (self), FU_FIRMWARE_FLAG_HAS_CHECKSUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,12 @@
|
|||||||
#include "fu-firmware.h"
|
#include "fu-firmware.h"
|
||||||
|
|
||||||
#define FU_TYPE_SREC_FIRMWARE (fu_srec_firmware_get_type ())
|
#define FU_TYPE_SREC_FIRMWARE (fu_srec_firmware_get_type ())
|
||||||
G_DECLARE_FINAL_TYPE (FuSrecFirmware, fu_srec_firmware, FU, SREC_FIRMWARE, FuFirmware)
|
G_DECLARE_DERIVABLE_TYPE (FuSrecFirmware, fu_srec_firmware, FU, SREC_FIRMWARE, FuFirmware)
|
||||||
|
|
||||||
|
struct _FuSrecFirmwareClass
|
||||||
|
{
|
||||||
|
FuFirmwareClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FU_FIRMWARE_SREC_RECORD_KIND_S0_HEADER,
|
FU_FIRMWARE_SREC_RECORD_KIND_S0_HEADER,
|
||||||
|
Loading…
Reference in New Issue
Block a user