convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / te-connectivity / tphybrid.py
1 #!/usr/bin/python3
2 # Copyright 2011 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for a 16 pin
5 #   Tyco/AMP Micro-MaTch vertical through-hole female connectors
6 # overlaid with a 10-pin 
7 #   Tyco Electronics Buchanan 2.54mm pitch terminal blocks
8 #
9
10 # dimensions in mm from C_215079_v.pdf datasheet
11 BUPinDiam = 1.1                # screw terminals
12 MMPinDiam = 0.8                # micromatch
13 PinSpacing = 1.27
14 RowSpacing = 2.54
15
16 MntX = 1.4
17 MntY = 1.8
18 MntDiam = 1.5
19
20 BoxY = 5.1
21
22 LineWidth = 600
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 = 17
31
32 BoxXbase = 5.89
33 BoxEnd = 1.5
34
35 print('# author: Bdale Garbee')
36 print('# email: bdale@gag.com')
37 print('# dist-license: GPL 2')
38 print('# use-license: unlimited')
39
40 print('Element[0x0 "tphybrid" "" "" 0 0 0 0 0 100 0x0]')
41 print("(")
42 for col in range (int((pins+1)/2)):
43     for row in range (2):
44         if row == 1:
45             spacing=0
46         else:
47             spacing=RowSpacing
48         pinnum = (col * 2) + row + 1
49         if pinnum != 18:
50             if pinnum == 1:
51                 Flags = '0x0101'
52             else:
53                 Flags = '0x0001'
54             if pinnum % 2 == 0:
55                 PinDiam = MMPinDiam
56             else:
57                 PinDiam = BUPinDiam
58             print('   Pin[', \
59                   mm2mils100((pinnum-1)*PinSpacing), \
60                 mm2mils100(spacing), \
61                   mm2mils100(PinDiam + 0.70), \
62                 1200, \
63                   mm2mils100(PinDiam + 0.86), \
64                 mm2mils100(PinDiam), \
65                 '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
66
67 print('   Pin[', \
68     mm2mils100((-2)*PinSpacing), \
69     mm2mils100(RowSpacing), \
70     mm2mils100(PinDiam + 0.32), \
71     1200, \
72     mm2mils100(PinDiam + 0.48), \
73     mm2mils100(PinDiam), \
74     '"pin18"' , '"18"', Flags, ']')
75
76 # add a hole for the index pin.  plated to save non-plated-hole extra fab cost.
77 print('   Pin[', \
78     mm2mils100(-MntX), \
79     mm2mils100(RowSpacing-MntY), \
80     mm2mils100(MntDiam)+1400, \
81     1400, \
82     mm2mils100(MntDiam)+1400+600, \
83     mm2mils100(MntDiam), \
84     '"mnt" "0"', '0x0001', ']')
85
86 # pins-2 accounts for the extra pin used by screw terminal overlay
87 BoxX = (pins - 2) * PinSpacing + BoxXbase
88 BoxX1 = -(BoxXbase/2)
89 BoxX2 = BoxX1 + BoxX
90 # re-compute X1 after computing X2 to account for screw terminal overlay
91 BoxX1 = -2*PinSpacing - BoxEnd
92 BoxY1 = -(BoxY - RowSpacing)/2
93 BoxY2 = BoxY1 + BoxY
94
95 print('   ElementLine[', \
96           mm2mils100(BoxX1), \
97         mm2mils100(BoxY1), \
98         mm2mils100(BoxX1), \
99         mm2mils100(BoxY2), \
100         LineWidth, ']')
101
102 print('   ElementLine[', \
103           mm2mils100(BoxX1), \
104         mm2mils100(BoxY2), \
105         mm2mils100(BoxX2), \
106         mm2mils100(BoxY2), \
107         LineWidth, ']')
108
109 print('   ElementLine[', \
110         mm2mils100(BoxX2), \
111         mm2mils100(BoxY2), \
112         mm2mils100(BoxX2), \
113         mm2mils100(BoxY1), \
114         LineWidth, ']')
115
116 print('   ElementLine[', \
117         mm2mils100(BoxX2), \
118         mm2mils100(BoxY1), \
119         mm2mils100(BoxX1), \
120         mm2mils100(BoxY1), \
121         LineWidth, ']')
122   
123 print(")")