Skip to content
This repository was archived by the owner on Dec 10, 2024. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 9 additions & 12 deletions src/faebryk/exporters/pcb/kicad/transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@

logger = logging.getLogger(__name__)

FPad = F.Pad
FNet = F.Net
FFootprint = F.Footprint

PCB = C_kicad_pcb_file.C_kicad_pcb
Footprint = PCB.C_pcb_footprint
Expand Down Expand Up @@ -249,7 +246,7 @@ def attach(self):
pads = [
pad
for pad in fp.pads
if pad.name == pin_names[cast_assert(FPad, fpad)]
if pad.name == pin_names[cast_assert(F.Pad, fpad)]
]
fpad.add(PCB_Transformer.has_linked_kicad_pad_defined(fp, pads, self))

Expand Down Expand Up @@ -304,7 +301,7 @@ def get_all_footprints(self) -> List[tuple[Module, Footprint]]:
)
]

def get_net(self, net: FNet) -> Net:
def get_net(self, net: F.Net) -> Net:
nets = {pcb_net.name: pcb_net for pcb_net in self.pcb.nets}
return nets[net.get_trait(F.has_overriden_name).get_name()]

Expand Down Expand Up @@ -484,7 +481,7 @@ def geo_to_lines(
return list(poly.exterior.coords)

@staticmethod
def _get_pad(ffp: FFootprint, intf: F.Electrical):
def _get_pad(ffp: F.Footprint, intf: F.Electrical):
pin_map = ffp.get_trait(F.has_kicad_footprint).get_pin_names()
pin_name = find(
pin_map.items(),
Expand All @@ -498,32 +495,32 @@ def _get_pad(ffp: FFootprint, intf: F.Electrical):

@staticmethod
def get_pad(intf: F.Electrical) -> tuple[Footprint, Pad, Node]:
obj, ffp = FFootprint.get_footprint_of_parent(intf)
obj, ffp = F.Footprint.get_footprint_of_parent(intf)
fp, pad = PCB_Transformer._get_pad(ffp, intf)

return fp, pad, obj

@staticmethod
def get_pad_pos_any(intf: F.Electrical) -> list[tuple[FPad, Point]]:
def get_pad_pos_any(intf: F.Electrical) -> list[tuple[F.Pad, Point]]:
try:
fpads = FPad.find_pad_for_intf_with_parent_that_has_footprint(intf)
fpads = F.Pad.find_pad_for_intf_with_parent_that_has_footprint(intf)
except KeyErrorNotFound:
# intf has no parent with footprint
return []

return [PCB_Transformer.get_fpad_pos(fpad) for fpad in fpads]

@staticmethod
def get_pad_pos(intf: F.Electrical) -> tuple[FPad, Point] | None:
def get_pad_pos(intf: F.Electrical) -> tuple[F.Pad, Point] | None:
try:
fpad = FPad.find_pad_for_intf_with_parent_that_has_footprint_unique(intf)
fpad = F.Pad.find_pad_for_intf_with_parent_that_has_footprint_unique(intf)
except ValueError:
return None

return PCB_Transformer.get_fpad_pos(fpad)

@staticmethod
def get_fpad_pos(fpad: FPad):
def get_fpad_pos(fpad: F.Pad):
fp, pad = fpad.get_trait(PCB_Transformer.has_linked_kicad_pad).get_pad()
if len(pad) > 1:
raise NotImplementedError(
Expand Down
2 changes: 1 addition & 1 deletion src/faebryk/library/DIP.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def pins(self):

@L.rt_field
def kicad_footprint(self):
class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs):
class _has_kicad_footprint(F.has_kicad_footprint.impl()):
@staticmethod
def get_kicad_footprint() -> str:
return "Package_DIP:DIP-{leads}_W{spacing:.2f}mm{longpads}".format(
Expand Down
2 changes: 1 addition & 1 deletion src/faebryk/library/QFN.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def pins(self):

@L.rt_field
def kicad_footprint(self):
class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs):
class _has_kicad_footprint(F.has_kicad_footprint.impl()):
@staticmethod
def get_kicad_footprint() -> str:
return "Package_DFN_QFN:QFN-{leads}-{ep}EP_{size_x}x{size_y}mm_P{pitch}mm_EP{ep_x}x{ep_y}mm{vias}".format( # noqa: E501
Expand Down
2 changes: 1 addition & 1 deletion src/faebryk/library/SMDTwoPin.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def __init__(self, type: Type) -> None:

pins = L.list_field(2, F.Pad)

class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs):
class _has_kicad_footprint(F.has_kicad_footprint.impl()):
def get_kicad_footprint(self) -> str:
obj = self.obj
assert isinstance(obj, SMDTwoPin)
Expand Down
2 changes: 1 addition & 1 deletion src/faebryk/library/SOIC.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def __init__(
def pins(self):
return times(self._pin_cnt, F.Pad)

class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs):
class _has_kicad_footprint(F.has_kicad_footprint.impl()):
def get_kicad_footprint(self) -> str:
obj = self.obj
assert isinstance(obj, SOIC)
Expand Down
43 changes: 21 additions & 22 deletions src/faebryk/library/_F.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,16 @@
from faebryk.library.LogicOps import LogicOps
from faebryk.library.can_attach_to_footprint import can_attach_to_footprint
from faebryk.library.can_attach_via_pinmap import can_attach_via_pinmap
from faebryk.library.has_footprint_impl import has_footprint_impl
from faebryk.library.has_footprint_defined import has_footprint_defined
from faebryk.library.has_kicad_footprint import has_kicad_footprint
from faebryk.library.Pad import Pad
from faebryk.library.Button import Button
from faebryk.library.GDT import GDT
from faebryk.library.has_pin_association_heuristic_lookup_table import has_pin_association_heuristic_lookup_table
from faebryk.library.LogicGate import LogicGate
from faebryk.library.has_footprint_defined import has_footprint_defined
from faebryk.library.can_attach_to_footprint_via_pinmap import can_attach_to_footprint_via_pinmap
from faebryk.library.Net import Net
from faebryk.library.can_attach_to_footprint_symmetrically import can_attach_to_footprint_symmetrically
from faebryk.library.can_attach_via_pinmap_pinlist import can_attach_via_pinmap_pinlist
from faebryk.library.has_equal_pins import has_equal_pins
from faebryk.library.has_kicad_manual_footprint import has_kicad_manual_footprint
Expand All @@ -99,32 +100,22 @@
from faebryk.library.Diode import Diode
from faebryk.library.MOSFET import MOSFET
from faebryk.library.LogicGates import LogicGates
from faebryk.library.can_attach_to_footprint_symmetrically import can_attach_to_footprint_symmetrically
from faebryk.library.can_attach_to_footprint_via_pinmap import can_attach_to_footprint_via_pinmap
from faebryk.library.B4B_ZR_SM4_TF import B4B_ZR_SM4_TF
from faebryk.library.DE9Connector import DE9Connector
from faebryk.library.pf_533984002 import pf_533984002
from faebryk.library.has_pcb_routing_strategy_manual import has_pcb_routing_strategy_manual
from faebryk.library.has_pcb_routing_strategy_via_to_layer import has_pcb_routing_strategy_via_to_layer
from faebryk.library.can_attach_via_pinmap_equal import can_attach_via_pinmap_equal
from faebryk.library.has_equal_pins_in_ifs import has_equal_pins_in_ifs
from faebryk.library.has_kicad_footprint_equal_ifs import has_kicad_footprint_equal_ifs
from faebryk.library.KicadFootprint import KicadFootprint
from faebryk.library.TVS import TVS
from faebryk.library.Capacitor import Capacitor
from faebryk.library.Crystal import Crystal
from faebryk.library.Fuse import Fuse
from faebryk.library.Inductor import Inductor
from faebryk.library.Resistor import Resistor
from faebryk.library.Switch import Switch
from faebryk.library.B4B_ZR_SM4_TF import B4B_ZR_SM4_TF
from faebryk.library.DE9Connector import DE9Connector
from faebryk.library.pf_533984002 import pf_533984002
from faebryk.library.DIP import DIP
from faebryk.library.QFN import QFN
from faebryk.library.SMDTwoPin import SMDTwoPin
from faebryk.library.SOIC import SOIC
from faebryk.library.has_kicad_footprint_equal_ifs_defined import has_kicad_footprint_equal_ifs_defined
from faebryk.library.Mounting_Hole import Mounting_Hole
from faebryk.library.can_be_surge_protected import can_be_surge_protected
from faebryk.library.is_surge_protected import is_surge_protected
from faebryk.library.can_attach_via_pinmap_equal import can_attach_via_pinmap_equal
from faebryk.library.has_equal_pins_in_ifs import has_equal_pins_in_ifs
from faebryk.library.has_kicad_footprint_equal_ifs import has_kicad_footprint_equal_ifs
from faebryk.library.KicadFootprint import KicadFootprint
from faebryk.library.TVS import TVS
from faebryk.library.MultiCapacitor import MultiCapacitor
from faebryk.library.can_be_decoupled import can_be_decoupled
from faebryk.library.is_decoupled import is_decoupled
Expand All @@ -133,13 +124,21 @@
from faebryk.library.Potentiometer import Potentiometer
from faebryk.library.ResistorVoltageDivider import ResistorVoltageDivider
from faebryk.library.Resistor_Voltage_Divider import Resistor_Voltage_Divider
from faebryk.library.is_surge_protected_defined import is_surge_protected_defined
from faebryk.library.DIP import DIP
from faebryk.library.QFN import QFN
from faebryk.library.SMDTwoPin import SMDTwoPin
from faebryk.library.SOIC import SOIC
from faebryk.library.has_kicad_footprint_equal_ifs_defined import has_kicad_footprint_equal_ifs_defined
from faebryk.library.Mounting_Hole import Mounting_Hole
from faebryk.library.can_be_surge_protected import can_be_surge_protected
from faebryk.library.is_surge_protected import is_surge_protected
from faebryk.library.is_decoupled_nodes import is_decoupled_nodes
from faebryk.library.Ethernet import Ethernet
from faebryk.library.RS485 import RS485
from faebryk.library.USB_Type_C_Receptacle_24_pin import USB_Type_C_Receptacle_24_pin
from faebryk.library.can_be_surge_protected_defined import can_be_surge_protected_defined
from faebryk.library.is_surge_protected_defined import is_surge_protected_defined
from faebryk.library.can_be_decoupled_defined import can_be_decoupled_defined
from faebryk.library.can_be_surge_protected_defined import can_be_surge_protected_defined
from faebryk.library.ElectricPower import ElectricPower
from faebryk.library.B0505S_1WR3 import B0505S_1WR3
from faebryk.library.Battery import Battery
Expand Down
12 changes: 10 additions & 2 deletions src/faebryk/library/has_footprint_defined.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@
import faebryk.library._F as F


class has_footprint_defined(F.has_footprint_impl):
class has_footprint_defined(F.has_footprint.impl()):
def __init__(self, fp: F.Footprint) -> None:
super().__init__()
self.fp = fp

def on_obj_set(self):
self.set_footprint(self.fp)
self._set_footprint(self.fp)

def _set_footprint(self, fp: F.Footprint):
self.obj.add(fp, name="footprint")

def get_footprint(self) -> F.Footprint:
fps = self.obj.get_children(direct_only=True, types=F.Footprint)
assert len(fps) == 1, f"In obj: {self.obj}: candidates: {fps}"
return next(iter(fps))
14 changes: 0 additions & 14 deletions src/faebryk/library/has_footprint_impl.py

This file was deleted.

9 changes: 0 additions & 9 deletions src/faebryk/library/has_kicad_footprint_equal_ifs.py

This file was deleted.