migrate all remaining Python v2 footprint generates to v3
[hw/altusmetrum] / packages / norcomp / 181-female.py
1 #!/usr/bin/python3
2 # Copyright 2016 by Bdale Garbee <bdale@gag.com>.  GPLv3+
3 #
4 # Program to emit PCB footprint(for Norcomp 181-YYY-213RYY1 connectors
5 # Female, right angle, 0.318 setback
6 #
7 # Needs pin count on command line, 15/26/44/62 are valid
8 #
9
10 # dimensions in mm from R181-YYY-213RYY1-1.pdf
11
12 PinDiam = 0.94
13 PinSpacing = 2.29
14 RowSpacing = 2.54
15 MntDiam = 3.05
16 BoxY = 16.24
17 FaceY = 8.89
18 ARing = 0.8
19 Clearance = 0.36
20
21 LineWidth = 1000
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 pins = int(sys.argv[1])
30 pinoffset = (pins - 1) / 6 * PinSpacing
31
32 if pins == 15:
33         BoxX = 30.80
34         MntX = 24.99
35         pinoffset = pinoffset - (0.010 * 25.4)
36 elif pins == 26:
37         BoxX = 39.19
38         MntX = 33.32
39         pinoffset = pinoffset - (0.020 * 25.4)
40 elif pins == 44:
41         BoxX = 53.00
42         MntX = 47.04
43         pinoffset = pinoffset - (0.020 * 25.4)
44 elif pins == 62:
45         BoxX = 69.30
46         MntX = 63.50
47         pinoffset = pinoffset - (0.023 * 25.4)
48 else:
49         sys.stderr.write('Valid pin counts are 15|26|44|62\n')
50         sys.exit(1)
51
52 print('# author: Bdale Garbee')
53 print('# email: bdale@gag.com')
54 print('# dist-license: GPL 3+')
55 print('# use-license: unlimited')
56
57 print('Element[0x0 "DB%iFHD"' % pins,'"" "" 0 0 0 0 0 100 0x0]')
58 print("(")
59 for col in range (int((pins+1)/3)):
60         pinnum = col + 1
61         if pinnum == 1:
62             Flags = '0x0101'
63         else:
64             Flags = '0x0001'
65
66         print('   Pin[', \
67             mm2mils100((col)*PinSpacing-pinoffset), \
68             mm2mils100(RowSpacing), \
69             mm2mils100(PinDiam+ARing), \
70             mm2mils100(Clearance), \
71             mm2mils100(PinDiam+ARing+Clearance), \
72             mm2mils100(PinDiam), \
73             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
74
75         pinnum = col + 1 + (pins+1)/3
76         Flags = '0x0001'
77         print('   Pin[', \
78             mm2mils100((col)*PinSpacing-pinoffset-PinSpacing/2), \
79             0, \
80             mm2mils100(PinDiam+ARing), \
81             mm2mils100(Clearance), \
82             mm2mils100(PinDiam+ARing+Clearance), \
83             mm2mils100(PinDiam), \
84             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
85
86         pinnum = col + 1 + 2*(pins+1)/3
87         Flags = '0x0001'
88         if pinnum <= pins:
89           print('   Pin[', \
90             mm2mils100((col)*PinSpacing-pinoffset), \
91             mm2mils100(-RowSpacing), \
92             mm2mils100(PinDiam+ARing), \
93             mm2mils100(Clearance), \
94             mm2mils100(PinDiam+ARing+Clearance), \
95             mm2mils100(PinDiam), \
96             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
97
98
99 # make the mounting tabs be ground-able
100 pinnum = pins + 1
101
102 print('   Pin[', \
103     mm2mils100(MntX/2), \
104     mm2mils100(0), \
105     mm2mils100(MntDiam+ARing), \
106     mm2mils100(Clearance), \
107     mm2mils100(MntDiam+ARing+Clearance), \
108     mm2mils100(MntDiam), \
109     '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
110
111 print('   Pin[', \
112     mm2mils100(-MntX/2), \
113     mm2mils100(0), \
114     mm2mils100(MntDiam+ARing), \
115     mm2mils100(Clearance), \
116     mm2mils100(MntDiam+ARing+Clearance), \
117     mm2mils100(MntDiam), \
118     '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
119
120 print('   ElementLine[', \
121         mm2mils100(-BoxX/2), \
122         mm2mils100(-FaceY-RowSpacing), \
123         mm2mils100(BoxX/2), \
124         mm2mils100(-FaceY-RowSpacing), \
125         LineWidth, ']')
126
127 print('   ElementLine[', \
128         mm2mils100(-BoxX/2), \
129         mm2mils100(BoxY-FaceY-RowSpacing), \
130         mm2mils100(BoxX/2), \
131         mm2mils100(BoxY-FaceY-RowSpacing), \
132         LineWidth, ']')
133
134 print('   ElementLine[', \
135         mm2mils100(BoxX/2), \
136         mm2mils100(-FaceY-RowSpacing), \
137         mm2mils100(BoxX/2), \
138         mm2mils100(BoxY-FaceY-RowSpacing), \
139         LineWidth, ']')
140
141 print('   ElementLine[', \
142         mm2mils100(-BoxX/2), \
143         mm2mils100(-FaceY-RowSpacing), \
144         mm2mils100(-BoxX/2), \
145         mm2mils100(BoxY-FaceY-RowSpacing), \
146         LineWidth, ']')
147
148 print(")")