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 | 484 | { |
61 | 484 | g_return_if_fail(st != NULL); |
62 | 484 | if (st->refcount == 0) { |
63 | 0 | g_critical("FuStructElantpFirmwareFtr refcount already zero"); |
64 | 0 | return; |
65 | 0 | } |
66 | 484 | if (--st->refcount > 0) |
67 | 0 | return; |
68 | 484 | if (st->buf != NULL) |
69 | 484 | g_byte_array_unref(st->buf); |
70 | 484 | g_free(st); |
71 | 484 | } |
72 | | /** |
73 | | * fu_struct_elantp_firmware_ftr_new_internal: (skip): |
74 | | **/ |
75 | | static FuStructElantpFirmwareFtr * |
76 | | fu_struct_elantp_firmware_ftr_new_internal(void) |
77 | 484 | { |
78 | 484 | FuStructElantpFirmwareFtr *st = g_new0(FuStructElantpFirmwareFtr, 1); |
79 | 484 | st->refcount = 1; |
80 | 484 | return st; |
81 | 484 | } |
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 | 170 | { |
92 | 170 | FuStructElantpFirmwareFtr *st = fu_struct_elantp_firmware_ftr_new_internal(); |
93 | 170 | st->buf = g_byte_array_sized_new(6); |
94 | 170 | fu_byte_array_set_size(st->buf, 6, 0x0); |
95 | 170 | memcpy(st->buf->data + 0x0, "\xAA\x55\xCC\x33\xFF\xFF", 6); /* nocheck:blocked */ |
96 | 170 | return st; |
97 | 170 | } |
98 | | static gboolean |
99 | | fu_struct_elantp_firmware_ftr_validate_internal(FuStructElantpFirmwareFtr *st, GError **error) |
100 | 314 | { |
101 | 314 | g_return_val_if_fail(st != NULL, FALSE); |
102 | 314 | if (memcmp(st->buf->data + 0, "\xAA\x55\xCC\x33\xFF\xFF", 6) != 0) { |
103 | 65 | g_set_error_literal(error, |
104 | 65 | FWUPD_ERROR, |
105 | 65 | FWUPD_ERROR_INVALID_DATA, |
106 | 65 | "constant FuStructElantpFirmwareFtr.magic was not valid"); |
107 | 65 | return FALSE; |
108 | 65 | } |
109 | 249 | return TRUE; |
110 | 314 | } |
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 | 314 | { |
117 | 314 | g_autoptr(FuStructElantpFirmwareFtr) st = fu_struct_elantp_firmware_ftr_new_internal(); |
118 | 314 | g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE); |
119 | 314 | g_return_val_if_fail(error == NULL || *error == NULL, FALSE); |
120 | 314 | st->buf = fu_input_stream_read_byte_array(stream, offset, 6, NULL, error); |
121 | 314 | 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 | 314 | 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 | 314 | return fu_struct_elantp_firmware_ftr_validate_internal(st, error); |
135 | 314 | } |
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 | 419 | { |
152 | 419 | g_return_if_fail(st != NULL); |
153 | 419 | if (st->refcount == 0) { |
154 | 0 | g_critical("FuStructElantpFirmwareHdr refcount already zero"); |
155 | 0 | return; |
156 | 0 | } |
157 | 419 | if (--st->refcount > 0) |
158 | 0 | return; |
159 | 419 | if (st->buf != NULL) |
160 | 401 | g_byte_array_unref(st->buf); |
161 | 419 | g_free(st); |
162 | 419 | } |
163 | | /** |
164 | | * fu_struct_elantp_firmware_hdr_new_internal: (skip): |
165 | | **/ |
166 | | static FuStructElantpFirmwareHdr * |
167 | | fu_struct_elantp_firmware_hdr_new_internal(void) |
168 | 419 | { |
169 | 419 | FuStructElantpFirmwareHdr *st = g_new0(FuStructElantpFirmwareHdr, 1); |
170 | 419 | st->refcount = 1; |
171 | 419 | return st; |
172 | 419 | } |
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 | 206 | { |
181 | 206 | g_return_val_if_fail(st != NULL, 0x0); |
182 | 206 | return fu_memread_uint16(st->buf->data + 0, G_LITTLE_ENDIAN); |
183 | 206 | } |
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 | 206 | { |
190 | 206 | g_return_val_if_fail(st != NULL, 0x0); |
191 | 206 | return fu_memread_uint16(st->buf->data + 4, G_LITTLE_ENDIAN); |
192 | 206 | } |
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 | 222 | { |
199 | 222 | g_return_val_if_fail(st != NULL, 0x0); |
200 | 222 | return fu_memread_uint16(st->buf->data + 6, G_LITTLE_ENDIAN); |
201 | 222 | } |
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 | 36 | { |
208 | 36 | g_return_val_if_fail(st != NULL, 0x0); |
209 | 36 | return fu_memread_uint16(st->buf->data + 10, G_LITTLE_ENDIAN); |
210 | 36 | } |
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 | 170 | { |
219 | 170 | g_return_if_fail(st != NULL); |
220 | 170 | fu_memwrite_uint16(st->buf->data + 0, value, G_LITTLE_ENDIAN); |
221 | 170 | } |
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 | 170 | { |
228 | 170 | g_return_if_fail(st != NULL); |
229 | 170 | fu_memwrite_uint16(st->buf->data + 4, value, G_LITTLE_ENDIAN); |
230 | 170 | } |
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 | 170 | { |
237 | 170 | g_return_if_fail(st != NULL); |
238 | 170 | fu_memwrite_uint16(st->buf->data + 6, value, G_LITTLE_ENDIAN); |
239 | 170 | } |
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 | 170 | { |
246 | 170 | g_return_if_fail(st != NULL); |
247 | 170 | fu_memwrite_uint16(st->buf->data + 10, value, G_LITTLE_ENDIAN); |
248 | 170 | } |
249 | | /** |
250 | | * fu_struct_elantp_firmware_hdr_new: (skip): |
251 | | **/ |
252 | | FuStructElantpFirmwareHdr * |
253 | | fu_struct_elantp_firmware_hdr_new(void) |
254 | 170 | { |
255 | 170 | FuStructElantpFirmwareHdr *st = fu_struct_elantp_firmware_hdr_new_internal(); |
256 | 170 | st->buf = g_byte_array_sized_new(12); |
257 | 170 | fu_byte_array_set_size(st->buf, 12, 0x0); |
258 | 170 | return st; |
259 | 170 | } |
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_parse_internal(FuStructElantpFirmwareHdr *st, GError **error) |
282 | 222 | { |
283 | 222 | if (g_log_get_debug_enabled()) { |
284 | 0 | g_autofree gchar *str = fu_struct_elantp_firmware_hdr_to_string(st); |
285 | 0 | g_debug("%s", str); |
286 | 0 | } |
287 | 222 | return TRUE; |
288 | 222 | } |
289 | | /** |
290 | | * fu_struct_elantp_firmware_hdr_parse_stream: (skip): |
291 | | **/ |
292 | | FuStructElantpFirmwareHdr * |
293 | | fu_struct_elantp_firmware_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error) |
294 | 249 | { |
295 | 249 | g_autoptr(FuStructElantpFirmwareHdr) st = fu_struct_elantp_firmware_hdr_new_internal(); |
296 | 249 | st->buf = fu_input_stream_read_byte_array(stream, offset, 12, NULL, error); |
297 | 249 | if (st->buf == NULL) { |
298 | 18 | g_prefix_error(error, "FuStructElantpFirmwareHdr failed read of 0x%x: ", (guint) 12); |
299 | 18 | return NULL; |
300 | 18 | } |
301 | 231 | if (st->buf->len != 12) { |
302 | 9 | g_set_error(error, |
303 | 9 | FWUPD_ERROR, |
304 | 9 | FWUPD_ERROR_INVALID_DATA, |
305 | 9 | "FuStructElantpFirmwareHdr requested 0x%x and got 0x%x", |
306 | 9 | (guint) 12, |
307 | 9 | (guint) st->buf->len); |
308 | 9 | return NULL; |
309 | 9 | } |
310 | 222 | if (!fu_struct_elantp_firmware_hdr_parse_internal(st, error)) |
311 | 0 | return NULL; |
312 | 222 | return g_steal_pointer(&st); |
313 | 222 | } |
314 | | /** |
315 | | * fu_struct_elantp_haptic_firmware_hdr_ref: (skip): |
316 | | **/ |
317 | | FuStructElantpHapticFirmwareHdr * |
318 | | fu_struct_elantp_haptic_firmware_hdr_ref(FuStructElantpHapticFirmwareHdr *st) |
319 | 0 | { |
320 | 0 | g_return_val_if_fail(st != NULL, NULL); |
321 | 0 | st->refcount++; |
322 | 0 | return st; |
323 | 0 | } |
324 | | /** |
325 | | * fu_struct_elantp_haptic_firmware_hdr_unref: (skip): |
326 | | **/ |
327 | | void |
328 | | fu_struct_elantp_haptic_firmware_hdr_unref(FuStructElantpHapticFirmwareHdr *st) |
329 | 0 | { |
330 | 0 | g_return_if_fail(st != NULL); |
331 | 0 | if (st->refcount == 0) { |
332 | 0 | g_critical("FuStructElantpHapticFirmwareHdr refcount already zero"); |
333 | 0 | return; |
334 | 0 | } |
335 | 0 | if (--st->refcount > 0) |
336 | 0 | return; |
337 | 0 | if (st->buf != NULL) |
338 | 0 | g_byte_array_unref(st->buf); |
339 | 0 | g_free(st); |
340 | 0 | } |
341 | | /** |
342 | | * fu_struct_elantp_haptic_firmware_hdr_new_internal: (skip): |
343 | | **/ |
344 | | static FuStructElantpHapticFirmwareHdr * |
345 | | fu_struct_elantp_haptic_firmware_hdr_new_internal(void) |
346 | 0 | { |
347 | 0 | FuStructElantpHapticFirmwareHdr *st = g_new0(FuStructElantpHapticFirmwareHdr, 1); |
348 | 0 | st->refcount = 1; |
349 | 0 | return st; |
350 | 0 | } |
351 | | |
352 | | /* getters */ |
353 | | /** |
354 | | * fu_struct_elantp_haptic_firmware_hdr_get_magic: (skip): |
355 | | **/ |
356 | | static const guint8 * |
357 | | fu_struct_elantp_haptic_firmware_hdr_get_magic(const FuStructElantpHapticFirmwareHdr *st, gsize *bufsz) |
358 | 0 | { |
359 | 0 | g_return_val_if_fail(st != NULL, NULL); |
360 | 0 | if (bufsz != NULL) |
361 | 0 | *bufsz = 4; |
362 | 0 | return st->buf->data + 0; |
363 | 0 | } |
364 | | /** |
365 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_sm: (skip): |
366 | | **/ |
367 | | guint8 |
368 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_sm(const FuStructElantpHapticFirmwareHdr *st) |
369 | 0 | { |
370 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
371 | 0 | return st->buf->data[4]; |
372 | 0 | } |
373 | | /** |
374 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_d: (skip): |
375 | | **/ |
376 | | guint8 |
377 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_d(const FuStructElantpHapticFirmwareHdr *st) |
378 | 0 | { |
379 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
380 | 0 | return st->buf->data[5]; |
381 | 0 | } |
382 | | /** |
383 | | * fu_struct_elantp_haptic_firmware_hdr_get_ver_y: (skip): |
384 | | **/ |
385 | | guint8 |
386 | | fu_struct_elantp_haptic_firmware_hdr_get_ver_y(const FuStructElantpHapticFirmwareHdr *st) |
387 | 0 | { |
388 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
389 | 0 | return st->buf->data[6]; |
390 | 0 | } |
391 | | |
392 | | /* setters */ |
393 | | /** |
394 | | * fu_struct_elantp_haptic_firmware_hdr_to_string: (skip): |
395 | | **/ |
396 | | static gchar * |
397 | | fu_struct_elantp_haptic_firmware_hdr_to_string(const FuStructElantpHapticFirmwareHdr *st) |
398 | 0 | { |
399 | 0 | g_autoptr(GString) str = g_string_new("FuStructElantpHapticFirmwareHdr:\n"); |
400 | 0 | g_return_val_if_fail(st != NULL, NULL); |
401 | 0 | { |
402 | 0 | gsize bufsz = 0; |
403 | 0 | const guint8 *buf = fu_struct_elantp_haptic_firmware_hdr_get_magic(st, &bufsz); |
404 | 0 | g_autoptr(GString) tmp = g_string_new(NULL); |
405 | 0 | for (gsize i = 0; i < bufsz; i++) |
406 | 0 | g_string_append_printf(tmp, "%02X", buf[i]); |
407 | 0 | g_string_append_printf(str, " magic: 0x%s\n", tmp->str); |
408 | 0 | } |
409 | 0 | g_string_append_printf(str, " ver_sm: 0x%x\n", |
410 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_sm(st)); |
411 | 0 | g_string_append_printf(str, " ver_d: 0x%x\n", |
412 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_d(st)); |
413 | 0 | g_string_append_printf(str, " ver_y: 0x%x\n", |
414 | 0 | (guint) fu_struct_elantp_haptic_firmware_hdr_get_ver_y(st)); |
415 | 0 | if (str->len > 0) |
416 | 0 | g_string_set_size(str, str->len - 1); |
417 | 0 | return g_string_free(g_steal_pointer(&str), FALSE); |
418 | 0 | } |
419 | | static gboolean |
420 | | fu_struct_elantp_haptic_firmware_hdr_validate_internal(FuStructElantpHapticFirmwareHdr *st, GError **error) |
421 | 0 | { |
422 | 0 | g_return_val_if_fail(st != NULL, FALSE); |
423 | 0 | if (memcmp(st->buf->data + 0, "\xFF\x40\xA2\x5B", 4) != 0) { |
424 | 0 | g_set_error_literal(error, |
425 | 0 | FWUPD_ERROR, |
426 | 0 | FWUPD_ERROR_INVALID_DATA, |
427 | 0 | "constant FuStructElantpHapticFirmwareHdr.magic was not valid"); |
428 | 0 | return FALSE; |
429 | 0 | } |
430 | 0 | return TRUE; |
431 | 0 | } |
432 | | /** |
433 | | * fu_struct_elantp_haptic_firmware_hdr_validate_stream: (skip): |
434 | | **/ |
435 | | gboolean |
436 | | fu_struct_elantp_haptic_firmware_hdr_validate_stream(GInputStream *stream, gsize offset, GError **error) |
437 | 0 | { |
438 | 0 | g_autoptr(FuStructElantpHapticFirmwareHdr) st = fu_struct_elantp_haptic_firmware_hdr_new_internal(); |
439 | 0 | g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE); |
440 | 0 | g_return_val_if_fail(error == NULL || *error == NULL, FALSE); |
441 | 0 | st->buf = fu_input_stream_read_byte_array(stream, offset, 7, NULL, error); |
442 | 0 | if (st->buf == NULL) { |
443 | 0 | g_prefix_error(error, "FuStructElantpHapticFirmwareHdr failed read of 0x%x: ", (guint) 7); |
444 | 0 | return FALSE; |
445 | 0 | } |
446 | 0 | if (st->buf->len != 7) { |
447 | 0 | g_set_error(error, |
448 | 0 | FWUPD_ERROR, |
449 | 0 | FWUPD_ERROR_INVALID_DATA, |
450 | 0 | "FuStructElantpHapticFirmwareHdr requested 0x%x and got 0x%x", |
451 | 0 | (guint) 7, |
452 | 0 | (guint) st->buf->len); |
453 | 0 | return FALSE; |
454 | 0 | } |
455 | 0 | return fu_struct_elantp_haptic_firmware_hdr_validate_internal(st, error); |
456 | 0 | } |
457 | | static gboolean |
458 | | fu_struct_elantp_haptic_firmware_hdr_parse_internal(FuStructElantpHapticFirmwareHdr *st, GError **error) |
459 | 0 | { |
460 | 0 | if (g_log_get_debug_enabled()) { |
461 | 0 | g_autofree gchar *str = fu_struct_elantp_haptic_firmware_hdr_to_string(st); |
462 | 0 | g_debug("%s", str); |
463 | 0 | } |
464 | 0 | if (!fu_struct_elantp_haptic_firmware_hdr_validate_internal(st, error)) |
465 | 0 | return FALSE; |
466 | 0 | return TRUE; |
467 | 0 | } |
468 | | /** |
469 | | * fu_struct_elantp_haptic_firmware_hdr_parse_stream: (skip): |
470 | | **/ |
471 | | FuStructElantpHapticFirmwareHdr * |
472 | | fu_struct_elantp_haptic_firmware_hdr_parse_stream(GInputStream *stream, gsize offset, GError **error) |
473 | 0 | { |
474 | 0 | g_autoptr(FuStructElantpHapticFirmwareHdr) st = fu_struct_elantp_haptic_firmware_hdr_new_internal(); |
475 | 0 | st->buf = fu_input_stream_read_byte_array(stream, offset, 7, NULL, error); |
476 | 0 | if (st->buf == NULL) { |
477 | 0 | g_prefix_error(error, "FuStructElantpHapticFirmwareHdr failed read of 0x%x: ", (guint) 7); |
478 | 0 | return NULL; |
479 | 0 | } |
480 | 0 | if (st->buf->len != 7) { |
481 | 0 | g_set_error(error, |
482 | 0 | FWUPD_ERROR, |
483 | 0 | FWUPD_ERROR_INVALID_DATA, |
484 | 0 | "FuStructElantpHapticFirmwareHdr requested 0x%x and got 0x%x", |
485 | 0 | (guint) 7, |
486 | 0 | (guint) st->buf->len); |
487 | 0 | return NULL; |
488 | 0 | } |
489 | 0 | if (!fu_struct_elantp_haptic_firmware_hdr_parse_internal(st, error)) |
490 | 0 | return NULL; |
491 | 0 | return g_steal_pointer(&st); |
492 | 0 | } |
493 | | /** |
494 | | * fu_struct_elantp_read_cmd_req_ref: (skip): |
495 | | **/ |
496 | | FuStructElantpReadCmdReq * |
497 | | fu_struct_elantp_read_cmd_req_ref(FuStructElantpReadCmdReq *st) |
498 | 0 | { |
499 | 0 | g_return_val_if_fail(st != NULL, NULL); |
500 | 0 | st->refcount++; |
501 | 0 | return st; |
502 | 0 | } |
503 | | /** |
504 | | * fu_struct_elantp_read_cmd_req_unref: (skip): |
505 | | **/ |
506 | | void |
507 | | fu_struct_elantp_read_cmd_req_unref(FuStructElantpReadCmdReq *st) |
508 | 0 | { |
509 | 0 | g_return_if_fail(st != NULL); |
510 | 0 | if (st->refcount == 0) { |
511 | 0 | g_critical("FuStructElantpReadCmdReq refcount already zero"); |
512 | 0 | return; |
513 | 0 | } |
514 | 0 | if (--st->refcount > 0) |
515 | 0 | return; |
516 | 0 | if (st->buf != NULL) |
517 | 0 | g_byte_array_unref(st->buf); |
518 | 0 | g_free(st); |
519 | 0 | } |
520 | | /** |
521 | | * fu_struct_elantp_read_cmd_req_new_internal: (skip): |
522 | | **/ |
523 | | static FuStructElantpReadCmdReq * |
524 | | fu_struct_elantp_read_cmd_req_new_internal(void) |
525 | 0 | { |
526 | 0 | FuStructElantpReadCmdReq *st = g_new0(FuStructElantpReadCmdReq, 1); |
527 | 0 | st->refcount = 1; |
528 | 0 | return st; |
529 | 0 | } |
530 | | |
531 | | /* getters */ |
532 | | |
533 | | /* setters */ |
534 | | /** |
535 | | * fu_struct_elantp_read_cmd_req_set_report_id: (skip): |
536 | | **/ |
537 | | void |
538 | | fu_struct_elantp_read_cmd_req_set_report_id(FuStructElantpReadCmdReq *st, FuEtpRptid value) |
539 | 0 | { |
540 | 0 | g_return_if_fail(st != NULL); |
541 | 0 | st->buf->data[0] = value; |
542 | 0 | } |
543 | | /** |
544 | | * fu_struct_elantp_read_cmd_req_set_cmd: (skip): |
545 | | **/ |
546 | | void |
547 | | fu_struct_elantp_read_cmd_req_set_cmd(FuStructElantpReadCmdReq *st, FuEtpCmd value) |
548 | 0 | { |
549 | 0 | g_return_if_fail(st != NULL); |
550 | 0 | fu_memwrite_uint16(st->buf->data + 1, value, G_LITTLE_ENDIAN); |
551 | 0 | } |
552 | | /** |
553 | | * fu_struct_elantp_read_cmd_req_set_reg: (skip): |
554 | | **/ |
555 | | void |
556 | | fu_struct_elantp_read_cmd_req_set_reg(FuStructElantpReadCmdReq *st, guint16 value) |
557 | 0 | { |
558 | 0 | g_return_if_fail(st != NULL); |
559 | 0 | fu_memwrite_uint16(st->buf->data + 3, value, G_LITTLE_ENDIAN); |
560 | 0 | } |
561 | | /** |
562 | | * fu_struct_elantp_read_cmd_req_new: (skip): |
563 | | **/ |
564 | | FuStructElantpReadCmdReq * |
565 | | fu_struct_elantp_read_cmd_req_new(void) |
566 | 0 | { |
567 | 0 | FuStructElantpReadCmdReq *st = fu_struct_elantp_read_cmd_req_new_internal(); |
568 | 0 | st->buf = g_byte_array_sized_new(5); |
569 | 0 | fu_byte_array_set_size(st->buf, 5, 0x0); |
570 | 0 | return st; |
571 | 0 | } |
572 | | /** |
573 | | * fu_struct_elantp_read_cmd_res_ref: (skip): |
574 | | **/ |
575 | | FuStructElantpReadCmdRes * |
576 | | fu_struct_elantp_read_cmd_res_ref(FuStructElantpReadCmdRes *st) |
577 | 0 | { |
578 | 0 | g_return_val_if_fail(st != NULL, NULL); |
579 | 0 | st->refcount++; |
580 | 0 | return st; |
581 | 0 | } |
582 | | /** |
583 | | * fu_struct_elantp_read_cmd_res_unref: (skip): |
584 | | **/ |
585 | | void |
586 | | fu_struct_elantp_read_cmd_res_unref(FuStructElantpReadCmdRes *st) |
587 | 0 | { |
588 | 0 | g_return_if_fail(st != NULL); |
589 | 0 | if (st->refcount == 0) { |
590 | 0 | g_critical("FuStructElantpReadCmdRes refcount already zero"); |
591 | 0 | return; |
592 | 0 | } |
593 | 0 | if (--st->refcount > 0) |
594 | 0 | return; |
595 | 0 | if (st->buf != NULL) |
596 | 0 | g_byte_array_unref(st->buf); |
597 | 0 | g_free(st); |
598 | 0 | } |
599 | | /** |
600 | | * fu_struct_elantp_read_cmd_res_new_internal: (skip): |
601 | | **/ |
602 | | static FuStructElantpReadCmdRes * |
603 | | fu_struct_elantp_read_cmd_res_new_internal(void) |
604 | 0 | { |
605 | 0 | FuStructElantpReadCmdRes *st = g_new0(FuStructElantpReadCmdRes, 1); |
606 | 0 | st->refcount = 1; |
607 | 0 | return st; |
608 | 0 | } |
609 | | |
610 | | /* getters */ |
611 | | /** |
612 | | * fu_struct_elantp_read_cmd_res_get_report_id: (skip): |
613 | | **/ |
614 | | FuEtpRptid |
615 | | fu_struct_elantp_read_cmd_res_get_report_id(const FuStructElantpReadCmdRes *st) |
616 | 0 | { |
617 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
618 | 0 | return st->buf->data[0]; |
619 | 0 | } |
620 | | /** |
621 | | * fu_struct_elantp_read_cmd_res_get_value: (skip): |
622 | | **/ |
623 | | guint16 |
624 | | fu_struct_elantp_read_cmd_res_get_value(const FuStructElantpReadCmdRes *st) |
625 | 0 | { |
626 | 0 | g_return_val_if_fail(st != NULL, 0x0); |
627 | 0 | return fu_memread_uint16(st->buf->data + 3, G_LITTLE_ENDIAN); |
628 | 0 | } |
629 | | |
630 | | /* setters */ |
631 | | /** |
632 | | * fu_struct_elantp_read_cmd_res_to_string: (skip): |
633 | | **/ |
634 | | static gchar * |
635 | | fu_struct_elantp_read_cmd_res_to_string(const FuStructElantpReadCmdRes *st) |
636 | 0 | { |
637 | 0 | g_autoptr(GString) str = g_string_new("FuStructElantpReadCmdRes:\n"); |
638 | 0 | g_return_val_if_fail(st != NULL, NULL); |
639 | 0 | { |
640 | 0 | const gchar *tmp = fu_etp_rptid_to_string(fu_struct_elantp_read_cmd_res_get_report_id(st)); |
641 | 0 | if (tmp != NULL) { |
642 | 0 | g_string_append_printf(str, " report_id: 0x%x [%s]\n", (guint) fu_struct_elantp_read_cmd_res_get_report_id(st), tmp); |
643 | 0 | } else { |
644 | 0 | g_string_append_printf(str, " report_id: 0x%x\n", (guint) fu_struct_elantp_read_cmd_res_get_report_id(st)); |
645 | 0 | } |
646 | 0 | } |
647 | 0 | g_string_append_printf(str, " value: 0x%x\n", |
648 | 0 | (guint) fu_struct_elantp_read_cmd_res_get_value(st)); |
649 | 0 | if (str->len > 0) |
650 | 0 | g_string_set_size(str, str->len - 1); |
651 | 0 | return g_string_free(g_steal_pointer(&str), FALSE); |
652 | 0 | } |
653 | | static gboolean |
654 | | fu_struct_elantp_read_cmd_res_parse_internal(FuStructElantpReadCmdRes *st, GError **error) |
655 | 0 | { |
656 | 0 | if (g_log_get_debug_enabled()) { |
657 | 0 | g_autofree gchar *str = fu_struct_elantp_read_cmd_res_to_string(st); |
658 | 0 | g_debug("%s", str); |
659 | 0 | } |
660 | 0 | return TRUE; |
661 | 0 | } |
662 | | |
663 | | /** |
664 | | * fu_struct_elantp_read_cmd_res_parse: (skip): |
665 | | **/ |
666 | | FuStructElantpReadCmdRes * |
667 | | fu_struct_elantp_read_cmd_res_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error) |
668 | 0 | { |
669 | 0 | g_autoptr(FuStructElantpReadCmdRes) st = fu_struct_elantp_read_cmd_res_new_internal(); |
670 | 0 | g_return_val_if_fail(buf != NULL, NULL); |
671 | 0 | g_return_val_if_fail(error == NULL || *error == NULL, NULL); |
672 | 0 | if (!fu_memchk_read(bufsz, offset, 5, error)) { |
673 | 0 | g_prefix_error_literal(error, "invalid struct FuStructElantpReadCmdRes: "); |
674 | 0 | return NULL; |
675 | 0 | } |
676 | 0 | st->buf = g_byte_array_new(); |
677 | 0 | g_byte_array_append(st->buf, buf + offset, 5); |
678 | 0 | if (!fu_struct_elantp_read_cmd_res_parse_internal(st, error)) |
679 | 0 | return NULL; |
680 | 0 | return g_steal_pointer(&st); |
681 | 0 | } |
682 | | /** |
683 | | * fu_struct_elantp_write_cmd_req_ref: (skip): |
684 | | **/ |
685 | | FuStructElantpWriteCmdReq * |
686 | | fu_struct_elantp_write_cmd_req_ref(FuStructElantpWriteCmdReq *st) |
687 | 0 | { |
688 | 0 | g_return_val_if_fail(st != NULL, NULL); |
689 | 0 | st->refcount++; |
690 | 0 | return st; |
691 | 0 | } |
692 | | /** |
693 | | * fu_struct_elantp_write_cmd_req_unref: (skip): |
694 | | **/ |
695 | | void |
696 | | fu_struct_elantp_write_cmd_req_unref(FuStructElantpWriteCmdReq *st) |
697 | 0 | { |
698 | 0 | g_return_if_fail(st != NULL); |
699 | 0 | if (st->refcount == 0) { |
700 | 0 | g_critical("FuStructElantpWriteCmdReq refcount already zero"); |
701 | 0 | return; |
702 | 0 | } |
703 | 0 | if (--st->refcount > 0) |
704 | 0 | return; |
705 | 0 | if (st->buf != NULL) |
706 | 0 | g_byte_array_unref(st->buf); |
707 | 0 | g_free(st); |
708 | 0 | } |
709 | | /** |
710 | | * fu_struct_elantp_write_cmd_req_new_internal: (skip): |
711 | | **/ |
712 | | static FuStructElantpWriteCmdReq * |
713 | | fu_struct_elantp_write_cmd_req_new_internal(void) |
714 | 0 | { |
715 | 0 | FuStructElantpWriteCmdReq *st = g_new0(FuStructElantpWriteCmdReq, 1); |
716 | 0 | st->refcount = 1; |
717 | 0 | return st; |
718 | 0 | } |
719 | | |
720 | | /* getters */ |
721 | | |
722 | | /* setters */ |
723 | | /** |
724 | | * fu_struct_elantp_write_cmd_req_set_report_id: (skip): |
725 | | **/ |
726 | | void |
727 | | fu_struct_elantp_write_cmd_req_set_report_id(FuStructElantpWriteCmdReq *st, FuEtpRptid value) |
728 | 0 | { |
729 | 0 | g_return_if_fail(st != NULL); |
730 | 0 | st->buf->data[0] = value; |
731 | 0 | } |
732 | | /** |
733 | | * fu_struct_elantp_write_cmd_req_set_reg: (skip): |
734 | | **/ |
735 | | void |
736 | | fu_struct_elantp_write_cmd_req_set_reg(FuStructElantpWriteCmdReq *st, guint16 value) |
737 | 0 | { |
738 | 0 | g_return_if_fail(st != NULL); |
739 | 0 | fu_memwrite_uint16(st->buf->data + 1, value, G_LITTLE_ENDIAN); |
740 | 0 | } |
741 | | /** |
742 | | * fu_struct_elantp_write_cmd_req_set_cmd: (skip): |
743 | | **/ |
744 | | void |
745 | | fu_struct_elantp_write_cmd_req_set_cmd(FuStructElantpWriteCmdReq *st, FuEtpCmd value) |
746 | 0 | { |
747 | 0 | g_return_if_fail(st != NULL); |
748 | 0 | fu_memwrite_uint16(st->buf->data + 3, value, G_LITTLE_ENDIAN); |
749 | 0 | } |
750 | | /** |
751 | | * fu_struct_elantp_write_cmd_req_new: (skip): |
752 | | **/ |
753 | | FuStructElantpWriteCmdReq * |
754 | | fu_struct_elantp_write_cmd_req_new(void) |
755 | 0 | { |
756 | 0 | FuStructElantpWriteCmdReq *st = fu_struct_elantp_write_cmd_req_new_internal(); |
757 | 0 | st->buf = g_byte_array_sized_new(5); |
758 | 0 | fu_byte_array_set_size(st->buf, 5, 0x0); |
759 | 0 | return st; |
760 | 0 | } |