convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / NINA-W131.py
1 #!/usr/bin/python3
2 # Copyright 2022 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for U-Blox NINA-W131 WIFI module
5 #
6
7 # dimensions in mm from:
8 #       NINA_W13_Datasheet_UBX_17006694-2324218.pdf
9
10 BodyLength = 10.6       # (A)
11 BodyWidth = 10.0        # (B)
12
13 KerfTab = 0.10          # (G) depanelizing residual
14
15 OuterPitch = 1.00       # (H) lateral and antenna row pin pitch
16 OuterWidth = 0.70       # (I)
17 OuterHeight = 1.15      # (J)
18 OuterEdgeD = 0.45       # (D)
19 OuterEdgeE = 0.30       # (E)
20 InnerEdgeM = 1.45       # (M)
21 InnerEdgeK = 2.78       # (K)
22 InnerPitch = 1.1        # (Q) 
23 GndPitch = 1.15         # (P) central area pin pitch
24 InnerSize = 0.70        # (O)
25
26 import sys
27
28 # we're going to use the 1/100 of a mil fundamental unit form
29 def mm2mils100( mm ):
30         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
31
32 print('# author: Bdale Garbee')
33 print('# email: bdale@gag.com')
34 print('# dist-license: GPL 3')
35 print('# use-license: unlimited')
36
37 print('Element[0x0 "NINA-W131" "" "" 0 0 11000 0 0 100 0x0]')
38 print("(")
39
40 # outer 2 long rows
41 for pin in range (0,10):
42     print('   Pad[',\
43         mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
44         mm2mils100(-BodyWidth/2 + OuterEdgeE + OuterWidth/2), \
45         mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
46         mm2mils100(-BodyWidth/2 + OuterEdgeE + OuterHeight - OuterWidth/2), \
47         mm2mils100(OuterWidth), \
48         mm2mils100(OuterPitch - OuterWidth), \
49         mm2mils100(OuterWidth)+600, \
50         '"pin%i"' % (25 - pin), '"%i"' % (25 - pin), '"square"]')
51
52     print('   Pad[',\
53         mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
54         mm2mils100(BodyWidth/2 - OuterEdgeE - OuterWidth/2), \
55         mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
56         mm2mils100(BodyWidth/2 - OuterEdgeE - OuterHeight + OuterWidth/2), \
57         mm2mils100(OuterWidth), \
58         mm2mils100(OuterPitch - OuterWidth), \
59         mm2mils100(OuterWidth)+600, \
60         '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square"]')
61
62 # outer 2 short rows
63 for pin in range (0,5):
64     print('   Pad[',\
65         mm2mils100(-BodyLength/2 + OuterEdgeE + OuterWidth/2), \
66         mm2mils100((pin-2) * OuterPitch), \
67         mm2mils100(-BodyLength/2 + OuterEdgeE + OuterHeight - OuterWidth/2), \
68         mm2mils100((pin-2) * OuterPitch), \
69         mm2mils100(OuterWidth), \
70         mm2mils100(OuterPitch - OuterWidth), \
71         mm2mils100(OuterWidth)+600, \
72         '"pin%i"' % (26 + pin), '"%i"' % (26 + pin), '"square"]')
73
74     print('   Pad[',\
75         mm2mils100(BodyLength/2 - OuterEdgeE - OuterWidth/2), \
76         mm2mils100((pin-2) * OuterPitch), \
77         mm2mils100(BodyLength/2 - OuterEdgeE - OuterHeight + OuterWidth/2), \
78         mm2mils100((pin-2) * OuterPitch), \
79         mm2mils100(OuterWidth), \
80         mm2mils100(OuterPitch - OuterWidth), \
81         mm2mils100(OuterWidth)+600, \
82         '"pin%i"' % (15 - pin), '"%i"' % (15 - pin), '"square"]')
83
84 # active inner row
85 for pin in range (0,6):
86     print('   Pad[',\
87         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeM + InnerSize/2), \
88         mm2mils100((pin-2.5) * InnerPitch), \
89         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeM + InnerSize/2), \
90         mm2mils100((pin-2.5) * InnerPitch), \
91         mm2mils100(InnerSize), \
92         mm2mils100(InnerPitch - InnerSize), \
93         mm2mils100(InnerSize)+600, \
94         '"pin%i"' % (36 - pin), '"%i"' % (36 - pin), '"square"]')
95
96 # gnd pads
97 for pin in range (0,2):
98     print('   Pad[',\
99         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + InnerSize/2), \
100         mm2mils100((pin-0.5) * GndPitch), \
101         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + InnerSize/2), \
102         mm2mils100((pin-0.5) * GndPitch), \
103         mm2mils100(InnerSize), \
104         mm2mils100(InnerPitch - InnerSize), \
105         mm2mils100(InnerSize)+600, \
106         '"pin37"', '"37"', '"square"]')
107
108     print('   Pad[',\
109         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*2 + InnerSize/2), \
110         mm2mils100((pin-0.5) * GndPitch), \
111         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*2 + InnerSize/2), \
112         mm2mils100((pin-0.5) * GndPitch), \
113         mm2mils100(InnerSize), \
114         mm2mils100(InnerPitch - InnerSize), \
115         mm2mils100(InnerSize)+600, \
116         '"pin37"', '"37"', '"square"]')
117
118 for pin in range (0,4):
119     print('   Pad[',\
120         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch + InnerSize/2), \
121         mm2mils100((pin-1.5) * GndPitch), \
122         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch + InnerSize/2), \
123         mm2mils100((pin-1.5) * GndPitch), \
124         mm2mils100(InnerSize), \
125         mm2mils100(InnerPitch - InnerSize), \
126         mm2mils100(InnerSize)+600, \
127         '"pin37"', '"37"', '"square"]')
128
129     print('   Pad[',\
130         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*3 + InnerSize/2), \
131         mm2mils100((pin-1.5) * GndPitch), \
132         mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*3 + InnerSize/2), \
133         mm2mils100((pin-1.5) * GndPitch), \
134         mm2mils100(InnerSize), \
135         mm2mils100(InnerPitch - InnerSize), \
136         mm2mils100(InnerSize)+600, \
137         '"pin37"', '"37"', '"square"]')
138
139 print('   ElementLine[',\
140         mm2mils100(-BodyLength/2), \
141         mm2mils100(-BodyWidth/2), \
142         mm2mils100(-BodyLength/2), \
143         mm2mils100( BodyWidth/2), \
144         '1000 ]')
145
146 print('   ElementLine[',\
147         mm2mils100(-BodyLength/2), \
148         mm2mils100( BodyWidth/2), \
149         mm2mils100( BodyLength/2), \
150         mm2mils100( BodyWidth/2), \
151         '1000 ]')
152
153 print('   ElementLine[',\
154         mm2mils100( BodyLength/2), \
155         mm2mils100( BodyWidth/2), \
156         mm2mils100( BodyLength/2), \
157         mm2mils100(-BodyWidth/2), \
158         '1000 ]')
159
160 print('   ElementLine[',\
161         mm2mils100( BodyLength/2), \
162         mm2mils100(-BodyWidth/2), \
163         mm2mils100(-BodyLength/2), \
164         mm2mils100(-BodyWidth/2), \
165         '1000 ]')
166
167 # depanelization residuals
168 print('   ElementLine[',\
169         mm2mils100(-BodyLength/2-KerfTab), \
170         mm2mils100(-BodyWidth/2), \
171         mm2mils100(-BodyLength/2-KerfTab), \
172         mm2mils100(-BodyWidth/2+OuterHeight), \
173         '1000 ]')
174
175 print('   ElementLine[',\
176         mm2mils100(-BodyLength/2-KerfTab), \
177         mm2mils100(BodyWidth/2), \
178         mm2mils100(-BodyLength/2-KerfTab), \
179         mm2mils100(BodyWidth/2-OuterHeight), \
180         '1000 ]')
181
182 #print('   ElementArc[',\
183 #        mm2mils100(-5 * PadSpacing), \
184 #        mm2mils100(-5 * PadSpacing), \
185 #        '500 500 0 360 1000 ]')
186
187 print(")")