af6139bd7c31bf2a596094f00d7469fa4d846435
[hw/bdale] / pkg / newlib / samtec / QSH.py
1 #!/usr/bin/python
2 # Copyright 2007 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for Samtec QSH-XXX-01-X-D-A connectors
5
6 import sys
7
8 # dimensions in mm from QSH-XXX-01-X-D-XX-FOOTPRINT.pdf
9
10 PinWidth = 0.28
11 PinHeight = 2.27
12 PinSpacing = 0.5
13 RowSpacing = (2.87 * 2) - PinHeight
14 HoleDiam = 1.02
15 HoleOffset= 2.67
16 PaddleHeight = 0.43
17 ShortPaddleWidth = 2.54
18 LongPaddleWidth = 4.70
19 ShortPaddleCC = 16.13
20 LongPaddleCC = 6.35
21 MaskAdd = 0.15
22
23 # Needs pin count per row on command line, 30/60/90/120/150 are valid
24 positions = int(sys.argv[1])
25 ordinal = positions / 30.0
26 if (ordinal < 1) or (ordinal > 5) or (positions%30 != 0):
27         sys.stderr.write('Invalid number of positions, must be 30|60|90|120|150.\n')
28         sys.exit(1)
29
30 BodyWidth = (positions / 30) * 20.003 + 1.27
31 BodyHeight = 7.493
32 HoleSpacing = (positions / 30) * 20.00 + 0.13
33
34 # we're going to use the 1/100 of a mil fundamental unit form
35 def mm2mils100( mm ):
36         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
37
38 print '# author: Bdale Garbee'
39 print '# email: bdale@gag.com'
40 print '# dist-license: GPL 2'
41 print '# use-license: unlimited'
42
43 print 'Element[0x0 "QSH-%i"' % positions,' "" "" 0 0 -10161 -12011 0 100 0x0]'
44 print "("
45 for pin in range (0,positions):
46     print '   Pad[',\
47         mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
48         mm2mils100(-(RowSpacing/2 + PinWidth/2)), \
49         mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
50         mm2mils100(-(RowSpacing/2 + PinHeight - PinWidth/2)), \
51         mm2mils100(PinWidth), \
52         mm2mils100(0), \
53         mm2mils100(PinWidth+MaskAdd), \
54         '"pin%i"' % (2 + pin*2), '"%i"' % (2 + pin*2), '0x0100]'
55
56     print '   Pad[',\
57         mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
58         mm2mils100(RowSpacing/2 + PinWidth/2), \
59         mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
60         mm2mils100(RowSpacing/2 + PinHeight - PinWidth/2), \
61         mm2mils100(PinWidth), \
62         mm2mils100(0), \
63         mm2mils100(PinWidth+MaskAdd), \
64         '"pin%i"' % (1 + pin*2), '"%i"' % (1 + pin*2), '0x0100]'
65
66 # ground paddles
67 print '   Pad[',\
68     mm2mils100(-ShortPaddleCC/2 - ShortPaddleWidth/2 + PaddleHeight/2), \
69     mm2mils100(0), \
70     mm2mils100(-ShortPaddleCC/2 + ShortPaddleWidth/2 - PaddleHeight/2), \
71     mm2mils100(0), \
72     mm2mils100(PaddleHeight), \
73     mm2mils100(0), \
74     mm2mils100(PaddleHeight+MaskAdd), \
75     '"G" "G" 0x0100]'
76
77 print '   Pad[',\
78     mm2mils100(ShortPaddleCC/2 - ShortPaddleWidth/2 + PaddleHeight/2), \
79     mm2mils100(0), \
80     mm2mils100(ShortPaddleCC/2 + ShortPaddleWidth/2 - PaddleHeight/2), \
81     mm2mils100(0), \
82     mm2mils100(PaddleHeight), \
83     mm2mils100(0), \
84     mm2mils100(PaddleHeight+MaskAdd), \
85     '"G" "G" 0x0100]'
86
87 print '   Pad[',\
88     mm2mils100(-LongPaddleCC/2 - LongPaddleWidth/2 + PaddleHeight/2), \
89     mm2mils100(0), \
90     mm2mils100(-LongPaddleCC/2 + LongPaddleWidth/2 - PaddleHeight/2), \
91     mm2mils100(0), \
92     mm2mils100(PaddleHeight), \
93     mm2mils100(0), \
94     mm2mils100(PaddleHeight+MaskAdd), \
95     '"G" "G" 0x0100]'
96
97 print '   Pad[',\
98     mm2mils100(LongPaddleCC/2 - LongPaddleWidth/2 + PaddleHeight/2), \
99     mm2mils100(0), \
100     mm2mils100(LongPaddleCC/2 + LongPaddleWidth/2 - PaddleHeight/2), \
101     mm2mils100(0), \
102     mm2mils100(PaddleHeight), \
103     mm2mils100(0), \
104     mm2mils100(PaddleHeight+MaskAdd), \
105     '"G" "G" 0x0100]'
106
107 print '   Pin[', \
108     mm2mils100(HoleSpacing/2), \
109     mm2mils100(-HoleOffset), \
110     mm2mils100(HoleDiam)+1400, \
111     1400, \
112     mm2mils100(HoleDiam)+1400+600, \
113     mm2mils100(HoleDiam), \
114     '"mnt" "0"', '0x0000', ']'
115
116 print '   Pin[', \
117     mm2mils100(-HoleSpacing/2), \
118     mm2mils100(-HoleOffset), \
119     mm2mils100(HoleDiam)+1400, \
120     1400, \
121     mm2mils100(HoleDiam)+1400+600, \
122     mm2mils100(HoleDiam), \
123     '"mnt" "0"', '0x0000', ']'
124
125 print '   ElementLine[',\
126         mm2mils100(-BodyWidth/2), \
127         mm2mils100(-BodyHeight/2), \
128         mm2mils100(-BodyWidth/2), \
129         mm2mils100( BodyHeight/2), \
130         '1000 ]'
131
132 print '   ElementLine[',\
133         mm2mils100(-BodyWidth/2), \
134         mm2mils100( BodyHeight/2), \
135         mm2mils100( BodyWidth/2), \
136         mm2mils100( BodyHeight/2), \
137         '1000 ]'
138
139 print '   ElementLine[',\
140         mm2mils100( BodyWidth/2), \
141         mm2mils100( BodyHeight/2), \
142         mm2mils100( BodyWidth/2), \
143         mm2mils100(-BodyHeight/2), \
144         '1000 ]'
145
146 print '   ElementLine[',\
147         mm2mils100( BodyWidth/2), \
148         mm2mils100(-BodyHeight/2), \
149         mm2mils100(-BodyWidth/2), \
150         mm2mils100(-BodyHeight/2), \
151         '1000 ]'
152
153 print '   ElementArc[',\
154         mm2mils100(-(positions/2 + 0.5) * PinSpacing), \
155         mm2mils100(RowSpacing/2+PinHeight*5/4), \
156         '500 500 0 360 1000 ]'
157
158 print ")"