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-elantp-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 | | * fu_etp_rptid_to_string: |
24 | | * @val: value, e.g. %FU_ETP_RPTID_TP_IAP |
25 | | * |
26 | | * Converts an enumerated value to a string. |
27 | | * |
28 | | * Returns: identifier string |
29 | | **/ |
30 | | static const gchar * |
31 | | fu_etp_rptid_to_string(FuEtpRptid val) |
32 | 0 | { |
33 | 0 | if (val == FU_ETP_RPTID_TP_FEATURE) |
34 | 0 | return "tp-feature"; |
35 | 0 | if (val == FU_ETP_RPTID_TP_IAP) |
36 | 0 | return "tp-iap"; |
37 | 0 | if (val == FU_ETP_RPTID_MCU_FEATURE) |
38 | 0 | return "mcu-feature"; |
39 | 0 | if (val == FU_ETP_RPTID_MCU_IAP) |
40 | 0 | return "mcu-iap"; |
41 | 0 | return NULL; |
42 | 0 | } |
43 | | |
44 | | |
45 | | /** |
46 | | * fu_struct_elantp_firmware_ftr_ref: (skip): |
47 | | **/ |
48 | | FuStructElantpFirmwareFtr * |
49 | | fu_struct_elantp_firmware_ftr_ref(FuStructElantpFirmwareFtr *st) |
50 | 0 | { |
51 | 0 | g_return_val_if_fail(st != NULL, NULL); |
52 | 0 | st->refcount++; |
53 | 0 | return st; |
54 | 0 | } |
55 | | /** |
56 | | * fu_struct_elantp_firmware_ftr_unref: (skip): |
57 | | **/ |
58 | | void |
59 | | fu_struct_elantp_firmware_ftr_unref(FuStructElantpFirmwareFtr *st) |
60 | 277 | { |
61 | 277 | g_return_if_fail(st != NULL); |
62 | 277 | if (st->refcount == 0) { |
63 | 0 | g_critical("FuStructElantpFirmwareFtr refcount already zero"); |
64 | 0 | return; |
65 | 0 | } |
66 | 277 | if (--st->refcount > 0) |
67 | 0 | return; |
68 | 277 | if (st->buf != NULL) |
69 | 277 | g_byte_array_unref(st->buf); |
70 | 277 | g_free(st); |
71 | 277 | } |
72 | | /** |
73 | | * fu_struct_elantp_firmware_ftr_new_internal: (skip): |
74 | | **/ |
75 | | static FuStructElantpFirmwareFtr * |
76 | | fu_struct_elantp_firmware_ftr_new_internal(void) |
77 | 277 | { |
78 | 277 | FuStructElantpFirmwareFtr *st = g_new0(FuStructElantpFirmwareFtr, 1); |
79 | 277 | st->refcount = 1; |
80 | 277 | return st; |
81 | 277 | } |
82 | | |
83 | | /* getters */ |
84 | | |
85 | | /* setters */ |
86 | | /** |
87 | | * fu_struct_elantp_firmware_ftr_new: (skip): |
88 | | **/ |
89 | | FuStructElantpFirmwareFtr * |
90 | | fu_struct_elantp_firmware_ftr_new(void) |
91 | 39 | { |
92 | 39 | FuStructElantpFirmwareFtr *st = fu_struct_elantp_firmware_ftr_new_internal(); |
93 | 39 | st->buf = g_byte_array_sized_new(6); |
94 | 39 | fu_byte_array_set_size(st->buf, 6, 0x0); |
95 | 39 | memcpy(st->buf->data + 0x0, "\xAA\x55\xCC\x33\xFF\xFF", 6); /* nocheck:blocked */ |
96 | 39 | return st; |
97 | 39 | } |
98 | | static gboolean |
99 | | fu_struct_elantp_firmware_ftr_validate_internal(FuStructElantpFirmwareFtr *st, GError **error) |
100 | 238 | { |
101 | 238 | g_return_val_if_fail(st != NULL, FALSE); |
102 | 238 | if (memcmp(st->buf->data + 0, "\xAA\x55\xCC\x33\xFF\xFF", 6) != 0) { |
103 | 62 | g_set_error_literal(error, |
104 | 62 | FWUPD_ERROR, |
105 | 62 | FWUPD_ERROR_INVALID_DATA, |
106 | 62 | "constant FuStructElantpFirmwareFtr.magic was not valid"); |
107 | 62 | return FALSE; |
108 | 62 | } |
109 | 176 | return TRUE; |
110 | 238 | } |
111 | | /** |
112 | | * fu_struct_elantp_firmware_ftr_validate_stream: (skip): |
113 | | **/ |
114 | | gboolean |
115 | | fu_struct_elantp_firmware_ftr_validate_stream(GInputStream *stream, gsize offset, GError **error) |
116 | 238 | { |
117 | 238 | g_autoptr(FuStructElantpFirmwareFtr) st = fu_struct_elantp_firmware_ftr_new_internal(); |
118 | 238 | g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE); |
119 | 238 | g_return_val_if_fail(error == NULL || *error == NULL, FALSE); |
120 | 238 | st->buf = fu_input_stream_read_byte_array(stream, offset, 6, NULL, error); |
121 | 238 | if (st->buf == NULL) { |
122 | 0 | g_prefix_error(error, "FuStructElantpFirmwareFtr failed read of 0x%x: ", (guint) 6); |
123 | 0 | return FALSE; |
124 | 0 | } |
125 | 238 | if (st->buf->len != 6) { |
126 | 0 | g_set_error(error, |
127 | 0 | FWUPD_ERROR, |
128 | 0 | FWUPD_ERROR_INVALID_DATA, |
129 | 0 | "FuStructElantpFirmwareFtr requested 0x%x and got 0x%x", |
130 | 0 | (guint) 6, |
131 | 0 | (guint) st->buf->len); |
132 | 0 | return FALSE; |
133 | 0 | } |
134 | 238 | return fu_struct_elantp_firmware_ftr_validate_internal(st, error); |
135 | 238 | } |
136 | | /** |
137 | | * fu_struct_elantp_firmware_hdr_ref: (skip): |
138 | | **/ |
139 | | FuStructElantpFirmwareHdr * |
140 | | fu_struct_elantp_firmware_hdr_ref(FuStructElantpFirmwareHdr *st) |
141 | 0 | { |
142 | 0 | g_return_val_if_fail(st != NULL, NULL); |
143 | 0 | st->refcount++; |
144 | 0 | return st; |
145 | 0 | } |
146 | | /** |
147 | | * fu_struct_elantp_firmware_hdr_unref: (skip): |
148 | | **/ |
149 | | void |
150 | | fu_struct_elantp_firmware_hdr_unref(FuStructElantpFirmwareHdr *st) |
151 | 215 | { |
152 | 215 | g_return_if_fail(st != NULL); |
153 | 215 | if (st->refcount == 0) { |
154 | 0 | g_critical("FuStructElantpFirmwareHdr refcount already zero"); |
155 | 0 | return; |
156 | 0 | } |
157 | 215 | if (--st->refcount > 0) |
158 | 0 | return; |
159 | 215 | if (st->buf != NULL) |
160 | 193 | g_byte_array_unref(st->buf); |
161 | 215 | g_free(st); |
162 | 215 | } |
163 | | /** |
164 | | * fu_struct_elantp_firmware_hdr_new_internal: (skip): |
165 | | **/ |
166 | | static FuStructElantpFirmwareHdr * |
167 | | fu_struct_elantp_firmware_hdr_new_internal(void) |
168 | 215 | { |
169 | 215 | FuStructElantpFirmwareHdr *st = g_new0(FuStructElantpFirmwareHdr, 1); |
170 | 215 | st->refcount = 1; |
171 | 215 | return st; |
172 | 215 | } |
173 | | |
174 | | /* getters */ |
175 | | /** |
176 | | * fu_struct_elantp_firmware_hdr_get_ic_type: (skip): |
177 | | **/ |
178 | | guint16 |
179 | | fu_struct_elantp_firmware_hdr_get_ic_type(const FuStructElantpFirmwareHdr *st) |
180 | 54 | { |
181 | 54 | g_return_val_if_fail(st != NULL, 0x0); |
182 | 54 | return fu_memread_uint16(st->buf->data + 0, G_LITTLE_ENDIAN); |
183 | 54 | } |
184 | | /** |
185 | | * fu_struct_elantp_firmware_hdr_get_iap_ver: (skip): |
186 | | **/ |
187 | | guint16 |
188 | | fu_struct_elantp_firmware_hdr_get_iap_ver(const FuStructElantpFirmwareHdr *st) |
189 | 54 | { |
190 | 54 | g_return_val_if_fail(st != NULL, 0x0); |
191 | 54 | return fu_memread_uint16(st->buf->data + 4, G_LITTLE_ENDIAN); |
192 | 54 | } |
193 | | /** |
194 | | * fu_struct_elantp_firmware_hdr_get_iap_start: (skip): |
195 | | **/ |
196 | | guint16 |
197 | | fu_struct_elantp_firmware_hdr_get_iap_start(const FuStructElantpFirmwareHdr *st) |
198 | 147 | { |
199 | 147 | g_return_val_if_fail(st != NULL, 0x0); |
200 | 147 | return fu_memread_uint16(st->buf->data + 6, G_LITTLE_ENDIAN); |
201 | 147 | } |
202 | | /** |
203 | | * fu_struct_elantp_firmware_hdr_get_iap_forcetable: (skip): |
204 | | **/ |
205 | | guint16 |
206 | | fu_struct_elantp_firmware_hdr_get_iap_forcetable(const FuStructElantpFirmwareHdr *st) |
207 | 0 | { |
208 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
209 | 0 | return fu_memread_uint16(st->buf->data + 10, G_LITTLE_ENDIAN); |
210 | 0 | } |
211 | | |
212 | | /* setters */ |
213 | | /** |
214 | | * fu_struct_elantp_firmware_hdr_set_ic_type: (skip): |
215 | | **/ |
216 | | void |
217 | | fu_struct_elantp_firmware_hdr_set_ic_type(FuStructElantpFirmwareHdr *st, guint16 value) |
218 | 39 | { |
219 | 39 | g_return_if_fail(st != NULL); |
220 | 39 | fu_memwrite_uint16(st->buf->data + 0, value, G_LITTLE_ENDIAN); |
221 | 39 | } |
222 | | /** |
223 | | * fu_struct_elantp_firmware_hdr_set_iap_ver: (skip): |
224 | | **/ |
225 | | void |
226 | | fu_struct_elantp_firmware_hdr_set_iap_ver(FuStructElantpFirmwareHdr *st, guint16 value) |
227 | 39 | { |
228 | 39 | g_return_if_fail(st != NULL); |
229 | 39 | fu_memwrite_uint16(st->buf->data + 4, value, G_LITTLE_ENDIAN); |
230 | 39 | } |
231 | | /** |
232 | | * fu_struct_elantp_firmware_hdr_set_iap_start: (skip): |
233 | | **/ |
234 | | void |
235 | | fu_struct_elantp_firmware_hdr_set_iap_start(FuStructElantpFirmwareHdr *st, guint16 value) |
236 | 39 | { |
237 | 39 | g_return_if_fail(st != NULL); |
238 | 39 | fu_memwrite_uint16(st->buf->data + 6, value, G_LITTLE_ENDIAN); |
239 | 39 | } |
240 | | /** |
241 | | * fu_struct_elantp_firmware_hdr_set_iap_forcetable: (skip): |
242 | | **/ |
243 | | void |
244 | | fu_struct_elantp_firmware_hdr_set_iap_forcetable(FuStructElantpFirmwareHdr *st, guint16 value) |
245 | 39 | { |
246 | 39 | g_return_if_fail(st != NULL); |
247 | 39 | fu_memwrite_uint16(st->buf->data + 10, value, G_LITTLE_ENDIAN); |
248 | 39 | } |
249 | | /** |
250 | | * fu_struct_elantp_firmware_hdr_new: (skip): |
251 | | **/ |
252 | | FuStructElantpFirmwareHdr * |
253 | | fu_struct_elantp_firmware_hdr_new(void) |
254 | 39 | { |
255 | 39 | FuStructElantpFirmwareHdr *st = fu_struct_elantp_firmware_hdr_new_internal(); |
256 | 39 | st->buf = g_byte_array_sized_new(12); |
257 | 39 | fu_byte_array_set_size(st->buf, 12, 0x0); |
258 | 39 | return st; |
259 | 39 | } |
260 | | /** |
261 | | * fu_struct_elantp_firmware_hdr_to_string: (skip): |
262 | | **/ |
263 | | static gchar * |
264 | | fu_struct_elantp_firmware_hdr_to_string(const FuStructElantpFirmwareHdr *st) |
265 | 0 | { |
266 | 0 | g_autoptr(GString) str = g_string_new("FuStructElantpFirmwareHdr:\n"); |
267 | 0 | g_return_val_if_fail(st != NULL, NULL); |
268 | 0 | g_string_append_printf(str, " ic_type: 0x%x\n", |
269 | 0 | (guint) fu_struct_elantp_firmware_hdr_get_ic_type(st)); |
270 | 0 | g_string_append_printf(str, " iap_ver: 0x%x\n", |
271 | 0 | (guint) fu_struct_elantp_firmware_hdr_get_iap_ver(st)); |
272 | 0 | g_string_append_printf(str, " iap_start: 0x%x\n", |
273 | 0 | (guint) fu_struct_elantp_firmware_hdr_get_iap_start(st)); |
274 | 0 | g_string_append_printf(str, " iap_forcetable: 0x%x\n", |
275 | 0 | (guint) fu_struct_elantp_firmware_hdr_get_iap_forcetable(st)); |
276 | 0 | if (str->len > 0) |
277 | 0 | g_string_set_size(str, str->len - 1); |
278 | 0 | return g_string_free(g_steal_pointer(&str), FALSE); |
279 | 0 | } |
280 | | static gboolean |
281 | | fu_struct_elantp_firmware_hdr_validate_internal(FuStructElantpFirmwareHdr *st, GError **error) |
282 | 147 | { |
283 | 147 | g_return_val_if_fail(st != NULL, FALSE); |
284 | 147 | return TRUE; |
285 | 147 | } |
286 | | static gboolean |
287 | | fu_struct_elantp_firmware_hdr_parse_internal(FuStructElantpFirmwareHdr *st, GError **error) |
288 | 147 | { |
289 | 147 | if (g_getenv("FWUPD_VERBOSE") != NULL) { |
290 | 0 | g_autofree gchar *str = fu_struct_elantp_firmware_hdr_to_string(st); |
291 | 0 | g_debug("%s", str); |
292 | 0 | } |
293 | 147 | if (!fu_struct_elantp_firmware_hdr_validate_internal(st, error)) |
294 | 0 | return FALSE; |
295 | 147 | return TRUE; |
296 | 147 | } |
297 | | /** |
298 | | * fu_struct_elantp_firmware_hdr_parse_stream: (skip): |
299 | | **/ |
300 | | FuStructElantpFirmwareHdr * |
301 | | fu_struct_elantp_firmware_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error) |
302 | 176 | { |
303 | 176 | g_autoptr(FuStructElantpFirmwareHdr) st = fu_struct_elantp_firmware_hdr_new_internal(); |
304 | 176 | st->buf = fu_input_stream_read_byte_array(stream, offset, 12, NULL, error); |
305 | 176 | if (st->buf == NULL) { |
306 | 22 | g_prefix_error(error, "FuStructElantpFirmwareHdr failed read of 0x%x: ", (guint) 12); |
307 | 22 | return NULL; |
308 | 22 | } |
309 | 154 | if (st->buf->len != 12) { |
310 | 7 | g_set_error(error, |
311 | 7 | FWUPD_ERROR, |
312 | 7 | FWUPD_ERROR_INVALID_DATA, |
313 | 7 | "FuStructElantpFirmwareHdr requested 0x%x and got 0x%x", |
314 | 7 | (guint) 12, |
315 | 7 | (guint) st->buf->len); |
316 | 7 | return NULL; |
317 | 7 | } |
318 | 147 | if (!fu_struct_elantp_firmware_hdr_parse_internal(st, error)) |
319 | 0 | return NULL; |
320 | 147 | return g_steal_pointer(&st); |
321 | 147 | } |
322 | | /** |
323 | | * fu_struct_elantp_haptic_firmware_hdr_ref: (skip): |
324 | | **/ |
325 | | FuStructElantpHapticFirmwareHdr * |
326 | | fu_struct_elantp_haptic_firmware_hdr_ref(FuStructElantpHapticFirmwareHdr *st) |
327 | 0 | { |
328 | 0 | g_return_val_if_fail(st != NULL, NULL); |
329 | 0 | st->refcount++; |
330 | 0 | return st; |
331 | 0 | } |
332 | | /** |
333 | | * fu_struct_elantp_haptic_firmware_hdr_unref: (skip): |
334 | | **/ |
335 | | void |
336 | | fu_struct_elantp_haptic_firmware_hdr_unref(FuStructElantpHapticFirmwareHdr *st) |
337 | 0 | { |
338 | 0 | g_return_if_fail(st != NULL); |
339 | 0 | if (st->refcount == 0) { |
340 | 0 | g_critical("FuStructElantpHapticFirmwareHdr refcount already zero"); |
341 | 0 | return; |
342 | 0 | } |
343 | 0 | if (--st->refcount > 0) |
344 | 0 | return; |
345 | 0 | if (st->buf != NULL) |
346 | 0 | g_byte_array_unref(st->buf); |
347 | 0 | g_free(st); |
348 | 0 | } |
349 | | /** |
350 | | * fu_struct_elantp_haptic_firmware_hdr_new_internal: (skip): |
351 | | **/ |
352 | | static FuStructElantpHapticFirmwareHdr * |
353 | | fu_struct_elantp_haptic_firmware_hdr_new_internal(void) |
354 | 0 | { |
355 | 0 | FuStructElantpHapticFirmwareHdr *st = g_new0(FuStructElantpHapticFirmwareHdr, 1); |
356 | 0 | st->refcount = 1; |
357 | 0 | return st; |
358 | 0 | } |
359 | | |
360 | | /* getters */ |
361 | | /** |
362 | | * fu_struct_elantp_haptic_firmware_hdr_get_magic: (skip): |
363 | | **/ |
364 | | static const guint8 * |
365 | | fu_struct_elantp_haptic_firmware_hdr_get_magic(const FuStructElantpHapticFirmwareHdr *st, gsize *bufsz) |
366 | 0 | { |
367 | 0 | g_return_val_if_fail(st != NULL, NULL); |
368 | 0 | if (bufsz != NULL) |
369 | 0 | *bufsz = 4; |
370 | 0 | return st->buf->data + 0; |
371 | 0 | } |
372 | | /** |
373 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_sm: (skip): |
374 | | **/ |
375 | | guint8 |
376 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_sm(const FuStructElantpHapticFirmwareHdr *st) |
377 | 0 | { |
378 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
379 | 0 | return st->buf->data[4]; |
380 | 0 | } |
381 | | /** |
382 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_d: (skip): |
383 | | **/ |
384 | | guint8 |
385 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_d(const FuStructElantpHapticFirmwareHdr *st) |
386 | 0 | { |
387 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
388 | 0 | return st->buf->data[5]; |
389 | 0 | } |
390 | | /** |
391 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_y: (skip): |
392 | | **/ |
393 | | guint8 |
394 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_y(const FuStructElantpHapticFirmwareHdr *st) |
395 | 0 | { |
396 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
397 | 0 | return st->buf->data[6]; |
398 | 0 | } |
399 | | |
400 | | /* setters */ |
401 | | /** |
402 | | * fu_struct_elantp_haptic_firmware_hdr_to_string: (skip): |
403 | | **/ |
404 | | static gchar * |
405 | | fu_struct_elantp_haptic_firmware_hdr_to_string(const FuStructElantpHapticFirmwareHdr *st) |
406 | 0 | { |
407 | 0 | g_autoptr(GString) str = g_string_new("FuStructElantpHapticFirmwareHdr:\n"); |
408 | 0 | g_return_val_if_fail(st != NULL, NULL); |
409 | 0 | { |
410 | 0 | gsize bufsz = 0; |
411 | 0 | const guint8 *buf = fu_struct_elantp_haptic_firmware_hdr_get_magic(st, &bufsz); |
412 | 0 | g_autoptr(GString) tmp = g_string_new(NULL); |
413 | 0 | for (gsize i = 0; i < bufsz; i++) |
414 | 0 | g_string_append_printf(tmp, "%02X", buf[i]); |
415 | 0 | g_string_append_printf(str, " magic: 0x%s\n", tmp->str); |
416 | 0 | } |
417 | 0 | g_string_append_printf(str, " ver_sm: 0x%x\n", |
418 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_sm(st)); |
419 | 0 | g_string_append_printf(str, " ver_d: 0x%x\n", |
420 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_d(st)); |
421 | 0 | g_string_append_printf(str, " ver_y: 0x%x\n", |
422 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_y(st)); |
423 | 0 | if (str->len > 0) |
424 | 0 | g_string_set_size(str, str->len - 1); |
425 | 0 | return g_string_free(g_steal_pointer(&str), FALSE); |
426 | 0 | } |
427 | | static gboolean |
428 | | fu_struct_elantp_haptic_firmware_hdr_validate_internal(FuStructElantpHapticFirmwareHdr *st, GError **error) |
429 | 0 | { |
430 | 0 | g_return_val_if_fail(st != NULL, FALSE); |
431 | 0 | if (memcmp(st->buf->data + 0, "\xFF\x40\xA2\x5B", 4) != 0) { |
432 | 0 | g_set_error_literal(error, |
433 | 0 | FWUPD_ERROR, |
434 | 0 | FWUPD_ERROR_INVALID_DATA, |
435 | 0 | "constant FuStructElantpHapticFirmwareHdr.magic was not valid"); |
436 | 0 | return FALSE; |
437 | 0 | } |
438 | 0 | return TRUE; |
439 | 0 | } |
440 | | /** |
441 | | * fu_struct_elantp_haptic_firmware_hdr_validate_stream: (skip): |
442 | | **/ |
443 | | gboolean |
444 | | fu_struct_elantp_haptic_firmware_hdr_validate_stream(GInputStream *stream, gsize offset, GError **error) |
445 | 0 | { |
446 | 0 | g_autoptr(FuStructElantpHapticFirmwareHdr) st = fu_struct_elantp_haptic_firmware_hdr_new_internal(); |
447 | 0 | g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE); |
448 | 0 | g_return_val_if_fail(error == NULL || *error == NULL, FALSE); |
449 | 0 | st->buf = fu_input_stream_read_byte_array(stream, offset, 7, NULL, error); |
450 | 0 | if (st->buf == NULL) { |
451 | 0 | g_prefix_error(error, "FuStructElantpHapticFirmwareHdr failed read of 0x%x: ", (guint) 7); |
452 | 0 | return FALSE; |
453 | 0 | } |
454 | 0 | if (st->buf->len != 7) { |
455 | 0 | g_set_error(error, |
456 | 0 | FWUPD_ERROR, |
457 | 0 | FWUPD_ERROR_INVALID_DATA, |
458 | 0 | "FuStructElantpHapticFirmwareHdr requested 0x%x and got 0x%x", |
459 | 0 | (guint) 7, |
460 | 0 | (guint) st->buf->len); |
461 | 0 | return FALSE; |
462 | 0 | } |
463 | 0 | return fu_struct_elantp_haptic_firmware_hdr_validate_internal(st, error); |
464 | 0 | } |
465 | | static gboolean |
466 | | fu_struct_elantp_haptic_firmware_hdr_parse_internal(FuStructElantpHapticFirmwareHdr *st, GError **error) |
467 | 0 | { |
468 | 0 | if (g_getenv("FWUPD_VERBOSE") != NULL) { |
469 | 0 | g_autofree gchar *str = fu_struct_elantp_haptic_firmware_hdr_to_string(st); |
470 | 0 | g_debug("%s", str); |
471 | 0 | } |
472 | 0 | if (!fu_struct_elantp_haptic_firmware_hdr_validate_internal(st, error)) |
473 | 0 | return FALSE; |
474 | 0 | return TRUE; |
475 | 0 | } |
476 | | /** |
477 | | * fu_struct_elantp_haptic_firmware_hdr_parse_stream: (skip): |
478 | | **/ |
479 | | FuStructElantpHapticFirmwareHdr * |
480 | | fu_struct_elantp_haptic_firmware_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error) |
481 | 0 | { |
482 | 0 | g_autoptr(FuStructElantpHapticFirmwareHdr) st = fu_struct_elantp_haptic_firmware_hdr_new_internal(); |
483 | 0 | st->buf = fu_input_stream_read_byte_array(stream, offset, 7, NULL, error); |
484 | 0 | if (st->buf == NULL) { |
485 | 0 | g_prefix_error(error, "FuStructElantpHapticFirmwareHdr failed read of 0x%x: ", (guint) 7); |
486 | 0 | return NULL; |
487 | 0 | } |
488 | 0 | if (st->buf->len != 7) { |
489 | 0 | g_set_error(error, |
490 | 0 | FWUPD_ERROR, |
491 | 0 | FWUPD_ERROR_INVALID_DATA, |
492 | 0 | "FuStructElantpHapticFirmwareHdr requested 0x%x and got 0x%x", |
493 | 0 | (guint) 7, |
494 | 0 | (guint) st->buf->len); |
495 | 0 | return NULL; |
496 | 0 | } |
497 | 0 | if (!fu_struct_elantp_haptic_firmware_hdr_parse_internal(st, error)) |
498 | 0 | return NULL; |
499 | 0 | return g_steal_pointer(&st); |
500 | 0 | } |
501 | | /** |
502 | | * fu_struct_elantp_read_cmd_req_ref: (skip): |
503 | | **/ |
504 | | FuStructElantpReadCmdReq * |
505 | | fu_struct_elantp_read_cmd_req_ref(FuStructElantpReadCmdReq *st) |
506 | 0 | { |
507 | 0 | g_return_val_if_fail(st != NULL, NULL); |
508 | 0 | st->refcount++; |
509 | 0 | return st; |
510 | 0 | } |
511 | | /** |
512 | | * fu_struct_elantp_read_cmd_req_unref: (skip): |
513 | | **/ |
514 | | void |
515 | | fu_struct_elantp_read_cmd_req_unref(FuStructElantpReadCmdReq *st) |
516 | 0 | { |
517 | 0 | g_return_if_fail(st != NULL); |
518 | 0 | if (st->refcount == 0) { |
519 | 0 | g_critical("FuStructElantpReadCmdReq refcount already zero"); |
520 | 0 | return; |
521 | 0 | } |
522 | 0 | if (--st->refcount > 0) |
523 | 0 | return; |
524 | 0 | if (st->buf != NULL) |
525 | 0 | g_byte_array_unref(st->buf); |
526 | 0 | g_free(st); |
527 | 0 | } |
528 | | /** |
529 | | * fu_struct_elantp_read_cmd_req_new_internal: (skip): |
530 | | **/ |
531 | | static FuStructElantpReadCmdReq * |
532 | | fu_struct_elantp_read_cmd_req_new_internal(void) |
533 | 0 | { |
534 | 0 | FuStructElantpReadCmdReq *st = g_new0(FuStructElantpReadCmdReq, 1); |
535 | 0 | st->refcount = 1; |
536 | 0 | return st; |
537 | 0 | } |
538 | | |
539 | | /* getters */ |
540 | | |
541 | | /* setters */ |
542 | | /** |
543 | | * fu_struct_elantp_read_cmd_req_set_report_id: (skip): |
544 | | **/ |
545 | | void |
546 | | fu_struct_elantp_read_cmd_req_set_report_id(FuStructElantpReadCmdReq *st, FuEtpRptid value) |
547 | 0 | { |
548 | 0 | g_return_if_fail(st != NULL); |
549 | 0 | st->buf->data[0] = value; |
550 | 0 | } |
551 | | /** |
552 | | * fu_struct_elantp_read_cmd_req_set_cmd: (skip): |
553 | | **/ |
554 | | void |
555 | | fu_struct_elantp_read_cmd_req_set_cmd(FuStructElantpReadCmdReq *st, FuEtpCmd value) |
556 | 0 | { |
557 | 0 | g_return_if_fail(st != NULL); |
558 | 0 | fu_memwrite_uint16(st->buf->data + 1, value, G_LITTLE_ENDIAN); |
559 | 0 | } |
560 | | /** |
561 | | * fu_struct_elantp_read_cmd_req_set_reg: (skip): |
562 | | **/ |
563 | | void |
564 | | fu_struct_elantp_read_cmd_req_set_reg(FuStructElantpReadCmdReq *st, guint16 value) |
565 | 0 | { |
566 | 0 | g_return_if_fail(st != NULL); |
567 | 0 | fu_memwrite_uint16(st->buf->data + 3, value, G_LITTLE_ENDIAN); |
568 | 0 | } |
569 | | /** |
570 | | * fu_struct_elantp_read_cmd_req_new: (skip): |
571 | | **/ |
572 | | FuStructElantpReadCmdReq * |
573 | | fu_struct_elantp_read_cmd_req_new(void) |
574 | 0 | { |
575 | 0 | FuStructElantpReadCmdReq *st = fu_struct_elantp_read_cmd_req_new_internal(); |
576 | 0 | st->buf = g_byte_array_sized_new(5); |
577 | 0 | fu_byte_array_set_size(st->buf, 5, 0x0); |
578 | 0 | return st; |
579 | 0 | } |
580 | | /** |
581 | | * fu_struct_elantp_read_cmd_res_ref: (skip): |
582 | | **/ |
583 | | FuStructElantpReadCmdRes * |
584 | | fu_struct_elantp_read_cmd_res_ref(FuStructElantpReadCmdRes *st) |
585 | 0 | { |
586 | 0 | g_return_val_if_fail(st != NULL, NULL); |
587 | 0 | st->refcount++; |
588 | 0 | return st; |
589 | 0 | } |
590 | | /** |
591 | | * fu_struct_elantp_read_cmd_res_unref: (skip): |
592 | | **/ |
593 | | void |
594 | | fu_struct_elantp_read_cmd_res_unref(FuStructElantpReadCmdRes *st) |
595 | 0 | { |
596 | 0 | g_return_if_fail(st != NULL); |
597 | 0 | if (st->refcount == 0) { |
598 | 0 | g_critical("FuStructElantpReadCmdRes refcount already zero"); |
599 | 0 | return; |
600 | 0 | } |
601 | 0 | if (--st->refcount > 0) |
602 | 0 | return; |
603 | 0 | if (st->buf != NULL) |
604 | 0 | g_byte_array_unref(st->buf); |
605 | 0 | g_free(st); |
606 | 0 | } |
607 | | /** |
608 | | * fu_struct_elantp_read_cmd_res_new_internal: (skip): |
609 | | **/ |
610 | | static FuStructElantpReadCmdRes * |
611 | | fu_struct_elantp_read_cmd_res_new_internal(void) |
612 | 0 | { |
613 | 0 | FuStructElantpReadCmdRes *st = g_new0(FuStructElantpReadCmdRes, 1); |
614 | 0 | st->refcount = 1; |
615 | 0 | return st; |
616 | 0 | } |
617 | | |
618 | | /* getters */ |
619 | | /** |
620 | | * fu_struct_elantp_read_cmd_res_get_report_id: (skip): |
621 | | **/ |
622 | | FuEtpRptid |
623 | | fu_struct_elantp_read_cmd_res_get_report_id(const FuStructElantpReadCmdRes *st) |
624 | 0 | { |
625 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
626 | 0 | return st->buf->data[0]; |
627 | 0 | } |
628 | | /** |
629 | | * fu_struct_elantp_read_cmd_res_get_value: (skip): |
630 | | **/ |
631 | | guint16 |
632 | | fu_struct_elantp_read_cmd_res_get_value(const FuStructElantpReadCmdRes *st) |
633 | 0 | { |
634 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
635 | 0 | return fu_memread_uint16(st->buf->data + 3, G_LITTLE_ENDIAN); |
636 | 0 | } |
637 | | |
638 | | /* setters */ |
639 | | /** |
640 | | * fu_struct_elantp_read_cmd_res_to_string: (skip): |
641 | | **/ |
642 | | static gchar * |
643 | | fu_struct_elantp_read_cmd_res_to_string(const FuStructElantpReadCmdRes *st) |
644 | 0 | { |
645 | 0 | g_autoptr(GString) str = g_string_new("FuStructElantpReadCmdRes:\n"); |
646 | 0 | g_return_val_if_fail(st != NULL, NULL); |
647 | 0 | { |
648 | 0 | const gchar *tmp = fu_etp_rptid_to_string(fu_struct_elantp_read_cmd_res_get_report_id(st)); |
649 | 0 | if (tmp != NULL) { |
650 | 0 | g_string_append_printf(str, " report_id: 0x%x [%s]\n", (guint) fu_struct_elantp_read_cmd_res_get_report_id(st), tmp); |
651 | 0 | } else { |
652 | 0 | g_string_append_printf(str, " report_id: 0x%x\n", (guint) fu_struct_elantp_read_cmd_res_get_report_id(st)); |
653 | 0 | } |
654 | 0 | } |
655 | 0 | g_string_append_printf(str, " value: 0x%x\n", |
656 | 0 | (guint) fu_struct_elantp_read_cmd_res_get_value(st)); |
657 | 0 | if (str->len > 0) |
658 | 0 | g_string_set_size(str, str->len - 1); |
659 | 0 | return g_string_free(g_steal_pointer(&str), FALSE); |
660 | 0 | } |
661 | | static gboolean |
662 | | fu_struct_elantp_read_cmd_res_validate_internal(FuStructElantpReadCmdRes *st, GError **error) |
663 | 0 | { |
664 | 0 | g_return_val_if_fail(st != NULL, FALSE); |
665 | 0 | return TRUE; |
666 | 0 | } |
667 | | static gboolean |
668 | | fu_struct_elantp_read_cmd_res_parse_internal(FuStructElantpReadCmdRes *st, GError **error) |
669 | 0 | { |
670 | 0 | if (g_getenv("FWUPD_VERBOSE") != NULL) { |
671 | 0 | g_autofree gchar *str = fu_struct_elantp_read_cmd_res_to_string(st); |
672 | 0 | g_debug("%s", str); |
673 | 0 | } |
674 | 0 | if (!fu_struct_elantp_read_cmd_res_validate_internal(st, error)) |
675 | 0 | return FALSE; |
676 | 0 | return TRUE; |
677 | 0 | } |
678 | | |
679 | | /** |
680 | | * fu_struct_elantp_read_cmd_res_parse: (skip): |
681 | | **/ |
682 | | FuStructElantpReadCmdRes * |
683 | | fu_struct_elantp_read_cmd_res_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error) |
684 | 0 | { |
685 | 0 | g_autoptr(FuStructElantpReadCmdRes) st = fu_struct_elantp_read_cmd_res_new_internal(); |
686 | 0 | g_return_val_if_fail(buf != NULL, NULL); |
687 | 0 | g_return_val_if_fail(error == NULL || *error == NULL, NULL); |
688 | 0 | if (!fu_memchk_read(bufsz, offset, 5, error)) { |
689 | 0 | g_prefix_error_literal(error, "invalid struct FuStructElantpReadCmdRes: "); |
690 | 0 | return NULL; |
691 | 0 | } |
692 | 0 | st->buf = g_byte_array_new(); |
693 | 0 | g_byte_array_append(st->buf, buf + offset, 5); |
694 | 0 | if (!fu_struct_elantp_read_cmd_res_parse_internal(st, error)) |
695 | 0 | return NULL; |
696 | 0 | return g_steal_pointer(&st); |
697 | 0 | } |
698 | | /** |
699 | | * fu_struct_elantp_write_cmd_req_ref: (skip): |
700 | | **/ |
701 | | FuStructElantpWriteCmdReq * |
702 | | fu_struct_elantp_write_cmd_req_ref(FuStructElantpWriteCmdReq *st) |
703 | 0 | { |
704 | 0 | g_return_val_if_fail(st != NULL, NULL); |
705 | 0 | st->refcount++; |
706 | 0 | return st; |
707 | 0 | } |
708 | | /** |
709 | | * fu_struct_elantp_write_cmd_req_unref: (skip): |
710 | | **/ |
711 | | void |
712 | | fu_struct_elantp_write_cmd_req_unref(FuStructElantpWriteCmdReq *st) |
713 | 0 | { |
714 | 0 | g_return_if_fail(st != NULL); |
715 | 0 | if (st->refcount == 0) { |
716 | 0 | g_critical("FuStructElantpWriteCmdReq refcount already zero"); |
717 | 0 | return; |
718 | 0 | } |
719 | 0 | if (--st->refcount > 0) |
720 | 0 | return; |
721 | 0 | if (st->buf != NULL) |
722 | 0 | g_byte_array_unref(st->buf); |
723 | 0 | g_free(st); |
724 | 0 | } |
725 | | /** |
726 | | * fu_struct_elantp_write_cmd_req_new_internal: (skip): |
727 | | **/ |
728 | | static FuStructElantpWriteCmdReq * |
729 | | fu_struct_elantp_write_cmd_req_new_internal(void) |
730 | 0 | { |
731 | 0 | FuStructElantpWriteCmdReq *st = g_new0(FuStructElantpWriteCmdReq, 1); |
732 | 0 | st->refcount = 1; |
733 | 0 | return st; |
734 | 0 | } |
735 | | |
736 | | /* getters */ |
737 | | |
738 | | /* setters */ |
739 | | /** |
740 | | * fu_struct_elantp_write_cmd_req_set_report_id: (skip): |
741 | | **/ |
742 | | void |
743 | | fu_struct_elantp_write_cmd_req_set_report_id(FuStructElantpWriteCmdReq *st, FuEtpRptid value) |
744 | 0 | { |
745 | 0 | g_return_if_fail(st != NULL); |
746 | 0 | st->buf->data[0] = value; |
747 | 0 | } |
748 | | /** |
749 | | * fu_struct_elantp_write_cmd_req_set_reg: (skip): |
750 | | **/ |
751 | | void |
752 | | fu_struct_elantp_write_cmd_req_set_reg(FuStructElantpWriteCmdReq *st, guint16 value) |
753 | 0 | { |
754 | 0 | g_return_if_fail(st != NULL); |
755 | 0 | fu_memwrite_uint16(st->buf->data + 1, value, G_LITTLE_ENDIAN); |
756 | 0 | } |
757 | | /** |
758 | | * fu_struct_elantp_write_cmd_req_set_cmd: (skip): |
759 | | **/ |
760 | | void |
761 | | fu_struct_elantp_write_cmd_req_set_cmd(FuStructElantpWriteCmdReq *st, FuEtpCmd value) |
762 | 0 | { |
763 | 0 | g_return_if_fail(st != NULL); |
764 | 0 | fu_memwrite_uint16(st->buf->data + 3, value, G_LITTLE_ENDIAN); |
765 | 0 | } |
766 | | /** |
767 | | * fu_struct_elantp_write_cmd_req_new: (skip): |
768 | | **/ |
769 | | FuStructElantpWriteCmdReq * |
770 | | fu_struct_elantp_write_cmd_req_new(void) |
771 | 0 | { |
772 | 0 | FuStructElantpWriteCmdReq *st = fu_struct_elantp_write_cmd_req_new_internal(); |
773 | 0 | st->buf = g_byte_array_sized_new(5); |
774 | 0 | fu_byte_array_set_size(st->buf, 5, 0x0); |
775 | 0 | return st; |
776 | 0 | } |