Coverage Report

Created: 2026-01-10 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-wacom-usb-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-wacom-usb-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-mem-private.h"
14
#include "fu-string.h"
15
16
#ifdef G_LOG_DOMAIN
17
  #undef G_LOG_DOMAIN
18
#endif
19
0
#define G_LOG_DOMAIN "FuStruct"
20
21
/**
22
 * fu_wacom_usb_report_id_to_string:
23
 * @val: value, e.g. %FU_WACOM_USB_REPORT_ID_SWITCH_TO_FLASH_LOADER
24
 *
25
 * Converts an enumerated value to a string.
26
 *
27
 * Returns: identifier string
28
 **/
29
const gchar *
30
fu_wacom_usb_report_id_to_string(FuWacomUsbReportId val)
31
0
{
32
0
    if (val == FU_WACOM_USB_REPORT_ID_FW_DESCRIPTOR)
33
0
        return "fw-descriptor";
34
0
    if (val == FU_WACOM_USB_REPORT_ID_SWITCH_TO_FLASH_LOADER)
35
0
        return "switch-to-flash-loader";
36
0
    if (val == FU_WACOM_USB_REPORT_ID_QUIT_AND_RESET)
37
0
        return "quit-and-reset";
38
0
    if (val == FU_WACOM_USB_REPORT_ID_READ_BLOCK_DATA)
39
0
        return "read-block-data";
40
0
    if (val == FU_WACOM_USB_REPORT_ID_WRITE_BLOCK)
41
0
        return "write-block";
42
0
    if (val == FU_WACOM_USB_REPORT_ID_ERASE_BLOCK)
43
0
        return "erase-block";
44
0
    if (val == FU_WACOM_USB_REPORT_ID_SET_READ_ADDRESS)
45
0
        return "set-read-address";
46
0
    if (val == FU_WACOM_USB_REPORT_ID_GET_STATUS)
47
0
        return "get-status";
48
0
    if (val == FU_WACOM_USB_REPORT_ID_UPDATE_RESET)
49
0
        return "update-reset";
50
0
    if (val == FU_WACOM_USB_REPORT_ID_WRITE_WORD)
51
0
        return "write-word";
52
0
    if (val == FU_WACOM_USB_REPORT_ID_GET_PARAMETERS)
53
0
        return "get-parameters";
54
0
    if (val == FU_WACOM_USB_REPORT_ID_GET_FLASH_DESCRIPTOR)
55
0
        return "get-flash-descriptor";
56
0
    if (val == FU_WACOM_USB_REPORT_ID_GET_CHECKSUMS)
57
0
        return "get-checksums";
58
0
    if (val == FU_WACOM_USB_REPORT_ID_SET_CHECKSUM_FOR_BLOCK)
59
0
        return "set-checksum-for-block";
60
0
    if (val == FU_WACOM_USB_REPORT_ID_CALCULATE_CHECKSUM_FOR_BLOCK)
61
0
        return "calculate-checksum-for-block";
62
0
    if (val == FU_WACOM_USB_REPORT_ID_WRITE_CHECKSUM_TABLE)
63
0
        return "write-checksum-table";
64
0
    if (val == FU_WACOM_USB_REPORT_ID_GET_CURRENT_FIRMWARE_IDX)
65
0
        return "get-current-firmware-idx";
66
0
    if (val == FU_WACOM_USB_REPORT_ID_MODULE)
67
0
        return "module";
68
0
    return NULL;
69
0
}
70
71
/**
72
 * fu_wacom_usb_module_fw_type_to_string:
73
 * @val: value, e.g. %FU_WACOM_USB_MODULE_FW_TYPE_BLUETOOTH
74
 *
75
 * Converts an enumerated value to a string.
76
 *
77
 * Returns: identifier string
78
 **/
79
const gchar *
80
fu_wacom_usb_module_fw_type_to_string(FuWacomUsbModuleFwType val)
81
0
{
82
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_TOUCH)
83
0
        return "touch";
84
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_BLUETOOTH)
85
0
        return "bluetooth";
86
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_EMR_CORRECTION)
87
0
        return "emr-correction";
88
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_BLUETOOTH_HID)
89
0
        return "bluetooth-hid";
90
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_SCALER)
91
0
        return "scaler";
92
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_BLUETOOTH_ID6)
93
0
        return "bluetooth-id6";
94
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_TOUCH_ID7)
95
0
        return "touch-id7";
96
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_BLUETOOTH_ID9)
97
0
        return "bluetooth-id9";
98
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_SUB_CPU)
99
0
        return "sub-cpu";
100
0
    if (val == FU_WACOM_USB_MODULE_FW_TYPE_MAIN)
101
0
        return "main";
102
0
    return NULL;
103
0
}
104
105
/**
106
 * fu_wacom_usb_module_command_to_string:
107
 * @val: value, e.g. %FU_WACOM_USB_MODULE_COMMAND_DATA
108
 *
109
 * Converts an enumerated value to a string.
110
 *
111
 * Returns: identifier string
112
 **/
113
const gchar *
114
fu_wacom_usb_module_command_to_string(FuWacomUsbModuleCommand val)
115
0
{
116
0
    if (val == FU_WACOM_USB_MODULE_COMMAND_START)
117
0
        return "start";
118
0
    if (val == FU_WACOM_USB_MODULE_COMMAND_DATA)
119
0
        return "data";
120
0
    if (val == FU_WACOM_USB_MODULE_COMMAND_END)
121
0
        return "end";
122
0
    return NULL;
123
0
}
124
125
/**
126
 * fu_wacom_usb_module_status_to_string:
127
 * @val: value, e.g. %FU_WACOM_USB_MODULE_STATUS_BUSY
128
 *
129
 * Converts an enumerated value to a string.
130
 *
131
 * Returns: identifier string
132
 **/
133
const gchar *
134
fu_wacom_usb_module_status_to_string(FuWacomUsbModuleStatus val)
135
0
{
136
0
    if (val == FU_WACOM_USB_MODULE_STATUS_OK)
137
0
        return "ok";
138
0
    if (val == FU_WACOM_USB_MODULE_STATUS_BUSY)
139
0
        return "busy";
140
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_CRC)
141
0
        return "err-crc";
142
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_CMD)
143
0
        return "err-cmd";
144
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_HW_ACCESS_FAIL)
145
0
        return "err-hw-access-fail";
146
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_FLASH_NO_SUPPORT)
147
0
        return "err-flash-no-support";
148
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_MODE_WRONG)
149
0
        return "err-mode-wrong";
150
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_MPU_NO_SUPPORT)
151
0
        return "err-mpu-no-support";
152
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_VERSION_NO_SUPPORT)
153
0
        return "err-version-no-support";
154
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_ERASE)
155
0
        return "err-erase";
156
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_WRITE)
157
0
        return "err-write";
158
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_EXIT)
159
0
        return "err-exit";
160
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR)
161
0
        return "err";
162
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_INVALID_OP)
163
0
        return "err-invalid-op";
164
0
    if (val == FU_WACOM_USB_MODULE_STATUS_ERR_WRONG_IMAGE)
165
0
        return "err-wrong-image";
166
0
    return NULL;
167
0
}
168
169
/**
170
 * fu_wacom_usb_device_status_to_string:
171
 * @val: value, e.g. %FU_WACOM_USB_DEVICE_STATUS_WRITING
172
 *
173
 * Converts an enumerated value to a string.
174
 *
175
 * Returns: identifier string
176
 *
177
 **/
178
gchar *
179
fu_wacom_usb_device_status_to_string(FuWacomUsbDeviceStatus val)
180
0
{
181
0
    const gchar *data[6] = {0};
182
0
    guint idx = 0;
183
0
    if (val == FU_WACOM_USB_DEVICE_STATUS_UNKNOWN)
184
0
        return g_strdup("unknown");
185
0
    if (val & FU_WACOM_USB_DEVICE_STATUS_WRITING)
186
0
        data[idx++] = "writing";
187
0
    if (val & FU_WACOM_USB_DEVICE_STATUS_ERASING)
188
0
        data[idx++] = "erasing";
189
0
    if (val & FU_WACOM_USB_DEVICE_STATUS_ERROR_WRITE)
190
0
        data[idx++] = "error-write";
191
0
    if (val & FU_WACOM_USB_DEVICE_STATUS_ERROR_ERASE)
192
0
        data[idx++] = "error-erase";
193
0
    if (val & FU_WACOM_USB_DEVICE_STATUS_WRITE_PROTECTED)
194
0
        data[idx++] = "write-protected";
195
0
    return g_strjoinv(",", (gchar **)data);
196
0
}
197
/**
198
 * fu_struct_wacom_usb_firmware_hdr_ref: (skip):
199
 **/
200
FuStructWacomUsbFirmwareHdr *
201
fu_struct_wacom_usb_firmware_hdr_ref(FuStructWacomUsbFirmwareHdr *st)
202
0
{
203
0
    g_return_val_if_fail(st != NULL, NULL);
204
0
    st->refcount++;
205
0
    return st;
206
0
}
207
/**
208
 * fu_struct_wacom_usb_firmware_hdr_unref: (skip):
209
 **/
210
void
211
fu_struct_wacom_usb_firmware_hdr_unref(FuStructWacomUsbFirmwareHdr *st)
212
289k
{
213
289k
    g_return_if_fail(st != NULL);
214
289k
    if (st->refcount == 0) {
215
0
        g_critical("FuStructWacomUsbFirmwareHdr refcount already zero");
216
0
        return;
217
0
    }
218
289k
    if (--st->refcount > 0)
219
0
        return;
220
289k
    if (st->buf != NULL)
221
289k
        g_byte_array_unref(st->buf);
222
289k
    g_free(st);
223
289k
}
224
/**
225
 * fu_struct_wacom_usb_firmware_hdr_new_internal: (skip):
226
 **/
227
static FuStructWacomUsbFirmwareHdr *
228
fu_struct_wacom_usb_firmware_hdr_new_internal(void)
229
289k
{
230
289k
    FuStructWacomUsbFirmwareHdr *st = g_new0(FuStructWacomUsbFirmwareHdr, 1);
231
289k
    st->refcount = 1;
232
289k
    return st;
233
289k
}
234
235
/* getters */
236
/**
237
 * fu_struct_wacom_usb_firmware_hdr_get_magic: (skip):
238
 **/
239
static gchar *
240
fu_struct_wacom_usb_firmware_hdr_get_magic(const FuStructWacomUsbFirmwareHdr *st)
241
287k
{
242
287k
    g_return_val_if_fail(st != NULL, NULL);
243
287k
    return fu_memstrsafe(st->buf->data, st->buf->len, 0, 5, NULL);
244
287k
}
245
246
/* setters */
247
static gboolean
248
fu_struct_wacom_usb_firmware_hdr_validate_internal(FuStructWacomUsbFirmwareHdr *st, GError **error)
249
289k
{
250
289k
    g_return_val_if_fail(st != NULL, FALSE);
251
289k
    if (strncmp((const gchar *) (st->buf->data + 0), "WACOM", 5) != 0) {
252
287k
        g_autofree gchar *str = fu_struct_wacom_usb_firmware_hdr_get_magic(st);
253
287k
        g_set_error(error,
254
287k
                    FWUPD_ERROR,
255
287k
                    FWUPD_ERROR_INVALID_DATA,
256
287k
                    "constant FuStructWacomUsbFirmwareHdr.magic was not valid, "
257
287k
                    "expected 'WACOM' and got '%s'",
258
287k
                    str);
259
287k
        return FALSE;
260
287k
    }
261
1.89k
    return TRUE;
262
289k
}
263
/**
264
 * fu_struct_wacom_usb_firmware_hdr_validate_stream: (skip):
265
 **/
266
gboolean
267
fu_struct_wacom_usb_firmware_hdr_validate_stream(GInputStream *stream, gsize offset, GError **error)
268
289k
{
269
289k
    g_autoptr(FuStructWacomUsbFirmwareHdr) st = fu_struct_wacom_usb_firmware_hdr_new_internal();
270
289k
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
271
289k
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
272
289k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 5, NULL, error);
273
289k
    if (st->buf == NULL) {
274
0
        g_prefix_error(error, "FuStructWacomUsbFirmwareHdr failed read of 0x%x: ", (guint) 5);
275
0
        return FALSE;
276
0
    }
277
289k
    if (st->buf->len != 5) {
278
578
        g_set_error(error,
279
578
                    FWUPD_ERROR,
280
578
                    FWUPD_ERROR_INVALID_DATA,
281
578
                    "FuStructWacomUsbFirmwareHdr requested 0x%x and got 0x%x",
282
578
                    (guint) 5,
283
578
                    (guint) st->buf->len);
284
578
        return FALSE;
285
578
    }
286
289k
    return fu_struct_wacom_usb_firmware_hdr_validate_internal(st, error);
287
289k
}
288
/**
289
 * fu_struct_wta_block_header_ref: (skip):
290
 **/
291
FuStructWtaBlockHeader *
292
fu_struct_wta_block_header_ref(FuStructWtaBlockHeader *st)
293
0
{
294
0
    g_return_val_if_fail(st != NULL, NULL);
295
0
    st->refcount++;
296
0
    return st;
297
0
}
298
/**
299
 * fu_struct_wta_block_header_unref: (skip):
300
 **/
301
void
302
fu_struct_wta_block_header_unref(FuStructWtaBlockHeader *st)
303
0
{
304
0
    g_return_if_fail(st != NULL);
305
0
    if (st->refcount == 0) {
306
0
        g_critical("FuStructWtaBlockHeader refcount already zero");
307
0
        return;
308
0
    }
309
0
    if (--st->refcount > 0)
310
0
        return;
311
0
    if (st->buf != NULL)
312
0
        g_byte_array_unref(st->buf);
313
0
    g_free(st);
314
0
}
315
/**
316
 * fu_struct_wta_block_header_new_internal: (skip):
317
 **/
318
static FuStructWtaBlockHeader *
319
fu_struct_wta_block_header_new_internal(void)
320
0
{
321
0
    FuStructWtaBlockHeader *st = g_new0(FuStructWtaBlockHeader, 1);
322
0
    st->refcount = 1;
323
0
    return st;
324
0
}
325
326
/* getters */
327
/**
328
 * fu_struct_wta_block_header_get_block_start: (skip):
329
 **/
330
guint32
331
fu_struct_wta_block_header_get_block_start(const FuStructWtaBlockHeader *st)
332
0
{
333
0
    g_return_val_if_fail(st != NULL, 0x0);
334
0
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
335
0
}
336
/**
337
 * fu_struct_wta_block_header_get_block_size: (skip):
338
 **/
339
guint32
340
fu_struct_wta_block_header_get_block_size(const FuStructWtaBlockHeader *st)
341
0
{
342
0
    g_return_val_if_fail(st != NULL, 0x0);
343
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
344
0
}
345
346
/* setters */
347
/**
348
 * fu_struct_wta_block_header_to_string: (skip):
349
 **/
350
static gchar *
351
fu_struct_wta_block_header_to_string(const FuStructWtaBlockHeader *st)
352
0
{
353
0
    g_autoptr(GString) str = g_string_new("FuStructWtaBlockHeader:\n");
354
0
    g_return_val_if_fail(st != NULL, NULL);
355
0
    g_string_append_printf(str, "  block_start: 0x%x\n",
356
0
                           (guint) fu_struct_wta_block_header_get_block_start(st));
357
0
    g_string_append_printf(str, "  block_size: 0x%x\n",
358
0
                           (guint) fu_struct_wta_block_header_get_block_size(st));
359
0
    if (str->len > 0)
360
0
        g_string_set_size(str, str->len - 1);
361
0
    return g_string_free(g_steal_pointer(&str), FALSE);
362
0
}
363
static gboolean
364
fu_struct_wta_block_header_validate_internal(FuStructWtaBlockHeader *st, GError **error)
365
0
{
366
0
    g_return_val_if_fail(st != NULL, FALSE);
367
0
    return TRUE;
368
0
}
369
static gboolean
370
fu_struct_wta_block_header_parse_internal(FuStructWtaBlockHeader *st, GError **error)
371
0
{
372
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
373
0
        g_autofree gchar *str = fu_struct_wta_block_header_to_string(st);
374
0
        g_debug("%s", str);
375
0
    }
376
0
    if (!fu_struct_wta_block_header_validate_internal(st, error))
377
0
        return FALSE;
378
0
    return TRUE;
379
0
}
380
381
/**
382
 * fu_struct_wta_block_header_parse: (skip):
383
 **/
384
FuStructWtaBlockHeader *
385
fu_struct_wta_block_header_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
386
0
{
387
0
    g_autoptr(FuStructWtaBlockHeader) st = fu_struct_wta_block_header_new_internal();
388
0
    g_return_val_if_fail(buf != NULL, NULL);
389
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
390
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
391
0
        g_prefix_error_literal(error, "invalid struct FuStructWtaBlockHeader: ");
392
0
        return NULL;
393
0
    }
394
0
    st->buf = g_byte_array_new();
395
0
    g_byte_array_append(st->buf, buf + offset, 8);
396
0
    if (!fu_struct_wta_block_header_parse_internal(st, error))
397
0
        return NULL;
398
0
    return g_steal_pointer(&st);
399
0
}
400
/**
401
 * fu_struct_wacom_usb_id9_unknown_cmd_ref: (skip):
402
 **/
403
FuStructWacomUsbId9UnknownCmd *
404
fu_struct_wacom_usb_id9_unknown_cmd_ref(FuStructWacomUsbId9UnknownCmd *st)
405
0
{
406
0
    g_return_val_if_fail(st != NULL, NULL);
407
0
    st->refcount++;
408
0
    return st;
409
0
}
410
/**
411
 * fu_struct_wacom_usb_id9_unknown_cmd_unref: (skip):
412
 **/
413
void
414
fu_struct_wacom_usb_id9_unknown_cmd_unref(FuStructWacomUsbId9UnknownCmd *st)
415
0
{
416
0
    g_return_if_fail(st != NULL);
417
0
    if (st->refcount == 0) {
418
0
        g_critical("FuStructWacomUsbId9UnknownCmd refcount already zero");
419
0
        return;
420
0
    }
421
0
    if (--st->refcount > 0)
422
0
        return;
423
0
    if (st->buf != NULL)
424
0
        g_byte_array_unref(st->buf);
425
0
    g_free(st);
426
0
}
427
/**
428
 * fu_struct_wacom_usb_id9_unknown_cmd_new_internal: (skip):
429
 **/
430
static FuStructWacomUsbId9UnknownCmd *
431
fu_struct_wacom_usb_id9_unknown_cmd_new_internal(void)
432
0
{
433
0
    FuStructWacomUsbId9UnknownCmd *st = g_new0(FuStructWacomUsbId9UnknownCmd, 1);
434
0
    st->refcount = 1;
435
0
    return st;
436
0
}
437
438
/* getters */
439
/**
440
 * fu_struct_wacom_usb_id9_unknown_cmd_get_unknown1: (skip):
441
 **/
442
static guint16
443
fu_struct_wacom_usb_id9_unknown_cmd_get_unknown1(const FuStructWacomUsbId9UnknownCmd *st)
444
0
{
445
0
    g_return_val_if_fail(st != NULL, 0x0);
446
0
    return fu_memread_uint16(st->buf->data + 0, G_BIG_ENDIAN);
447
0
}
448
/**
449
 * fu_struct_wacom_usb_id9_unknown_cmd_get_unknown2: (skip):
450
 **/
451
static guint32
452
fu_struct_wacom_usb_id9_unknown_cmd_get_unknown2(const FuStructWacomUsbId9UnknownCmd *st)
453
0
{
454
0
    g_return_val_if_fail(st != NULL, 0x0);
455
0
    return fu_memread_uint32(st->buf->data + 2, G_BIG_ENDIAN);
456
0
}
457
458
/* setters */
459
/**
460
 * fu_struct_wacom_usb_id9_unknown_cmd_set_unknown1: (skip):
461
 **/
462
static void
463
fu_struct_wacom_usb_id9_unknown_cmd_set_unknown1(FuStructWacomUsbId9UnknownCmd *st, guint16 value)
464
0
{
465
0
    g_return_if_fail(st != NULL);
466
0
    fu_memwrite_uint16(st->buf->data + 0, value, G_BIG_ENDIAN);
467
0
}
468
/**
469
 * fu_struct_wacom_usb_id9_unknown_cmd_set_unknown2: (skip):
470
 **/
471
static void
472
fu_struct_wacom_usb_id9_unknown_cmd_set_unknown2(FuStructWacomUsbId9UnknownCmd *st, guint32 value)
473
0
{
474
0
    g_return_if_fail(st != NULL);
475
0
    fu_memwrite_uint32(st->buf->data + 2, value, G_BIG_ENDIAN);
476
0
}
477
/**
478
 * fu_struct_wacom_usb_id9_unknown_cmd_set_size: (skip):
479
 **/
480
void
481
fu_struct_wacom_usb_id9_unknown_cmd_set_size(FuStructWacomUsbId9UnknownCmd *st, guint16 value)
482
0
{
483
0
    g_return_if_fail(st != NULL);
484
0
    fu_memwrite_uint16(st->buf->data + 6, value, G_BIG_ENDIAN);
485
0
}
486
/**
487
 * fu_struct_wacom_usb_id9_unknown_cmd_new: (skip):
488
 **/
489
FuStructWacomUsbId9UnknownCmd *
490
fu_struct_wacom_usb_id9_unknown_cmd_new(void)
491
0
{
492
0
    FuStructWacomUsbId9UnknownCmd *st = fu_struct_wacom_usb_id9_unknown_cmd_new_internal();
493
0
    st->buf = g_byte_array_sized_new(8);
494
0
    fu_byte_array_set_size(st->buf, 8, 0x0);
495
0
    fu_struct_wacom_usb_id9_unknown_cmd_set_unknown1(st, 0x7050);
496
0
    fu_struct_wacom_usb_id9_unknown_cmd_set_unknown2(st, 0);
497
0
    return st;
498
0
}
499
static gboolean
500
fu_struct_wacom_usb_id9_unknown_cmd_validate_internal(FuStructWacomUsbId9UnknownCmd *st, GError **error)
501
0
{
502
0
    g_return_val_if_fail(st != NULL, FALSE);
503
0
    if (fu_struct_wacom_usb_id9_unknown_cmd_get_unknown1(st) != 0x7050) {
504
0
        g_set_error(error,
505
0
                    FWUPD_ERROR,
506
0
                    FWUPD_ERROR_INVALID_DATA,
507
0
                    "constant FuStructWacomUsbId9UnknownCmd.unknown1 was not valid, "
508
0
                    "expected 0x%x and got 0x%x",
509
0
                    (guint) 0x7050,
510
0
                    (guint) fu_struct_wacom_usb_id9_unknown_cmd_get_unknown1(st));
511
0
        return FALSE;
512
0
    }
513
0
    if (fu_struct_wacom_usb_id9_unknown_cmd_get_unknown2(st) != 0) {
514
0
        g_set_error(error,
515
0
                    FWUPD_ERROR,
516
0
                    FWUPD_ERROR_INVALID_DATA,
517
0
                    "constant FuStructWacomUsbId9UnknownCmd.unknown2 was not valid, "
518
0
                    "expected 0x%x and got 0x%x",
519
0
                    (guint) 0,
520
0
                    (guint) fu_struct_wacom_usb_id9_unknown_cmd_get_unknown2(st));
521
0
        return FALSE;
522
0
    }
523
0
    return TRUE;
524
0
}
525
/**
526
 * fu_struct_wacom_usb_id9_spi_cmd_ref: (skip):
527
 **/
528
FuStructWacomUsbId9SpiCmd *
529
fu_struct_wacom_usb_id9_spi_cmd_ref(FuStructWacomUsbId9SpiCmd *st)
530
0
{
531
0
    g_return_val_if_fail(st != NULL, NULL);
532
0
    st->refcount++;
533
0
    return st;
534
0
}
535
/**
536
 * fu_struct_wacom_usb_id9_spi_cmd_unref: (skip):
537
 **/
538
void
539
fu_struct_wacom_usb_id9_spi_cmd_unref(FuStructWacomUsbId9SpiCmd *st)
540
0
{
541
0
    g_return_if_fail(st != NULL);
542
0
    if (st->refcount == 0) {
543
0
        g_critical("FuStructWacomUsbId9SpiCmd refcount already zero");
544
0
        return;
545
0
    }
546
0
    if (--st->refcount > 0)
547
0
        return;
548
0
    if (st->buf != NULL)
549
0
        g_byte_array_unref(st->buf);
550
0
    g_free(st);
551
0
}
552
/**
553
 * fu_struct_wacom_usb_id9_spi_cmd_new_internal: (skip):
554
 **/
555
static FuStructWacomUsbId9SpiCmd *
556
fu_struct_wacom_usb_id9_spi_cmd_new_internal(void)
557
0
{
558
0
    FuStructWacomUsbId9SpiCmd *st = g_new0(FuStructWacomUsbId9SpiCmd, 1);
559
0
    st->refcount = 1;
560
0
    return st;
561
0
}
562
563
/* getters */
564
/**
565
 * fu_struct_wacom_usb_id9_spi_cmd_get_command: (skip):
566
 **/
567
static guint8
568
fu_struct_wacom_usb_id9_spi_cmd_get_command(const FuStructWacomUsbId9SpiCmd *st)
569
0
{
570
0
    g_return_val_if_fail(st != NULL, 0x0);
571
0
    return st->buf->data[0];
572
0
}
573
/**
574
 * fu_struct_wacom_usb_id9_spi_cmd_get_start_addr: (skip):
575
 **/
576
static guint32
577
fu_struct_wacom_usb_id9_spi_cmd_get_start_addr(const FuStructWacomUsbId9SpiCmd *st)
578
0
{
579
0
    g_return_val_if_fail(st != NULL, 0x0);
580
0
    return fu_memread_uint32(st->buf->data + 1, G_BIG_ENDIAN);
581
0
}
582
583
/* setters */
584
/**
585
 * fu_struct_wacom_usb_id9_spi_cmd_set_command: (skip):
586
 **/
587
static void
588
fu_struct_wacom_usb_id9_spi_cmd_set_command(FuStructWacomUsbId9SpiCmd *st, guint8 value)
589
0
{
590
0
    g_return_if_fail(st != NULL);
591
0
    st->buf->data[0] = value;
592
0
}
593
/**
594
 * fu_struct_wacom_usb_id9_spi_cmd_set_start_addr: (skip):
595
 **/
596
static void
597
fu_struct_wacom_usb_id9_spi_cmd_set_start_addr(FuStructWacomUsbId9SpiCmd *st, guint32 value)
598
0
{
599
0
    g_return_if_fail(st != NULL);
600
0
    fu_memwrite_uint32(st->buf->data + 1, value, G_BIG_ENDIAN);
601
0
}
602
/**
603
 * fu_struct_wacom_usb_id9_spi_cmd_set_size: (skip):
604
 **/
605
void
606
fu_struct_wacom_usb_id9_spi_cmd_set_size(FuStructWacomUsbId9SpiCmd *st, guint16 value)
607
0
{
608
0
    g_return_if_fail(st != NULL);
609
0
    fu_memwrite_uint16(st->buf->data + 5, value, G_BIG_ENDIAN);
610
0
}
611
/**
612
 * fu_struct_wacom_usb_id9_spi_cmd_set_data: (skip):
613
 **/
614
gboolean
615
fu_struct_wacom_usb_id9_spi_cmd_set_data(FuStructWacomUsbId9SpiCmd *st, const FuStructWacomUsbId9UnknownCmd *st_donor, GError **error)
616
0
{
617
0
    g_return_val_if_fail(st != NULL, FALSE);
618
0
    g_return_val_if_fail(st_donor != NULL, FALSE);
619
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
620
621
0
    if (st_donor->buf->len > FU_STRUCT_WACOM_USB_ID9_UNKNOWN_CMD_SIZE) {
622
0
        g_set_error(error,
623
0
                    FWUPD_ERROR,
624
0
                    FWUPD_ERROR_INVALID_DATA,
625
0
                    "donor 'FuStructWacomUsbId9UnknownCmd' (0x%x bytes) does not fit in "
626
0
                    "FuStructWacomUsbId9SpiCmd.data (0x%x bytes)",
627
0
                    (guint) st_donor->buf->len,
628
0
                    (guint) FU_STRUCT_WACOM_USB_ID9_UNKNOWN_CMD_SIZE);
629
0
        return FALSE;
630
0
    }
631
0
    memcpy(st->buf->data + FU_STRUCT_WACOM_USB_ID9_SPI_CMD_OFFSET_DATA, st_donor->buf->data, st_donor->buf->len);
632
0
    return TRUE;
633
0
}
634
/**
635
 * fu_struct_wacom_usb_id9_spi_cmd_new: (skip):
636
 **/
637
FuStructWacomUsbId9SpiCmd *
638
fu_struct_wacom_usb_id9_spi_cmd_new(void)
639
0
{
640
0
    FuStructWacomUsbId9SpiCmd *st = fu_struct_wacom_usb_id9_spi_cmd_new_internal();
641
0
    st->buf = g_byte_array_sized_new(15);
642
0
    fu_byte_array_set_size(st->buf, 15, 0x0);
643
0
    {
644
0
        g_autoptr(FuStructWacomUsbId9UnknownCmd) st_donor = fu_struct_wacom_usb_id9_unknown_cmd_new();
645
0
        memcpy(st->buf->data + 0x7, st_donor->buf->data, st_donor->buf->len); /* nocheck:blocked */
646
0
    }
647
0
    fu_struct_wacom_usb_id9_spi_cmd_set_command(st, 0x91);
648
0
    fu_struct_wacom_usb_id9_spi_cmd_set_start_addr(st, 0);
649
0
    return st;
650
0
}
651
static gboolean
652
fu_struct_wacom_usb_id9_spi_cmd_validate_internal(FuStructWacomUsbId9SpiCmd *st, GError **error)
653
0
{
654
0
    g_return_val_if_fail(st != NULL, FALSE);
655
0
    if (fu_struct_wacom_usb_id9_spi_cmd_get_command(st) != 0x91) {
656
0
        g_set_error_literal(error,
657
0
                            FWUPD_ERROR,
658
0
                            FWUPD_ERROR_INVALID_DATA,
659
0
                            "constant FuStructWacomUsbId9SpiCmd.command was not valid");
660
0
        return FALSE;
661
0
    }
662
0
    if (fu_struct_wacom_usb_id9_spi_cmd_get_start_addr(st) != 0) {
663
0
        g_set_error(error,
664
0
                    FWUPD_ERROR,
665
0
                    FWUPD_ERROR_INVALID_DATA,
666
0
                    "constant FuStructWacomUsbId9SpiCmd.start_addr was not valid, "
667
0
                    "expected 0x%x and got 0x%x",
668
0
                    (guint) 0,
669
0
                    (guint) fu_struct_wacom_usb_id9_spi_cmd_get_start_addr(st));
670
0
        return FALSE;
671
0
    }
672
0
    {
673
0
        GByteArray buf_tmp = {
674
0
            .data = (guint8*) st->buf->data + 0x7,
675
0
            .len = 8,
676
0
        };
677
0
        FuStructWacomUsbId9UnknownCmd st_tmp = { .buf = &buf_tmp };
678
0
        if (!fu_struct_wacom_usb_id9_unknown_cmd_validate_internal(&st_tmp, error))
679
0
            return FALSE;
680
0
    }
681
0
    return TRUE;
682
0
}
683
/**
684
 * fu_struct_wacom_usb_id9_loader_cmd_ref: (skip):
685
 **/
686
FuStructWacomUsbId9LoaderCmd *
687
fu_struct_wacom_usb_id9_loader_cmd_ref(FuStructWacomUsbId9LoaderCmd *st)
688
0
{
689
0
    g_return_val_if_fail(st != NULL, NULL);
690
0
    st->refcount++;
691
0
    return st;
692
0
}
693
/**
694
 * fu_struct_wacom_usb_id9_loader_cmd_unref: (skip):
695
 **/
696
void
697
fu_struct_wacom_usb_id9_loader_cmd_unref(FuStructWacomUsbId9LoaderCmd *st)
698
0
{
699
0
    g_return_if_fail(st != NULL);
700
0
    if (st->refcount == 0) {
701
0
        g_critical("FuStructWacomUsbId9LoaderCmd refcount already zero");
702
0
        return;
703
0
    }
704
0
    if (--st->refcount > 0)
705
0
        return;
706
0
    if (st->buf != NULL)
707
0
        g_byte_array_unref(st->buf);
708
0
    g_free(st);
709
0
}
710
/**
711
 * fu_struct_wacom_usb_id9_loader_cmd_new_internal: (skip):
712
 **/
713
static FuStructWacomUsbId9LoaderCmd *
714
fu_struct_wacom_usb_id9_loader_cmd_new_internal(void)
715
0
{
716
0
    FuStructWacomUsbId9LoaderCmd *st = g_new0(FuStructWacomUsbId9LoaderCmd, 1);
717
0
    st->refcount = 1;
718
0
    return st;
719
0
}
720
721
/* getters */
722
723
/* setters */
724
/**
725
 * fu_struct_wacom_usb_id9_loader_cmd_set_command: (skip):
726
 **/
727
void
728
fu_struct_wacom_usb_id9_loader_cmd_set_command(FuStructWacomUsbId9LoaderCmd *st, guint8 value)
729
0
{
730
0
    g_return_if_fail(st != NULL);
731
0
    st->buf->data[0] = value;
732
0
}
733
/**
734
 * fu_struct_wacom_usb_id9_loader_cmd_set_size: (skip):
735
 **/
736
void
737
fu_struct_wacom_usb_id9_loader_cmd_set_size(FuStructWacomUsbId9LoaderCmd *st, guint16 value)
738
0
{
739
0
    g_return_if_fail(st != NULL);
740
0
    fu_memwrite_uint16(st->buf->data + 1, value, G_BIG_ENDIAN);
741
0
}
742
/**
743
 * fu_struct_wacom_usb_id9_loader_cmd_set_crc: (skip):
744
 **/
745
void
746
fu_struct_wacom_usb_id9_loader_cmd_set_crc(FuStructWacomUsbId9LoaderCmd *st, guint32 value)
747
0
{
748
0
    g_return_if_fail(st != NULL);
749
0
    fu_memwrite_uint32(st->buf->data + 3, value, G_BIG_ENDIAN);
750
0
}
751
/**
752
 * fu_struct_wacom_usb_id9_loader_cmd_set_data: (skip):
753
 **/
754
gboolean
755
fu_struct_wacom_usb_id9_loader_cmd_set_data(FuStructWacomUsbId9LoaderCmd *st, const FuStructWacomUsbId9SpiCmd *st_donor, GError **error)
756
0
{
757
0
    g_return_val_if_fail(st != NULL, FALSE);
758
0
    g_return_val_if_fail(st_donor != NULL, FALSE);
759
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
760
761
0
    if (st_donor->buf->len > FU_STRUCT_WACOM_USB_ID9_SPI_CMD_SIZE) {
762
0
        g_set_error(error,
763
0
                    FWUPD_ERROR,
764
0
                    FWUPD_ERROR_INVALID_DATA,
765
0
                    "donor 'FuStructWacomUsbId9SpiCmd' (0x%x bytes) does not fit in "
766
0
                    "FuStructWacomUsbId9LoaderCmd.data (0x%x bytes)",
767
0
                    (guint) st_donor->buf->len,
768
0
                    (guint) FU_STRUCT_WACOM_USB_ID9_SPI_CMD_SIZE);
769
0
        return FALSE;
770
0
    }
771
0
    memcpy(st->buf->data + FU_STRUCT_WACOM_USB_ID9_LOADER_CMD_OFFSET_DATA, st_donor->buf->data, st_donor->buf->len);
772
0
    return TRUE;
773
0
}
774
/**
775
 * fu_struct_wacom_usb_id9_loader_cmd_new: (skip):
776
 **/
777
FuStructWacomUsbId9LoaderCmd *
778
fu_struct_wacom_usb_id9_loader_cmd_new(void)
779
0
{
780
0
    FuStructWacomUsbId9LoaderCmd *st = fu_struct_wacom_usb_id9_loader_cmd_new_internal();
781
0
    st->buf = g_byte_array_sized_new(22);
782
0
    fu_byte_array_set_size(st->buf, 22, 0x0);
783
0
    {
784
0
        g_autoptr(FuStructWacomUsbId9SpiCmd) st_donor = fu_struct_wacom_usb_id9_spi_cmd_new();
785
0
        memcpy(st->buf->data + 0x7, st_donor->buf->data, st_donor->buf->len); /* nocheck:blocked */
786
0
    }
787
0
    return st;
788
0
}
789
/**
790
 * fu_struct_wacom_usb_id9_loader_cmd_to_bytes: (skip):
791
 **/
792
GBytes *
793
fu_struct_wacom_usb_id9_loader_cmd_to_bytes(const FuStructWacomUsbId9LoaderCmd *st)
794
0
{
795
0
    g_return_val_if_fail(st != NULL, NULL);
796
0
    return g_bytes_new(st->buf->data, st->buf->len);
797
0
}
798
static gboolean
799
fu_struct_wacom_usb_id9_loader_cmd_validate_internal(FuStructWacomUsbId9LoaderCmd *st, GError **error)
800
0
{
801
0
    g_return_val_if_fail(st != NULL, FALSE);
802
0
    {
803
0
        GByteArray buf_tmp = {
804
0
            .data = (guint8*) st->buf->data + 0x7,
805
0
            .len = 15,
806
0
        };
807
0
        FuStructWacomUsbId9SpiCmd st_tmp = { .buf = &buf_tmp };
808
0
        if (!fu_struct_wacom_usb_id9_spi_cmd_validate_internal(&st_tmp, error))
809
0
            return FALSE;
810
0
    }
811
0
    return TRUE;
812
0
}
813
/**
814
 * fu_struct_wacom_usb_id9_loader_cmd_validate: (skip):
815
 **/
816
gboolean
817
fu_struct_wacom_usb_id9_loader_cmd_validate(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
818
0
{
819
0
    GByteArray st_buf = {.data = (guint8 *) buf + offset, .len = bufsz - offset, };
820
0
    FuStructWacomUsbId9LoaderCmd st_tmp = {.buf = &st_buf };
821
0
    g_return_val_if_fail(buf != NULL, FALSE);
822
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
823
0
    if (!fu_memchk_read(bufsz, offset, 22, error)) {
824
0
        g_prefix_error_literal(error, "invalid struct FuStructWacomUsbId9LoaderCmd: ");
825
0
        return FALSE;
826
0
    }
827
0
    if (!fu_struct_wacom_usb_id9_loader_cmd_validate_internal(&st_tmp, error))
828
0
        return FALSE;
829
0
    return TRUE;
830
0
}
831
/**
832
 * fu_struct_wacom_usb_module_desc_ref: (skip):
833
 **/
834
FuStructWacomUsbModuleDesc *
835
fu_struct_wacom_usb_module_desc_ref(FuStructWacomUsbModuleDesc *st)
836
0
{
837
0
    g_return_val_if_fail(st != NULL, NULL);
838
0
    st->refcount++;
839
0
    return st;
840
0
}
841
/**
842
 * fu_struct_wacom_usb_module_desc_unref: (skip):
843
 **/
844
void
845
fu_struct_wacom_usb_module_desc_unref(FuStructWacomUsbModuleDesc *st)
846
0
{
847
0
    g_return_if_fail(st != NULL);
848
0
    if (st->refcount == 0) {
849
0
        g_critical("FuStructWacomUsbModuleDesc refcount already zero");
850
0
        return;
851
0
    }
852
0
    if (--st->refcount > 0)
853
0
        return;
854
0
    if (st->buf != NULL)
855
0
        g_byte_array_unref(st->buf);
856
0
    g_free(st);
857
0
}
858
/**
859
 * fu_struct_wacom_usb_module_desc_new_internal: (skip):
860
 **/
861
static FuStructWacomUsbModuleDesc *
862
fu_struct_wacom_usb_module_desc_new_internal(void)
863
0
{
864
0
    FuStructWacomUsbModuleDesc *st = g_new0(FuStructWacomUsbModuleDesc, 1);
865
0
    st->refcount = 1;
866
0
    return st;
867
0
}
868
869
/* getters */
870
/**
871
 * fu_struct_wacom_usb_module_desc_get_bootloader_version: (skip):
872
 **/
873
guint16
874
fu_struct_wacom_usb_module_desc_get_bootloader_version(const FuStructWacomUsbModuleDesc *st)
875
0
{
876
0
    g_return_val_if_fail(st != NULL, 0x0);
877
0
    return fu_memread_uint16(st->buf->data + 1, G_BIG_ENDIAN);
878
0
}
879
/**
880
 * fu_struct_wacom_usb_module_desc_get_number_modules: (skip):
881
 **/
882
guint8
883
fu_struct_wacom_usb_module_desc_get_number_modules(const FuStructWacomUsbModuleDesc *st)
884
0
{
885
0
    g_return_val_if_fail(st != NULL, 0x0);
886
0
    return st->buf->data[3];
887
0
}
888
889
/* setters */
890
/**
891
 * fu_struct_wacom_usb_module_desc_to_string: (skip):
892
 **/
893
static gchar *
894
fu_struct_wacom_usb_module_desc_to_string(const FuStructWacomUsbModuleDesc *st)
895
0
{
896
0
    g_autoptr(GString) str = g_string_new("FuStructWacomUsbModuleDesc:\n");
897
0
    g_return_val_if_fail(st != NULL, NULL);
898
0
    g_string_append_printf(str, "  bootloader_version: 0x%x\n",
899
0
                           (guint) fu_struct_wacom_usb_module_desc_get_bootloader_version(st));
900
0
    g_string_append_printf(str, "  number_modules: 0x%x\n",
901
0
                           (guint) fu_struct_wacom_usb_module_desc_get_number_modules(st));
902
0
    if (str->len > 0)
903
0
        g_string_set_size(str, str->len - 1);
904
0
    return g_string_free(g_steal_pointer(&str), FALSE);
905
0
}
906
static gboolean
907
fu_struct_wacom_usb_module_desc_validate_internal(FuStructWacomUsbModuleDesc *st, GError **error)
908
0
{
909
0
    g_return_val_if_fail(st != NULL, FALSE);
910
0
    return TRUE;
911
0
}
912
static gboolean
913
fu_struct_wacom_usb_module_desc_parse_internal(FuStructWacomUsbModuleDesc *st, GError **error)
914
0
{
915
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
916
0
        g_autofree gchar *str = fu_struct_wacom_usb_module_desc_to_string(st);
917
0
        g_debug("%s", str);
918
0
    }
919
0
    if (!fu_struct_wacom_usb_module_desc_validate_internal(st, error))
920
0
        return FALSE;
921
0
    return TRUE;
922
0
}
923
924
/**
925
 * fu_struct_wacom_usb_module_desc_parse: (skip):
926
 **/
927
FuStructWacomUsbModuleDesc *
928
fu_struct_wacom_usb_module_desc_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
929
0
{
930
0
    g_autoptr(FuStructWacomUsbModuleDesc) st = fu_struct_wacom_usb_module_desc_new_internal();
931
0
    g_return_val_if_fail(buf != NULL, NULL);
932
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
933
0
    if (!fu_memchk_read(bufsz, offset, 4, error)) {
934
0
        g_prefix_error_literal(error, "invalid struct FuStructWacomUsbModuleDesc: ");
935
0
        return NULL;
936
0
    }
937
0
    st->buf = g_byte_array_new();
938
0
    g_byte_array_append(st->buf, buf + offset, 4);
939
0
    if (!fu_struct_wacom_usb_module_desc_parse_internal(st, error))
940
0
        return NULL;
941
0
    return g_steal_pointer(&st);
942
0
}
943
/**
944
 * fu_struct_wacom_usb_module_item_ref: (skip):
945
 **/
946
FuStructWacomUsbModuleItem *
947
fu_struct_wacom_usb_module_item_ref(FuStructWacomUsbModuleItem *st)
948
0
{
949
0
    g_return_val_if_fail(st != NULL, NULL);
950
0
    st->refcount++;
951
0
    return st;
952
0
}
953
/**
954
 * fu_struct_wacom_usb_module_item_unref: (skip):
955
 **/
956
void
957
fu_struct_wacom_usb_module_item_unref(FuStructWacomUsbModuleItem *st)
958
0
{
959
0
    g_return_if_fail(st != NULL);
960
0
    if (st->refcount == 0) {
961
0
        g_critical("FuStructWacomUsbModuleItem refcount already zero");
962
0
        return;
963
0
    }
964
0
    if (--st->refcount > 0)
965
0
        return;
966
0
    if (st->buf != NULL)
967
0
        g_byte_array_unref(st->buf);
968
0
    g_free(st);
969
0
}
970
/**
971
 * fu_struct_wacom_usb_module_item_new_internal: (skip):
972
 **/
973
static FuStructWacomUsbModuleItem *
974
fu_struct_wacom_usb_module_item_new_internal(void)
975
0
{
976
0
    FuStructWacomUsbModuleItem *st = g_new0(FuStructWacomUsbModuleItem, 1);
977
0
    st->refcount = 1;
978
0
    return st;
979
0
}
980
981
/* getters */
982
/**
983
 * fu_struct_wacom_usb_module_item_get_kind: (skip):
984
 **/
985
FuWacomUsbModuleFwType
986
fu_struct_wacom_usb_module_item_get_kind(const FuStructWacomUsbModuleItem *st)
987
0
{
988
0
    g_return_val_if_fail(st != NULL, 0x0);
989
0
    return st->buf->data[0];
990
0
}
991
/**
992
 * fu_struct_wacom_usb_module_item_get_version: (skip):
993
 **/
994
guint16
995
fu_struct_wacom_usb_module_item_get_version(const FuStructWacomUsbModuleItem *st)
996
0
{
997
0
    g_return_val_if_fail(st != NULL, 0x0);
998
0
    return fu_memread_uint16(st->buf->data + 1, G_BIG_ENDIAN);
999
0
}
1000
/**
1001
 * fu_struct_wacom_usb_module_item_get_version2: (skip):
1002
 **/
1003
guint8
1004
fu_struct_wacom_usb_module_item_get_version2(const FuStructWacomUsbModuleItem *st)
1005
0
{
1006
0
    g_return_val_if_fail(st != NULL, 0x0);
1007
0
    return st->buf->data[3];
1008
0
}
1009
1010
/* setters */
1011
/**
1012
 * fu_struct_wacom_usb_module_item_to_string: (skip):
1013
 **/
1014
static gchar *
1015
fu_struct_wacom_usb_module_item_to_string(const FuStructWacomUsbModuleItem *st)
1016
0
{
1017
0
    g_autoptr(GString) str = g_string_new("FuStructWacomUsbModuleItem:\n");
1018
0
    g_return_val_if_fail(st != NULL, NULL);
1019
0
    {
1020
0
        const gchar *tmp = fu_wacom_usb_module_fw_type_to_string(fu_struct_wacom_usb_module_item_get_kind(st));
1021
0
        if (tmp != NULL) {
1022
0
            g_string_append_printf(str, "  kind: 0x%x [%s]\n", (guint) fu_struct_wacom_usb_module_item_get_kind(st), tmp);
1023
0
        } else {
1024
0
            g_string_append_printf(str, "  kind: 0x%x\n", (guint) fu_struct_wacom_usb_module_item_get_kind(st));
1025
0
        }
1026
0
    }
1027
0
    g_string_append_printf(str, "  version: 0x%x\n",
1028
0
                           (guint) fu_struct_wacom_usb_module_item_get_version(st));
1029
0
    g_string_append_printf(str, "  version2: 0x%x\n",
1030
0
                           (guint) fu_struct_wacom_usb_module_item_get_version2(st));
1031
0
    if (str->len > 0)
1032
0
        g_string_set_size(str, str->len - 1);
1033
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1034
0
}
1035
static gboolean
1036
fu_struct_wacom_usb_module_item_validate_internal(FuStructWacomUsbModuleItem *st, GError **error)
1037
0
{
1038
0
    g_return_val_if_fail(st != NULL, FALSE);
1039
0
    return TRUE;
1040
0
}
1041
static gboolean
1042
fu_struct_wacom_usb_module_item_parse_internal(FuStructWacomUsbModuleItem *st, GError **error)
1043
0
{
1044
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1045
0
        g_autofree gchar *str = fu_struct_wacom_usb_module_item_to_string(st);
1046
0
        g_debug("%s", str);
1047
0
    }
1048
0
    if (!fu_struct_wacom_usb_module_item_validate_internal(st, error))
1049
0
        return FALSE;
1050
0
    return TRUE;
1051
0
}
1052
1053
/**
1054
 * fu_struct_wacom_usb_module_item_parse: (skip):
1055
 **/
1056
FuStructWacomUsbModuleItem *
1057
fu_struct_wacom_usb_module_item_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
1058
0
{
1059
0
    g_autoptr(FuStructWacomUsbModuleItem) st = fu_struct_wacom_usb_module_item_new_internal();
1060
0
    g_return_val_if_fail(buf != NULL, NULL);
1061
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
1062
0
    if (!fu_memchk_read(bufsz, offset, 4, error)) {
1063
0
        g_prefix_error_literal(error, "invalid struct FuStructWacomUsbModuleItem: ");
1064
0
        return NULL;
1065
0
    }
1066
0
    st->buf = g_byte_array_new();
1067
0
    g_byte_array_append(st->buf, buf + offset, 4);
1068
0
    if (!fu_struct_wacom_usb_module_item_parse_internal(st, error))
1069
0
        return NULL;
1070
0
    return g_steal_pointer(&st);
1071
0
}