You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
2.8 KiB
132 lines
2.8 KiB
#!/usr/bin/env python3 |
|
# |
|
# Copyright (c) 2022 - 2023 Intel Corporation |
|
# |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
""" |
|
Utilities for MIPI Sys-T Collateral XML data |
|
""" |
|
|
|
from xml.sax.saxutils import escape |
|
|
|
XML_HEADER = """ |
|
<?xml version="1.0" encoding="utf-8"?> |
|
<syst:Collateral xmlns:syst="http://www.mipi.org/1.0/sys-t" |
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|
xsi:schemaLocation="http://www.mipi.org/1.0/sys-t |
|
https://www.mipi.org/schema/sys-t/sys-t_1-0.xsd"> |
|
|
|
<syst:Client Name="Zephyr"> |
|
""" |
|
|
|
XML_FOOTER = """ |
|
</syst:Client> |
|
|
|
</syst:Collateral> |
|
""" |
|
|
|
XML_MODULE_HEADER = """ |
|
<syst:Modules>""" |
|
|
|
XML_MODULE_EACH = """ |
|
<syst:Module ID="{0}"><![CDATA[{1}]]></syst:Module>""" |
|
|
|
XML_MODULE_FOOTER = """ |
|
</syst:Modules> |
|
""" |
|
|
|
XML_CATALOG32_HEADER = """ |
|
<syst:Catalog32>""" |
|
|
|
XML_CATALOG32_EACH = """ |
|
<syst:Format ID="0x{0:08x}"><![CDATA[{1}]]></syst:Format>""" |
|
|
|
XML_CATALOG32_FOOTER = """ |
|
</syst:Catalog32> |
|
""" |
|
|
|
XML_CATALOG64_HEADER = """ |
|
<syst:Catalog64>""" |
|
|
|
XML_CATALOG64_EACH = """ |
|
<syst:Format ID="0x{0:016x}"><![CDATA[{1}]]></syst:Format>""" |
|
|
|
XML_CATALOG64_FOOTER = """ |
|
</syst:Catalog64> |
|
""" |
|
|
|
XML_GUIDS = """ |
|
<syst:Guids> |
|
<syst:Guid ID="{00000000-0000-0000-0000-000000000000}" |
|
Mask="{00000000-0000-0000-FF00-000000000000}"><![CDATA[Zephyr]]></syst:Guid> |
|
</syst:Guids> |
|
""" |
|
|
|
|
|
def __gen_syst_modules(database): |
|
""" |
|
Generate syst:Modules, which corresponds to log source ID and name |
|
""" |
|
if 'log_subsys' not in database.database: |
|
return "" |
|
|
|
if 'log_instances' not in database.database['log_subsys']: |
|
return "" |
|
|
|
instances = database.database['log_subsys']['log_instances'] |
|
|
|
if not instances: |
|
# Empty dictionary: no instances |
|
return "" |
|
|
|
xml = XML_MODULE_HEADER |
|
|
|
for _, one_inst in instances.items(): |
|
xml += XML_MODULE_EACH.format(one_inst['source_id'], escape(one_inst['name'])) |
|
|
|
xml += XML_MODULE_FOOTER |
|
|
|
return xml |
|
|
|
|
|
def __gen_syst_catalog(database): |
|
""" |
|
Generate syst:Catalog, which corresponds to log strings |
|
""" |
|
if not database.has_string_mappings(): |
|
return "" |
|
|
|
if database.is_tgt_64bit(): |
|
xml = XML_CATALOG64_HEADER |
|
fmt = XML_CATALOG64_EACH |
|
else: |
|
xml = XML_CATALOG32_HEADER |
|
fmt = XML_CATALOG32_EACH |
|
|
|
for addr, one_str in database.get_string_mappings().items(): |
|
xml += fmt.format(addr, one_str) |
|
|
|
if database.is_tgt_64bit(): |
|
xml += XML_CATALOG64_FOOTER |
|
else: |
|
xml += XML_CATALOG32_FOOTER |
|
|
|
return xml |
|
|
|
|
|
def gen_syst_xml_file(database): |
|
""" |
|
Generate MIPI Sys-T Collateral XML data |
|
""" |
|
xml = XML_HEADER |
|
|
|
xml += XML_GUIDS |
|
|
|
xml += __gen_syst_modules(database) |
|
|
|
xml += __gen_syst_catalog(database) |
|
|
|
xml += XML_FOOTER |
|
|
|
return xml
|
|
|