@tscircuit/footprinter 0.0.150 → 0.0.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -988,7 +988,7 @@ declare const footprintSizes: {
988
988
  }[];
989
989
 
990
990
  type FootprinterParamsBuilder<K extends string> = {
991
- [P in K | "params" | "soup" | "circuitJson"]: P extends "params" | "soup" | "circuitJson" ? Footprinter[P] : (v?: number | string) => FootprinterParamsBuilder<K>;
991
+ [P in K | "params" | "soup" | "circuitJson"]: P extends "params" | "soup" | "circuitJson" ? Footprinter[P] : (v?: number | string | boolean) => FootprinterParamsBuilder<K>;
992
992
  };
993
993
  type CommonPassiveOptionKey = "metric" | "imperial" | "tht" | "p" | "pw" | "ph" | "w" | "h";
994
994
  type Footprinter = {
@@ -1000,7 +1000,7 @@ type Footprinter = {
1000
1000
  lr: (num_pins?: number) => FootprinterParamsBuilder<"w" | "l" | "pl" | "pr">;
1001
1001
  qfp: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p" | "id" | "od" | "wide" | "narrow">;
1002
1002
  quad: (num_pins?: number) => FootprinterParamsBuilder<"w" | "l" | "square" | "pl" | "pr" | "pb" | "pt" | "p" | "pw" | "ph">;
1003
- bga: (num_pins?: number) => FootprinterParamsBuilder<"grid" | "p" | "w" | "h" | "ball" | "pad" | "missing">;
1003
+ bga: (num_pins?: number) => FootprinterParamsBuilder<"grid" | "p" | "w" | "h" | "ball" | "pad" | "missing" | "tlorigin" | "blorigin" | "trorigin" | "brorigin">;
1004
1004
  qfn: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p">;
1005
1005
  soic: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p" | "id" | "od">;
1006
1006
  mlp: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p">;
package/dist/index.js CHANGED
@@ -510,6 +510,7 @@ var function_call = z4.string().or(z4.array(z4.any())).transform((a) => {
510
510
  }).pipe(z4.array(z4.string().or(z4.number())));
511
511
 
512
512
  // src/fn/bga.ts
513
+ import "circuit-json";
513
514
  var bga_def = z5.object({
514
515
  fn: z5.string(),
515
516
  num_pins: z5.number().optional().default(64),
@@ -587,16 +588,41 @@ var bga = (raw_params) => {
587
588
  let missing_pins_passed = 0;
588
589
  for (let y = 0; y < grid.y; y++) {
589
590
  for (let x = 0; x < grid.x; x++) {
590
- let pin_num = y * grid.x + x + 1;
591
+ const pad_x = (x - (grid.x - 1) / 2) * p;
592
+ const pad_y = (y - (grid.y - 1) / 2) * p;
593
+ let pin_x = x;
594
+ let pin_y = y;
595
+ switch (parameters.origin) {
596
+ case "bl":
597
+ pin_x = x;
598
+ pin_y = grid.y - 1 - y;
599
+ break;
600
+ case "br":
601
+ pin_x = grid.x - 1 - x;
602
+ pin_y = grid.y - 1 - y;
603
+ break;
604
+ case "tr":
605
+ pin_x = grid.x - 1 - x;
606
+ pin_y = y;
607
+ break;
608
+ case "tl":
609
+ default:
610
+ break;
611
+ }
612
+ let pin_num = pin_y * grid.x + pin_x + 1;
591
613
  if (missing_pin_nums_set.has(pin_num)) {
592
614
  missing_pins_passed++;
593
615
  continue;
594
616
  }
595
617
  pin_num -= missing_pins_passed;
596
- const pad_x = (x - (grid.x - 1) / 2) * p;
597
- const pad_y = -(y - (grid.y - 1) / 2) * p;
598
618
  pads.push(
599
- rectpad([pin_num, `${ALPHABET[y]}${x + 1}`], pad_x, pad_y, pad2, pad2)
619
+ rectpad(
620
+ [pin_num, `${ALPHABET[pin_y]}${pin_x + 1}`],
621
+ pad_x,
622
+ pad_y,
623
+ pad2,
624
+ pad2
625
+ )
600
626
  );
601
627
  }
602
628
  }
@@ -605,8 +631,71 @@ var bga = (raw_params) => {
605
631
  grid.y * p / 2,
606
632
  0.2
607
633
  );
634
+ const pin1MarkerSize = p / 6;
635
+ let markerRoute;
636
+ const edgeX = grid.x * p / 2;
637
+ const edgeY = grid.y * p / 2;
638
+ switch (parameters.origin) {
639
+ case "bl":
640
+ markerRoute = [
641
+ { x: -edgeX, y: -edgeY },
642
+ // Start at corner
643
+ { x: -edgeX, y: -edgeY - pin1MarkerSize },
644
+ // Up
645
+ { x: -edgeX - pin1MarkerSize, y: -edgeY },
646
+ // Left
647
+ { x: -edgeX, y: -edgeY }
648
+ // Back to start
649
+ ];
650
+ break;
651
+ case "br":
652
+ markerRoute = [
653
+ { x: edgeX, y: -edgeY },
654
+ // Start at corner
655
+ { x: edgeX, y: -edgeY - pin1MarkerSize },
656
+ // Up
657
+ { x: edgeX + pin1MarkerSize, y: -edgeY },
658
+ // Right
659
+ { x: edgeX, y: -edgeY }
660
+ // Back to start
661
+ ];
662
+ break;
663
+ case "tr":
664
+ markerRoute = [
665
+ { x: edgeX, y: edgeY },
666
+ // Start at corner
667
+ { x: edgeX, y: edgeY + pin1MarkerSize },
668
+ // Down
669
+ { x: edgeX + pin1MarkerSize, y: edgeY },
670
+ // Right
671
+ { x: edgeX, y: edgeY }
672
+ // Back to start
673
+ ];
674
+ break;
675
+ case "tl":
676
+ default:
677
+ markerRoute = [
678
+ { x: -edgeX, y: edgeY },
679
+ // Start at corner
680
+ { x: -edgeX, y: edgeY + pin1MarkerSize },
681
+ // Down
682
+ { x: -edgeX - pin1MarkerSize, y: edgeY },
683
+ // Left
684
+ { x: -edgeX, y: edgeY }
685
+ // Back to start
686
+ ];
687
+ break;
688
+ }
689
+ const pin1Marker = {
690
+ type: "pcb_silkscreen_path",
691
+ layer: "top",
692
+ pcb_component_id: "",
693
+ pcb_silkscreen_path_id: "pin1_marker",
694
+ route: markerRoute,
695
+ stroke_width: 0.05
696
+ };
608
697
  return {
609
- circuitJson: [...pads, silkscreenRefText],
698
+ circuitJson: [...pads, silkscreenRefText, pin1Marker],
610
699
  parameters
611
700
  };
612
701
  };