6f74ce583d6c9443acf63cc1001c0540c1f17305
[hw/altusmetrum] / packages / norcomp / 189.py
1 #!/usr/bin/python2
2 # Copyright 2011 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for Norcomp 182-YYY-213RYY1 connectors
5 # dual (stacked) female, right angle, 0.318 setback
6 #
7 # Needs pin count on command line, 9/15/25/37 are valid
8 #
9
10 # dimensions in mm from 189-YYY-513R571.pdf
11
12 PinDiam = 1.20
13 PinSpacing = 2.77
14 RowSpacing = 2.84
15 DualSpacing = 6.58
16 MntDiam = 3.05
17 BoxY = 19.304
18 FaceY = 8.08
19 ARing = 0.8
20 Clearance = 0.36
21
22 LineWidth = 1000
23
24 import sys
25
26 # we're going to use the 1/100 of a mil fundamental unit form
27 def mm2mils100( mm ):
28         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
29
30 pins = int(sys.argv[1])
31
32 if pins == 9:
33         BoxX = 30.58
34         MntX = 24.99
35 elif pins == 15:
36         BoxX = 38.99
37         MntX = 33.32
38 elif pins == 25:
39         BoxX = 52.78
40         MntX = 46.99
41 elif pins == 37:
42         BoxX = 69.19
43         MntX = 63.50
44 else:
45         sys.stderr.write('Valid pin counts are 9|15|25|37\n')
46         sys.exit(1)
47
48 pinoffset = (pins - 1) / 4 * PinSpacing
49 if pins == 15:
50         pinoffset += PinSpacing/2
51
52 print '# author: Bdale Garbee'
53 print '# email: bdale@gag.com'
54 print '# dist-license: GPL 2'
55 print '# use-license: unlimited'
56
57 print 'Element[0x0 "DB%iF"' % pins,'"" "" 0 0 0 0 0 100 0x0]'
58 print "("
59 for col in range ((pins+1)/2):
60         pinnum = col + 1
61         if pinnum == 1:
62             Flags = '0x0101'
63         else:
64             Flags = '0x0001'
65
66         print '   Pin[', \
67             mm2mils100((pinnum-1)*PinSpacing-pinoffset), \
68             mm2mils100(RowSpacing/2), \
69             mm2mils100(PinDiam+ARing), \
70             mm2mils100(Clearance), \
71             mm2mils100(PinDiam+ARing+Clearance), \
72             mm2mils100(PinDiam), \
73             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']'
74
75         pinnum2 = pinnum + pins
76         print '   Pin[', \
77             mm2mils100((pinnum-1)*PinSpacing-pinoffset), \
78             mm2mils100(RowSpacing/2+DualSpacing), \
79             mm2mils100(PinDiam+ARing), \
80             mm2mils100(Clearance), \
81             mm2mils100(PinDiam+ARing+Clearance), \
82             mm2mils100(PinDiam), \
83             '"pin%i"' % pinnum2, '"%i"' % pinnum2, Flags, ']'
84
85         pinnum = col + 1 + (pins+1)/2
86         Flags = '0x0001'
87         if pinnum <= pins:
88           print '   Pin[', \
89             mm2mils100((col)*PinSpacing-pinoffset+PinSpacing/2), \
90             mm2mils100(-RowSpacing/2), \
91             mm2mils100(PinDiam+ARing), \
92             mm2mils100(Clearance), \
93             mm2mils100(PinDiam+ARing+Clearance), \
94             mm2mils100(PinDiam), \
95             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']'
96
97           pinnum2 = pinnum + pins
98           print '   Pin[', \
99             mm2mils100((col)*PinSpacing-pinoffset+PinSpacing/2), \
100             mm2mils100(-RowSpacing/2+DualSpacing), \
101             mm2mils100(PinDiam+ARing), \
102             mm2mils100(Clearance), \
103             mm2mils100(PinDiam+ARing+Clearance), \
104             mm2mils100(PinDiam), \
105             '"pin%i"' % pinnum2, '"%i"' % pinnum2, Flags, ']'
106
107 print '   Pin[', \
108     mm2mils100(MntX/2), \
109     mm2mils100(-RowSpacing/2), \
110     mm2mils100(MntDiam+ARing), \
111     mm2mils100(Clearance), \
112     mm2mils100(MntDiam+ARing+Clearance), \
113     mm2mils100(MntDiam), \
114     '"mnt" "0"', '0x0001', ']'
115
116 print '   Pin[', \
117     mm2mils100(-MntX/2), \
118     mm2mils100(-RowSpacing/2), \
119     mm2mils100(MntDiam+ARing), \
120     mm2mils100(Clearance), \
121     mm2mils100(MntDiam+ARing+Clearance), \
122     mm2mils100(MntDiam), \
123     '"mnt" "0"', '0x0001', ']'
124
125 print '   Pin[', \
126     mm2mils100(MntX/2), \
127     mm2mils100(DualSpacing), \
128     mm2mils100(MntDiam+ARing), \
129     mm2mils100(Clearance), \
130     mm2mils100(MntDiam+ARing+Clearance), \
131     mm2mils100(MntDiam), \
132     '"mnt" "0"', '0x0001', ']'
133
134 print '   Pin[', \
135     mm2mils100(-MntX/2), \
136     mm2mils100(DualSpacing), \
137     mm2mils100(MntDiam+ARing), \
138     mm2mils100(Clearance), \
139     mm2mils100(MntDiam+ARing+Clearance), \
140     mm2mils100(MntDiam), \
141     '"mnt" "0"', '0x0001', ']'
142
143 print '   ElementLine[', \
144         mm2mils100(-BoxX/2), \
145         mm2mils100(-FaceY-RowSpacing/2), \
146         mm2mils100(BoxX/2), \
147         mm2mils100(-FaceY-RowSpacing/2), \
148         LineWidth, ']'
149
150 print '   ElementLine[', \
151         mm2mils100(-BoxX/2), \
152         mm2mils100(BoxY-FaceY-RowSpacing/2), \
153         mm2mils100(BoxX/2), \
154         mm2mils100(BoxY-FaceY-RowSpacing/2), \
155         LineWidth, ']'
156
157 print '   ElementLine[', \
158         mm2mils100(BoxX/2), \
159         mm2mils100(-FaceY-RowSpacing/2), \
160         mm2mils100(BoxX/2), \
161         mm2mils100(BoxY-FaceY-RowSpacing/2), \
162         LineWidth, ']'
163
164 print '   ElementLine[', \
165         mm2mils100(-BoxX/2), \
166         mm2mils100(-FaceY-RowSpacing/2), \
167         mm2mils100(-BoxX/2), \
168         mm2mils100(BoxY-FaceY-RowSpacing/2), \
169         LineWidth, ']'
170
171 print ")"