mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-21 10:54:28 +00:00

This makes a lot more sense; we can parse a firmware and export the same XML we would use in a .builder.xml file. This allows us to two two things: * Check we can round trip from XML -> binary -> XML * Using a .builder.xml file we can check ->write() is endian safe
61 lines
1.9 KiB
C
61 lines
1.9 KiB
C
/*
|
|
* Copyright (C) 2017 VIA Corporation
|
|
* Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1+
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "fu-vli-usbhub-common.h"
|
|
|
|
guint8
|
|
fu_vli_usbhub_header_crc8 (FuVliUsbhubHeader *hdr)
|
|
{
|
|
return ~fu_common_crc8 ((const guint8 *) hdr, sizeof(*hdr) - 1);
|
|
}
|
|
|
|
void
|
|
fu_vli_usbhub_header_export (FuVliUsbhubHeader *hdr, XbBuilderNode *bn)
|
|
{
|
|
fu_xmlb_builder_insert_kx (bn, "dev_id", GUINT16_FROM_BE(hdr->dev_id));
|
|
fu_xmlb_builder_insert_kx (bn, "variant", hdr->variant);
|
|
if (hdr->usb2_fw_sz > 0) {
|
|
fu_xmlb_builder_insert_kx (bn, "usb2_fw_addr",
|
|
GUINT16_FROM_BE(hdr->usb2_fw_addr));
|
|
fu_xmlb_builder_insert_kx (bn, "usb2_fw_sz",
|
|
GUINT16_FROM_BE(hdr->usb2_fw_sz));
|
|
}
|
|
fu_xmlb_builder_insert_kx (bn, "usb3_fw_addr",
|
|
((guint32) hdr->usb3_fw_addr_high) << 16 |
|
|
GUINT16_FROM_BE(hdr->usb3_fw_addr));
|
|
fu_xmlb_builder_insert_kx (bn, "usb3_fw_sz",
|
|
GUINT16_FROM_BE(hdr->usb3_fw_sz));
|
|
if (hdr->prev_ptr != VLI_USBHUB_FLASHMAP_IDX_INVALID) {
|
|
fu_xmlb_builder_insert_kx (bn, "prev_ptr",
|
|
VLI_USBHUB_FLASHMAP_IDX_TO_ADDR(hdr->prev_ptr));
|
|
}
|
|
if (hdr->next_ptr != VLI_USBHUB_FLASHMAP_IDX_INVALID) {
|
|
fu_xmlb_builder_insert_kx (bn, "next_ptr",
|
|
VLI_USBHUB_FLASHMAP_IDX_TO_ADDR(hdr->next_ptr));
|
|
}
|
|
fu_xmlb_builder_insert_kb (bn, "checksum_ok",
|
|
hdr->checksum == fu_vli_usbhub_header_crc8 (hdr));
|
|
}
|
|
|
|
void
|
|
fu_vli_usbhub_header_to_string (FuVliUsbhubHeader *hdr, guint idt, GString *str)
|
|
{
|
|
g_autoptr(XbBuilderNode) bn = xb_builder_node_new ("header");
|
|
g_autofree gchar *xml = NULL;
|
|
fu_vli_usbhub_header_export (hdr, bn);
|
|
xml = xb_builder_node_export (bn,
|
|
XB_NODE_EXPORT_FLAG_FORMAT_MULTILINE |
|
|
#if LIBXMLB_CHECK_VERSION(0,2,2)
|
|
XB_NODE_EXPORT_FLAG_COLLAPSE_EMPTY |
|
|
#endif
|
|
XB_NODE_EXPORT_FLAG_FORMAT_INDENT,
|
|
NULL);
|
|
fu_common_string_append_kv (str, idt, "xml", xml);
|
|
}
|