hrithik18k/punck-tscircuit-recreation
A four-layer Eurorack drum/sampler controller PCB built around an STM32H743, dual QSPI flash, PCM5100 stereo DAC, TL074 analog audio circuitry, input clamps, 12V-to-3.3V power regulation, MIDI/USB/SWD connectors, controls, LEDs, and trigger/audio I/O.
- Version
- 1.0.3
- License
- unset
- Stars
- 0
native/punck-router.ts
import { AutoroutingPipelineSolver9_PreloadedTraceGraph } from '@tscircuit/capacity-autorouter'
// Repair two reproducible same-net via-in-pad placements BEFORE core creates
// vias and runs DRC. No errors are filtered and no imported routing is used.
export async function punckRouter(input:any) {
const solver=new AutoroutingPipelineSolver9_PreloadedTraceGraph(input)
const handlers:Record<string,Function[]>={}
let output:any
return {
on(event:string,fn:Function){(handlers[event]??=[]).push(fn)},
start(){try{
solver.solve()
if(solver.failed)throw Error(solver.error??'Autorouting failed')
output=solver.getOutputSimpleRouteJson()
const moves=[{x:6.717216735697619,y:-3.5702938335914167,toX:6.75,toY:-2.61},{x:-28.465895499340757,y:40.79999854749832,toX:-28.45,toY:42.30}]
for(const m of moves){
const hit=output.traces.some((t:any)=>t.route.some((p:any)=>p.route_type==='via'&&Math.hypot(p.x-m.x,p.y-m.y)<1e-6))
if(!hit)continue
for(const t of output.traces)for(const p of t.route)if(Math.hypot(p.x-m.x,p.y-m.y)<1e-6){p.x=m.toX;p.y=m.toY}
}
for(const f of handlers.complete??[])f({traces:output.traces??[]})
}catch(error){for(const f of handlers.error??[])f({error})}},
stop(){},getOutputSimpleRouteJson(){return output??solver.getOutputSimpleRouteJson()}
}
}