Skip to content

Commit

Permalink
add sod723 footprint (#137)
Browse files Browse the repository at this point in the history
* add sod723

* rmeove comments

* remove soap
  • Loading branch information
techmannih authored Feb 6, 2025
1 parent b4d2bab commit 27ab599
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/fn/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ export { pad } from "./pad"
export { to92 } from "./to92"
export { sod523 } from "./sod523"
export { sop8 } from "./sop8"
export { sod723 } from "./sod723"
99 changes: 99 additions & 0 deletions src/fn/sod723.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import type { AnySoupElement, PcbSilkscreenPath } from "circuit-json"
import { z } from "zod"
import { rectpad } from "../helpers/rectpad"
import { silkscreenRef, type SilkscreenRef } from "src/helpers/silkscreenRef"
import { length } from "circuit-json"

export const sod_def = z.object({
fn: z.string(),
num_pins: z.literal(2).default(2),
w: z.string().default("1.80mm"),
h: z.string().default("1.00mm"),
pl: z.string().default("0.66mm"),
pw: z.string().default("0.5mm"),
pad_spacing: z.string().default("0.8mm"),
})

export const sod723 = (
raw_params: z.input<typeof sod_def>,
): { circuitJson: AnySoupElement[]; parameters: any } => {
const parameters = sod_def.parse(raw_params)

// Define silkscreen reference text
const silkscreenRefText: SilkscreenRef = silkscreenRef(
0,
length.parse(parameters.h),
0.3,
)

const silkscreenLine: PcbSilkscreenPath = {
type: "pcb_silkscreen_path",
layer: "top",
pcb_component_id: "",
route: [
{
x: length.parse(parameters.pad_spacing) / 2,
y: length.parse(parameters.h) / 2,
},
{
x: -length.parse(parameters.w) / 2 - 0.1,
y: length.parse(parameters.h) / 2,
},
{
x: -length.parse(parameters.w) / 2 - 0.1,
y: -length.parse(parameters.h) / 2,
},
{
x: length.parse(parameters.pad_spacing) / 2,
y: -length.parse(parameters.h) / 2,
},
],
stroke_width: 0.1,
pcb_silkscreen_path_id: "",
}

return {
circuitJson: sodWithoutParsing(parameters).concat(
silkscreenLine as AnySoupElement,
silkscreenRefText as AnySoupElement,
),
parameters,
}
}

// Get coordinates for SOD pads
export const getSodCoords = (parameters: {
pn: number
pad_spacing: number
}) => {
const { pn, pad_spacing } = parameters

if (pn === 1) {
return { x: -pad_spacing / 2, y: 0 }
// biome-ignore lint/style/noUselessElse: <explanation>
} else {
return { x: pad_spacing / 2, y: 0 }
}
}

// Function to generate SOD pads
export const sodWithoutParsing = (parameters: z.infer<typeof sod_def>) => {
const pads: AnySoupElement[] = []

for (let i = 1; i <= parameters.num_pins; i++) {
const { x, y } = getSodCoords({
pn: i,
pad_spacing: Number.parseFloat(parameters.pad_spacing),
})
pads.push(
rectpad(
i,
x,
y,
Number.parseFloat(parameters.pl),
Number.parseFloat(parameters.pw),
),
)
}
return pads
}
13 changes: 13 additions & 0 deletions tests/__snapshots__/sod723.snap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions tests/sod723.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { test, expect } from "bun:test"
import { convertCircuitJsonToPcbSvg } from "circuit-to-svg"
import { fp } from "../src/footprinter"

test("sod723", () => {
const circuitJson = fp.string("sod723").circuitJson()
const svgContent = convertCircuitJsonToPcbSvg(circuitJson)
expect(svgContent).toMatchSvgSnapshot(import.meta.path, "sod723")
})

0 comments on commit 27ab599

Please sign in to comment.