Initial commit
This commit is contained in:
67
.ato/modules/atopile/mounting-holes/MountingHole.py
Normal file
67
.ato/modules/atopile/mounting-holes/MountingHole.py
Normal file
@@ -0,0 +1,67 @@
|
||||
# This file is part of the faebryk project
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import logging
|
||||
from enum import Enum, StrEnum
|
||||
from pathlib import Path
|
||||
|
||||
import faebryk.library._F as F
|
||||
from faebryk.core.module import Module
|
||||
from faebryk.libs.iso_metric_screw_thread import Iso262_MetricScrewThreadSizes
|
||||
from faebryk.libs.library import L
|
||||
from faebryk.libs.part_lifecycle import PartLifecycle
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MountingHole(Module):
|
||||
class PadType(StrEnum):
|
||||
NoPad = ""
|
||||
Pad = "Pad"
|
||||
Pad_TopBottom = "Pad_TopBottom"
|
||||
Pad_TopOnly = "Pad_TopOnly"
|
||||
Pad_Via = "Pad_Via"
|
||||
|
||||
# We currently only have footprints for these sizes
|
||||
class SupportedMetricScrewSizes(Enum):
|
||||
M2 = Iso262_MetricScrewThreadSizes.M2.value
|
||||
M2_5 = Iso262_MetricScrewThreadSizes.M2_5.value
|
||||
M3 = Iso262_MetricScrewThreadSizes.M3.value
|
||||
M4 = Iso262_MetricScrewThreadSizes.M4.value
|
||||
M5 = Iso262_MetricScrewThreadSizes.M5.value
|
||||
M6 = Iso262_MetricScrewThreadSizes.M6.value
|
||||
M8 = Iso262_MetricScrewThreadSizes.M8.value
|
||||
|
||||
contact: F.Electrical
|
||||
|
||||
attach_to_footprint: F.can_attach_to_footprint_symmetrically
|
||||
designator_prefix = L.f_field(F.has_designator_prefix)(
|
||||
F.has_designator_prefix.Prefix.H
|
||||
)
|
||||
|
||||
def footprint_name(self) -> str:
|
||||
# e.g. MountingHole_2.7mm_M2.5_Pad_TopOnly
|
||||
size_metric = self._metric_screw_size
|
||||
size_mm = f"{size_metric.value}mm"
|
||||
padtype_name = self._pad_type.value
|
||||
if padtype_name:
|
||||
padtype_name = f"_{padtype_name}"
|
||||
|
||||
return f"MountingHole_{size_mm}_{size_metric.name}{padtype_name}"
|
||||
|
||||
def __init__(self, metric_screw_size: SupportedMetricScrewSizes, pad_type: PadType):
|
||||
super().__init__()
|
||||
self._metric_screw_size = metric_screw_size
|
||||
self._pad_type = pad_type
|
||||
|
||||
def __preinit__(self):
|
||||
fp_name = self.footprint_name()
|
||||
fp_lib_name = "MountingHole"
|
||||
fp_dir = Path(__file__).parent / "footprints" / fp_lib_name
|
||||
fp_path = fp_dir / f"{fp_name}.kicad_mod"
|
||||
|
||||
fp = F.KicadFootprint.from_path(fp_path, lib_name=fp_lib_name)
|
||||
self.get_trait(F.can_attach_to_footprint).attach(fp)
|
||||
|
||||
lifecycle = PartLifecycle.singleton()
|
||||
lifecycle.library._insert_fp_lib(fp_lib_name, fp_dir)
|
||||
Reference in New Issue
Block a user