Coverage Report

Created: 2025-08-26 06:55

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