convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / SD.py
1 #!/usr/bin/python3
2 # Copyright 2015 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for Amphenol SD connector
5 #
6
7 # dimensions in mm from amphenol/sd.pdf
8
9 PadWidth = 1.50
10 PadHeight = 1.00
11 PadX = -24.31
12 Pad1Y = -8.60 + 2.50
13 Pad2Y = -8.60 + 5.00
14 Pad3Y = -8.60 + 5.00 + 1.70 + 1.70
15 Pad4Y = -8.60 + 5.00 + 1.70 + 1.70 + 1.65
16 Pad5Y = -8.60 + 15.00 - 2.50
17 Pad6Y = -8.60 + 15.00
18 Pad7Y = -8.60 + 15.00 + 2.43
19 Pad8Y = -8.60 + 15.00 + 2.43 + 1.70
20 Pad9Y = -8.60
21 PadCDY = -8.60 + 5.00 + 1.70
22 PadWPY = -8.60 + 15.00 + 2.43 + 1.70 + 3.35
23
24 MntWidth = 2.00
25 MntHeight = 1.20
26 MntY1 = 15.00 - 29.20 + (MntHeight / 2)
27 MntX1 = -3.30
28 MntY2 = 15.00 - (MntHeight / 2)
29 MntX2 = -2.10
30
31 HoleDiam = 1.50
32 Hole1Y = -11.30
33 Hole2Y = 12.85
34
35 BoxX = 29.1 + 1.16
36 BoxXLeft = -23.5 - 1.16
37 BoxY = 28.9
38 LineWidth = 1000
39
40 MaskAdd = 0.15
41
42 import sys
43
44 # we're going to use the 1/100 of a mil fundamental unit form
45 def mm2mils100( mm ):
46         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
47
48 print('# author: Bdale Garbee')
49 print('# email: bdale@gag.com')
50 print('# dist-license: GPL 3')
51 print('# use-license: unlimited')
52
53 print('Element[0x0 "microSD" "" "" 0 0 0 0 0 100 0x0]')
54 print("(")
55
56 # mounting pads
57 print('   Pad[',\
58         mm2mils100(MntX1 - MntWidth/2 + MntHeight/2), \
59         mm2mils100(MntY1), \
60         mm2mils100(MntX1 + MntWidth/2 - MntHeight/2), \
61         mm2mils100(MntY1), \
62         mm2mils100(MntHeight), \
63         mm2mils100(0), \
64         mm2mils100(MntHeight + MaskAdd), \
65         '"12" "12" 0x0100]')
66
67 print('   Pad[',\
68         mm2mils100(MntX2 - MntWidth/2 + MntHeight/2), \
69         mm2mils100(MntY2), \
70         mm2mils100(MntX2 + MntWidth/2 - MntHeight/2), \
71         mm2mils100(MntY2), \
72         mm2mils100(MntHeight), \
73         mm2mils100(0), \
74         mm2mils100(MntHeight + MaskAdd), \
75         '"12" "12" 0x0100]')
76
77 # signal pads
78 print('   Pad[',\
79         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
80         mm2mils100(Pad1Y), \
81         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
82         mm2mils100(Pad1Y), \
83         mm2mils100(PadHeight), \
84         mm2mils100(0), \
85         mm2mils100(PadHeight + MaskAdd), \
86         '"1" "1" 0x0100]')
87
88 print('   Pad[',\
89         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
90         mm2mils100(Pad2Y), \
91         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
92         mm2mils100(Pad2Y), \
93         mm2mils100(PadHeight), \
94         mm2mils100(0), \
95         mm2mils100(PadHeight + MaskAdd), \
96         '"2" "2" 0x0100]')
97
98 print('   Pad[',\
99         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
100         mm2mils100(Pad3Y), \
101         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
102         mm2mils100(Pad3Y), \
103         mm2mils100(PadHeight), \
104         mm2mils100(0), \
105         mm2mils100(PadHeight + MaskAdd), \
106         '"3" "3" 0x0100]')
107
108 print('   Pad[',\
109         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
110         mm2mils100(Pad4Y), \
111         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
112         mm2mils100(Pad4Y), \
113         mm2mils100(PadHeight), \
114         mm2mils100(0), \
115         mm2mils100(PadHeight + MaskAdd), \
116         '"4" "4" 0x0100]')
117
118 print('   Pad[',\
119         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
120         mm2mils100(Pad5Y), \
121         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
122         mm2mils100(Pad5Y), \
123         mm2mils100(PadHeight), \
124         mm2mils100(0), \
125         mm2mils100(PadHeight + MaskAdd), \
126         '"5" "5" 0x0100]')
127
128 print('   Pad[',\
129         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
130         mm2mils100(Pad6Y), \
131         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
132         mm2mils100(Pad6Y), \
133         mm2mils100(PadHeight), \
134         mm2mils100(0), \
135         mm2mils100(PadHeight + MaskAdd), \
136         '"6" "6" 0x0100]')
137
138 print('   Pad[',\
139         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
140         mm2mils100(Pad7Y), \
141         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
142         mm2mils100(Pad7Y), \
143         mm2mils100(PadHeight), \
144         mm2mils100(0), \
145         mm2mils100(PadHeight + MaskAdd), \
146         '"7" "7" 0x0100]')
147
148 print('   Pad[',\
149         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
150         mm2mils100(Pad8Y), \
151         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
152         mm2mils100(Pad8Y), \
153         mm2mils100(PadHeight), \
154         mm2mils100(0), \
155         mm2mils100(PadHeight + MaskAdd), \
156         '"8" "8" 0x0100]')
157
158 print('   Pad[',\
159         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
160         mm2mils100(Pad9Y), \
161         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
162         mm2mils100(Pad9Y), \
163         mm2mils100(PadHeight), \
164         mm2mils100(0), \
165         mm2mils100(PadHeight + MaskAdd), \
166         '"9" "9" 0x0100]')
167
168 print('   Pad[',\
169         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
170         mm2mils100(PadCDY), \
171         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
172         mm2mils100(PadCDY), \
173         mm2mils100(PadHeight), \
174         mm2mils100(0), \
175         mm2mils100(PadHeight + MaskAdd), \
176         '"10" "10" 0x0100]')
177
178 print('   Pad[',\
179         mm2mils100(PadX - PadWidth/2 + PadHeight/2), \
180         mm2mils100(PadWPY), \
181         mm2mils100(PadX + PadWidth/2 - PadHeight/2), \
182         mm2mils100(PadWPY), \
183         mm2mils100(PadHeight), \
184         mm2mils100(0), \
185         mm2mils100(PadHeight + MaskAdd), \
186         '"11" "11" 0x0100]')
187
188 # mounting holes
189 print('   Pin[',\
190         0, \
191         mm2mils100(Hole1Y), \
192         mm2mils100(HoleDiam+0.3556), \
193         mm2mils100(0.31), \
194         mm2mils100(HoleDiam+0.66), \
195         mm2mils100(HoleDiam), \
196         '"12" "12" 0x0000]')
197
198 print('   Pin[',\
199         0, \
200         mm2mils100(Hole2Y), \
201         mm2mils100(HoleDiam+0.3556), \
202         mm2mils100(0.31), \
203         mm2mils100(HoleDiam+0.66), \
204         mm2mils100(HoleDiam), \
205         '"12" "12" 0x0000]')
206
207 BoxX = 29.1 + 1.16
208 BoxXLeft = -23.5 - 1.16
209 BoxY = 28.9
210
211 # silkscreen box
212 print('   ElementLine[', \
213         mm2mils100(BoxXLeft), \
214         mm2mils100(-BoxY/2), \
215         mm2mils100(BoxXLeft), \
216         mm2mils100(BoxY/2), \
217         LineWidth, ']')
218
219 print('   ElementLine[', \
220         mm2mils100(BoxXLeft + BoxX), \
221         mm2mils100(-BoxY/2), \
222         mm2mils100(BoxXLeft + BoxX), \
223         mm2mils100(BoxY/2), \
224         LineWidth, ']')
225
226 print('   ElementLine[', \
227         mm2mils100(BoxXLeft), \
228         mm2mils100(-BoxY/2), \
229         mm2mils100(BoxXLeft + BoxX), \
230         mm2mils100(-BoxY/2), \
231         LineWidth, ']')
232
233 print('   ElementLine[', \
234         mm2mils100(BoxXLeft), \
235         mm2mils100(BoxY/2), \
236         mm2mils100(BoxXLeft + BoxX), \
237         mm2mils100(BoxY/2), \
238         LineWidth, ']')
239
240 print(")")