Skip to content

Commit

Permalink
fix: update the source_trace name to save more info for later stage
Browse files Browse the repository at this point in the history
  • Loading branch information
imrishabh18 committed Jan 28, 2025
1 parent 1fd1a9b commit 2aefadb
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Debug from "debug"
import { findOrCreateViaPadstack } from "./findOrCreateViaPadstack"
import { getDsnTraceOperationsWrapper } from "./DsnTraceOperationsWrapper"
import { su } from "@tscircuit/soup-util"
import { getCombinedSourcePortName } from "lib/utils/get-combined-source-port-name"

const debug = Debug("dsn-converter:processPcbTraces")

Expand Down Expand Up @@ -62,9 +63,10 @@ export function processPcbTraces(
source_trace.connected_source_net_ids.includes(n.source_net_id),
)
debug("PCB TRACE\n----------\n", pcbTrace)
const sourceTraceConnectedPortIds = getCombinedSourcePortName(circuitElements, source_trace?.connected_source_port_ids || [])
const netName =
source_net?.name ||
pcbTrace.source_trace_id ||
`${pcbTrace.source_trace_id}--${sourceTraceConnectedPortIds}` ||
dsnWrapper.getNextNetId()

let currentLayer = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const convertNetsToSourceNetsAndTraces = ({
const result: Array<SourceNet | SourceTrace> = []
const { nets } = dsnPcb.network

let source_trace_id = 0
let source_trace_id = dsnPcb.wiring.wires.length
for (const { name, pins } of nets) {
if (name.startsWith("unconnected-")) continue
const source_net: SourceNet = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type {
AnyCircuitElement,
PcbTrace,
PcbTraceRoutePointWire,
SourceTrace,
} from "circuit-json"
import { type Matrix, applyToPoint } from "transformation-matrix"
import type { Wiring } from "../../types"
Expand All @@ -17,7 +18,7 @@ export const convertWiringPathToPcbTraces = ({
wire: Wiring["wires"][number]
transformUmToMm: Matrix
netName: string
}): PcbTrace[] => {
}): Array<PcbTrace | SourceTrace> => {
const coordinates = wire.path!.coordinates
// Convert coordinates to circuit space using the transformation matrix
const points: Array<{ x: number; y: number }> = []
Expand Down Expand Up @@ -45,10 +46,17 @@ export const convertWiringPathToPcbTraces = ({
const pcbTrace: PcbTrace = {
type: "pcb_trace",
pcb_trace_id: `pcb_trace_${netName}`,
source_trace_id: netName,
source_trace_id: netName.split("-")[0],
route: routePoints as PcbTraceRoutePointWire[],
}
return [pcbTrace]

const sourceTrace: SourceTrace = {
type: "source_trace",
source_trace_id: netName.split("--")[0],
connected_source_net_ids: [],
connected_source_port_ids: netName.split("--").slice(1),
}
return [pcbTrace, sourceTrace]
}

return []
Expand Down
46 changes: 46 additions & 0 deletions lib/utils/get-combined-source-port-name.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import type {
AnyCircuitElement,
SourceComponentBase,
SourcePort,
} from "circuit-json"

interface SourcePortInfo {
displayName: string
}

export function getCombinedSourcePortName(
circuitElements: AnyCircuitElement[],
connectedSourcePortIds: string[],
): string {
const portInfos: SourcePortInfo[] = []

for (const portId of connectedSourcePortIds) {
// Find the source port
const sourcePort = circuitElements.find(
(el) => el.type === "source_port" && el.source_port_id === portId,
) as SourcePort | undefined

if (!sourcePort) continue

// Find the associated component
const sourceComponent = circuitElements.find(
(el) =>
el.type === "source_component" &&
el.source_component_id === sourcePort.source_component_id,
) as SourceComponentBase

if (!sourceComponent) continue

// Construct display name combining component name and port name
const componentName =
sourceComponent.name || sourceComponent.source_component_id
const portName =
sourcePort.name || sourcePort.pin_number?.toString() || portId

portInfos.push({
displayName: `Pad${portName.replace("pin", "")}_${componentName}_${sourcePort.source_component_id}`,
})
}

return portInfos.map((p) => p.displayName).join("--")
}
19 changes: 19 additions & 0 deletions tests/repros/repro8-multiple-traces-in-one-net.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { expect, test } from "bun:test"
import { convertCircuitJsonToDsnString, parseDsnToCircuitJson } from "lib"
import threeSubcircuitCircuitConnectedToSamePorts from "../assets/repro/three-subcircuit-connected-to-same-ports.json"
import { su } from "@tscircuit/soup-util"

test("circuit json -> dsn -> circuit json", async () => {
const dsnFile = convertCircuitJsonToDsnString(threeSubcircuitCircuitConnectedToSamePorts as any)
const circuitJson = parseDsnToCircuitJson(dsnFile)

const source_trace = su(circuitJson).source_trace.list()
expect(source_trace.length).toBe(2)

const pcb_trace = su(circuitJson).pcb_trace.list()
expect(pcb_trace.length).toBe(1)
expect(pcb_trace[0].source_trace_id).toBe(source_trace[0].source_trace_id)

// The other source_trace is having multiple connected_source_port_ids
expect(source_trace[1].connected_source_port_ids.length).toBe(3)
})

0 comments on commit 2aefadb

Please sign in to comment.