6930d8528e2bbd027ae25c9c9ed6b4176d293ddf
[hw/altusmetrum] / packages / PG-TSDSO-14.py
1 #!/usr/bin/python3
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PG-TSDSO-14 footprint for Infineon high side power switch
5 #
6
7 # dimensions in mm from infineon/BTS7008-1EPP_v1.03_4-29-19.pdf
8
9 BodyWidth = 4.9
10 BodyHeight = 3.9
11
12 PinWidth = 0.45
13 PinHeight = 1.31
14 PinSpacing = 0.65
15 RowCenter = 2.85
16
17 # large input pad under the chip
18 PadWidth = 4.0
19 PadHeight = 2.65
20 PasteWidth = 1.85
21 PasteOffset = 1.075
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 "PG-TSDSO-14" "" "" 0 0 0 0 0 100 0x0]')
33 print ("(")
34 for pin in range (0,7):
35     print ('   Pad[',\
36         mm2mils100((pin-3) * PinSpacing), \
37         mm2mils100(-RowCenter - PinHeight/2 + PinWidth/2), \
38         mm2mils100((pin-3) * PinSpacing), \
39         mm2mils100(-RowCenter + PinHeight/2 - PinWidth/2), \
40         mm2mils100(PinWidth), \
41         mm2mils100(PinSpacing - PinWidth), \
42         mm2mils100(PinWidth)+600, \
43         '"pin%i"' % (14 - pin), '"%i"' % (14 - pin), '"square"]')
44
45     print ('   Pad[',\
46         mm2mils100((pin-3) * PinSpacing), \
47         mm2mils100(RowCenter + PinHeight/2 - PinWidth/2), \
48         mm2mils100((pin-3) * PinSpacing), \
49         mm2mils100(RowCenter - PinHeight/2 + PinWidth/2), \
50         mm2mils100(PinWidth), \
51         mm2mils100(PinSpacing - PinWidth), \
52         mm2mils100(PinWidth)+600, \
53         '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square"]')
54
55 print ('   Pad[',\
56         mm2mils100(-PadWidth/2 + PadHeight/2), \
57         0, \
58         mm2mils100(PadWidth/2 - PadHeight/2), \
59         0, \
60         mm2mils100(PadHeight), \
61         mm2mils100(.1524), \
62         mm2mils100(PadHeight)+600, \
63         '"pin15" "15" "square,nopaste"]')
64
65 print ('   Pad[',\
66         mm2mils100(PasteOffset), \
67         mm2mils100(-PadHeight/2 + PasteWidth/2), \
68         mm2mils100(PasteOffset), \
69         mm2mils100(PadHeight/2 - PasteWidth/2), \
70         mm2mils100(PasteWidth), \
71         mm2mils100(.1524), \
72         mm2mils100(PasteWidth)+600, \
73         '"pin15" "15" "square"]')
74
75 print ('   Pad[',\
76         mm2mils100(-PasteOffset), \
77         mm2mils100(-PadHeight/2 + PasteWidth/2), \
78         mm2mils100(-PasteOffset), \
79         mm2mils100(PadHeight/2 - PasteWidth/2), \
80         mm2mils100(PasteWidth), \
81         mm2mils100(.1524), \
82         mm2mils100(PasteWidth)+600, \
83         '"pin15" "15" "square"]')
84
85 print ('   ElementLine[',\
86         mm2mils100(-BodyWidth/2), \
87         mm2mils100(-BodyHeight/2), \
88         mm2mils100(-BodyWidth/2), \
89         mm2mils100( BodyHeight/2), \
90         '1000 ]')
91
92 print ('   ElementLine[',\
93         mm2mils100(-BodyWidth/2), \
94         mm2mils100( BodyHeight/2), \
95         mm2mils100( BodyWidth/2), \
96         mm2mils100( BodyHeight/2), \
97         '1000 ]')
98
99 print ('   ElementLine[',\
100         mm2mils100( BodyWidth/2), \
101         mm2mils100( BodyHeight/2), \
102         mm2mils100( BodyWidth/2), \
103         mm2mils100(-BodyHeight/2), \
104         '1000 ]')
105
106 print ('   ElementLine[',\
107         mm2mils100( BodyWidth/2), \
108         mm2mils100(-BodyHeight/2), \
109         mm2mils100(-BodyWidth/2), \
110         mm2mils100(-BodyHeight/2), \
111         '1000 ]')
112
113 print ('   ElementArc[',\
114         mm2mils100(-4 * PinSpacing), \
115         mm2mils100(1 * RowCenter), \
116         '500 500 0 360 1000 ]')
117
118 print (")")