remaining part metadata for current QuantiMotor design
[hw/altusmetrum] / packages / ssop.5c
1 /*
2  * Copyright © 2018 Bdale Garbee <bdale@gag.com>, GPLv3+
3  */
4
5 load "footprint.5c"
6 import Footprint;
7
8 int total_pad = 28;
9 real center_gap = 7.20 - 1.75;
10 real pad_height = 1.75;
11 real pad_width = 0.45;
12 real pad_spacing = 0.65;
13
14 if (dim(argv) > 1)
15         total_pad = string_to_integer(argv[1]);
16 if (dim(argv) > 2)
17         center_gap = string_to_real(argv[2]);
18 if (dim(argv) > 3)
19         pad_height = string_to_real(argv[3]);
20 if (dim(argv) > 4)
21         pad_width = string_to_real(argv[4]);
22 if (dim(argv) > 5)
23         pad_spacing = string_to_real(argv[5]);
24
25 int num_pad = total_pad / 2;    /* per side */
26
27 string name = sprintf ("SSOP-%d", total_pad);
28
29 real package_width = (num_pad - 1) * pad_spacing + 1.75;
30
31 real package_height = center_gap - 0.15;
32
33 if (dim(argv) > 6)
34         package_width = string_to_real(argv[6]);
35
36 if (dim(argv) > 7)
37         package_height = string_to_real(argv[7]);
38
39 real pad_y_off = center_gap / 2 + pad_height / 2;
40
41 element_start(name);
42
43 real pad_off(int n) {
44         return pad_spacing * (n - (num_pad - 1) / 2);
45 }
46
47 real corner(int dx, int dy) {
48         real    x = dx * package_width / 2;
49         real    y = dy * package_height / 2;
50         real    len = 0.4;
51
52         line(x, y, x - dx * len, y);
53         line(x, y, x, y - dy * len);
54 }
55
56 corner(-1, -1);
57 corner(1, -1);
58 corner(-1, 1);
59 corner(1, 1);
60
61 real dot_off = -.3;
62
63 line(-package_width/2 + dot_off, package_height/2 - dot_off,
64      -package_width/2 + dot_off, package_height/2 - dot_off);
65
66 for (int pad = 0; pad < num_pad; pad++) {
67         /* bottom (1-num_pad) */
68
69         pad_mm(pad_off(pad),
70                pad_y_off,
71                pad_width,
72                pad_height,
73                sprintf("%d", pad + 1),
74                sprintf("%d", pad + 1));
75         
76         /* top side (total_pad - num_pad+1) */
77
78         pad_mm(pad_off(pad),
79                -pad_y_off,
80                pad_width,
81                pad_height,
82                sprintf("%d", total_pad - pad),
83                sprintf("%d", total_pad - pad));
84         
85 }
86
87 element_end();