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