Coverage Report

Created: 2025-12-14 06:56

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-synaptics-rmi-struct.c
Line
Count
Source
1
/*
2
 * This file is auto-generated, do not modify!
3
 *
4
 * SPDX-License-Identifier: LGPL-2.1-or-later
5
 */
6
7
#include "config.h"
8
9
#include <glib.h>
10
11
#include "fu-synaptics-rmi-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-mem-private.h"
14
#include "fu-string.h"
15
16
#ifdef G_LOG_DOMAIN
17
  #undef G_LOG_DOMAIN
18
#endif
19
0
#define G_LOG_DOMAIN "FuStruct"
20
21
/**
22
 * fu_rmi_partition_id_to_string:
23
 * @val: value, e.g. %FU_RMI_PARTITION_ID_BOOTLOADER
24
 *
25
 * Converts an enumerated value to a string.
26
 *
27
 * Returns: identifier string
28
 **/
29
const gchar *
30
fu_rmi_partition_id_to_string(FuRmiPartitionId val)
31
0
{
32
0
    if (val == FU_RMI_PARTITION_ID_NONE)
33
0
        return "none";
34
0
    if (val == FU_RMI_PARTITION_ID_BOOTLOADER)
35
0
        return "bootloader";
36
0
    if (val == FU_RMI_PARTITION_ID_DEVICE_CONFIG)
37
0
        return "device-config";
38
0
    if (val == FU_RMI_PARTITION_ID_FLASH_CONFIG)
39
0
        return "flash-config";
40
0
    if (val == FU_RMI_PARTITION_ID_MANUFACTURING_BLOCK)
41
0
        return "manufacturing-block";
42
0
    if (val == FU_RMI_PARTITION_ID_GUEST_SERIALIZATION)
43
0
        return "guest-serialization";
44
0
    if (val == FU_RMI_PARTITION_ID_GLOBAL_PARAMETERS)
45
0
        return "global-parameters";
46
0
    if (val == FU_RMI_PARTITION_ID_CORE_CODE)
47
0
        return "core-code";
48
0
    if (val == FU_RMI_PARTITION_ID_CORE_CONFIG)
49
0
        return "core-config";
50
0
    if (val == FU_RMI_PARTITION_ID_GUEST_CODE)
51
0
        return "guest-code";
52
0
    if (val == FU_RMI_PARTITION_ID_DISPLAY_CONFIG)
53
0
        return "display-config";
54
0
    if (val == FU_RMI_PARTITION_ID_EXTERNAL_TOUCH_AFE_CONFIG)
55
0
        return "external-touch-afe-config";
56
0
    if (val == FU_RMI_PARTITION_ID_UTILITY_PARAMETER)
57
0
        return "utility-parameter";
58
0
    if (val == FU_RMI_PARTITION_ID_PUBKEY)
59
0
        return "pubkey";
60
0
    if (val == FU_RMI_PARTITION_ID_FIXED_LOCATION_DATA)
61
0
        return "fixed-location-data";
62
0
    return NULL;
63
0
}
64
65
/**
66
 * fu_rmi_container_id_to_string:
67
 * @val: value, e.g. %FU_RMI_CONTAINER_ID_UI
68
 *
69
 * Converts an enumerated value to a string.
70
 *
71
 * Returns: identifier string
72
 **/
73
const gchar *
74
fu_rmi_container_id_to_string(FuRmiContainerId val)
75
7.14k
{
76
7.14k
    if (val == FU_RMI_CONTAINER_ID_TOP_LEVEL)
77
1.26k
        return "top-level";
78
5.88k
    if (val == FU_RMI_CONTAINER_ID_UI)
79
0
        return "ui";
80
5.88k
    if (val == FU_RMI_CONTAINER_ID_UI_CONFIG)
81
0
        return "ui-config";
82
5.88k
    if (val == FU_RMI_CONTAINER_ID_BL)
83
0
        return "bl";
84
5.88k
    if (val == FU_RMI_CONTAINER_ID_BL_IMAGE)
85
273
        return "bl-image";
86
5.61k
    if (val == FU_RMI_CONTAINER_ID_BL_CONFIG)
87
195
        return "bl-config";
88
5.41k
    if (val == FU_RMI_CONTAINER_ID_BL_LOCKDOWN_INFO)
89
351
        return "bl-lockdown-info";
90
5.06k
    if (val == FU_RMI_CONTAINER_ID_PERMANENT_CONFIG)
91
242
        return "permanent-config";
92
4.82k
    if (val == FU_RMI_CONTAINER_ID_GUEST_CODE)
93
334
        return "guest-code";
94
4.48k
    if (val == FU_RMI_CONTAINER_ID_BL_PROTOCOL_DESCRIPTOR)
95
481
        return "bl-protocol-descriptor";
96
4.00k
    if (val == FU_RMI_CONTAINER_ID_UI_PROTOCOL_DESCRIPTOR)
97
542
        return "ui-protocol-descriptor";
98
3.46k
    if (val == FU_RMI_CONTAINER_ID_RMI_SELF_DISCOVERY)
99
198
        return "rmi-self-discovery";
100
3.26k
    if (val == FU_RMI_CONTAINER_ID_RMI_PAGE_CONTENT)
101
202
        return "rmi-page-content";
102
3.06k
    if (val == FU_RMI_CONTAINER_ID_GENERAL_INFORMATION)
103
0
        return "general-information";
104
3.06k
    if (val == FU_RMI_CONTAINER_ID_DEVICE_CONFIG)
105
352
        return "device-config";
106
2.71k
    if (val == FU_RMI_CONTAINER_ID_FLASH_CONFIG)
107
0
        return "flash-config";
108
2.71k
    if (val == FU_RMI_CONTAINER_ID_GUEST_SERIALIZATION)
109
198
        return "guest-serialization";
110
2.51k
    if (val == FU_RMI_CONTAINER_ID_GLOBAL_PARAMETERS)
111
1.34k
        return "global-parameters";
112
1.17k
    if (val == FU_RMI_CONTAINER_ID_CORE_CODE)
113
0
        return "core-code";
114
1.17k
    if (val == FU_RMI_CONTAINER_ID_CORE_CONFIG)
115
0
        return "core-config";
116
1.17k
    if (val == FU_RMI_CONTAINER_ID_DISPLAY_CONFIG)
117
0
        return "display-config";
118
1.17k
    if (val == FU_RMI_CONTAINER_ID_EXTERNAL_TOUCH_AFE_CONFIG)
119
0
        return "external-touch-afe-config";
120
1.17k
    if (val == FU_RMI_CONTAINER_ID_UTILITY)
121
204
        return "utility";
122
966
    if (val == FU_RMI_CONTAINER_ID_UTILITY_PARAMETER)
123
194
        return "utility-parameter";
124
772
    if (val == FU_RMI_CONTAINER_ID_FIXED_LOCATION_DATA)
125
0
        return "fixed-location-data";
126
772
    return NULL;
127
772
}
128
129
130
131
132
133
134
135
/**
136
 * fu_struct_rmi_partition_tbl_ref: (skip):
137
 **/
138
FuStructRmiPartitionTbl *
139
fu_struct_rmi_partition_tbl_ref(FuStructRmiPartitionTbl *st)
140
0
{
141
0
    g_return_val_if_fail(st != NULL, NULL);
142
0
    st->refcount++;
143
0
    return st;
144
0
}
145
/**
146
 * fu_struct_rmi_partition_tbl_unref: (skip):
147
 **/
148
void
149
fu_struct_rmi_partition_tbl_unref(FuStructRmiPartitionTbl *st)
150
0
{
151
0
    g_return_if_fail(st != NULL);
152
0
    if (st->refcount == 0) {
153
0
        g_critical("FuStructRmiPartitionTbl refcount already zero");
154
0
        return;
155
0
    }
156
0
    if (--st->refcount > 0)
157
0
        return;
158
0
    if (st->buf != NULL)
159
0
        g_byte_array_unref(st->buf);
160
0
    g_free(st);
161
0
}
162
/**
163
 * fu_struct_rmi_partition_tbl_new_internal: (skip):
164
 **/
165
static FuStructRmiPartitionTbl *
166
fu_struct_rmi_partition_tbl_new_internal(void)
167
0
{
168
0
    FuStructRmiPartitionTbl *st = g_new0(FuStructRmiPartitionTbl, 1);
169
0
    st->refcount = 1;
170
0
    return st;
171
0
}
172
173
/* getters */
174
/**
175
 * fu_struct_rmi_partition_tbl_get_partition_id: (skip):
176
 **/
177
guint16
178
fu_struct_rmi_partition_tbl_get_partition_id(const FuStructRmiPartitionTbl *st)
179
0
{
180
0
    g_return_val_if_fail(st != NULL, 0x0);
181
0
    return fu_memread_uint16(st->buf->data + 0, G_LITTLE_ENDIAN);
182
0
}
183
/**
184
 * fu_struct_rmi_partition_tbl_get_partition_len: (skip):
185
 **/
186
guint16
187
fu_struct_rmi_partition_tbl_get_partition_len(const FuStructRmiPartitionTbl *st)
188
0
{
189
0
    g_return_val_if_fail(st != NULL, 0x0);
190
0
    return fu_memread_uint16(st->buf->data + 2, G_LITTLE_ENDIAN);
191
0
}
192
/**
193
 * fu_struct_rmi_partition_tbl_get_partition_addr: (skip):
194
 **/
195
guint16
196
fu_struct_rmi_partition_tbl_get_partition_addr(const FuStructRmiPartitionTbl *st)
197
0
{
198
0
    g_return_val_if_fail(st != NULL, 0x0);
199
0
    return fu_memread_uint16(st->buf->data + 4, G_LITTLE_ENDIAN);
200
0
}
201
/**
202
 * fu_struct_rmi_partition_tbl_get_partition_prop: (skip):
203
 **/
204
guint16
205
fu_struct_rmi_partition_tbl_get_partition_prop(const FuStructRmiPartitionTbl *st)
206
0
{
207
0
    g_return_val_if_fail(st != NULL, 0x0);
208
0
    return fu_memread_uint16(st->buf->data + 6, G_LITTLE_ENDIAN);
209
0
}
210
211
/* setters */
212
/**
213
 * fu_struct_rmi_partition_tbl_to_string: (skip):
214
 **/
215
static gchar *
216
fu_struct_rmi_partition_tbl_to_string(const FuStructRmiPartitionTbl *st)
217
0
{
218
0
    g_autoptr(GString) str = g_string_new("FuStructRmiPartitionTbl:\n");
219
0
    g_return_val_if_fail(st != NULL, NULL);
220
0
    g_string_append_printf(str, "  partition_id: 0x%x\n",
221
0
                           (guint) fu_struct_rmi_partition_tbl_get_partition_id(st));
222
0
    g_string_append_printf(str, "  partition_len: 0x%x\n",
223
0
                           (guint) fu_struct_rmi_partition_tbl_get_partition_len(st));
224
0
    g_string_append_printf(str, "  partition_addr: 0x%x\n",
225
0
                           (guint) fu_struct_rmi_partition_tbl_get_partition_addr(st));
226
0
    g_string_append_printf(str, "  partition_prop: 0x%x\n",
227
0
                           (guint) fu_struct_rmi_partition_tbl_get_partition_prop(st));
228
0
    if (str->len > 0)
229
0
        g_string_set_size(str, str->len - 1);
230
0
    return g_string_free(g_steal_pointer(&str), FALSE);
231
0
}
232
static gboolean
233
fu_struct_rmi_partition_tbl_validate_internal(FuStructRmiPartitionTbl *st, GError **error)
234
0
{
235
0
    g_return_val_if_fail(st != NULL, FALSE);
236
0
    return TRUE;
237
0
}
238
static gboolean
239
fu_struct_rmi_partition_tbl_parse_internal(FuStructRmiPartitionTbl *st, GError **error)
240
0
{
241
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
242
0
        g_autofree gchar *str = fu_struct_rmi_partition_tbl_to_string(st);
243
0
        g_debug("%s", str);
244
0
    }
245
0
    if (!fu_struct_rmi_partition_tbl_validate_internal(st, error))
246
0
        return FALSE;
247
0
    return TRUE;
248
0
}
249
250
/**
251
 * fu_struct_rmi_partition_tbl_parse: (skip):
252
 **/
253
FuStructRmiPartitionTbl *
254
fu_struct_rmi_partition_tbl_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
255
0
{
256
0
    g_autoptr(FuStructRmiPartitionTbl) st = fu_struct_rmi_partition_tbl_new_internal();
257
0
    g_return_val_if_fail(buf != NULL, NULL);
258
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
259
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
260
0
        g_prefix_error_literal(error, "invalid struct FuStructRmiPartitionTbl: ");
261
0
        return NULL;
262
0
    }
263
0
    st->buf = g_byte_array_new();
264
0
    g_byte_array_append(st->buf, buf + offset, 8);
265
0
    if (!fu_struct_rmi_partition_tbl_parse_internal(st, error))
266
0
        return NULL;
267
0
    return g_steal_pointer(&st);
268
0
}
269
/**
270
 * fu_struct_rmi_img_ref: (skip):
271
 **/
272
FuStructRmiImg *
273
fu_struct_rmi_img_ref(FuStructRmiImg *st)
274
0
{
275
0
    g_return_val_if_fail(st != NULL, NULL);
276
0
    st->refcount++;
277
0
    return st;
278
0
}
279
/**
280
 * fu_struct_rmi_img_unref: (skip):
281
 **/
282
void
283
fu_struct_rmi_img_unref(FuStructRmiImg *st)
284
2.00k
{
285
2.00k
    g_return_if_fail(st != NULL);
286
2.00k
    if (st->refcount == 0) {
287
0
        g_critical("FuStructRmiImg refcount already zero");
288
0
        return;
289
0
    }
290
2.00k
    if (--st->refcount > 0)
291
0
        return;
292
2.00k
    if (st->buf != NULL)
293
2.00k
        g_byte_array_unref(st->buf);
294
2.00k
    g_free(st);
295
2.00k
}
296
/**
297
 * fu_struct_rmi_img_new_internal: (skip):
298
 **/
299
static FuStructRmiImg *
300
fu_struct_rmi_img_new_internal(void)
301
2.00k
{
302
2.00k
    FuStructRmiImg *st = g_new0(FuStructRmiImg, 1);
303
2.00k
    st->refcount = 1;
304
2.00k
    return st;
305
2.00k
}
306
307
/* getters */
308
/**
309
 * fu_struct_rmi_img_get_checksum: (skip):
310
 **/
311
guint32
312
fu_struct_rmi_img_get_checksum(const FuStructRmiImg *st)
313
1.76k
{
314
1.76k
    g_return_val_if_fail(st != NULL, 0x0);
315
1.76k
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
316
1.76k
}
317
/**
318
 * fu_struct_rmi_img_get_io_offset: (skip):
319
 **/
320
guint8
321
fu_struct_rmi_img_get_io_offset(const FuStructRmiImg *st)
322
947
{
323
947
    g_return_val_if_fail(st != NULL, 0x0);
324
947
    return st->buf->data[6];
325
947
}
326
/**
327
 * fu_struct_rmi_img_get_bootloader_version: (skip):
328
 **/
329
guint8
330
fu_struct_rmi_img_get_bootloader_version(const FuStructRmiImg *st)
331
947
{
332
947
    g_return_val_if_fail(st != NULL, 0x0);
333
947
    return st->buf->data[7];
334
947
}
335
/**
336
 * fu_struct_rmi_img_get_image_size: (skip):
337
 **/
338
guint32
339
fu_struct_rmi_img_get_image_size(const FuStructRmiImg *st)
340
1.06k
{
341
1.06k
    g_return_val_if_fail(st != NULL, 0x0);
342
1.06k
    return fu_memread_uint32(st->buf->data + 8, G_LITTLE_ENDIAN);
343
1.06k
}
344
/**
345
 * fu_struct_rmi_img_get_config_size: (skip):
346
 **/
347
guint32
348
fu_struct_rmi_img_get_config_size(const FuStructRmiImg *st)
349
49
{
350
49
    g_return_val_if_fail(st != NULL, 0x0);
351
49
    return fu_memread_uint32(st->buf->data + 12, G_LITTLE_ENDIAN);
352
49
}
353
/**
354
 * fu_struct_rmi_img_get_product_id: (skip):
355
 **/
356
gchar *
357
fu_struct_rmi_img_get_product_id(const FuStructRmiImg *st)
358
947
{
359
947
    g_return_val_if_fail(st != NULL, NULL);
360
947
    return fu_memstrsafe(st->buf->data, st->buf->len, 16, 10, NULL);
361
947
}
362
/**
363
 * fu_struct_rmi_img_get_package_id: (skip):
364
 **/
365
guint32
366
fu_struct_rmi_img_get_package_id(const FuStructRmiImg *st)
367
184
{
368
184
    g_return_val_if_fail(st != NULL, 0x0);
369
184
    return fu_memread_uint32(st->buf->data + 26, G_LITTLE_ENDIAN);
370
184
}
371
/**
372
 * fu_struct_rmi_img_get_product_info: (skip):
373
 **/
374
guint32
375
fu_struct_rmi_img_get_product_info(const FuStructRmiImg *st)
376
947
{
377
947
    g_return_val_if_fail(st != NULL, 0x0);
378
947
    return fu_memread_uint32(st->buf->data + 30, G_LITTLE_ENDIAN);
379
947
}
380
/**
381
 * fu_struct_rmi_img_get_fw_build_id: (skip):
382
 **/
383
guint32
384
fu_struct_rmi_img_get_fw_build_id(const FuStructRmiImg *st)
385
184
{
386
184
    g_return_val_if_fail(st != NULL, 0x0);
387
184
    return fu_memread_uint32(st->buf->data + 80, G_LITTLE_ENDIAN);
388
184
}
389
/**
390
 * fu_struct_rmi_img_get_signature_size: (skip):
391
 **/
392
guint32
393
fu_struct_rmi_img_get_signature_size(const FuStructRmiImg *st)
394
86
{
395
86
    g_return_val_if_fail(st != NULL, 0x0);
396
86
    return fu_memread_uint32(st->buf->data + 84, G_LITTLE_ENDIAN);
397
86
}
398
399
/* setters */
400
/**
401
 * fu_struct_rmi_img_set_checksum: (skip):
402
 **/
403
void
404
fu_struct_rmi_img_set_checksum(FuStructRmiImg *st, guint32 value)
405
0
{
406
0
    g_return_if_fail(st != NULL);
407
0
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
408
0
}
409
/**
410
 * fu_struct_rmi_img_set_io_offset: (skip):
411
 **/
412
void
413
fu_struct_rmi_img_set_io_offset(FuStructRmiImg *st, guint8 value)
414
0
{
415
0
    g_return_if_fail(st != NULL);
416
0
    st->buf->data[6] = value;
417
0
}
418
/**
419
 * fu_struct_rmi_img_set_bootloader_version: (skip):
420
 **/
421
void
422
fu_struct_rmi_img_set_bootloader_version(FuStructRmiImg *st, guint8 value)
423
0
{
424
0
    g_return_if_fail(st != NULL);
425
0
    st->buf->data[7] = value;
426
0
}
427
/**
428
 * fu_struct_rmi_img_set_image_size: (skip):
429
 **/
430
void
431
fu_struct_rmi_img_set_image_size(FuStructRmiImg *st, guint32 value)
432
0
{
433
0
    g_return_if_fail(st != NULL);
434
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
435
0
}
436
/**
437
 * fu_struct_rmi_img_set_config_size: (skip):
438
 **/
439
void
440
fu_struct_rmi_img_set_config_size(FuStructRmiImg *st, guint32 value)
441
0
{
442
0
    g_return_if_fail(st != NULL);
443
0
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
444
0
}
445
/**
446
 * fu_struct_rmi_img_set_product_id: (skip):
447
 **/
448
gboolean
449
fu_struct_rmi_img_set_product_id(FuStructRmiImg *st, const gchar *value, GError **error)
450
0
{
451
0
    gsize len;
452
0
    g_return_val_if_fail(st != NULL, FALSE);
453
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
454
0
    if (value == NULL) {
455
0
        memset(st->buf->data + 16, 0x0, 10);
456
0
        return TRUE;
457
0
    }
458
0
    len = strlen(value);
459
0
    if (len > 10) {
460
0
        g_set_error(error,
461
0
                    FWUPD_ERROR,
462
0
                    FWUPD_ERROR_INVALID_DATA,
463
0
                    "string '%s' (0x%x bytes) does not fit in FuStructRmiImg.product_id (0x%x bytes)",
464
0
                    value, (guint) len, (guint) 10);
465
0
        return FALSE;
466
0
    }
467
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 16, (const guint8 *)value, len, 0x0, len, error);
468
0
}
469
/**
470
 * fu_struct_rmi_img_set_package_id: (skip):
471
 **/
472
void
473
fu_struct_rmi_img_set_package_id(FuStructRmiImg *st, guint32 value)
474
0
{
475
0
    g_return_if_fail(st != NULL);
476
0
    fu_memwrite_uint32(st->buf->data + 26, value, G_LITTLE_ENDIAN);
477
0
}
478
/**
479
 * fu_struct_rmi_img_set_product_info: (skip):
480
 **/
481
void
482
fu_struct_rmi_img_set_product_info(FuStructRmiImg *st, guint32 value)
483
0
{
484
0
    g_return_if_fail(st != NULL);
485
0
    fu_memwrite_uint32(st->buf->data + 30, value, G_LITTLE_ENDIAN);
486
0
}
487
/**
488
 * fu_struct_rmi_img_set_fw_build_id: (skip):
489
 **/
490
void
491
fu_struct_rmi_img_set_fw_build_id(FuStructRmiImg *st, guint32 value)
492
0
{
493
0
    g_return_if_fail(st != NULL);
494
0
    fu_memwrite_uint32(st->buf->data + 80, value, G_LITTLE_ENDIAN);
495
0
}
496
/**
497
 * fu_struct_rmi_img_set_signature_size: (skip):
498
 **/
499
void
500
fu_struct_rmi_img_set_signature_size(FuStructRmiImg *st, guint32 value)
501
0
{
502
0
    g_return_if_fail(st != NULL);
503
0
    fu_memwrite_uint32(st->buf->data + 84, value, G_LITTLE_ENDIAN);
504
0
}
505
/**
506
 * fu_struct_rmi_img_new: (skip):
507
 **/
508
FuStructRmiImg *
509
fu_struct_rmi_img_new(void)
510
6
{
511
6
    FuStructRmiImg *st = fu_struct_rmi_img_new_internal();
512
6
    st->buf = g_byte_array_sized_new(88);
513
6
    fu_byte_array_set_size(st->buf, 88, 0x0);
514
6
    return st;
515
6
}
516
/**
517
 * fu_struct_rmi_img_to_string: (skip):
518
 **/
519
static gchar *
520
fu_struct_rmi_img_to_string(const FuStructRmiImg *st)
521
0
{
522
0
    g_autoptr(GString) str = g_string_new("FuStructRmiImg:\n");
523
0
    g_return_val_if_fail(st != NULL, NULL);
524
0
    g_string_append_printf(str, "  checksum: 0x%x\n",
525
0
                           (guint) fu_struct_rmi_img_get_checksum(st));
526
0
    g_string_append_printf(str, "  io_offset: 0x%x\n",
527
0
                           (guint) fu_struct_rmi_img_get_io_offset(st));
528
0
    g_string_append_printf(str, "  bootloader_version: 0x%x\n",
529
0
                           (guint) fu_struct_rmi_img_get_bootloader_version(st));
530
0
    g_string_append_printf(str, "  image_size: 0x%x\n",
531
0
                           (guint) fu_struct_rmi_img_get_image_size(st));
532
0
    g_string_append_printf(str, "  config_size: 0x%x\n",
533
0
                           (guint) fu_struct_rmi_img_get_config_size(st));
534
0
    {
535
0
        g_autofree gchar *tmp = fu_struct_rmi_img_get_product_id(st);
536
0
        if (tmp != NULL)
537
0
            g_string_append_printf(str, "  product_id: %s\n", tmp);
538
0
    }
539
0
    g_string_append_printf(str, "  package_id: 0x%x\n",
540
0
                           (guint) fu_struct_rmi_img_get_package_id(st));
541
0
    g_string_append_printf(str, "  product_info: 0x%x\n",
542
0
                           (guint) fu_struct_rmi_img_get_product_info(st));
543
0
    g_string_append_printf(str, "  fw_build_id: 0x%x\n",
544
0
                           (guint) fu_struct_rmi_img_get_fw_build_id(st));
545
0
    g_string_append_printf(str, "  signature_size: 0x%x\n",
546
0
                           (guint) fu_struct_rmi_img_get_signature_size(st));
547
0
    if (str->len > 0)
548
0
        g_string_set_size(str, str->len - 1);
549
0
    return g_string_free(g_steal_pointer(&str), FALSE);
550
0
}
551
static gboolean
552
fu_struct_rmi_img_validate_internal(FuStructRmiImg *st, GError **error)
553
1.95k
{
554
1.95k
    g_return_val_if_fail(st != NULL, FALSE);
555
1.95k
    return TRUE;
556
1.95k
}
557
static gboolean
558
fu_struct_rmi_img_parse_internal(FuStructRmiImg *st, GError **error)
559
1.95k
{
560
1.95k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
561
0
        g_autofree gchar *str = fu_struct_rmi_img_to_string(st);
562
0
        g_debug("%s", str);
563
0
    }
564
1.95k
    if (!fu_struct_rmi_img_validate_internal(st, error))
565
0
        return FALSE;
566
1.95k
    return TRUE;
567
1.95k
}
568
/**
569
 * fu_struct_rmi_img_parse_stream: (skip):
570
 **/
571
FuStructRmiImg *
572
fu_struct_rmi_img_parse_stream(GInputStream *stream, gsize offset, GError **error)
573
1.99k
{
574
1.99k
    g_autoptr(FuStructRmiImg) st = fu_struct_rmi_img_new_internal();
575
1.99k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 88, NULL, error);
576
1.99k
    if (st->buf == NULL) {
577
0
        g_prefix_error(error, "FuStructRmiImg failed read of 0x%x: ", (guint) 88);
578
0
        return NULL;
579
0
    }
580
1.99k
    if (st->buf->len != 88) {
581
44
        g_set_error(error,
582
44
                    FWUPD_ERROR,
583
44
                    FWUPD_ERROR_INVALID_DATA,
584
44
                    "FuStructRmiImg requested 0x%x and got 0x%x",
585
44
                    (guint) 88,
586
44
                    (guint) st->buf->len);
587
44
        return NULL;
588
44
    }
589
1.95k
    if (!fu_struct_rmi_img_parse_internal(st, error))
590
0
        return NULL;
591
1.95k
    return g_steal_pointer(&st);
592
1.95k
}
593
/**
594
 * fu_struct_rmi_container_descriptor_ref: (skip):
595
 **/
596
FuStructRmiContainerDescriptor *
597
fu_struct_rmi_container_descriptor_ref(FuStructRmiContainerDescriptor *st)
598
0
{
599
0
    g_return_val_if_fail(st != NULL, NULL);
600
0
    st->refcount++;
601
0
    return st;
602
0
}
603
/**
604
 * fu_struct_rmi_container_descriptor_unref: (skip):
605
 **/
606
void
607
fu_struct_rmi_container_descriptor_unref(FuStructRmiContainerDescriptor *st)
608
43.5k
{
609
43.5k
    g_return_if_fail(st != NULL);
610
43.5k
    if (st->refcount == 0) {
611
0
        g_critical("FuStructRmiContainerDescriptor refcount already zero");
612
0
        return;
613
0
    }
614
43.5k
    if (--st->refcount > 0)
615
0
        return;
616
43.5k
    if (st->buf != NULL)
617
43.3k
        g_byte_array_unref(st->buf);
618
43.5k
    g_free(st);
619
43.5k
}
620
/**
621
 * fu_struct_rmi_container_descriptor_new_internal: (skip):
622
 **/
623
static FuStructRmiContainerDescriptor *
624
fu_struct_rmi_container_descriptor_new_internal(void)
625
43.5k
{
626
43.5k
    FuStructRmiContainerDescriptor *st = g_new0(FuStructRmiContainerDescriptor, 1);
627
43.5k
    st->refcount = 1;
628
43.5k
    return st;
629
43.5k
}
630
631
/* getters */
632
/**
633
 * fu_struct_rmi_container_descriptor_get_content_checksum: (skip):
634
 **/
635
guint32
636
fu_struct_rmi_container_descriptor_get_content_checksum(const FuStructRmiContainerDescriptor *st)
637
0
{
638
0
    g_return_val_if_fail(st != NULL, 0x0);
639
0
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
640
0
}
641
/**
642
 * fu_struct_rmi_container_descriptor_get_container_id: (skip):
643
 **/
644
FuRmiContainerId
645
fu_struct_rmi_container_descriptor_get_container_id(const FuStructRmiContainerDescriptor *st)
646
40.9k
{
647
40.9k
    g_return_val_if_fail(st != NULL, 0x0);
648
40.9k
    return fu_memread_uint16(st->buf->data + 4, G_LITTLE_ENDIAN);
649
40.9k
}
650
/**
651
 * fu_struct_rmi_container_descriptor_get_minor_version: (skip):
652
 **/
653
guint8
654
fu_struct_rmi_container_descriptor_get_minor_version(const FuStructRmiContainerDescriptor *st)
655
0
{
656
0
    g_return_val_if_fail(st != NULL, 0x0);
657
0
    return st->buf->data[6];
658
0
}
659
/**
660
 * fu_struct_rmi_container_descriptor_get_major_version: (skip):
661
 **/
662
guint8
663
fu_struct_rmi_container_descriptor_get_major_version(const FuStructRmiContainerDescriptor *st)
664
0
{
665
0
    g_return_val_if_fail(st != NULL, 0x0);
666
0
    return st->buf->data[7];
667
0
}
668
/**
669
 * fu_struct_rmi_container_descriptor_get_signature_size: (skip):
670
 **/
671
guint32
672
fu_struct_rmi_container_descriptor_get_signature_size(const FuStructRmiContainerDescriptor *st)
673
40.1k
{
674
40.1k
    g_return_val_if_fail(st != NULL, 0x0);
675
40.1k
    return fu_memread_uint32(st->buf->data + 8, G_LITTLE_ENDIAN);
676
40.1k
}
677
/**
678
 * fu_struct_rmi_container_descriptor_get_container_option_flags: (skip):
679
 **/
680
guint32
681
fu_struct_rmi_container_descriptor_get_container_option_flags(const FuStructRmiContainerDescriptor *st)
682
0
{
683
0
    g_return_val_if_fail(st != NULL, 0x0);
684
0
    return fu_memread_uint32(st->buf->data + 12, G_LITTLE_ENDIAN);
685
0
}
686
/**
687
 * fu_struct_rmi_container_descriptor_get_content_options_length: (skip):
688
 **/
689
guint32
690
fu_struct_rmi_container_descriptor_get_content_options_length(const FuStructRmiContainerDescriptor *st)
691
0
{
692
0
    g_return_val_if_fail(st != NULL, 0x0);
693
0
    return fu_memread_uint32(st->buf->data + 16, G_LITTLE_ENDIAN);
694
0
}
695
/**
696
 * fu_struct_rmi_container_descriptor_get_content_options_address: (skip):
697
 **/
698
guint32
699
fu_struct_rmi_container_descriptor_get_content_options_address(const FuStructRmiContainerDescriptor *st)
700
0
{
701
0
    g_return_val_if_fail(st != NULL, 0x0);
702
0
    return fu_memread_uint32(st->buf->data + 20, G_LITTLE_ENDIAN);
703
0
}
704
/**
705
 * fu_struct_rmi_container_descriptor_get_content_length: (skip):
706
 **/
707
guint32
708
fu_struct_rmi_container_descriptor_get_content_length(const FuStructRmiContainerDescriptor *st)
709
43.1k
{
710
43.1k
    g_return_val_if_fail(st != NULL, 0x0);
711
43.1k
    return fu_memread_uint32(st->buf->data + 24, G_LITTLE_ENDIAN);
712
43.1k
}
713
/**
714
 * fu_struct_rmi_container_descriptor_get_content_address: (skip):
715
 **/
716
guint32
717
fu_struct_rmi_container_descriptor_get_content_address(const FuStructRmiContainerDescriptor *st)
718
43.1k
{
719
43.1k
    g_return_val_if_fail(st != NULL, 0x0);
720
43.1k
    return fu_memread_uint32(st->buf->data + 28, G_LITTLE_ENDIAN);
721
43.1k
}
722
723
/* setters */
724
/**
725
 * fu_struct_rmi_container_descriptor_set_content_checksum: (skip):
726
 **/
727
void
728
fu_struct_rmi_container_descriptor_set_content_checksum(FuStructRmiContainerDescriptor *st, guint32 value)
729
0
{
730
0
    g_return_if_fail(st != NULL);
731
0
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
732
0
}
733
/**
734
 * fu_struct_rmi_container_descriptor_set_container_id: (skip):
735
 **/
736
void
737
fu_struct_rmi_container_descriptor_set_container_id(FuStructRmiContainerDescriptor *st, FuRmiContainerId value)
738
73
{
739
73
    g_return_if_fail(st != NULL);
740
73
    fu_memwrite_uint16(st->buf->data + 4, value, G_LITTLE_ENDIAN);
741
73
}
742
/**
743
 * fu_struct_rmi_container_descriptor_set_minor_version: (skip):
744
 **/
745
void
746
fu_struct_rmi_container_descriptor_set_minor_version(FuStructRmiContainerDescriptor *st, guint8 value)
747
0
{
748
0
    g_return_if_fail(st != NULL);
749
0
    st->buf->data[6] = value;
750
0
}
751
/**
752
 * fu_struct_rmi_container_descriptor_set_major_version: (skip):
753
 **/
754
void
755
fu_struct_rmi_container_descriptor_set_major_version(FuStructRmiContainerDescriptor *st, guint8 value)
756
0
{
757
0
    g_return_if_fail(st != NULL);
758
0
    st->buf->data[7] = value;
759
0
}
760
/**
761
 * fu_struct_rmi_container_descriptor_set_signature_size: (skip):
762
 **/
763
void
764
fu_struct_rmi_container_descriptor_set_signature_size(FuStructRmiContainerDescriptor *st, guint32 value)
765
0
{
766
0
    g_return_if_fail(st != NULL);
767
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
768
0
}
769
/**
770
 * fu_struct_rmi_container_descriptor_set_container_option_flags: (skip):
771
 **/
772
void
773
fu_struct_rmi_container_descriptor_set_container_option_flags(FuStructRmiContainerDescriptor *st, guint32 value)
774
0
{
775
0
    g_return_if_fail(st != NULL);
776
0
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
777
0
}
778
/**
779
 * fu_struct_rmi_container_descriptor_set_content_options_length: (skip):
780
 **/
781
void
782
fu_struct_rmi_container_descriptor_set_content_options_length(FuStructRmiContainerDescriptor *st, guint32 value)
783
0
{
784
0
    g_return_if_fail(st != NULL);
785
0
    fu_memwrite_uint32(st->buf->data + 16, value, G_LITTLE_ENDIAN);
786
0
}
787
/**
788
 * fu_struct_rmi_container_descriptor_set_content_options_address: (skip):
789
 **/
790
void
791
fu_struct_rmi_container_descriptor_set_content_options_address(FuStructRmiContainerDescriptor *st, guint32 value)
792
0
{
793
0
    g_return_if_fail(st != NULL);
794
0
    fu_memwrite_uint32(st->buf->data + 20, value, G_LITTLE_ENDIAN);
795
0
}
796
/**
797
 * fu_struct_rmi_container_descriptor_set_content_length: (skip):
798
 **/
799
void
800
fu_struct_rmi_container_descriptor_set_content_length(FuStructRmiContainerDescriptor *st, guint32 value)
801
0
{
802
0
    g_return_if_fail(st != NULL);
803
0
    fu_memwrite_uint32(st->buf->data + 24, value, G_LITTLE_ENDIAN);
804
0
}
805
/**
806
 * fu_struct_rmi_container_descriptor_set_content_address: (skip):
807
 **/
808
void
809
fu_struct_rmi_container_descriptor_set_content_address(FuStructRmiContainerDescriptor *st, guint32 value)
810
73
{
811
73
    g_return_if_fail(st != NULL);
812
73
    fu_memwrite_uint32(st->buf->data + 28, value, G_LITTLE_ENDIAN);
813
73
}
814
/**
815
 * fu_struct_rmi_container_descriptor_new: (skip):
816
 **/
817
FuStructRmiContainerDescriptor *
818
fu_struct_rmi_container_descriptor_new(void)
819
146
{
820
146
    FuStructRmiContainerDescriptor *st = fu_struct_rmi_container_descriptor_new_internal();
821
146
    st->buf = g_byte_array_sized_new(32);
822
146
    fu_byte_array_set_size(st->buf, 32, 0x0);
823
146
    return st;
824
146
}
825
/**
826
 * fu_struct_rmi_container_descriptor_to_string: (skip):
827
 **/
828
static gchar *
829
fu_struct_rmi_container_descriptor_to_string(const FuStructRmiContainerDescriptor *st)
830
0
{
831
0
    g_autoptr(GString) str = g_string_new("FuStructRmiContainerDescriptor:\n");
832
0
    g_return_val_if_fail(st != NULL, NULL);
833
0
    g_string_append_printf(str, "  content_checksum: 0x%x\n",
834
0
                           (guint) fu_struct_rmi_container_descriptor_get_content_checksum(st));
835
0
    {
836
0
        const gchar *tmp = fu_rmi_container_id_to_string(fu_struct_rmi_container_descriptor_get_container_id(st));
837
0
        if (tmp != NULL) {
838
0
            g_string_append_printf(str, "  container_id: 0x%x [%s]\n", (guint) fu_struct_rmi_container_descriptor_get_container_id(st), tmp);
839
0
        } else {
840
0
            g_string_append_printf(str, "  container_id: 0x%x\n", (guint) fu_struct_rmi_container_descriptor_get_container_id(st));
841
0
        }
842
0
    }
843
0
    g_string_append_printf(str, "  minor_version: 0x%x\n",
844
0
                           (guint) fu_struct_rmi_container_descriptor_get_minor_version(st));
845
0
    g_string_append_printf(str, "  major_version: 0x%x\n",
846
0
                           (guint) fu_struct_rmi_container_descriptor_get_major_version(st));
847
0
    g_string_append_printf(str, "  signature_size: 0x%x\n",
848
0
                           (guint) fu_struct_rmi_container_descriptor_get_signature_size(st));
849
0
    g_string_append_printf(str, "  container_option_flags: 0x%x\n",
850
0
                           (guint) fu_struct_rmi_container_descriptor_get_container_option_flags(st));
851
0
    g_string_append_printf(str, "  content_options_length: 0x%x\n",
852
0
                           (guint) fu_struct_rmi_container_descriptor_get_content_options_length(st));
853
0
    g_string_append_printf(str, "  content_options_address: 0x%x\n",
854
0
                           (guint) fu_struct_rmi_container_descriptor_get_content_options_address(st));
855
0
    g_string_append_printf(str, "  content_length: 0x%x\n",
856
0
                           (guint) fu_struct_rmi_container_descriptor_get_content_length(st));
857
0
    g_string_append_printf(str, "  content_address: 0x%x\n",
858
0
                           (guint) fu_struct_rmi_container_descriptor_get_content_address(st));
859
0
    if (str->len > 0)
860
0
        g_string_set_size(str, str->len - 1);
861
0
    return g_string_free(g_steal_pointer(&str), FALSE);
862
0
}
863
static gboolean
864
fu_struct_rmi_container_descriptor_validate_internal(FuStructRmiContainerDescriptor *st, GError **error)
865
43.1k
{
866
43.1k
    g_return_val_if_fail(st != NULL, FALSE);
867
43.1k
    return TRUE;
868
43.1k
}
869
static gboolean
870
fu_struct_rmi_container_descriptor_parse_internal(FuStructRmiContainerDescriptor *st, GError **error)
871
43.1k
{
872
43.1k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
873
0
        g_autofree gchar *str = fu_struct_rmi_container_descriptor_to_string(st);
874
0
        g_debug("%s", str);
875
0
    }
876
43.1k
    if (!fu_struct_rmi_container_descriptor_validate_internal(st, error))
877
0
        return FALSE;
878
43.1k
    return TRUE;
879
43.1k
}
880
/**
881
 * fu_struct_rmi_container_descriptor_parse_stream: (skip):
882
 **/
883
FuStructRmiContainerDescriptor *
884
fu_struct_rmi_container_descriptor_parse_stream(GInputStream *stream, gsize offset, GError **error)
885
43.4k
{
886
43.4k
    g_autoptr(FuStructRmiContainerDescriptor) st = fu_struct_rmi_container_descriptor_new_internal();
887
43.4k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 32, NULL, error);
888
43.4k
    if (st->buf == NULL) {
889
247
        g_prefix_error(error, "FuStructRmiContainerDescriptor failed read of 0x%x: ", (guint) 32);
890
247
        return NULL;
891
247
    }
892
43.1k
    if (st->buf->len != 32) {
893
12
        g_set_error(error,
894
12
                    FWUPD_ERROR,
895
12
                    FWUPD_ERROR_INVALID_DATA,
896
12
                    "FuStructRmiContainerDescriptor requested 0x%x and got 0x%x",
897
12
                    (guint) 32,
898
12
                    (guint) st->buf->len);
899
12
        return NULL;
900
12
    }
901
43.1k
    if (!fu_struct_rmi_container_descriptor_parse_internal(st, error))
902
0
        return NULL;
903
43.1k
    return g_steal_pointer(&st);
904
43.1k
}
905
/**
906
 * fu_struct_synaptics_rmi_v7_f34x_ref: (skip):
907
 **/
908
FuStructSynapticsRmiV7F34x *
909
fu_struct_synaptics_rmi_v7_f34x_ref(FuStructSynapticsRmiV7F34x *st)
910
0
{
911
0
    g_return_val_if_fail(st != NULL, NULL);
912
0
    st->refcount++;
913
0
    return st;
914
0
}
915
/**
916
 * fu_struct_synaptics_rmi_v7_f34x_unref: (skip):
917
 **/
918
void
919
fu_struct_synaptics_rmi_v7_f34x_unref(FuStructSynapticsRmiV7F34x *st)
920
0
{
921
0
    g_return_if_fail(st != NULL);
922
0
    if (st->refcount == 0) {
923
0
        g_critical("FuStructSynapticsRmiV7F34x refcount already zero");
924
0
        return;
925
0
    }
926
0
    if (--st->refcount > 0)
927
0
        return;
928
0
    if (st->buf != NULL)
929
0
        g_byte_array_unref(st->buf);
930
0
    g_free(st);
931
0
}
932
/**
933
 * fu_struct_synaptics_rmi_v7_f34x_new_internal: (skip):
934
 **/
935
static FuStructSynapticsRmiV7F34x *
936
fu_struct_synaptics_rmi_v7_f34x_new_internal(void)
937
0
{
938
0
    FuStructSynapticsRmiV7F34x *st = g_new0(FuStructSynapticsRmiV7F34x, 1);
939
0
    st->refcount = 1;
940
0
    return st;
941
0
}
942
943
/* getters */
944
/**
945
 * fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id0: (skip):
946
 **/
947
guint8
948
fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id0(const FuStructSynapticsRmiV7F34x *st)
949
0
{
950
0
    g_return_val_if_fail(st != NULL, 0x0);
951
0
    return st->buf->data[0];
952
0
}
953
/**
954
 * fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id1: (skip):
955
 **/
956
guint8
957
fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id1(const FuStructSynapticsRmiV7F34x *st)
958
0
{
959
0
    g_return_val_if_fail(st != NULL, 0x0);
960
0
    return st->buf->data[1];
961
0
}
962
/**
963
 * fu_struct_synaptics_rmi_v7_f34x_get_build_id: (skip):
964
 **/
965
guint32
966
fu_struct_synaptics_rmi_v7_f34x_get_build_id(const FuStructSynapticsRmiV7F34x *st)
967
0
{
968
0
    g_return_val_if_fail(st != NULL, 0x0);
969
0
    return fu_memread_uint32(st->buf->data + 2, G_LITTLE_ENDIAN);
970
0
}
971
/**
972
 * fu_struct_synaptics_rmi_v7_f34x_get_block_size: (skip):
973
 **/
974
guint16
975
fu_struct_synaptics_rmi_v7_f34x_get_block_size(const FuStructSynapticsRmiV7F34x *st)
976
0
{
977
0
    g_return_val_if_fail(st != NULL, 0x0);
978
0
    return fu_memread_uint16(st->buf->data + 7, G_LITTLE_ENDIAN);
979
0
}
980
/**
981
 * fu_struct_synaptics_rmi_v7_f34x_get_config_length: (skip):
982
 **/
983
guint16
984
fu_struct_synaptics_rmi_v7_f34x_get_config_length(const FuStructSynapticsRmiV7F34x *st)
985
0
{
986
0
    g_return_val_if_fail(st != NULL, 0x0);
987
0
    return fu_memread_uint16(st->buf->data + 13, G_LITTLE_ENDIAN);
988
0
}
989
/**
990
 * fu_struct_synaptics_rmi_v7_f34x_get_payload_length: (skip):
991
 **/
992
guint16
993
fu_struct_synaptics_rmi_v7_f34x_get_payload_length(const FuStructSynapticsRmiV7F34x *st)
994
0
{
995
0
    g_return_val_if_fail(st != NULL, 0x0);
996
0
    return fu_memread_uint16(st->buf->data + 15, G_LITTLE_ENDIAN);
997
0
}
998
/**
999
 * fu_struct_synaptics_rmi_v7_f34x_get_supported_partitions: (skip):
1000
 **/
1001
guint16
1002
fu_struct_synaptics_rmi_v7_f34x_get_supported_partitions(const FuStructSynapticsRmiV7F34x *st)
1003
0
{
1004
0
    g_return_val_if_fail(st != NULL, 0x0);
1005
0
    return fu_memread_uint16(st->buf->data + 17, G_LITTLE_ENDIAN);
1006
0
}
1007
1008
/* setters */
1009
/**
1010
 * fu_struct_synaptics_rmi_v7_f34x_to_string: (skip):
1011
 **/
1012
static gchar *
1013
fu_struct_synaptics_rmi_v7_f34x_to_string(const FuStructSynapticsRmiV7F34x *st)
1014
0
{
1015
0
    g_autoptr(GString) str = g_string_new("FuStructSynapticsRmiV7F34x:\n");
1016
0
    g_return_val_if_fail(st != NULL, NULL);
1017
0
    g_string_append_printf(str, "  bootloader_id0: 0x%x\n",
1018
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id0(st));
1019
0
    g_string_append_printf(str, "  bootloader_id1: 0x%x\n",
1020
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_bootloader_id1(st));
1021
0
    g_string_append_printf(str, "  build_id: 0x%x\n",
1022
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_build_id(st));
1023
0
    g_string_append_printf(str, "  block_size: 0x%x\n",
1024
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_block_size(st));
1025
0
    g_string_append_printf(str, "  config_length: 0x%x\n",
1026
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_config_length(st));
1027
0
    g_string_append_printf(str, "  payload_length: 0x%x\n",
1028
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_payload_length(st));
1029
0
    g_string_append_printf(str, "  supported_partitions: 0x%x\n",
1030
0
                           (guint) fu_struct_synaptics_rmi_v7_f34x_get_supported_partitions(st));
1031
0
    if (str->len > 0)
1032
0
        g_string_set_size(str, str->len - 1);
1033
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1034
0
}
1035
static gboolean
1036
fu_struct_synaptics_rmi_v7_f34x_validate_internal(FuStructSynapticsRmiV7F34x *st, GError **error)
1037
0
{
1038
0
    g_return_val_if_fail(st != NULL, FALSE);
1039
0
    return TRUE;
1040
0
}
1041
static gboolean
1042
fu_struct_synaptics_rmi_v7_f34x_parse_internal(FuStructSynapticsRmiV7F34x *st, GError **error)
1043
0
{
1044
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1045
0
        g_autofree gchar *str = fu_struct_synaptics_rmi_v7_f34x_to_string(st);
1046
0
        g_debug("%s", str);
1047
0
    }
1048
0
    if (!fu_struct_synaptics_rmi_v7_f34x_validate_internal(st, error))
1049
0
        return FALSE;
1050
0
    return TRUE;
1051
0
}
1052
1053
/**
1054
 * fu_struct_synaptics_rmi_v7_f34x_parse: (skip):
1055
 **/
1056
FuStructSynapticsRmiV7F34x *
1057
fu_struct_synaptics_rmi_v7_f34x_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
1058
0
{
1059
0
    g_autoptr(FuStructSynapticsRmiV7F34x) st = fu_struct_synaptics_rmi_v7_f34x_new_internal();
1060
0
    g_return_val_if_fail(buf != NULL, NULL);
1061
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
1062
0
    if (!fu_memchk_read(bufsz, offset, 19, error)) {
1063
0
        g_prefix_error_literal(error, "invalid struct FuStructSynapticsRmiV7F34x: ");
1064
0
        return NULL;
1065
0
    }
1066
0
    st->buf = g_byte_array_new();
1067
0
    g_byte_array_append(st->buf, buf + offset, 19);
1068
0
    if (!fu_struct_synaptics_rmi_v7_f34x_parse_internal(st, error))
1069
0
        return NULL;
1070
0
    return g_steal_pointer(&st);
1071
0
}
1072
/**
1073
 * fu_struct_synaptics_rmi_v7_enter_sbl_ref: (skip):
1074
 **/
1075
FuStructSynapticsRmiV7EnterSbl *
1076
fu_struct_synaptics_rmi_v7_enter_sbl_ref(FuStructSynapticsRmiV7EnterSbl *st)
1077
0
{
1078
0
    g_return_val_if_fail(st != NULL, NULL);
1079
0
    st->refcount++;
1080
0
    return st;
1081
0
}
1082
/**
1083
 * fu_struct_synaptics_rmi_v7_enter_sbl_unref: (skip):
1084
 **/
1085
void
1086
fu_struct_synaptics_rmi_v7_enter_sbl_unref(FuStructSynapticsRmiV7EnterSbl *st)
1087
0
{
1088
0
    g_return_if_fail(st != NULL);
1089
0
    if (st->refcount == 0) {
1090
0
        g_critical("FuStructSynapticsRmiV7EnterSbl refcount already zero");
1091
0
        return;
1092
0
    }
1093
0
    if (--st->refcount > 0)
1094
0
        return;
1095
0
    if (st->buf != NULL)
1096
0
        g_byte_array_unref(st->buf);
1097
0
    g_free(st);
1098
0
}
1099
/**
1100
 * fu_struct_synaptics_rmi_v7_enter_sbl_new_internal: (skip):
1101
 **/
1102
static FuStructSynapticsRmiV7EnterSbl *
1103
fu_struct_synaptics_rmi_v7_enter_sbl_new_internal(void)
1104
0
{
1105
0
    FuStructSynapticsRmiV7EnterSbl *st = g_new0(FuStructSynapticsRmiV7EnterSbl, 1);
1106
0
    st->refcount = 1;
1107
0
    return st;
1108
0
}
1109
1110
/* getters */
1111
1112
/* setters */
1113
/**
1114
 * fu_struct_synaptics_rmi_v7_enter_sbl_set_partition_id: (skip):
1115
 **/
1116
static void
1117
fu_struct_synaptics_rmi_v7_enter_sbl_set_partition_id(FuStructSynapticsRmiV7EnterSbl *st, FuRmiPartitionId value)
1118
0
{
1119
0
    g_return_if_fail(st != NULL);
1120
0
    st->buf->data[0] = value;
1121
0
}
1122
/**
1123
 * fu_struct_synaptics_rmi_v7_enter_sbl_set_cmd: (skip):
1124
 **/
1125
static void
1126
fu_struct_synaptics_rmi_v7_enter_sbl_set_cmd(FuStructSynapticsRmiV7EnterSbl *st, FuSynapticsRmiFlashCmd value)
1127
0
{
1128
0
    g_return_if_fail(st != NULL);
1129
0
    st->buf->data[5] = value;
1130
0
}
1131
/**
1132
 * fu_struct_synaptics_rmi_v7_enter_sbl_set_bootloader_id0: (skip):
1133
 **/
1134
void
1135
fu_struct_synaptics_rmi_v7_enter_sbl_set_bootloader_id0(FuStructSynapticsRmiV7EnterSbl *st, guint8 value)
1136
0
{
1137
0
    g_return_if_fail(st != NULL);
1138
0
    st->buf->data[6] = value;
1139
0
}
1140
/**
1141
 * fu_struct_synaptics_rmi_v7_enter_sbl_set_bootloader_id1: (skip):
1142
 **/
1143
void
1144
fu_struct_synaptics_rmi_v7_enter_sbl_set_bootloader_id1(FuStructSynapticsRmiV7EnterSbl *st, guint8 value)
1145
0
{
1146
0
    g_return_if_fail(st != NULL);
1147
0
    st->buf->data[7] = value;
1148
0
}
1149
/**
1150
 * fu_struct_synaptics_rmi_v7_enter_sbl_set_unknown: (skip):
1151
 **/
1152
static void
1153
fu_struct_synaptics_rmi_v7_enter_sbl_set_unknown(FuStructSynapticsRmiV7EnterSbl *st, guint8 value)
1154
0
{
1155
0
    g_return_if_fail(st != NULL);
1156
0
    st->buf->data[8] = value;
1157
0
}
1158
/**
1159
 * fu_struct_synaptics_rmi_v7_enter_sbl_new: (skip):
1160
 **/
1161
FuStructSynapticsRmiV7EnterSbl *
1162
fu_struct_synaptics_rmi_v7_enter_sbl_new(void)
1163
0
{
1164
0
    FuStructSynapticsRmiV7EnterSbl *st = fu_struct_synaptics_rmi_v7_enter_sbl_new_internal();
1165
0
    st->buf = g_byte_array_sized_new(9);
1166
0
    fu_byte_array_set_size(st->buf, 9, 0x0);
1167
0
    fu_struct_synaptics_rmi_v7_enter_sbl_set_partition_id(st, FU_RMI_PARTITION_ID_BOOTLOADER);
1168
0
    fu_struct_synaptics_rmi_v7_enter_sbl_set_cmd(st, FU_SYNAPTICS_RMI_FLASH_CMD_ENTER_BL);
1169
0
    fu_struct_synaptics_rmi_v7_enter_sbl_set_unknown(st, 0x1);
1170
0
    return st;
1171
0
}
1172
/**
1173
 * fu_struct_synaptics_rmi_v7_enter_bl_ref: (skip):
1174
 **/
1175
FuStructSynapticsRmiV7EnterBl *
1176
fu_struct_synaptics_rmi_v7_enter_bl_ref(FuStructSynapticsRmiV7EnterBl *st)
1177
0
{
1178
0
    g_return_val_if_fail(st != NULL, NULL);
1179
0
    st->refcount++;
1180
0
    return st;
1181
0
}
1182
/**
1183
 * fu_struct_synaptics_rmi_v7_enter_bl_unref: (skip):
1184
 **/
1185
void
1186
fu_struct_synaptics_rmi_v7_enter_bl_unref(FuStructSynapticsRmiV7EnterBl *st)
1187
0
{
1188
0
    g_return_if_fail(st != NULL);
1189
0
    if (st->refcount == 0) {
1190
0
        g_critical("FuStructSynapticsRmiV7EnterBl refcount already zero");
1191
0
        return;
1192
0
    }
1193
0
    if (--st->refcount > 0)
1194
0
        return;
1195
0
    if (st->buf != NULL)
1196
0
        g_byte_array_unref(st->buf);
1197
0
    g_free(st);
1198
0
}
1199
/**
1200
 * fu_struct_synaptics_rmi_v7_enter_bl_new_internal: (skip):
1201
 **/
1202
static FuStructSynapticsRmiV7EnterBl *
1203
fu_struct_synaptics_rmi_v7_enter_bl_new_internal(void)
1204
0
{
1205
0
    FuStructSynapticsRmiV7EnterBl *st = g_new0(FuStructSynapticsRmiV7EnterBl, 1);
1206
0
    st->refcount = 1;
1207
0
    return st;
1208
0
}
1209
1210
/* getters */
1211
1212
/* setters */
1213
/**
1214
 * fu_struct_synaptics_rmi_v7_enter_bl_set_partition_id: (skip):
1215
 **/
1216
static void
1217
fu_struct_synaptics_rmi_v7_enter_bl_set_partition_id(FuStructSynapticsRmiV7EnterBl *st, FuRmiPartitionId value)
1218
0
{
1219
0
    g_return_if_fail(st != NULL);
1220
0
    st->buf->data[0] = value;
1221
0
}
1222
/**
1223
 * fu_struct_synaptics_rmi_v7_enter_bl_set_cmd: (skip):
1224
 **/
1225
static void
1226
fu_struct_synaptics_rmi_v7_enter_bl_set_cmd(FuStructSynapticsRmiV7EnterBl *st, FuSynapticsRmiFlashCmd value)
1227
0
{
1228
0
    g_return_if_fail(st != NULL);
1229
0
    st->buf->data[5] = value;
1230
0
}
1231
/**
1232
 * fu_struct_synaptics_rmi_v7_enter_bl_set_bootloader_id0: (skip):
1233
 **/
1234
void
1235
fu_struct_synaptics_rmi_v7_enter_bl_set_bootloader_id0(FuStructSynapticsRmiV7EnterBl *st, guint8 value)
1236
0
{
1237
0
    g_return_if_fail(st != NULL);
1238
0
    st->buf->data[6] = value;
1239
0
}
1240
/**
1241
 * fu_struct_synaptics_rmi_v7_enter_bl_set_bootloader_id1: (skip):
1242
 **/
1243
void
1244
fu_struct_synaptics_rmi_v7_enter_bl_set_bootloader_id1(FuStructSynapticsRmiV7EnterBl *st, guint8 value)
1245
0
{
1246
0
    g_return_if_fail(st != NULL);
1247
0
    st->buf->data[7] = value;
1248
0
}
1249
/**
1250
 * fu_struct_synaptics_rmi_v7_enter_bl_new: (skip):
1251
 **/
1252
FuStructSynapticsRmiV7EnterBl *
1253
fu_struct_synaptics_rmi_v7_enter_bl_new(void)
1254
0
{
1255
0
    FuStructSynapticsRmiV7EnterBl *st = fu_struct_synaptics_rmi_v7_enter_bl_new_internal();
1256
0
    st->buf = g_byte_array_sized_new(8);
1257
0
    fu_byte_array_set_size(st->buf, 8, 0x0);
1258
0
    fu_struct_synaptics_rmi_v7_enter_bl_set_partition_id(st, FU_RMI_PARTITION_ID_BOOTLOADER);
1259
0
    fu_struct_synaptics_rmi_v7_enter_bl_set_cmd(st, FU_SYNAPTICS_RMI_FLASH_CMD_ENTER_BL);
1260
0
    return st;
1261
0
}
1262
/**
1263
 * fu_struct_synaptics_rmi_v7_erase_ref: (skip):
1264
 **/
1265
FuStructSynapticsRmiV7Erase *
1266
fu_struct_synaptics_rmi_v7_erase_ref(FuStructSynapticsRmiV7Erase *st)
1267
0
{
1268
0
    g_return_val_if_fail(st != NULL, NULL);
1269
0
    st->refcount++;
1270
0
    return st;
1271
0
}
1272
/**
1273
 * fu_struct_synaptics_rmi_v7_erase_unref: (skip):
1274
 **/
1275
void
1276
fu_struct_synaptics_rmi_v7_erase_unref(FuStructSynapticsRmiV7Erase *st)
1277
0
{
1278
0
    g_return_if_fail(st != NULL);
1279
0
    if (st->refcount == 0) {
1280
0
        g_critical("FuStructSynapticsRmiV7Erase refcount already zero");
1281
0
        return;
1282
0
    }
1283
0
    if (--st->refcount > 0)
1284
0
        return;
1285
0
    if (st->buf != NULL)
1286
0
        g_byte_array_unref(st->buf);
1287
0
    g_free(st);
1288
0
}
1289
/**
1290
 * fu_struct_synaptics_rmi_v7_erase_new_internal: (skip):
1291
 **/
1292
static FuStructSynapticsRmiV7Erase *
1293
fu_struct_synaptics_rmi_v7_erase_new_internal(void)
1294
0
{
1295
0
    FuStructSynapticsRmiV7Erase *st = g_new0(FuStructSynapticsRmiV7Erase, 1);
1296
0
    st->refcount = 1;
1297
0
    return st;
1298
0
}
1299
1300
/* getters */
1301
1302
/* setters */
1303
/**
1304
 * fu_struct_synaptics_rmi_v7_erase_set_partition_id: (skip):
1305
 **/
1306
void
1307
fu_struct_synaptics_rmi_v7_erase_set_partition_id(FuStructSynapticsRmiV7Erase *st, FuRmiPartitionId value)
1308
0
{
1309
0
    g_return_if_fail(st != NULL);
1310
0
    st->buf->data[0] = value;
1311
0
}
1312
/**
1313
 * fu_struct_synaptics_rmi_v7_erase_set_cmd: (skip):
1314
 **/
1315
static void
1316
fu_struct_synaptics_rmi_v7_erase_set_cmd(FuStructSynapticsRmiV7Erase *st, FuSynapticsRmiFlashCmd value)
1317
0
{
1318
0
    g_return_if_fail(st != NULL);
1319
0
    st->buf->data[5] = value;
1320
0
}
1321
/**
1322
 * fu_struct_synaptics_rmi_v7_erase_set_bootloader_id0: (skip):
1323
 **/
1324
void
1325
fu_struct_synaptics_rmi_v7_erase_set_bootloader_id0(FuStructSynapticsRmiV7Erase *st, guint8 value)
1326
0
{
1327
0
    g_return_if_fail(st != NULL);
1328
0
    st->buf->data[6] = value;
1329
0
}
1330
/**
1331
 * fu_struct_synaptics_rmi_v7_erase_set_bootloader_id1: (skip):
1332
 **/
1333
void
1334
fu_struct_synaptics_rmi_v7_erase_set_bootloader_id1(FuStructSynapticsRmiV7Erase *st, guint8 value)
1335
0
{
1336
0
    g_return_if_fail(st != NULL);
1337
0
    st->buf->data[7] = value;
1338
0
}
1339
/**
1340
 * fu_struct_synaptics_rmi_v7_erase_new: (skip):
1341
 **/
1342
FuStructSynapticsRmiV7Erase *
1343
fu_struct_synaptics_rmi_v7_erase_new(void)
1344
0
{
1345
0
    FuStructSynapticsRmiV7Erase *st = fu_struct_synaptics_rmi_v7_erase_new_internal();
1346
0
    st->buf = g_byte_array_sized_new(8);
1347
0
    fu_byte_array_set_size(st->buf, 8, 0x0);
1348
0
    fu_struct_synaptics_rmi_v7_erase_set_cmd(st, FU_SYNAPTICS_RMI_FLASH_CMD_ERASE);
1349
0
    return st;
1350
0
}
1351
/**
1352
 * fu_struct_synaptics_rmi_v7_erase_core_code_ref: (skip):
1353
 **/
1354
FuStructSynapticsRmiV7EraseCoreCode *
1355
fu_struct_synaptics_rmi_v7_erase_core_code_ref(FuStructSynapticsRmiV7EraseCoreCode *st)
1356
0
{
1357
0
    g_return_val_if_fail(st != NULL, NULL);
1358
0
    st->refcount++;
1359
0
    return st;
1360
0
}
1361
/**
1362
 * fu_struct_synaptics_rmi_v7_erase_core_code_unref: (skip):
1363
 **/
1364
void
1365
fu_struct_synaptics_rmi_v7_erase_core_code_unref(FuStructSynapticsRmiV7EraseCoreCode *st)
1366
0
{
1367
0
    g_return_if_fail(st != NULL);
1368
0
    if (st->refcount == 0) {
1369
0
        g_critical("FuStructSynapticsRmiV7EraseCoreCode refcount already zero");
1370
0
        return;
1371
0
    }
1372
0
    if (--st->refcount > 0)
1373
0
        return;
1374
0
    if (st->buf != NULL)
1375
0
        g_byte_array_unref(st->buf);
1376
0
    g_free(st);
1377
0
}
1378
/**
1379
 * fu_struct_synaptics_rmi_v7_erase_core_code_new_internal: (skip):
1380
 **/
1381
static FuStructSynapticsRmiV7EraseCoreCode *
1382
fu_struct_synaptics_rmi_v7_erase_core_code_new_internal(void)
1383
0
{
1384
0
    FuStructSynapticsRmiV7EraseCoreCode *st = g_new0(FuStructSynapticsRmiV7EraseCoreCode, 1);
1385
0
    st->refcount = 1;
1386
0
    return st;
1387
0
}
1388
1389
/* getters */
1390
1391
/* setters */
1392
/**
1393
 * fu_struct_synaptics_rmi_v7_erase_core_code_set_partition_id: (skip):
1394
 **/
1395
static void
1396
fu_struct_synaptics_rmi_v7_erase_core_code_set_partition_id(FuStructSynapticsRmiV7EraseCoreCode *st, FuRmiPartitionId value)
1397
0
{
1398
0
    g_return_if_fail(st != NULL);
1399
0
    st->buf->data[0] = value;
1400
0
}
1401
/**
1402
 * fu_struct_synaptics_rmi_v7_erase_core_code_set_cmd: (skip):
1403
 **/
1404
void
1405
fu_struct_synaptics_rmi_v7_erase_core_code_set_cmd(FuStructSynapticsRmiV7EraseCoreCode *st, FuSynapticsRmiFlashCmd value)
1406
0
{
1407
0
    g_return_if_fail(st != NULL);
1408
0
    st->buf->data[5] = value;
1409
0
}
1410
/**
1411
 * fu_struct_synaptics_rmi_v7_erase_core_code_set_bootloader_id0: (skip):
1412
 **/
1413
void
1414
fu_struct_synaptics_rmi_v7_erase_core_code_set_bootloader_id0(FuStructSynapticsRmiV7EraseCoreCode *st, guint8 value)
1415
0
{
1416
0
    g_return_if_fail(st != NULL);
1417
0
    st->buf->data[6] = value;
1418
0
}
1419
/**
1420
 * fu_struct_synaptics_rmi_v7_erase_core_code_set_bootloader_id1: (skip):
1421
 **/
1422
void
1423
fu_struct_synaptics_rmi_v7_erase_core_code_set_bootloader_id1(FuStructSynapticsRmiV7EraseCoreCode *st, guint8 value)
1424
0
{
1425
0
    g_return_if_fail(st != NULL);
1426
0
    st->buf->data[7] = value;
1427
0
}
1428
/**
1429
 * fu_struct_synaptics_rmi_v7_erase_core_code_new: (skip):
1430
 **/
1431
FuStructSynapticsRmiV7EraseCoreCode *
1432
fu_struct_synaptics_rmi_v7_erase_core_code_new(void)
1433
0
{
1434
0
    FuStructSynapticsRmiV7EraseCoreCode *st = fu_struct_synaptics_rmi_v7_erase_core_code_new_internal();
1435
0
    st->buf = g_byte_array_sized_new(8);
1436
0
    fu_byte_array_set_size(st->buf, 8, 0x0);
1437
0
    fu_struct_synaptics_rmi_v7_erase_core_code_set_partition_id(st, FU_RMI_PARTITION_ID_CORE_CODE);
1438
0
    fu_struct_synaptics_rmi_v7_erase_core_code_set_cmd(st, FU_SYNAPTICS_RMI_FLASH_CMD_ERASE_AP);
1439
0
    return st;
1440
0
}
1441
/**
1442
 * fu_struct_synaptics_rmi_v7_erase_core_config_ref: (skip):
1443
 **/
1444
FuStructSynapticsRmiV7EraseCoreConfig *
1445
fu_struct_synaptics_rmi_v7_erase_core_config_ref(FuStructSynapticsRmiV7EraseCoreConfig *st)
1446
0
{
1447
0
    g_return_val_if_fail(st != NULL, NULL);
1448
0
    st->refcount++;
1449
0
    return st;
1450
0
}
1451
/**
1452
 * fu_struct_synaptics_rmi_v7_erase_core_config_unref: (skip):
1453
 **/
1454
void
1455
fu_struct_synaptics_rmi_v7_erase_core_config_unref(FuStructSynapticsRmiV7EraseCoreConfig *st)
1456
0
{
1457
0
    g_return_if_fail(st != NULL);
1458
0
    if (st->refcount == 0) {
1459
0
        g_critical("FuStructSynapticsRmiV7EraseCoreConfig refcount already zero");
1460
0
        return;
1461
0
    }
1462
0
    if (--st->refcount > 0)
1463
0
        return;
1464
0
    if (st->buf != NULL)
1465
0
        g_byte_array_unref(st->buf);
1466
0
    g_free(st);
1467
0
}
1468
/**
1469
 * fu_struct_synaptics_rmi_v7_erase_core_config_new_internal: (skip):
1470
 **/
1471
static FuStructSynapticsRmiV7EraseCoreConfig *
1472
fu_struct_synaptics_rmi_v7_erase_core_config_new_internal(void)
1473
0
{
1474
0
    FuStructSynapticsRmiV7EraseCoreConfig *st = g_new0(FuStructSynapticsRmiV7EraseCoreConfig, 1);
1475
0
    st->refcount = 1;
1476
0
    return st;
1477
0
}
1478
1479
/* getters */
1480
1481
/* setters */
1482
/**
1483
 * fu_struct_synaptics_rmi_v7_erase_core_config_set_partition_id: (skip):
1484
 **/
1485
static void
1486
fu_struct_synaptics_rmi_v7_erase_core_config_set_partition_id(FuStructSynapticsRmiV7EraseCoreConfig *st, FuRmiPartitionId value)
1487
0
{
1488
0
    g_return_if_fail(st != NULL);
1489
0
    st->buf->data[0] = value;
1490
0
}
1491
/**
1492
 * fu_struct_synaptics_rmi_v7_erase_core_config_set_cmd: (skip):
1493
 **/
1494
static void
1495
fu_struct_synaptics_rmi_v7_erase_core_config_set_cmd(FuStructSynapticsRmiV7EraseCoreConfig *st, FuSynapticsRmiFlashCmd value)
1496
0
{
1497
0
    g_return_if_fail(st != NULL);
1498
0
    st->buf->data[5] = value;
1499
0
}
1500
/**
1501
 * fu_struct_synaptics_rmi_v7_erase_core_config_new: (skip):
1502
 **/
1503
FuStructSynapticsRmiV7EraseCoreConfig *
1504
fu_struct_synaptics_rmi_v7_erase_core_config_new(void)
1505
0
{
1506
0
    FuStructSynapticsRmiV7EraseCoreConfig *st = fu_struct_synaptics_rmi_v7_erase_core_config_new_internal();
1507
0
    st->buf = g_byte_array_sized_new(6);
1508
0
    fu_byte_array_set_size(st->buf, 6, 0x0);
1509
0
    fu_struct_synaptics_rmi_v7_erase_core_config_set_partition_id(st, FU_RMI_PARTITION_ID_CORE_CONFIG);
1510
0
    fu_struct_synaptics_rmi_v7_erase_core_config_set_cmd(st, FU_SYNAPTICS_RMI_FLASH_CMD_ERASE);
1511
0
    return st;
1512
0
}