gokul/usb3-sd-hub
Engineering draft: four-layer, computer-powered USB 3 hub with one USB-C host socket, two USB-C and two USB-A accessory sockets, and a full-size SD slot. Board and three schematic previews are available. Routing and production checks are incomplete; not fabrication ready.
- Version
- 0.1.5
- License
- MIT
- Stars
- 0
components/Passives.tsx
import { passiveModelForPart } from "../design/passive-models";
import { selectPassivePart } from "../design/part-selection";
import { placementFor } from "../design/placement";
import type { FootprintProp } from "@tscircuit/props";
export type PassiveSpec = {
name: string;
kind: "resistor" | "capacitor" | "inductor";
rating: string;
pcbX: number;
pcbY: number;
pcbRotation?: number;
from: string;
to: string;
footprint?: FootprintProp;
manufacturerPartNumber?: string;
};
export const Passives = ({ parts }: { parts: PassiveSpec[] }) => (
<group
pcbAnchorAlignment="center"
pcbX="0mm"
pcbY="0mm"
pcbLayout={{ layoutMode: "none" }}
schGrid
gridCols={6}
gridGap={2}
>
{parts.map((part) => {
const manufacturerPartNumber =
part.manufacturerPartNumber ?? selectPassivePart(part);
const props = {
name: part.name,
pcbX: `${part.pcbX}mm`,
pcbY: `${part.pcbY}mm`,
pcbRotation: part.pcbRotation ?? 0,
footprint: part.footprint ?? "0402",
connections: { pin1: `net.${part.from}`, pin2: `net.${part.to}` },
manufacturerPartNumber,
cadModel: passiveModelForPart(manufacturerPartNumber),
pcbStyle: { silkscreenFontSize: 0.5 },
...placementFor(part.name),
};
if (part.kind === "resistor")
return <resistor key={part.name} {...props} resistance={part.rating} />;
if (part.kind === "inductor")
return <inductor key={part.name} {...props} inductance={part.rating} />;
return <capacitor key={part.name} {...props} capacitance={part.rating} />;
})}
</group>
);
export const Indicator = ({
name,
net,
pcbX,
pcbY,
color = "green",
}: {
name: string;
net: string;
pcbX: number;
pcbY: number;
color?: "green" | "blue";
}) => (
<group
pcbAnchorAlignment="center"
pcbX="0mm"
pcbY="0mm"
pcbLayout={{ layoutMode: "none" }}
name={`${name}_indicator`}
schLayout={{ flex: "row", gap: 2 }}
>
<resistor
name={`R_${name}`}
resistance="2.2k"
footprint="0402"
pcbX={`${pcbX - 3.3}mm`}
pcbY={`${pcbY}mm`}
{...placementFor(`R_${name}`)}
manufacturerPartNumber="RC0402FR-072K2L"
connections={{ pin1: `net.${net}`, pin2: `net.${name}_A` }}
/>
<led
name={name}
color={color}
footprint="0603"
pcbX={pcbX}
pcbY={pcbY}
{...placementFor(name)}
manufacturerPartNumber={
color === "green" ? "LTST-C190KGKT" : "LTST-C190TBKT"
}
connections={{ anode: `net.${name}_A`, cathode: "net.GND" }}
/>
</group>
);