astra/am3352-sbc
A 4-layer AM3352 single-board computer with 128‑MiB DDR3, PMIC power regulation, USB‑C 5‑V PD input, dual USB host ports, HDMI output with ESD protection, microSD/UART/JTAG interfaces, addressable RGB indicators, and a PWM-driven buzzer.
- Version
- 0.1.19
- License
- unset
- Stars
- 0
design/compact-routing-input.ts
import type {SimpleRouteJson} from '@tscircuit/bus-lanes-solver';
/** Remove unused repeated port aliases, preserving every routing owner, pad's
* own identifiers, and explicit net identifiers. Geometry is never changed.
* Ground pads otherwise repeat thousands of unrelated ports in each obstacle.
*/
export function compactRoutingInput<T extends SimpleRouteJson>(input:T):T {
const used=new Set<string>();
for(const c of input.connections){
used.add(c.name);if(c.source_trace_id)used.add(c.source_trace_id);
for(const p of c.pointsToConnect){if(p.pointId)used.add(p.pointId);if(p.pcb_port_id)used.add(p.pcb_port_id);}
}
for(const t of input.traces??[]){if(t.connection_name)used.add(t.connection_name);if(t.source_trace_id)used.add(t.source_trace_id);}
return {...input,obstacles:input.obstacles.map(o=>{
const metadata=(o as any).circuitJsonMetadata??{};
const own=new Set([metadata.pcb_port_id,metadata.pcb_smtpad_id,metadata.pcb_via_id]);
const connectedTo=o.connectedTo.filter(id=>used.has(id)||own.has(id)||/^(connectivity_net|source_net|net\.)/.test(id));
// Keep an existing representative for otherwise unnamed, nonempty nets.
if(!connectedTo.length&&o.connectedTo.length)connectedTo.push(o.connectedTo[0]);
return {...o,connectedTo:[...new Set(connectedTo)]};
})};
}