aboutsummaryrefslogtreecommitdiff
path: root/src/ee/kicad
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/kicad')
-rw-r--r--src/ee/kicad/doit.py125
1 files changed, 64 insertions, 61 deletions
diff --git a/src/ee/kicad/doit.py b/src/ee/kicad/doit.py
index 30ca40d..bfbf0a1 100644
--- a/src/ee/kicad/doit.py
+++ b/src/ee/kicad/doit.py
@@ -26,24 +26,24 @@ _data_sets = {}
def change_data_sets_for_task(task, _callable):
- _data_sets[task] = _callable(_data_sets[task])
+ _data_sets[task][1] = _callable(_data_sets[task][1])
-def init(data_set_manager: DataSetManager, **kwargs):
- global _config
- _config = _config_template.make(kwargs)
+def output_data_set_for_task(task):
+ return _data_sets[task][0]
+
- ee_logger = logging.getLogger("ee")
- formatter = logging.Formatter("%(levelname)s: %(message)s")
- ch = logging.StreamHandler()
- ch.setFormatter(formatter)
- ee_logger.addHandler(ch)
+def input_data_sets_for_task(task):
+ return _data_sets[task][1]
- ee_logger.setLevel(logging.DEBUG)
+def init(data_set_manager: DataSetManager, **kwargs):
global _dsm
_dsm = data_set_manager
+ global _config
+ _config = _config_template.make(kwargs)
+
def task_kicad_gerber():
kicad_pcb = _config["kicad_pcb"]
@@ -84,8 +84,7 @@ def task_kicad_gerber():
def task_kicad_sch_to_data_set():
- out_data_set = "kicad-sch"
- in_data_sets = _data_sets[task_kicad_sch_to_data_set]
+ out_data_set, in_data_sets = _data_sets[task_kicad_sch_to_data_set]
sch = _config["sch"]
@@ -106,7 +105,7 @@ def task_kicad_sch_to_data_set():
for f in c.fields:
if f.value and f.name not in ComponentField.names:
- o.set(f.name, str(f.value))
+ o.set("field-{}".format(f.name), str(f.value))
return {
"file_dep": [Path(sch)] + [_dsm.cookie_for_ds(ds) for ds in in_data_sets],
@@ -115,14 +114,13 @@ def task_kicad_sch_to_data_set():
}
-_data_sets[task_kicad_sch_to_data_set] = []
+_data_sets[task_kicad_sch_to_data_set] = ["kicad-sch", []]
def task_kicad_pcb_to_data_set():
kicad_pcb = _config["kicad_pcb"]
- out_data_set = "kicad-pcb"
- in_data_sets = _data_sets[task_kicad_pcb_to_data_set]
+ out_data_set, in_data_sets = _data_sets[task_kicad_pcb_to_data_set]
def action():
from ee.kicad.pcb import KicadPcb, Module
@@ -154,71 +152,76 @@ def task_kicad_pcb_to_data_set():
}
-_data_sets[task_kicad_pcb_to_data_set] = []
+_data_sets[task_kicad_pcb_to_data_set] = ["kicad-pcb", []]
def task_kicad_create_component_data_set():
- out_data_set = "components"
- in_data_sets = _data_sets[task_kicad_create_component_data_set]
+ out_data_set, in_data_sets = _data_sets[task_kicad_create_component_data_set]
def action():
logger.info("in_data_sets={}, out_data_set={}".format(in_data_sets, out_data_set))
- with _dsm.create_ro(in_data_sets) as in_ds:
- # for o in in_ds.items():
- # logger.info("item: {}/{}".format(o.object_type.name, o.key))
+ in_ds = _dsm.load_data_sets(in_data_sets)
+ # for o in in_ds.items():
+ # logger.info("item: {}/{}".format(o.object_type.name, o.key))
+
+ def map_footprint(footprint):
+ for o in in_ds.items():
+ if not o.object_type.name == "kicad-footprint-mapping":
+ continue
- def map_footprint(footprint):
- for o in in_ds.items():
- if not o.object_type.name == "kicad-footprint-mapping":
- continue
+ common = o.get("common")
+ if common:
+ return common
- common = o.get("common")
- if common:
- return common
+ return footprint
- return footprint
+ with _dsm.create_rw(out_data_set, clean=True) as output:
+ kicad_sch = [o for o in in_ds.items() if o.object_type.name == "kicad-schematic-component"]
- with _dsm.create_rw(out_data_set, clean=True) as output:
- kicad_sch = [o for o in in_ds.items() if o.object_type.name == "kicad-schematic-component"]
+ logger.info("processing {} kicad-sch".format(len(kicad_sch)))
- logger.info("processing {} kicad-sch".format(len(kicad_sch)))
+ ignored_ref_types = {"#PWR", }
- ignored_ref_types = {"#PWR", }
+ for sch in kicad_sch:
+ ref = sch.get("ref")
+ ref_num = sch.get("ref-num")
+ if not ref or not ref_num:
+ logger.debug("Missing ref or ref-num")
+ continue
- for sch in kicad_sch:
- ref = sch.get("ref")
- ref_num = sch.get("ref-num")
- if not ref or not ref_num:
- logger.debug("Missing ref or ref-num")
- continue
+ ref_type = sch.get("ref-type")
+ if not ref_type:
+ logger.debug("Missing ref-type")
+ continue
+
+ if ref_type in ignored_ref_types:
+ continue
- ref_type = sch.get("ref-type")
- if not ref_type or ref_type in ignored_ref_types:
- logger.debug("Missing ref-type or bad ref-type: ref={}, ref-type={}".format(ref, ref_type))
- continue
+ c = output.create_object("component", ref)
+ c.set("ref", ref)
+ c.set("ref-num", ref_num)
+ c.set("ref-type", ref_type)
- c = output.create_object("component", ref)
- c.set("ref", ref)
- c.set("ref-num", ref_num)
- c.set("ref-type", ref_type)
+ fp = sch.get("footprint")
+ if fp:
+ fp = map_footprint(fp)
+ c.set("footprint", fp)
- fp = sch.get("footprint")
- if fp:
- fp = map_footprint(fp)
- c.set("footprint", fp)
+ c.set("mpn", sch.get("field-mpn"))
+ c.set("distributor", sch.get("field-distributor"))
- def pcb_match(o):
- return o.object_type.name == "kicad-pcb-component" and \
- o.get("ref") == ref
+ def pcb_match(o):
+ return o.object_type.name == "kicad-pcb-component" and \
+ o.get("ref") == ref
- pcb = [o for o in in_ds.items() if pcb_match(o)]
+ pcb = [o for o in in_ds.items() if pcb_match(o)]
- if not pcb:
- logger.info("Could not find PCB component for {}".format(ref))
+ if not pcb:
+ logger.info("Could not find PCB component for {}".format(ref))
- # TODO: check that the SCH and PCB footprint are the same
- # c.set("footprint", pcb.)
+ # TODO: check that the SCH and PCB footprint are the same
+ # c.set("footprint", pcb.)
return {
"file_dep": [_dsm.cookie_for_ds(ds) for ds in in_data_sets],
@@ -227,7 +230,7 @@ def task_kicad_create_component_data_set():
}
-_data_sets[task_kicad_create_component_data_set] = ["kicad-sch", "kicad-pcb"]
+_data_sets[task_kicad_create_component_data_set] = ["components", ["kicad-sch", "kicad-pcb"]]
__all__ = [
init.__name__,