aboutsummaryrefslogtreecommitdiff
path: root/hw_html/main.cpp
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2020-09-19 03:42:03 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2020-09-21 19:59:38 +0200
commitdc0bb4c93c4915b939ad1ecdc0745e53dc1f0d0f (patch)
treed4ad07aa93b8ba9fe949a963b8210fbf36b5b30a /hw_html/main.cpp
parent0e001bd3d353a26ad527c5a7cedf11915c4a11ba (diff)
downloada9_free-dc0bb4c93c4915b939ad1ecdc0745e53dc1f0d0f.tar.gz
Work on xml-to-html converter for register documentation
Diffstat (limited to 'hw_html/main.cpp')
-rw-r--r--hw_html/main.cpp114
1 files changed, 114 insertions, 0 deletions
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 <xmlParser.h>
+#include <string>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(const int argc, const char *const argv[])
+{
+ if (argc != 3)
+ {
+ fprintf(stderr, "%s <8955_hard.xml-path> <out-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;
+}