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;