From dc0bb4c93c4915b939ad1ecdc0745e53dc1f0d0f Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sat, 19 Sep 2020 03:42:03 +0200 Subject: Work on xml-to-html converter for register documentation --- hw_html/main.cpp | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 hw_html/main.cpp (limited to 'hw_html/main.cpp') diff --git a/hw_html/main.cpp b/hw_html/main.cpp new file mode 100644 index 0000000..1c90b27 --- /dev/null +++ b/hw_html/main.cpp @@ -0,0 +1,114 @@ +#include "html.hpp" +#include "mcureg.hpp" +#include +#include +#include +#include + +int main(const int argc, const char *const argv[]) +{ + if (argc != 3) + { + fprintf(stderr, "%s <8955_hard.xml-path> \n", argv[0]); + return EXIT_FAILURE; + } + + const char *const inpath = argv[1]; + const char *const outpath = argv[2]; + + html html; + + if (html.open(outpath)) + return EXIT_FAILURE; + + XMLResults res; + XMLNode root = XMLNode::parseFile(inpath, "bigarchive", &res); + + if (res.error != eXMLErrorNone) + { + fprintf(stderr, "Open %s failed, line %d, column %d, reason: %s.\n", + inpath, res.nLine, res.nColumn, XMLNode::getError(res.error)); + return EXIT_FAILURE; + } + + int n = 0; + + for (int i = 0; i < root.nChildNode("archive"); i++) + { + const XMLNode archive = root.getChildNode("archive", &n); + const char *const relative = archive.getAttribute("relative"); + + if (!relative) + continue; + + int n = 0; + + for (int i = 0; i < archive.nChildNode("module"); i++) + { + const XMLNode module = archive.getChildNode("module", &n); + const char *const name = module.getAttribute("name"); + + if (!name) + continue; + + printf("module %s\n", name); + int n = 0; + + for (int i = 0; i < module.nChildNode("reg"); i++) + { + const XMLNode reg = module.getChildNode("reg", &n); + const char *const name = reg.getAttribute("name"); + + if (!name) + continue; + + printf("\treg %s\n", name); + + int n = 0; + + for (int i = 0; i < reg.nChildNode("bits"); i++) + { + const XMLNode bits = reg.getChildNode("bits", &n); + const char *const name = bits.getAttribute("name"); + mcureg::access access = mcureg::UNDEF; + const char *const access_cs = bits.getAttribute("access"); + + if (!access_cs) + continue; + + const std::string access_s = access_cs; + + if (access_s == "rsv") + access = mcureg::RSV; + else if (access_s == "w1c") + access = mcureg::W1C; + else if (access_s == "w1s") + access = mcureg::W1S; + else if (access_s == "rc") + access = mcureg::RC; + else if (access_s == "rs") + access = mcureg::RS; + else if (access_s == "rw") + access = mcureg::RW; + else if (access_s == "c") + access = mcureg::C; + else if (access_s == "s") + access = mcureg::S; + else if (access_s == "r") + access = mcureg::R; + else if (access_s == "w") + access = mcureg::W; + + if (access == mcureg::UNDEF) + fprintf(stderr, "%s: undefined access\n", name); + else + { + printf("\t\t%s, access %s\n", name, access_cs); + } + } + } + } + } + + return EXIT_SUCCESS; +} -- cgit v1.2.3