board
OCuLink Riser for the Supermicro AIOM Slot
Public Unreviewedby John Lauer
Passive OCP NIC 3.0 SFF card that breaks a Supermicro AIOM slot's PCIe x16 into four OCuLink 4i ports (4 x4, Gen4): 6-layer, 85 ohm, length-matched, DRC-clean KiCad project with Gerbers, BOM and CPL.
main
John Lauer
README: component table per the wiki format, open-source section, no duplicate hero; generators at gen/
39a59ef
7d ago
"""Apply the reference/value field placements of design/silk_plan.json to a SAVED board file in place (KiCad 10.0.5's
IPC server cannot update footprint fields, so this is a disclosed saved-file edit; the editor is closed while it runs
and reopened after). Run with KiCad's python.exe: silk_fields_apply.py <board.kicad_pcb>"""
import json, os, sys
import pcbnew
ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
MM = pcbnew.FromMM
b = pcbnew.LoadBoard(sys.argv[1])
plan = json.load(open(os.path.join(ROOT, "design", "silk_plan.json")))
n = 0
for fl in plan["fields"]:
fp = b.FindFootprintByReference(fl["ref"])
f = fp.Reference() if fl["field"] == "Reference" else fp.Value()
assert f.m_Uuid.AsString() == fl["id"], (fl["ref"], fl["field"], "field identity changed")
f.SetVisible(True)
f.SetLayer(pcbnew.F_SilkS if fl["layer"] == "F.SilkS" else pcbnew.B_SilkS)
f.SetTextSize(pcbnew.VECTOR2I(MM(fl["height"]), MM(fl["height"]))); f.SetTextThickness(MM(fl["stroke"]))
f.SetTextAngleDegrees(fl["rotation"]); f.SetHorizJustify(pcbnew.GR_TEXT_H_ALIGN_CENTER)
f.SetPosition(pcbnew.VECTOR2I(MM(fl["x"]), MM(fl["y"])))
n += 1
pcbnew.SaveBoard(sys.argv[1], b)
print("fields applied:", n)