Devesh36/pocket-audio-player
A portable, rechargeable microSD audio player built around an RP2040, SPI flash, USB‑C charging/power management, LCD/button controls, PCM5102A I²S DAC, and TPA6132A headphone amplifier in a 3D‑printed enclosure.
- Version
- 1.0.12
- License
- unset
- Stars
- 0
board-router.ts
import candidate from "./routing/candidate.json";
import type { SimpleRouteJson } from "@tscircuit/capacity-autorouter";
export function routingSignature(input: SimpleRouteJson) {
const text=JSON.stringify(input);let hash=2166136261;
for(let i=0;i<text.length;i++){hash^=text.charCodeAt(i);hash=Math.imul(hash,16777619)}
return (hash>>>0).toString(16);
}
export async function createBoardRouter(input: SimpleRouteJson) {
// The live eval loader cannot resolve the solver's object-hash dependency.
// Load that solver only for an explicitly requested fresh CLI route.
const useSavedRouting=true;
if(!useSavedRouting)return (await import("./fresh-router")).createFreshRouter(input);
if(routingSignature(input)!==candidate.signature)
throw new Error("PCB routing snapshot is stale; regenerate before building");
const listeners=new Map<string,((event:any)=>void)[]>();
let stopped=false;
return {
on(type:string,fn:(event:any)=>void){listeners.set(type,[...(listeners.get(type)??[]),fn]);},
start(){setTimeout(()=>{if(!stopped)listeners.get("complete")?.forEach(fn=>fn({traces:candidate.traces}));},0);},
stop(){stopped=true;},
getOutputSimpleRouteJson(){return {...input,traces:candidate.traces};},
};
}