AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c

A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.

Version
0.1.0-prototype.19
License
unset
Stars
0

tooling/patches/core.patch

--- a/lib/components/primitive-components/PlatedHole.ts
+++ b/lib/components/primitive-components/PlatedHole.ts
@@ -161,26 +161,28 @@
       })
 
       this.pcb_plated_hole_id = pcb_plated_hole.pcb_plated_hole_id
-      db.pcb_solder_paste.insert({
-        layer: "top",
-        shape: "circle",
-        // @ts-ignore: no idea why this is triggering
-        radius: props.outerDiameter / 2,
-        x: position.x,
-        y: position.y,
-        subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
-        pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
-      })
-      db.pcb_solder_paste.insert({
-        layer: "bottom",
-        shape: "circle",
-        // @ts-ignore: no idea why this is triggering
-        radius: props.outerDiameter / 2,
-        x: position.x,
-        y: position.y,
-        subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
-        pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
-      })
+      if (!props.solderPasteDisabled)
+        db.pcb_solder_paste.insert({
+          layer: "top",
+          shape: "circle",
+          // @ts-ignore: no idea why this is triggering
+          radius: props.outerDiameter / 2,
+          x: position.x,
+          y: position.y,
+          subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
+          pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
+        })
+      if (!props.solderPasteDisabled)
+        db.pcb_solder_paste.insert({
+          layer: "bottom",
+          shape: "circle",
+          // @ts-ignore: no idea why this is triggering
+          radius: props.outerDiameter / 2,
+          x: position.x,
+          y: position.y,
+          subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
+          pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
+        })
     } else if (props.shape === "pill" && props.rectPad) {
       const pcb_plated_hole = db.pcb_plated_hole.insert({
         pcb_component_id,
@@ -235,28 +237,30 @@
       } as PcbPlatedHoleOval)
 
       this.pcb_plated_hole_id = pcb_plated_hole.pcb_plated_hole_id
-      db.pcb_solder_paste.insert({
-        layer: "top",
-        shape: props.shape,
-        // @ts-ignore: no idea why this is triggering
-        width: props.outerWidth,
-        height: props.outerHeight,
-        x: position.x,
-        y: position.y,
-        subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
-        pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
-      })
-      db.pcb_solder_paste.insert({
-        layer: "bottom",
-        shape: props.shape,
-        // @ts-ignore: no idea why this is triggering
-        width: props.outerWidth,
-        height: props.outerHeight,
-        x: position.x,
-        y: position.y,
-        subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
-        pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
-      })
+      if (!props.solderPasteDisabled)
+        db.pcb_solder_paste.insert({
+          layer: "top",
+          shape: props.shape,
+          // @ts-ignore: no idea why this is triggering
+          width: props.outerWidth,
+          height: props.outerHeight,
+          x: position.x,
+          y: position.y,
+          subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
+          pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
+        })
+      if (!props.solderPasteDisabled)
+        db.pcb_solder_paste.insert({
+          layer: "bottom",
+          shape: props.shape,
+          // @ts-ignore: no idea why this is triggering
+          width: props.outerWidth,
+          height: props.outerHeight,
+          x: position.x,
+          y: position.y,
+          subcircuit_id: subcircuit?.subcircuit_id ?? undefined,
+          pcb_group_id: this.getGroup()?.pcb_group_id ?? undefined,
+        })
     } else if (props.shape === "circular_hole_with_rect_pad") {
       const pcb_plated_hole = db.pcb_plated_hole.insert({
         pcb_component_id,
--- a/lib/IsolatedCircuit.ts
+++ b/lib/IsolatedCircuit.ts
@@ -287,10 +287,7 @@
   }
 
   getCoreVersion(): string {
-    const [major, minor, patch] = pkgJson.version.split(".").map(Number)
-    // We add one to the patch version because the build increments the version
-    // after the build (it's a hack- won't work for major releases)
-    return `${major}.${minor}.${patch + 1}`
+    return pkgJson.version
   }
 
   async preview(
--- a/lib/utils/autorouting/getSimpleRouteJsonFromCircuitJson.ts
+++ b/lib/utils/autorouting/getSimpleRouteJsonFromCircuitJson.ts
@@ -289,16 +289,6 @@
     }),
   )
 
-  // Add every equivalent ID from the shared connectivity map to each obstacle.
-  for (const obstacle of obstacles) {
-    const additionalIds = obstacle.connectedTo.flatMap((id) =>
-      sharedConnMap.getIdsConnectedToNet(id),
-    )
-    obstacle.connectedTo = [
-      ...new Set([...obstacle.connectedTo, ...additionalIds]),
-    ]
-  }
-
   // Build mapping from source_port_id to internal connection ID for interconnects
   const internalConnections = db.source_component_internal_connection.list()
   const sourcePortIdToInternalConnectionId = new Map<string, string>()
@@ -351,6 +341,18 @@
         }
       }
     }
+  }
+
+  // Classify internal links before expanding aliases: another pad on the same
+  // net must not make fixed copper or a plane assignable to unrelated nets.
+  // Add every equivalent ID from the shared connectivity map to each obstacle.
+  for (const obstacle of obstacles) {
+    const additionalIds = obstacle.connectedTo.flatMap((id) =>
+      sharedConnMap.getIdsConnectedToNet(id),
+    )
+    obstacle.connectedTo = [
+      ...new Set([...obstacle.connectedTo, ...additionalIds]),
+    ]
   }
 
   // Calculate bounds
--- a/lib/components/primitive-components/Group/Group.ts
+++ b/lib/components/primitive-components/Group/Group.ts
@@ -882,6 +882,11 @@
           subcircuitComponent: this,
         })
         simpleRouteJson.allowViaInPad = autorouterConfig.allowViaInPad
+        if (autorouterConfig.traceClearance !== undefined) {
+          simpleRouteJson.defaultObstacleMargin = distance.parse(
+            autorouterConfig.traceClearance,
+          )
+        }
 
         const { autorouting_result } = await fetchWithDebug(
           `${serverUrl}/autorouting/solve`,
@@ -1497,6 +1502,11 @@
         routingPhasePlan.drcTolerances,
       )
       simpleRouteJson.allowViaInPad = phaseAutorouterConfig.allowViaInPad
+      if (phaseAutorouterConfig.traceClearance !== undefined) {
+        simpleRouteJson.defaultObstacleMargin = distance.parse(
+          phaseAutorouterConfig.traceClearance,
+        )
+      }
 
       const getPrecomputedRoutingResult = usesPreviousStageOutput
         ? undefined