aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2016-08-10 14:21:34 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2016-08-10 14:21:34 +0200
commita144dd72b6ab2befaa6246b62da252c5fd73f2c8 (patch)
treea58eb9cada3fe90bbf304dd27231c6e767740389 /core
parent1dadec53a7a61eae9d37ba2aabf96efea1ad0ac9 (diff)
downloadkicad-utils-a144dd72b6ab2befaa6246b62da252c5fd73f2c8.tar.gz
kicad-utils-a144dd72b6ab2befaa6246b62da252c5fd73f2c8.tar.bz2
kicad-utils-a144dd72b6ab2befaa6246b62da252c5fd73f2c8.tar.xz
kicad-utils-a144dd72b6ab2befaa6246b62da252c5fd73f2c8.zip
o Adding missing files.
Diffstat (limited to 'core')
-rw-r--r--core/include/trygvis/kicad/netlist.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/core/include/trygvis/kicad/netlist.h b/core/include/trygvis/kicad/netlist.h
new file mode 100644
index 0000000..9cac5a3
--- /dev/null
+++ b/core/include/trygvis/kicad/netlist.h
@@ -0,0 +1,98 @@
+#pragma once
+
+#include "trygvis/kicad.h"
+
+#include <ostream>
+#include <stdexcept>
+#include <string>
+#include <vector>
+
+namespace trygvis {
+namespace kicad {
+namespace netlist {
+
+struct lib_source {
+ const std::string lib;
+ const std::string part;
+
+ lib_source(const std::string &lib, const std::string &part) : lib(lib), part(part) {}
+};
+
+struct component {
+ const std::string ref;
+ const std::string value;
+ const lib_source _lib_source;
+
+ component(const std::string &ref, const std::string &value, const lib_source &_lib_source) :
+ ref(ref), value(value), _lib_source(_lib_source) {}
+};
+
+struct pin {
+ int num;
+ std::string name;
+ std::string type;
+};
+
+struct part {
+ std::vector<pin> pins;
+};
+
+class node {
+public:
+ const std::string ref;
+ const int pin;
+
+ node(const std::string &ref, int pin) : ref(ref), pin(pin) {}
+};
+
+class net {
+public:
+ const int code;
+ const opt<std::string> name;
+ const std::vector<node> nodes;
+
+ net(int code, const opt<std::string> &name, const std::vector<node> &nodes) : code(code), name(name), nodes(nodes) {}
+
+ const node *node_for_ref(const std::string &ref) const;
+};
+
+struct netlist {
+ std::vector<component> components;
+ std::vector<part> parts;
+ std::vector<net> nets;
+
+ opt<const component *> find_component(const std::string &ref) const;
+
+ std::vector<const net *> find_nets_using_ref(const std::string &ref) const;
+};
+
+class kicad_parse_exception : public std::runtime_error {
+public:
+ explicit kicad_parse_exception(const std::vector<std::string> &messages) :
+ runtime_error("Parse error"), messages(messages) {}
+
+ explicit kicad_parse_exception(const std::string &message) :
+ runtime_error("Parse error"), messages({message}) {}
+
+ ~kicad_parse_exception() {}
+
+ const std::vector<std::string> messages;
+};
+
+class kicad_net_loader {
+public:
+ kicad_net_loader();
+
+ virtual ~kicad_net_loader();
+
+ netlist load(std::string path, std::ostream &err);
+
+ void setDebug(bool debug);
+
+private:
+ bool debug_;
+};
+
+} // namespace netlist
+} // namespace kicad
+} // namespace trygvis