Coverage Report

Created: 2026-01-09 07:21

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