Coverage Report

Created: 2026-06-15 06:54

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-synaptics-cape-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-cape-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-bytes.h"
14
#include "fu-mem-private.h"
15
#include "fu-string.h"
16
17
#ifdef G_LOG_DOMAIN
18
  #undef G_LOG_DOMAIN
19
#endif
20
0
#define G_LOG_DOMAIN "FuStruct"
21
22
23
/**
24
 * fu_synaptics_cape_error_to_string:
25
 * @val: value, e.g. %FU_SYNAPTICS_CAPE_ERROR_SFU_FAIL
26
 *
27
 * Converts an enumerated value to a string.
28
 *
29
 * Returns: identifier string
30
 **/
31
const gchar *
32
fu_synaptics_cape_error_to_string(FuSynapticsCapeError val)
33
0
{
34
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_EAGAIN)
35
0
        return "eagain";
36
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_FAIL)
37
0
        return "sfu-fail";
38
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_WRITE_FAIL)
39
0
        return "sfu-write-fail";
40
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_READ_FAIL)
41
0
        return "sfu-read-fail";
42
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_CRC_ERROR)
43
0
        return "sfu-crc-error";
44
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_USB_ID_NOT_MATCH)
45
0
        return "sfu-usb-id-not-match";
46
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_VERSION_DOWNGRADE)
47
0
        return "sfu-version-downgrade";
48
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_HEADER_CORRUPTION)
49
0
        return "sfu-header-corruption";
50
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_IMAGE_CORRUPTION)
51
0
        return "sfu-image-corruption";
52
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_ALREADY_ACTIVE)
53
0
        return "sfu-already-active";
54
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_NOT_READY)
55
0
        return "sfu-not-ready";
56
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_SIGN_TRANSFER_CORRUPTION)
57
0
        return "sfu-sign-transfer-corruption";
58
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_SIGNATURE_VERIFICATION)
59
0
        return "sfu-signature-verification";
60
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_SFU_TASK_NOT_RUNNING)
61
0
        return "sfu-task-not-running";
62
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_GENERIC_FAILURE)
63
0
        return "generic-failure";
64
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_ALREADY_EXISTS)
65
0
        return "already-exists";
66
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_NULL_APP_POINTER)
67
0
        return "null-app-pointer";
68
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_NULL_MODULE_POINTER)
69
0
        return "null-module-pointer";
70
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_NULL_STREAM_POINTER)
71
0
        return "null-stream-pointer";
72
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_NULL_POINTER)
73
0
        return "null-pointer";
74
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_BAD_APP_ID)
75
0
        return "bad-app-id";
76
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_MODULE_TYPE_HAS_NO_API)
77
0
        return "module-type-has-no-api";
78
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_BAD_MAGIC_NUMBER)
79
0
        return "bad-magic-number";
80
0
    if (val == FU_SYNAPTICS_CAPE_ERROR_CMD_MODE_UNSUPPORTED)
81
0
        return "cmd-mode-unsupported";
82
0
    return NULL;
83
0
}
84
85
86
87
/**
88
 * fu_synaptics_cape_msg_ref: (skip):
89
 **/
90
FuSynapticsCapeMsg *
91
fu_synaptics_cape_msg_ref(FuSynapticsCapeMsg *st)
92
0
{
93
0
    g_return_val_if_fail(st != NULL, NULL);
94
0
    st->refcount++;
95
0
    return st;
96
0
}
97
/**
98
 * fu_synaptics_cape_msg_unref: (skip):
99
 **/
100
void
101
fu_synaptics_cape_msg_unref(FuSynapticsCapeMsg *st)
102
0
{
103
0
    g_return_if_fail(st != NULL);
104
0
    if (st->refcount == 0) {
105
0
        g_critical("FuSynapticsCapeMsg refcount already zero");
106
0
        return;
107
0
    }
108
0
    if (--st->refcount > 0)
109
0
        return;
110
0
    if (st->buf != NULL)
111
0
        g_byte_array_unref(st->buf);
112
0
    g_free(st);
113
0
}
114
/**
115
 * fu_synaptics_cape_msg_new_internal: (skip):
116
 **/
117
static FuSynapticsCapeMsg *
118
fu_synaptics_cape_msg_new_internal(void)
119
0
{
120
0
    FuSynapticsCapeMsg *st = g_new0(FuSynapticsCapeMsg, 1);
121
0
    st->refcount = 1;
122
0
    return st;
123
0
}
124
125
/* getters */
126
/**
127
 * fu_synaptics_cape_msg_get_data_len: (skip):
128
 **/
129
guint16
130
fu_synaptics_cape_msg_get_data_len(const FuSynapticsCapeMsg *st)
131
0
{
132
0
    g_return_val_if_fail(st != NULL, 0x0);
133
0
    return fu_memread_uint16(st->buf->data + 0, G_LITTLE_ENDIAN);
134
0
}
135
/**
136
 * fu_synaptics_cape_msg_get_cmd_id: (skip):
137
 **/
138
FuSynapticsCapeCmd
139
fu_synaptics_cape_msg_get_cmd_id(const FuSynapticsCapeMsg *st)
140
0
{
141
0
    g_return_val_if_fail(st != NULL, 0x0);
142
0
    return fu_memread_uint16(st->buf->data + 2, G_LITTLE_ENDIAN);
143
0
}
144
/**
145
 * fu_synaptics_cape_msg_get_module_id: (skip):
146
 **/
147
FuSynapticsCapeModuleId
148
fu_synaptics_cape_msg_get_module_id(const FuSynapticsCapeMsg *st)
149
0
{
150
0
    g_return_val_if_fail(st != NULL, 0x0);
151
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
152
0
}
153
/**
154
 * fu_synaptics_cape_msg_get_data: (skip):
155
 **/
156
guint32
157
fu_synaptics_cape_msg_get_data(const FuSynapticsCapeMsg *st, guint idx)
158
0
{
159
0
    g_return_val_if_fail(st != NULL, 0x0);
160
0
    g_return_val_if_fail(idx < 13, 0x0);
161
0
    return fu_memread_uint32(st->buf->data + 8 + (sizeof(guint32) * idx),
162
0
                                        G_LITTLE_ENDIAN);
163
0
}
164
165
/* setters */
166
/**
167
 * fu_synaptics_cape_msg_set_data_len: (skip):
168
 **/
169
void
170
fu_synaptics_cape_msg_set_data_len(FuSynapticsCapeMsg *st, guint16 value)
171
0
{
172
0
    g_return_if_fail(st != NULL);
173
0
    fu_memwrite_uint16(st->buf->data + 0, value, G_LITTLE_ENDIAN);
174
0
}
175
/**
176
 * fu_synaptics_cape_msg_set_cmd_id: (skip):
177
 **/
178
void
179
fu_synaptics_cape_msg_set_cmd_id(FuSynapticsCapeMsg *st, FuSynapticsCapeCmd value)
180
0
{
181
0
    g_return_if_fail(st != NULL);
182
0
    fu_memwrite_uint16(st->buf->data + 2, value, G_LITTLE_ENDIAN);
183
0
}
184
/**
185
 * fu_synaptics_cape_msg_set_module_id: (skip):
186
 **/
187
void
188
fu_synaptics_cape_msg_set_module_id(FuSynapticsCapeMsg *st, FuSynapticsCapeModuleId value)
189
0
{
190
0
    g_return_if_fail(st != NULL);
191
0
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
192
0
}
193
/**
194
 * fu_synaptics_cape_msg_set_data: (skip):
195
 **/
196
void
197
fu_synaptics_cape_msg_set_data(FuSynapticsCapeMsg *st, guint idx, guint32 value)
198
0
{
199
0
    g_return_if_fail(st != NULL);
200
0
    g_return_if_fail(idx < 13);
201
0
    fu_memwrite_uint32(st->buf->data + 8 + (sizeof(guint32) * idx),
202
0
                                  value,
203
0
                                  G_LITTLE_ENDIAN);
204
0
}
205
/**
206
 * fu_synaptics_cape_msg_new: (skip):
207
 **/
208
FuSynapticsCapeMsg *
209
fu_synaptics_cape_msg_new(void)
210
0
{
211
0
    FuSynapticsCapeMsg *st = fu_synaptics_cape_msg_new_internal();
212
0
    st->buf = g_byte_array_sized_new(60);
213
0
    fu_byte_array_set_size(st->buf, 60, 0x0);
214
0
    fu_synaptics_cape_msg_set_module_id(st, FU_SYNAPTICS_CAPE_MODULE_ID_APP_CTRL);
215
0
    return st;
216
0
}
217
/**
218
 * fu_synaptics_cape_cmd_hid_report_ref: (skip):
219
 **/
220
FuSynapticsCapeCmdHidReport *
221
fu_synaptics_cape_cmd_hid_report_ref(FuSynapticsCapeCmdHidReport *st)
222
0
{
223
0
    g_return_val_if_fail(st != NULL, NULL);
224
0
    st->refcount++;
225
0
    return st;
226
0
}
227
/**
228
 * fu_synaptics_cape_cmd_hid_report_unref: (skip):
229
 **/
230
void
231
fu_synaptics_cape_cmd_hid_report_unref(FuSynapticsCapeCmdHidReport *st)
232
0
{
233
0
    g_return_if_fail(st != NULL);
234
0
    if (st->refcount == 0) {
235
0
        g_critical("FuSynapticsCapeCmdHidReport refcount already zero");
236
0
        return;
237
0
    }
238
0
    if (--st->refcount > 0)
239
0
        return;
240
0
    if (st->buf != NULL)
241
0
        g_byte_array_unref(st->buf);
242
0
    g_free(st);
243
0
}
244
/**
245
 * fu_synaptics_cape_cmd_hid_report_new_internal: (skip):
246
 **/
247
static FuSynapticsCapeCmdHidReport *
248
fu_synaptics_cape_cmd_hid_report_new_internal(void)
249
0
{
250
0
    FuSynapticsCapeCmdHidReport *st = g_new0(FuSynapticsCapeCmdHidReport, 1);
251
0
    st->refcount = 1;
252
0
    return st;
253
0
}
254
255
/* getters */
256
/**
257
 * fu_synaptics_cape_cmd_hid_report_get_msg: (skip):
258
 **/
259
FuSynapticsCapeMsg *
260
fu_synaptics_cape_cmd_hid_report_get_msg(const FuSynapticsCapeCmdHidReport *st)
261
0
{
262
0
    g_autoptr(FuSynapticsCapeMsg) st_tmp = fu_synaptics_cape_msg_new_internal();
263
0
    g_return_val_if_fail(st != NULL, NULL);
264
0
    st_tmp->buf = g_byte_array_new();
265
0
    g_byte_array_append(st_tmp->buf, st->buf->data + FU_SYNAPTICS_CAPE_CMD_HID_REPORT_OFFSET_MSG, 60);
266
0
    return g_steal_pointer(&st_tmp);
267
0
}
268
269
/* setters */
270
/**
271
 * fu_synaptics_cape_cmd_hid_report_set_report_id: (skip):
272
 **/
273
static void
274
fu_synaptics_cape_cmd_hid_report_set_report_id(FuSynapticsCapeCmdHidReport *st, guint16 value)
275
0
{
276
0
    g_return_if_fail(st != NULL);
277
0
    fu_memwrite_uint16(st->buf->data + 0, value, G_LITTLE_ENDIAN);
278
0
}
279
/**
280
 * fu_synaptics_cape_cmd_hid_report_set_msg: (skip):
281
 **/
282
gboolean
283
fu_synaptics_cape_cmd_hid_report_set_msg(FuSynapticsCapeCmdHidReport *st, const FuSynapticsCapeMsg *st_donor, GError **error)
284
0
{
285
0
    g_return_val_if_fail(st != NULL, FALSE);
286
0
    g_return_val_if_fail(st_donor != NULL, FALSE);
287
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
288
289
0
    if (st_donor->buf->len > FU_SYNAPTICS_CAPE_MSG_SIZE) {
290
0
        g_set_error(error,
291
0
                    FWUPD_ERROR,
292
0
                    FWUPD_ERROR_INVALID_DATA,
293
0
                    "donor 'FuSynapticsCapeMsg' (0x%x bytes) does not fit in "
294
0
                    "FuSynapticsCapeCmdHidReport.msg (0x%x bytes)",
295
0
                    (guint) st_donor->buf->len,
296
0
                    (guint) FU_SYNAPTICS_CAPE_MSG_SIZE);
297
0
        return FALSE;
298
0
    }
299
0
    memcpy(st->buf->data + FU_SYNAPTICS_CAPE_CMD_HID_REPORT_OFFSET_MSG, st_donor->buf->data, st_donor->buf->len);
300
0
    return TRUE;
301
0
}
302
/**
303
 * fu_synaptics_cape_cmd_hid_report_new: (skip):
304
 **/
305
FuSynapticsCapeCmdHidReport *
306
fu_synaptics_cape_cmd_hid_report_new(void)
307
0
{
308
0
    FuSynapticsCapeCmdHidReport *st = fu_synaptics_cape_cmd_hid_report_new_internal();
309
0
    st->buf = g_byte_array_sized_new(62);
310
0
    fu_byte_array_set_size(st->buf, 62, 0x0);
311
0
    {
312
0
        g_autoptr(FuSynapticsCapeMsg) st_donor = fu_synaptics_cape_msg_new();
313
0
        memcpy(st->buf->data + 0x2, st_donor->buf->data, st_donor->buf->len); /* nocheck:blocked */
314
0
    }
315
0
    fu_synaptics_cape_cmd_hid_report_set_report_id(st, 1);
316
0
    return st;
317
0
}
318
/**
319
 * fu_struct_synaptics_cape_hid_hdr_ref: (skip):
320
 **/
321
FuStructSynapticsCapeHidHdr *
322
fu_struct_synaptics_cape_hid_hdr_ref(FuStructSynapticsCapeHidHdr *st)
323
0
{
324
0
    g_return_val_if_fail(st != NULL, NULL);
325
0
    st->refcount++;
326
0
    return st;
327
0
}
328
/**
329
 * fu_struct_synaptics_cape_hid_hdr_unref: (skip):
330
 **/
331
void
332
fu_struct_synaptics_cape_hid_hdr_unref(FuStructSynapticsCapeHidHdr *st)
333
384
{
334
384
    g_return_if_fail(st != NULL);
335
384
    if (st->refcount == 0) {
336
0
        g_critical("FuStructSynapticsCapeHidHdr refcount already zero");
337
0
        return;
338
0
    }
339
384
    if (--st->refcount > 0)
340
0
        return;
341
384
    if (st->buf != NULL)
342
227
        g_byte_array_unref(st->buf);
343
384
    g_free(st);
344
384
}
345
/**
346
 * fu_struct_synaptics_cape_hid_hdr_new_internal: (skip):
347
 **/
348
static FuStructSynapticsCapeHidHdr *
349
fu_struct_synaptics_cape_hid_hdr_new_internal(void)
350
384
{
351
384
    FuStructSynapticsCapeHidHdr *st = g_new0(FuStructSynapticsCapeHidHdr, 1);
352
384
    st->refcount = 1;
353
384
    return st;
354
384
}
355
356
/* getters */
357
/**
358
 * fu_struct_synaptics_cape_hid_hdr_get_vid: (skip):
359
 **/
360
guint32
361
fu_struct_synaptics_cape_hid_hdr_get_vid(const FuStructSynapticsCapeHidHdr *st)
362
165
{
363
165
    g_return_val_if_fail(st != NULL, 0x0);
364
165
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
365
165
}
366
/**
367
 * fu_struct_synaptics_cape_hid_hdr_get_pid: (skip):
368
 **/
369
guint32
370
fu_struct_synaptics_cape_hid_hdr_get_pid(const FuStructSynapticsCapeHidHdr *st)
371
165
{
372
165
    g_return_val_if_fail(st != NULL, 0x0);
373
165
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
374
165
}
375
/**
376
 * fu_struct_synaptics_cape_hid_hdr_get_update_type: (skip):
377
 **/
378
guint32
379
fu_struct_synaptics_cape_hid_hdr_get_update_type(const FuStructSynapticsCapeHidHdr *st)
380
0
{
381
0
    g_return_val_if_fail(st != NULL, 0x0);
382
0
    return fu_memread_uint32(st->buf->data + 8, G_LITTLE_ENDIAN);
383
0
}
384
/**
385
 * fu_struct_synaptics_cape_hid_hdr_get_signature: (skip):
386
 **/
387
static guint32
388
fu_struct_synaptics_cape_hid_hdr_get_signature(const FuStructSynapticsCapeHidHdr *st)
389
261
{
390
261
    g_return_val_if_fail(st != NULL, 0x0);
391
261
    return fu_memread_uint32(st->buf->data + 12, G_LITTLE_ENDIAN);
392
261
}
393
/**
394
 * fu_struct_synaptics_cape_hid_hdr_get_crc: (skip):
395
 **/
396
guint32
397
fu_struct_synaptics_cape_hid_hdr_get_crc(const FuStructSynapticsCapeHidHdr *st)
398
0
{
399
0
    g_return_val_if_fail(st != NULL, 0x0);
400
0
    return fu_memread_uint32(st->buf->data + 16, G_LITTLE_ENDIAN);
401
0
}
402
/**
403
 * fu_struct_synaptics_cape_hid_hdr_get_ver_w: (skip):
404
 **/
405
guint16
406
fu_struct_synaptics_cape_hid_hdr_get_ver_w(const FuStructSynapticsCapeHidHdr *st)
407
165
{
408
165
    g_return_val_if_fail(st != NULL, 0x0);
409
165
    return fu_memread_uint16(st->buf->data + 20, G_LITTLE_ENDIAN);
410
165
}
411
/**
412
 * fu_struct_synaptics_cape_hid_hdr_get_ver_x: (skip):
413
 **/
414
guint16
415
fu_struct_synaptics_cape_hid_hdr_get_ver_x(const FuStructSynapticsCapeHidHdr *st)
416
165
{
417
165
    g_return_val_if_fail(st != NULL, 0x0);
418
165
    return fu_memread_uint16(st->buf->data + 22, G_LITTLE_ENDIAN);
419
165
}
420
/**
421
 * fu_struct_synaptics_cape_hid_hdr_get_ver_y: (skip):
422
 **/
423
guint16
424
fu_struct_synaptics_cape_hid_hdr_get_ver_y(const FuStructSynapticsCapeHidHdr *st)
425
165
{
426
165
    g_return_val_if_fail(st != NULL, 0x0);
427
165
    return fu_memread_uint16(st->buf->data + 24, G_LITTLE_ENDIAN);
428
165
}
429
/**
430
 * fu_struct_synaptics_cape_hid_hdr_get_ver_z: (skip):
431
 **/
432
guint16
433
fu_struct_synaptics_cape_hid_hdr_get_ver_z(const FuStructSynapticsCapeHidHdr *st)
434
165
{
435
165
    g_return_val_if_fail(st != NULL, 0x0);
436
165
    return fu_memread_uint16(st->buf->data + 26, G_LITTLE_ENDIAN);
437
165
}
438
439
/* setters */
440
/**
441
 * fu_struct_synaptics_cape_hid_hdr_set_vid: (skip):
442
 **/
443
void
444
fu_struct_synaptics_cape_hid_hdr_set_vid(FuStructSynapticsCapeHidHdr *st, guint32 value)
445
165
{
446
165
    g_return_if_fail(st != NULL);
447
165
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
448
165
}
449
/**
450
 * fu_struct_synaptics_cape_hid_hdr_set_pid: (skip):
451
 **/
452
void
453
fu_struct_synaptics_cape_hid_hdr_set_pid(FuStructSynapticsCapeHidHdr *st, guint32 value)
454
165
{
455
165
    g_return_if_fail(st != NULL);
456
165
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
457
165
}
458
/**
459
 * fu_struct_synaptics_cape_hid_hdr_set_update_type: (skip):
460
 **/
461
void
462
fu_struct_synaptics_cape_hid_hdr_set_update_type(FuStructSynapticsCapeHidHdr *st, guint32 value)
463
0
{
464
0
    g_return_if_fail(st != NULL);
465
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
466
0
}
467
/**
468
 * fu_struct_synaptics_cape_hid_hdr_set_signature: (skip):
469
 **/
470
static void
471
fu_struct_synaptics_cape_hid_hdr_set_signature(FuStructSynapticsCapeHidHdr *st, guint32 value)
472
165
{
473
165
    g_return_if_fail(st != NULL);
474
165
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
475
165
}
476
/**
477
 * fu_struct_synaptics_cape_hid_hdr_set_crc: (skip):
478
 **/
479
void
480
fu_struct_synaptics_cape_hid_hdr_set_crc(FuStructSynapticsCapeHidHdr *st, guint32 value)
481
165
{
482
165
    g_return_if_fail(st != NULL);
483
165
    fu_memwrite_uint32(st->buf->data + 16, value, G_LITTLE_ENDIAN);
484
165
}
485
/**
486
 * fu_struct_synaptics_cape_hid_hdr_set_ver_w: (skip):
487
 **/
488
void
489
fu_struct_synaptics_cape_hid_hdr_set_ver_w(FuStructSynapticsCapeHidHdr *st, guint16 value)
490
165
{
491
165
    g_return_if_fail(st != NULL);
492
165
    fu_memwrite_uint16(st->buf->data + 20, value, G_LITTLE_ENDIAN);
493
165
}
494
/**
495
 * fu_struct_synaptics_cape_hid_hdr_set_ver_x: (skip):
496
 **/
497
void
498
fu_struct_synaptics_cape_hid_hdr_set_ver_x(FuStructSynapticsCapeHidHdr *st, guint16 value)
499
165
{
500
165
    g_return_if_fail(st != NULL);
501
165
    fu_memwrite_uint16(st->buf->data + 22, value, G_LITTLE_ENDIAN);
502
165
}
503
/**
504
 * fu_struct_synaptics_cape_hid_hdr_set_ver_y: (skip):
505
 **/
506
void
507
fu_struct_synaptics_cape_hid_hdr_set_ver_y(FuStructSynapticsCapeHidHdr *st, guint16 value)
508
165
{
509
165
    g_return_if_fail(st != NULL);
510
165
    fu_memwrite_uint16(st->buf->data + 24, value, G_LITTLE_ENDIAN);
511
165
}
512
/**
513
 * fu_struct_synaptics_cape_hid_hdr_set_ver_z: (skip):
514
 **/
515
void
516
fu_struct_synaptics_cape_hid_hdr_set_ver_z(FuStructSynapticsCapeHidHdr *st, guint16 value)
517
165
{
518
165
    g_return_if_fail(st != NULL);
519
165
    fu_memwrite_uint16(st->buf->data + 26, value, G_LITTLE_ENDIAN);
520
165
}
521
/**
522
 * fu_struct_synaptics_cape_hid_hdr_new: (skip):
523
 **/
524
FuStructSynapticsCapeHidHdr *
525
fu_struct_synaptics_cape_hid_hdr_new(void)
526
165
{
527
165
    FuStructSynapticsCapeHidHdr *st = fu_struct_synaptics_cape_hid_hdr_new_internal();
528
165
    st->buf = g_byte_array_sized_new(32);
529
165
    fu_byte_array_set_size(st->buf, 32, 0x0);
530
165
    fu_struct_synaptics_cape_hid_hdr_set_signature(st, 0x43534645);
531
165
    return st;
532
165
}
533
/**
534
 * fu_struct_synaptics_cape_hid_hdr_to_string: (skip):
535
 **/
536
static gchar *
537
fu_struct_synaptics_cape_hid_hdr_to_string(const FuStructSynapticsCapeHidHdr *st)
538
0
{
539
0
    g_autoptr(GString) str = g_string_new("FuStructSynapticsCapeHidHdr:\n");
540
0
    g_return_val_if_fail(st != NULL, NULL);
541
0
    g_string_append_printf(str, "  vid: 0x%x\n",
542
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_vid(st));
543
0
    g_string_append_printf(str, "  pid: 0x%x\n",
544
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_pid(st));
545
0
    g_string_append_printf(str, "  update_type: 0x%x\n",
546
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_update_type(st));
547
0
    g_string_append_printf(str, "  signature: 0x%x\n",
548
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_signature(st));
549
0
    g_string_append_printf(str, "  crc: 0x%x\n",
550
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_crc(st));
551
0
    g_string_append_printf(str, "  ver_w: 0x%x\n",
552
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_ver_w(st));
553
0
    g_string_append_printf(str, "  ver_x: 0x%x\n",
554
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_ver_x(st));
555
0
    g_string_append_printf(str, "  ver_y: 0x%x\n",
556
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_ver_y(st));
557
0
    g_string_append_printf(str, "  ver_z: 0x%x\n",
558
0
                           (guint) fu_struct_synaptics_cape_hid_hdr_get_ver_z(st));
559
0
    if (str->len > 0)
560
0
        g_string_set_size(str, str->len - 1);
561
0
    return g_string_free(g_steal_pointer(&str), FALSE);
562
0
}
563
static gboolean
564
fu_struct_synaptics_cape_hid_hdr_validate_internal(FuStructSynapticsCapeHidHdr *st, GError **error)
565
213
{
566
213
    g_return_val_if_fail(st != NULL, FALSE);
567
213
    if (fu_struct_synaptics_cape_hid_hdr_get_signature(st) != 0x43534645) {
568
48
        g_set_error(error,
569
48
                    FWUPD_ERROR,
570
48
                    FWUPD_ERROR_INVALID_DATA,
571
48
                    "constant FuStructSynapticsCapeHidHdr.signature was not valid, "
572
48
                    "expected 0x%x and got 0x%x",
573
48
                    (guint) 0x43534645,
574
48
                    (guint) fu_struct_synaptics_cape_hid_hdr_get_signature(st));
575
48
        return FALSE;
576
48
    }
577
165
    return TRUE;
578
213
}
579
static gboolean
580
fu_struct_synaptics_cape_hid_hdr_parse_internal(FuStructSynapticsCapeHidHdr *st, GError **error)
581
213
{
582
213
    if (g_log_get_debug_enabled()) {
583
0
        g_autofree gchar *str = fu_struct_synaptics_cape_hid_hdr_to_string(st);
584
0
        g_debug("%s", str);
585
0
    }
586
213
    if (!fu_struct_synaptics_cape_hid_hdr_validate_internal(st, error))
587
48
        return FALSE;
588
165
    return TRUE;
589
213
}
590
/**
591
 * fu_struct_synaptics_cape_hid_hdr_parse_stream: (skip):
592
 **/
593
FuStructSynapticsCapeHidHdr *
594
fu_struct_synaptics_cape_hid_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error)
595
219
{
596
219
    g_autoptr(FuStructSynapticsCapeHidHdr) st = fu_struct_synaptics_cape_hid_hdr_new_internal();
597
219
    st->buf = fu_input_stream_read_byte_array(stream, offset, 32, NULL, error);
598
219
    if (st->buf == NULL) {
599
0
        g_prefix_error(error, "FuStructSynapticsCapeHidHdr failed read of 0x%x: ", (guint) 32);
600
0
        return NULL;
601
0
    }
602
219
    if (st->buf->len != 32) {
603
6
        g_set_error(error,
604
6
                    FWUPD_ERROR,
605
6
                    FWUPD_ERROR_INVALID_DATA,
606
6
                    "FuStructSynapticsCapeHidHdr requested 0x%x and got 0x%x",
607
6
                    (guint) 32,
608
6
                    (guint) st->buf->len);
609
6
        return NULL;
610
6
    }
611
213
    if (!fu_struct_synaptics_cape_hid_hdr_parse_internal(st, error))
612
48
        return NULL;
613
165
    return g_steal_pointer(&st);
614
213
}
615
/**
616
 * fu_struct_synaptics_cape_sngl_hdr_ref: (skip):
617
 **/
618
FuStructSynapticsCapeSnglHdr *
619
fu_struct_synaptics_cape_sngl_hdr_ref(FuStructSynapticsCapeSnglHdr *st)
620
0
{
621
0
    g_return_val_if_fail(st != NULL, NULL);
622
0
    st->refcount++;
623
0
    return st;
624
0
}
625
/**
626
 * fu_struct_synaptics_cape_sngl_hdr_unref: (skip):
627
 **/
628
void
629
fu_struct_synaptics_cape_sngl_hdr_unref(FuStructSynapticsCapeSnglHdr *st)
630
0
{
631
0
    g_return_if_fail(st != NULL);
632
0
    if (st->refcount == 0) {
633
0
        g_critical("FuStructSynapticsCapeSnglHdr refcount already zero");
634
0
        return;
635
0
    }
636
0
    if (--st->refcount > 0)
637
0
        return;
638
0
    if (st->buf != NULL)
639
0
        g_byte_array_unref(st->buf);
640
0
    g_free(st);
641
0
}
642
/**
643
 * fu_struct_synaptics_cape_sngl_hdr_new_internal: (skip):
644
 **/
645
static FuStructSynapticsCapeSnglHdr *
646
fu_struct_synaptics_cape_sngl_hdr_new_internal(void)
647
0
{
648
0
    FuStructSynapticsCapeSnglHdr *st = g_new0(FuStructSynapticsCapeSnglHdr, 1);
649
0
    st->refcount = 1;
650
0
    return st;
651
0
}
652
653
/* getters */
654
/**
655
 * fu_struct_synaptics_cape_sngl_hdr_get_magic: (skip):
656
 **/
657
static guint32
658
fu_struct_synaptics_cape_sngl_hdr_get_magic(const FuStructSynapticsCapeSnglHdr *st)
659
0
{
660
0
    g_return_val_if_fail(st != NULL, 0x0);
661
0
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
662
0
}
663
/**
664
 * fu_struct_synaptics_cape_sngl_hdr_get_file_crc: (skip):
665
 **/
666
guint32
667
fu_struct_synaptics_cape_sngl_hdr_get_file_crc(const FuStructSynapticsCapeSnglHdr *st)
668
0
{
669
0
    g_return_val_if_fail(st != NULL, 0x0);
670
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
671
0
}
672
/**
673
 * fu_struct_synaptics_cape_sngl_hdr_get_file_size: (skip):
674
 **/
675
guint32
676
fu_struct_synaptics_cape_sngl_hdr_get_file_size(const FuStructSynapticsCapeSnglHdr *st)
677
0
{
678
0
    g_return_val_if_fail(st != NULL, 0x0);
679
0
    return fu_memread_uint32(st->buf->data + 8, G_LITTLE_ENDIAN);
680
0
}
681
/**
682
 * fu_struct_synaptics_cape_sngl_hdr_get_magic2: (skip):
683
 **/
684
guint32
685
fu_struct_synaptics_cape_sngl_hdr_get_magic2(const FuStructSynapticsCapeSnglHdr *st)
686
0
{
687
0
    g_return_val_if_fail(st != NULL, 0x0);
688
0
    return fu_memread_uint32(st->buf->data + 12, G_LITTLE_ENDIAN);
689
0
}
690
/**
691
 * fu_struct_synaptics_cape_sngl_hdr_get_img_type: (skip):
692
 **/
693
guint32
694
fu_struct_synaptics_cape_sngl_hdr_get_img_type(const FuStructSynapticsCapeSnglHdr *st)
695
0
{
696
0
    g_return_val_if_fail(st != NULL, 0x0);
697
0
    return fu_memread_uint32(st->buf->data + 16, G_LITTLE_ENDIAN);
698
0
}
699
/**
700
 * fu_struct_synaptics_cape_sngl_hdr_get_fw_version: (skip):
701
 **/
702
guint32
703
fu_struct_synaptics_cape_sngl_hdr_get_fw_version(const FuStructSynapticsCapeSnglHdr *st)
704
0
{
705
0
    g_return_val_if_fail(st != NULL, 0x0);
706
0
    return fu_memread_uint32(st->buf->data + 20, G_LITTLE_ENDIAN);
707
0
}
708
/**
709
 * fu_struct_synaptics_cape_sngl_hdr_get_vid: (skip):
710
 **/
711
guint16
712
fu_struct_synaptics_cape_sngl_hdr_get_vid(const FuStructSynapticsCapeSnglHdr *st)
713
0
{
714
0
    g_return_val_if_fail(st != NULL, 0x0);
715
0
    return fu_memread_uint16(st->buf->data + 24, G_LITTLE_ENDIAN);
716
0
}
717
/**
718
 * fu_struct_synaptics_cape_sngl_hdr_get_pid: (skip):
719
 **/
720
guint16
721
fu_struct_synaptics_cape_sngl_hdr_get_pid(const FuStructSynapticsCapeSnglHdr *st)
722
0
{
723
0
    g_return_val_if_fail(st != NULL, 0x0);
724
0
    return fu_memread_uint16(st->buf->data + 26, G_LITTLE_ENDIAN);
725
0
}
726
/**
727
 * fu_struct_synaptics_cape_sngl_hdr_get_fw_file_num: (skip):
728
 **/
729
guint32
730
fu_struct_synaptics_cape_sngl_hdr_get_fw_file_num(const FuStructSynapticsCapeSnglHdr *st)
731
0
{
732
0
    g_return_val_if_fail(st != NULL, 0x0);
733
0
    return fu_memread_uint32(st->buf->data + 28, G_LITTLE_ENDIAN);
734
0
}
735
/**
736
 * fu_struct_synaptics_cape_sngl_hdr_get_version: (skip):
737
 **/
738
guint32
739
fu_struct_synaptics_cape_sngl_hdr_get_version(const FuStructSynapticsCapeSnglHdr *st)
740
0
{
741
0
    g_return_val_if_fail(st != NULL, 0x0);
742
0
    return fu_memread_uint32(st->buf->data + 32, G_LITTLE_ENDIAN);
743
0
}
744
/**
745
 * fu_struct_synaptics_cape_sngl_hdr_get_fw_crc: (skip):
746
 **/
747
guint32
748
fu_struct_synaptics_cape_sngl_hdr_get_fw_crc(const FuStructSynapticsCapeSnglHdr *st)
749
0
{
750
0
    g_return_val_if_fail(st != NULL, 0x0);
751
0
    return fu_memread_uint32(st->buf->data + 36, G_LITTLE_ENDIAN);
752
0
}
753
/**
754
 * fu_struct_synaptics_cape_sngl_hdr_get_machine_name: (skip):
755
 **/
756
gchar *
757
fu_struct_synaptics_cape_sngl_hdr_get_machine_name(const FuStructSynapticsCapeSnglHdr *st)
758
0
{
759
0
    g_return_val_if_fail(st != NULL, NULL);
760
0
    return fu_memstrsafe(st->buf->data, st->buf->len, 48, 16, NULL);
761
0
}
762
/**
763
 * fu_struct_synaptics_cape_sngl_hdr_get_time_stamp: (skip):
764
 **/
765
gchar *
766
fu_struct_synaptics_cape_sngl_hdr_get_time_stamp(const FuStructSynapticsCapeSnglHdr *st)
767
0
{
768
0
    g_return_val_if_fail(st != NULL, NULL);
769
0
    return fu_memstrsafe(st->buf->data, st->buf->len, 64, 16, NULL);
770
0
}
771
772
/* setters */
773
/**
774
 * fu_struct_synaptics_cape_sngl_hdr_set_magic: (skip):
775
 **/
776
static void
777
fu_struct_synaptics_cape_sngl_hdr_set_magic(FuStructSynapticsCapeSnglHdr *st, guint32 value)
778
0
{
779
0
    g_return_if_fail(st != NULL);
780
0
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
781
0
}
782
/**
783
 * fu_struct_synaptics_cape_sngl_hdr_set_file_crc: (skip):
784
 **/
785
void
786
fu_struct_synaptics_cape_sngl_hdr_set_file_crc(FuStructSynapticsCapeSnglHdr *st, guint32 value)
787
0
{
788
0
    g_return_if_fail(st != NULL);
789
0
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
790
0
}
791
/**
792
 * fu_struct_synaptics_cape_sngl_hdr_set_file_size: (skip):
793
 **/
794
void
795
fu_struct_synaptics_cape_sngl_hdr_set_file_size(FuStructSynapticsCapeSnglHdr *st, guint32 value)
796
0
{
797
0
    g_return_if_fail(st != NULL);
798
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
799
0
}
800
/**
801
 * fu_struct_synaptics_cape_sngl_hdr_set_magic2: (skip):
802
 **/
803
void
804
fu_struct_synaptics_cape_sngl_hdr_set_magic2(FuStructSynapticsCapeSnglHdr *st, guint32 value)
805
0
{
806
0
    g_return_if_fail(st != NULL);
807
0
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
808
0
}
809
/**
810
 * fu_struct_synaptics_cape_sngl_hdr_set_img_type: (skip):
811
 **/
812
void
813
fu_struct_synaptics_cape_sngl_hdr_set_img_type(FuStructSynapticsCapeSnglHdr *st, guint32 value)
814
0
{
815
0
    g_return_if_fail(st != NULL);
816
0
    fu_memwrite_uint32(st->buf->data + 16, value, G_LITTLE_ENDIAN);
817
0
}
818
/**
819
 * fu_struct_synaptics_cape_sngl_hdr_set_fw_version: (skip):
820
 **/
821
void
822
fu_struct_synaptics_cape_sngl_hdr_set_fw_version(FuStructSynapticsCapeSnglHdr *st, guint32 value)
823
0
{
824
0
    g_return_if_fail(st != NULL);
825
0
    fu_memwrite_uint32(st->buf->data + 20, value, G_LITTLE_ENDIAN);
826
0
}
827
/**
828
 * fu_struct_synaptics_cape_sngl_hdr_set_vid: (skip):
829
 **/
830
void
831
fu_struct_synaptics_cape_sngl_hdr_set_vid(FuStructSynapticsCapeSnglHdr *st, guint16 value)
832
0
{
833
0
    g_return_if_fail(st != NULL);
834
0
    fu_memwrite_uint16(st->buf->data + 24, value, G_LITTLE_ENDIAN);
835
0
}
836
/**
837
 * fu_struct_synaptics_cape_sngl_hdr_set_pid: (skip):
838
 **/
839
void
840
fu_struct_synaptics_cape_sngl_hdr_set_pid(FuStructSynapticsCapeSnglHdr *st, guint16 value)
841
0
{
842
0
    g_return_if_fail(st != NULL);
843
0
    fu_memwrite_uint16(st->buf->data + 26, value, G_LITTLE_ENDIAN);
844
0
}
845
/**
846
 * fu_struct_synaptics_cape_sngl_hdr_set_fw_file_num: (skip):
847
 **/
848
void
849
fu_struct_synaptics_cape_sngl_hdr_set_fw_file_num(FuStructSynapticsCapeSnglHdr *st, guint32 value)
850
0
{
851
0
    g_return_if_fail(st != NULL);
852
0
    fu_memwrite_uint32(st->buf->data + 28, value, G_LITTLE_ENDIAN);
853
0
}
854
/**
855
 * fu_struct_synaptics_cape_sngl_hdr_set_version: (skip):
856
 **/
857
void
858
fu_struct_synaptics_cape_sngl_hdr_set_version(FuStructSynapticsCapeSnglHdr *st, guint32 value)
859
0
{
860
0
    g_return_if_fail(st != NULL);
861
0
    fu_memwrite_uint32(st->buf->data + 32, value, G_LITTLE_ENDIAN);
862
0
}
863
/**
864
 * fu_struct_synaptics_cape_sngl_hdr_set_fw_crc: (skip):
865
 **/
866
void
867
fu_struct_synaptics_cape_sngl_hdr_set_fw_crc(FuStructSynapticsCapeSnglHdr *st, guint32 value)
868
0
{
869
0
    g_return_if_fail(st != NULL);
870
0
    fu_memwrite_uint32(st->buf->data + 36, value, G_LITTLE_ENDIAN);
871
0
}
872
/**
873
 * fu_struct_synaptics_cape_sngl_hdr_set_machine_name: (skip):
874
 **/
875
gboolean
876
fu_struct_synaptics_cape_sngl_hdr_set_machine_name(FuStructSynapticsCapeSnglHdr *st, const gchar *value, GError **error)
877
0
{
878
0
    gsize len;
879
0
    g_return_val_if_fail(st != NULL, FALSE);
880
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
881
0
    if (value == NULL) {
882
0
        memset(st->buf->data + 48, 0x0, 16);
883
0
        return TRUE;
884
0
    }
885
0
    len = strlen(value);
886
0
    if (len > 16) {
887
0
        g_set_error(error,
888
0
                    FWUPD_ERROR,
889
0
                    FWUPD_ERROR_INVALID_DATA,
890
0
                    "string '%s' (0x%x bytes) does not fit in FuStructSynapticsCapeSnglHdr.machine_name (0x%x bytes)",
891
0
                    value, (guint) len, (guint) 16);
892
0
        return FALSE;
893
0
    }
894
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 48, (const guint8 *)value, len, 0x0, len, error);
895
0
}
896
/**
897
 * fu_struct_synaptics_cape_sngl_hdr_set_time_stamp: (skip):
898
 **/
899
gboolean
900
fu_struct_synaptics_cape_sngl_hdr_set_time_stamp(FuStructSynapticsCapeSnglHdr *st, const gchar *value, GError **error)
901
0
{
902
0
    gsize len;
903
0
    g_return_val_if_fail(st != NULL, FALSE);
904
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
905
0
    if (value == NULL) {
906
0
        memset(st->buf->data + 64, 0x0, 16);
907
0
        return TRUE;
908
0
    }
909
0
    len = strlen(value);
910
0
    if (len > 16) {
911
0
        g_set_error(error,
912
0
                    FWUPD_ERROR,
913
0
                    FWUPD_ERROR_INVALID_DATA,
914
0
                    "string '%s' (0x%x bytes) does not fit in FuStructSynapticsCapeSnglHdr.time_stamp (0x%x bytes)",
915
0
                    value, (guint) len, (guint) 16);
916
0
        return FALSE;
917
0
    }
918
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 64, (const guint8 *)value, len, 0x0, len, error);
919
0
}
920
/**
921
 * fu_struct_synaptics_cape_sngl_hdr_new: (skip):
922
 **/
923
FuStructSynapticsCapeSnglHdr *
924
fu_struct_synaptics_cape_sngl_hdr_new(void)
925
0
{
926
0
    FuStructSynapticsCapeSnglHdr *st = fu_struct_synaptics_cape_sngl_hdr_new_internal();
927
0
    st->buf = g_byte_array_sized_new(80);
928
0
    fu_byte_array_set_size(st->buf, 80, 0x0);
929
0
    fu_struct_synaptics_cape_sngl_hdr_set_magic(st, 0x4C474E53);
930
0
    return st;
931
0
}
932
/**
933
 * fu_struct_synaptics_cape_sngl_hdr_to_string: (skip):
934
 **/
935
static gchar *
936
fu_struct_synaptics_cape_sngl_hdr_to_string(const FuStructSynapticsCapeSnglHdr *st)
937
0
{
938
0
    g_autoptr(GString) str = g_string_new("FuStructSynapticsCapeSnglHdr:\n");
939
0
    g_return_val_if_fail(st != NULL, NULL);
940
0
    g_string_append_printf(str, "  magic: 0x%x\n",
941
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_magic(st));
942
0
    g_string_append_printf(str, "  file_crc: 0x%x\n",
943
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_file_crc(st));
944
0
    g_string_append_printf(str, "  file_size: 0x%x\n",
945
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_file_size(st));
946
0
    g_string_append_printf(str, "  magic2: 0x%x\n",
947
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_magic2(st));
948
0
    g_string_append_printf(str, "  img_type: 0x%x\n",
949
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_img_type(st));
950
0
    g_string_append_printf(str, "  fw_version: 0x%x\n",
951
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_fw_version(st));
952
0
    g_string_append_printf(str, "  vid: 0x%x\n",
953
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_vid(st));
954
0
    g_string_append_printf(str, "  pid: 0x%x\n",
955
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_pid(st));
956
0
    g_string_append_printf(str, "  fw_file_num: 0x%x\n",
957
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_fw_file_num(st));
958
0
    g_string_append_printf(str, "  version: 0x%x\n",
959
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_version(st));
960
0
    g_string_append_printf(str, "  fw_crc: 0x%x\n",
961
0
                           (guint) fu_struct_synaptics_cape_sngl_hdr_get_fw_crc(st));
962
0
    {
963
0
        g_autofree gchar *tmp = fu_struct_synaptics_cape_sngl_hdr_get_machine_name(st);
964
0
        if (tmp != NULL)
965
0
            g_string_append_printf(str, "  machine_name: %s\n", tmp);
966
0
    }
967
0
    {
968
0
        g_autofree gchar *tmp = fu_struct_synaptics_cape_sngl_hdr_get_time_stamp(st);
969
0
        if (tmp != NULL)
970
0
            g_string_append_printf(str, "  time_stamp: %s\n", tmp);
971
0
    }
972
0
    if (str->len > 0)
973
0
        g_string_set_size(str, str->len - 1);
974
0
    return g_string_free(g_steal_pointer(&str), FALSE);
975
0
}
976
static gboolean
977
fu_struct_synaptics_cape_sngl_hdr_validate_internal(FuStructSynapticsCapeSnglHdr *st, GError **error)
978
0
{
979
0
    g_return_val_if_fail(st != NULL, FALSE);
980
0
    if (fu_struct_synaptics_cape_sngl_hdr_get_magic(st) != 0x4C474E53) {
981
0
        g_set_error(error,
982
0
                    FWUPD_ERROR,
983
0
                    FWUPD_ERROR_INVALID_DATA,
984
0
                    "constant FuStructSynapticsCapeSnglHdr.magic was not valid, "
985
0
                    "expected 0x%x and got 0x%x",
986
0
                    (guint) 0x4C474E53,
987
0
                    (guint) fu_struct_synaptics_cape_sngl_hdr_get_magic(st));
988
0
        return FALSE;
989
0
    }
990
0
    return TRUE;
991
0
}
992
static gboolean
993
fu_struct_synaptics_cape_sngl_hdr_parse_internal(FuStructSynapticsCapeSnglHdr *st, GError **error)
994
0
{
995
0
    if (g_log_get_debug_enabled()) {
996
0
        g_autofree gchar *str = fu_struct_synaptics_cape_sngl_hdr_to_string(st);
997
0
        g_debug("%s", str);
998
0
    }
999
0
    if (!fu_struct_synaptics_cape_sngl_hdr_validate_internal(st, error))
1000
0
        return FALSE;
1001
0
    return TRUE;
1002
0
}
1003
/**
1004
 * fu_struct_synaptics_cape_sngl_hdr_parse_stream: (skip):
1005
 **/
1006
FuStructSynapticsCapeSnglHdr *
1007
fu_struct_synaptics_cape_sngl_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error)
1008
0
{
1009
0
    g_autoptr(FuStructSynapticsCapeSnglHdr) st = fu_struct_synaptics_cape_sngl_hdr_new_internal();
1010
0
    st->buf = fu_input_stream_read_byte_array(stream, offset, 80, NULL, error);
1011
0
    if (st->buf == NULL) {
1012
0
        g_prefix_error(error, "FuStructSynapticsCapeSnglHdr failed read of 0x%x: ", (guint) 80);
1013
0
        return NULL;
1014
0
    }
1015
0
    if (st->buf->len != 80) {
1016
0
        g_set_error(error,
1017
0
                    FWUPD_ERROR,
1018
0
                    FWUPD_ERROR_INVALID_DATA,
1019
0
                    "FuStructSynapticsCapeSnglHdr requested 0x%x and got 0x%x",
1020
0
                    (guint) 80,
1021
0
                    (guint) st->buf->len);
1022
0
        return NULL;
1023
0
    }
1024
0
    if (!fu_struct_synaptics_cape_sngl_hdr_parse_internal(st, error))
1025
0
        return NULL;
1026
0
    return g_steal_pointer(&st);
1027
0
}
1028
/**
1029
 * fu_struct_synaptics_cape_sngl_file_ref: (skip):
1030
 **/
1031
FuStructSynapticsCapeSnglFile *
1032
fu_struct_synaptics_cape_sngl_file_ref(FuStructSynapticsCapeSnglFile *st)
1033
0
{
1034
0
    g_return_val_if_fail(st != NULL, NULL);
1035
0
    st->refcount++;
1036
0
    return st;
1037
0
}
1038
/**
1039
 * fu_struct_synaptics_cape_sngl_file_unref: (skip):
1040
 **/
1041
void
1042
fu_struct_synaptics_cape_sngl_file_unref(FuStructSynapticsCapeSnglFile *st)
1043
0
{
1044
0
    g_return_if_fail(st != NULL);
1045
0
    if (st->refcount == 0) {
1046
0
        g_critical("FuStructSynapticsCapeSnglFile refcount already zero");
1047
0
        return;
1048
0
    }
1049
0
    if (--st->refcount > 0)
1050
0
        return;
1051
0
    if (st->buf != NULL)
1052
0
        g_byte_array_unref(st->buf);
1053
0
    g_free(st);
1054
0
}
1055
1056
/* getters */
1057
1058
/* setters */