imrishabh18/rp2040-motor-controller

The circuit implements a powered USB interface with a W25Q16 flash memory chip, a RP2040 microcontroller, and AO3400A MOSFETs for switch control, enabling USB communication, memory storage, and device power management.

Version
1.0.19
License
unset
Stars
0

scripts/reroute-feedback.tsx

import { Circuit } from "tscircuit";
import { AutoroutingPipelineSolver } from "@tscircuit/capacity-autorouter";
import { writeFileSync, mkdirSync } from "node:fs";
import Board from "../index.circuit";
mkdirSync("dist/feedback",{recursive:true});
const circuit = new Circuit();
const route = async (input: any) => {
  writeFileSync("dist/feedback/routing-input.json", JSON.stringify(input,null,2));
  const handlers = new Map<string,Function>();
  return {
    on(name:string, fn:Function){handlers.set(name,fn)}, stop(){},
    async start(){
      try {
        const solver=new AutoroutingPipelineSolver(input,{effort:2});
        let last=Date.now(),lastPhase="";
        while(!solver.solved && !solver.failed){
          const until=Date.now()+100;
          while(Date.now()<until && !solver.solved && !solver.failed) solver.step();
          if(solver.getCurrentPhase()!==lastPhase || Date.now()-last>15000){
            lastPhase=solver.getCurrentPhase();last=Date.now();
            console.log(lastPhase,solver.iterations,solver.computeProgress());
          }
          await Bun.sleep(0);
        }
        if(!solver.solved) throw new Error(String(solver.error));
        const output:any=solver.getOutputSimpleRouteJson();
        const traces=output.traces ?? output;
        for(const t of traces) for(const p of t.route ?? []) if(p.route_type==='via'){p.from_layer='top';p.to_layer='bottom';}
        writeFileSync("dist/feedback/route-plan.json",JSON.stringify({expectedInput:input,traces},null,2));
        handlers.get("complete")?.({traces});
      } catch(error){console.error(error);process.exit(1)}
    }
  };
};
circuit.add(<Board routingAlgorithm={route as any}/>);
await circuit.renderUntilSettled();
const json=circuit.getCircuitJson();
writeFileSync('dist/feedback/circuit.json',JSON.stringify(json,null,2));
const errors = json.filter(x => x.type.endsWith('_error'));
console.log('Errors:', errors);
if (errors.length) process.exitCode = 1;