diff --git a/src/fn/index.ts b/src/fn/index.ts index b719f9a4..45b96096 100644 --- a/src/fn/index.ts +++ b/src/fn/index.ts @@ -93,6 +93,7 @@ export { smdpinheader } from "./smdpinheader" export { platedhole } from "./platedhole" export { sot } from "./sot" export { sot343 } from "./sot343" +export { sot343bfp650 } from "./sot343bfp650" export { m2host } from "./m2host" export { mountedpcbmodule } from "./mountedpcbmodule" export { to92l } from "./to92l" diff --git a/src/fn/sot343bfp650.ts b/src/fn/sot343bfp650.ts new file mode 100644 index 00000000..666de7b2 --- /dev/null +++ b/src/fn/sot343bfp650.ts @@ -0,0 +1,52 @@ +import type { AnyCircuitElement, PcbCourtyardRect } from "circuit-json" +import { z } from "zod" +import { rectpad } from "../helpers/rectpad" +import { silkscreenRef } from "../helpers/silkscreenRef" +import { silkscreenpath } from "../helpers/silkscreenpath" +import { base_def } from "../helpers/zod/base_def" + +export const sot343bfp650_def = base_def.extend({ + fn: z.literal("sot343bfp650"), + num_pins: z.literal(4).default(4), +}) + +export const sot343bfp650 = ( + rawParams: z.input, +): { circuitJson: AnyCircuitElement[]; parameters: any } => { + const parameters = sot343bfp650_def.parse(rawParams) + const pads = [ + rectpad(1, -0.65, -1, 0.7, 0.7), + rectpad(2, 0.5, -1, 0.9, 0.7), + rectpad(3, 0.65, 1, 0.7, 0.7), + rectpad(4, -0.65, 1, 0.7, 0.7), + ] + const silkscreen = [ + silkscreenpath([ + { x: -1, y: -0.2 }, + { x: -1, y: 0.2 }, + ]), + silkscreenpath([ + { x: 1, y: 0.2 }, + { x: 1, y: -0.2 }, + ]), + ] + const courtyard: PcbCourtyardRect = { + type: "pcb_courtyard_rect", + pcb_courtyard_rect_id: "", + pcb_component_id: "", + center: { x: 0, y: 0 }, + width: 3, + height: 3.2, + layer: "top", + } + + return { + circuitJson: [ + ...pads, + ...silkscreen, + silkscreenRef(0, 2.1, 0.4), + courtyard, + ], + parameters, + } +} diff --git a/src/footprinter.ts b/src/footprinter.ts index 6275af64..625d84cd 100644 --- a/src/footprinter.ts +++ b/src/footprinter.ts @@ -312,6 +312,7 @@ export type Footprinter = { sot323: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw"> sot89: () => FootprinterParamsBuilder<"w" | "p" | "pl" | "pw" | "h"> sot343: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw"> + sot343bfp650: () => FootprinterParamsBuilder sod323w: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pl" | "pw"> smc: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl"> minimelf: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl"> diff --git a/tests/__snapshots__/sot343bfp650_c151520.snap.svg b/tests/__snapshots__/sot343bfp650_c151520.snap.svg new file mode 100644 index 00000000..fcd68e13 --- /dev/null +++ b/tests/__snapshots__/sot343bfp650_c151520.snap.svg @@ -0,0 +1 @@ +{REF} \ No newline at end of file diff --git a/tests/sot343bfp650.test.ts b/tests/sot343bfp650.test.ts new file mode 100644 index 00000000..4dfbdcfe --- /dev/null +++ b/tests/sot343bfp650.test.ts @@ -0,0 +1,19 @@ +import { expect, test } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" + +test("sot343bfp650 matches C151520", () => { + const circuitJson = fp.string("sot343bfp650").circuitJson() + const pads = circuitJson.filter((element) => element.type === "pcb_smtpad") + + expect(pads).toHaveLength(4) + expect(pads[0]).toMatchObject({ x: -0.65, y: -1, width: 0.7, height: 0.7 }) + expect(pads[1]).toMatchObject({ x: 0.5, y: -1, width: 0.9, height: 0.7 }) + expect(pads[2]).toMatchObject({ x: 0.65, y: 1, width: 0.7, height: 0.7 }) + expect(pads[3]).toMatchObject({ x: -0.65, y: 1, width: 0.7, height: 0.7 }) + + expect(convertCircuitJsonToPcbSvg(circuitJson)).toMatchSvgSnapshot( + import.meta.path, + "sot343bfp650_c151520", + ) +})