MustafaMulla29/stride-pedometer
This code defines schematic symbols and 3D footprints for various hardware components such as antennas, sensors, regulators, and connectors used in electronic circuit design.
- Version
- 1.0.4
- License
- unset
- Stars
- 0
scripts/check-routing.ts
import { readFileSync, writeFileSync } from 'node:fs'
import * as checks from '@tscircuit/checks'
const file=process.argv[2]??'dist/index/circuit.json'
const compiled=JSON.parse(readFileSync(file,'utf8'))
const data=compiled.filter((x:any)=>!x.type.endsWith('_error'))
const layerTransitionErrors:any[]=[]
for(const trace of data.filter((x:any)=>x.type==='pcb_trace')){
const route=trace.route??[]
for(let i=1;i<route.length;i++){
const a=route[i-1], b=route[i]
if(a.route_type!=='wire'||b.route_type!=='wire'||a.layer===b.layer)continue
const samePoint=Math.hypot(a.x-b.x,a.y-b.y)<1e-6
const via=samePoint&&data.some((v:any)=>v.type==='pcb_via'&&Math.hypot(v.x-a.x,v.y-a.y)<1e-6&&v.layers?.includes(a.layer)&&v.layers?.includes(b.layer))
if(via)continue
layerTransitionErrors.push({
type:'pcb_trace_error',pcb_trace_id:trace.pcb_trace_id,
message:`${trace.pcb_trace_id} changes from ${a.layer} to ${b.layer} without a physical via at the transition`,
from:{x:a.x,y:a.y,layer:a.layer},to:{x:b.x,y:b.y,layer:b.layer}
})
}
}
const errors=[
...layerTransitionErrors,
...checks.checkSourceTracesHavePcbTraces(data),
...checks.checkSourceTracesMatchPcbTraceThickness(data),
...checks.checkViasOffBoard(data),
...checks.checkEachPcbPortConnectedToPcbTraces(data),
...checks.checkEachPcbTraceNonOverlapping(data,{minClearance:.09}),
...checks.checkPadPadClearance(data,{minClearance:.09}),
...checks.checkPadTraceClearance(data,{minClearance:.09}),
...checks.checkViaPadClearance(data,{minClearance:.09}),
...checks.checkViaTraceClearance(data,{minClearance:.09}),
...checks.checkDifferentNetViaSpacing(data,{minClearance:.2}),
...checks.checkSameNetViaSpacing(data,{minClearance:.2}),
...checks.checkTracesAreContiguous(data),
...checks.checkPcbCopperOverKeepout(data),
...checks.checkPcbTracesOutOfBoard(data,{margin:.3}),
]
for(const issue of compiled.filter((x:any)=>x.type.endsWith('_error'))){
if(!errors.some((existing:any)=>existing.type===issue.type&&existing.message===issue.message))errors.push(issue)
}
writeFileSync('review/routing-errors.json',JSON.stringify(errors,null,2)+'\n')
console.log(`${errors.length} routing findings`)
for(const e of errors)console.log(e.message)
if(errors.length)process.exitCode=1