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};},
  };
}