convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / s-pqfp-g32.py
1 #!/usr/bin/python3
2 # Copyright 2017 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for TI ADS124S0X in LQFP32 package
5 #
6
7 # TI doesn't provide a recommended footprint for this package, and instead
8 # points to IPC standards.  Searching on those yielded a LTC packaging 
9 # datasheet TQFP_32_05-08-1735.pdf, so dimensions in mm taken from that.
10
11 PinWidth = 0.27
12 PinHeight = 1.3
13 PinSpacing = 0.5
14 Inside = 5.2            # size of square inside rows of pins
15
16 BodySize = 5.0          # size of package for square in silk
17
18 # tweaked resist to get 4 mils width between pads to meet OshPark rules
19 PinResist = PinWidth + (2 * 0.063)
20
21 import sys
22
23 # we're going to use the 1/100 of a mil fundamental unit form
24 def mm2mils100( mm ):
25         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
26
27 print('# author: Bdale Garbee')
28 print('# email: bdale@gag.com')
29 print('# dist-license: GPL 3')
30 print('# use-license: unlimited')
31
32 print('Element[0x0 "S-PQFP-G32" "" "" 0 0 0 0 0 100 0x0]')
33 print("(")
34
35 # pins
36 for pin in range (1,9):
37     print('   Pad[',\
38         mm2mils100((pin - 4.5) * PinSpacing), \
39         mm2mils100(-Inside/2 - PinWidth/2), \
40         mm2mils100((pin - 4.5) * PinSpacing), \
41         mm2mils100(-Inside/2 - PinHeight + PinWidth/2), \
42         mm2mils100(PinWidth), \
43         mm2mils100(PinSpacing - PinWidth), \
44         mm2mils100(PinResist), \
45         '"pin%i"' % (9-pin), '"%i"' % (9-pin), '0x0100]')
46
47     print('   Pad[',\
48         mm2mils100((pin - 4.5) * PinSpacing), \
49         mm2mils100(+Inside/2 + PinHeight - PinWidth/2), \
50         mm2mils100((pin - 4.5) * PinSpacing), \
51         mm2mils100(+Inside/2 + PinWidth/2), \
52         mm2mils100(PinWidth), \
53         mm2mils100(PinSpacing - PinWidth), \
54         mm2mils100(PinResist), \
55         '"pin%i"' % (16+pin), '"%i"' % (16+pin), '0x0100]')
56
57     print('   Pad[',\
58         mm2mils100(Inside/2 + PinHeight - PinWidth/2), \
59         mm2mils100((pin - 4.5) * PinSpacing), \
60         mm2mils100(Inside/2 + PinWidth/2), \
61         mm2mils100((pin - 4.5) * PinSpacing), \
62         mm2mils100(PinWidth), \
63         mm2mils100(PinSpacing - PinWidth), \
64         mm2mils100(PinResist), \
65         '"pin%i"' % (33-pin), '"%i"' % (33-pin), '0x0100]')
66
67     print('   Pad[',\
68         mm2mils100(-Inside/2 - PinWidth/2), \
69         mm2mils100((pin - 4.5) * PinSpacing), \
70         mm2mils100(-Inside/2 - PinHeight + PinWidth/2), \
71         mm2mils100((pin - 4.5) * PinSpacing), \
72         mm2mils100(PinWidth), \
73         mm2mils100(PinSpacing - PinWidth), \
74         mm2mils100(PinResist), \
75         '"pin%i"' % (8+pin), '"%i"' % (8+pin), '0x0100]')
76
77
78 print('   ElementLine[',\
79         mm2mils100(-BodySize/2), \
80         mm2mils100(-BodySize/2), \
81         mm2mils100(-BodySize/2), \
82         mm2mils100( BodySize/2), \
83         '1000 ]')
84
85 print('   ElementLine[',\
86         mm2mils100(-BodySize/2), \
87         mm2mils100( BodySize/2), \
88         mm2mils100( BodySize/2), \
89         mm2mils100( BodySize/2), \
90         '1000 ]')
91
92 print('   ElementLine[',\
93         mm2mils100( BodySize/2), \
94         mm2mils100( BodySize/2), \
95         mm2mils100( BodySize/2), \
96         mm2mils100(-BodySize/2), \
97         '1000 ]')
98
99 print('   ElementLine[',\
100         mm2mils100( BodySize/2), \
101         mm2mils100(-BodySize/2), \
102         mm2mils100(-BodySize/2), \
103         mm2mils100(-BodySize/2), \
104         '1000 ]')
105
106
107 print('   ElementArc[',\
108         mm2mils100(  (BodySize/2)+0.3), \
109         mm2mils100(-((BodySize/2)+0.3)), \
110         '500 500 0 360 1000 ]')
111 print(")")