convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / RGZ0048A.py
1 #!/usr/bin/python3
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Emit PCB footprint for RGZ0048A package used by TI CC1310 with RGZT suffix 
5 #
6
7 # dimensions in mm from the ti/cc1310/cc1310.pdf datasheet
8
9 PinWidth = 0.24         
10 PinResist = 0.38                # width of gap in solder resist over pad
11 PinHeight = 0.6
12 PinSpacing = 0.50
13 Overall = 6.80
14 GndSquare = 5.15
15 GndSquareMask = 5.41
16 PasteSquare = 1.06              # paste spots over ground tab
17 PasteGrid = 1.26
18 ViaDrill = 0.254                # mfg spec is 0.2, >= 10 mil AC standard spec
19 ViaPadSize = 0.5
20 CoreViaSpacing = 1.26
21 SideViaSpacing = 1.065
22
23 import sys
24
25 # we're going to use the 1/100 of a mil fundamental unit form
26 def mm2mils100( mm ):
27         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28
29 print('# author: Bdale Garbee')
30 print('# email: bdale@gag.com')
31 print('# dist-license: GPL 3')
32 print('# use-license: unlimited')
33
34 print('Element[0x0 "QFN48" "" "" 0 0 0 0 0 100 0x0]')
35 print("(")
36
37 # pad under the chip, must be grounded
38 print('   Pad[',\
39         mm2mils100(0), \
40         mm2mils100(0), \
41         mm2mils100(0), \
42         mm2mils100(0), \
43         mm2mils100(GndSquare), \
44         0, \
45         mm2mils100(GndSquareMask), \
46         '"pin49" "49" "square,nopaste"]')
47
48 # vias in the ground pad under the chip
49 for viarow in range (-1,2):
50   # outer rows
51   print('   Pin[',\
52         mm2mils100(-CoreViaSpacing - SideViaSpacing), \
53         mm2mils100(viarow * CoreViaSpacing), \
54         mm2mils100(ViaPadSize), \
55         mm2mils100(ViaPadSize), \
56         0, \
57         mm2mils100(ViaDrill), \
58         '"pin49" "49" 0x0002]')
59
60   print('   Pin[',\
61         mm2mils100(CoreViaSpacing + SideViaSpacing), \
62         mm2mils100(viarow * CoreViaSpacing), \
63         mm2mils100(ViaPadSize), \
64         mm2mils100(ViaPadSize), \
65         0, \
66         mm2mils100(ViaDrill), \
67         '"pin49" "49" 0x0002]')
68
69   print('   Pin[',\
70         mm2mils100(viarow * CoreViaSpacing), \
71         mm2mils100(-CoreViaSpacing - SideViaSpacing), \
72         mm2mils100(ViaPadSize), \
73         mm2mils100(ViaPadSize), \
74         0, \
75         mm2mils100(ViaDrill), \
76         '"pin49" "49" 0x0002]')
77
78   print('   Pin[',\
79         mm2mils100(viarow * CoreViaSpacing), \
80         mm2mils100(CoreViaSpacing + SideViaSpacing), \
81         mm2mils100(ViaPadSize), \
82         mm2mils100(ViaPadSize), \
83         0, \
84         mm2mils100(ViaDrill), \
85         '"pin49" "49" 0x0002]')
86
87   # center array
88   for viacol in range (-1,2):
89     print('   Pin[',\
90         mm2mils100(viacol * CoreViaSpacing), \
91         mm2mils100(viarow * CoreViaSpacing), \
92         mm2mils100(ViaPadSize), \
93         mm2mils100(ViaPadSize), \
94         0, \
95         mm2mils100(ViaDrill), \
96         '"pin49" "49" 0x0002]')
97
98 # solder paste squares in a grid on central ground pad
99 for pasterow in range (-2, 2):
100   for pastecol in range (-2, 2):
101     print('   Pad[',\
102         mm2mils100(pastecol * PasteGrid + PasteGrid/2), \
103         mm2mils100(pasterow * PasteGrid + PasteGrid/2), \
104         mm2mils100(pastecol * PasteGrid + PasteGrid/2), \
105         mm2mils100(pasterow * PasteGrid + PasteGrid/2), \
106         mm2mils100((PasteSquare)), \
107         0, \
108         mm2mils100((PasteSquare)), \
109         '"pin49" "49" "square"]')
110
111 # pins
112 for pin in range (1,13):
113     print('   Pad[',\
114         mm2mils100(-3.25 + pin * PinSpacing), \
115         mm2mils100(-Overall/2 - PinHeight/2 + PinWidth/2), \
116         mm2mils100(-3.25 + pin * PinSpacing), \
117         mm2mils100(-Overall/2 + PinHeight/2 - PinWidth/2), \
118         mm2mils100(PinWidth), \
119         mm2mils100(PinSpacing - PinWidth), \
120         mm2mils100(PinResist), \
121         '"pin%i"' % (37-pin), '"%i"' % (37-pin), '"square"]')
122
123     print('   Pad[',\
124         mm2mils100(-3.25 + pin * PinSpacing), \
125         mm2mils100(+Overall/2 - PinHeight/2 + PinWidth/2), \
126         mm2mils100(-3.25 + pin * PinSpacing), \
127         mm2mils100(+Overall/2 + PinHeight/2 - PinWidth/2), \
128         mm2mils100(PinWidth), \
129         mm2mils100(PinSpacing - PinWidth), \
130         mm2mils100(PinResist), \
131         '"pin%i"' % pin, '"%i"' % pin, '"square"]')
132
133     print('   Pad[',\
134         mm2mils100(Overall/2 - PinHeight/2 + PinWidth/2), \
135         mm2mils100(-3.25 + pin * PinSpacing), \
136         mm2mils100(Overall/2 + PinHeight/2 - PinWidth/2), \
137         mm2mils100(-3.25 + pin * PinSpacing), \
138         mm2mils100(PinWidth), \
139         mm2mils100(PinSpacing - PinWidth), \
140         mm2mils100(PinResist), \
141         '"pin%i"' % (25-pin), '"%i"' % (25-pin), '"square"]')
142
143     print('   Pad[',\
144         mm2mils100(-Overall/2 - PinHeight/2 + PinWidth/2), \
145         mm2mils100(-3.25 + pin * PinSpacing), \
146         mm2mils100(-Overall/2 + PinHeight/2 - PinWidth/2), \
147         mm2mils100(-3.25 + pin * PinSpacing), \
148         mm2mils100(PinWidth), \
149         mm2mils100(PinSpacing - PinWidth), \
150         mm2mils100(PinResist), \
151         '"pin%i"' % (36+pin), '"%i"' % (36+pin), '"square"]')
152
153 print('   ElementArc[',\
154         mm2mils100(-3.6), \
155         mm2mils100(3.6), \
156         '500 500 0 360 1000 ]')
157 print(")")