47a1d216085ce07ad22576361a12deca2b84c4a3
[hw/altusmetrum] / packages / SJ-352X-SMT.py
1 #!/usr/bin/python3
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for CUI SJ-352X-SMT 1/8" headphone jacks
5 #
6
7 # dimensions in mm from cui/sj-352x-smt.pdf
8
9 Pad1Setback = 2.4       # to center
10 Pad2Setback = 11.8      # to center
11 Pad3Setback = 4.4       # to center
12 Pad4Setback = 14.5      # to leading edge
13 PadOffset = 2.3         # start of pad above/below centerline
14
15 FrontPadHeight = 5.1 - PadOffset
16 FrontPadWidth = 2.2
17
18 BackPadWidth = 2.6
19 BackPadHeight = 2.8
20 BackPadOffset = 0.75
21
22 Clearance = 0.010 * 25.4
23 Mask = 0.007 * 2 * 25.4
24
25 HoleDiam = 1.7
26 HoleSetback = 3.5
27 HoleSpacing = 7.0
28
29 BodyHeight = 6.0
30 BodyWidth = 14.5
31 SnoutHeight = 5.0
32 SnoutWidth = 2.5
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 "SJ-352X-SMT" "" "" 0 0 0 0 0 100 0x0]')
44 print("(")
45
46 print('   Pad[',\
47         mm2mils100(Pad1Setback), \
48         mm2mils100(PadOffset + FrontPadWidth/2), \
49         mm2mils100(Pad1Setback), \
50         mm2mils100(PadOffset + FrontPadHeight - FrontPadWidth/2), \
51         mm2mils100(FrontPadWidth), \
52         mm2mils100(Clearance), \
53         mm2mils100(FrontPadWidth + Mask), \
54         '"1" "1" 0x0100]')
55
56 print('   Pad[',\
57         mm2mils100(Pad2Setback), \
58         mm2mils100(PadOffset + BackPadWidth/2), \
59         mm2mils100(Pad2Setback), \
60         mm2mils100(PadOffset + FrontPadHeight - BackPadWidth/2), \
61         mm2mils100(BackPadWidth), \
62         mm2mils100(Clearance), \
63         mm2mils100(BackPadWidth + Mask), \
64         '"2" "2" 0x0100]')
65
66 print('   Pad[',\
67         mm2mils100(Pad3Setback), \
68         mm2mils100(-PadOffset - FrontPadWidth/2), \
69         mm2mils100(Pad3Setback), \
70         mm2mils100(-PadOffset - FrontPadHeight + FrontPadWidth/2), \
71         mm2mils100(FrontPadWidth), \
72         mm2mils100(Clearance), \
73         mm2mils100(FrontPadWidth + Mask), \
74         '"3" "3" 0x0100]')
75
76 print('   Pad[',\
77         mm2mils100(Pad4Setback + BackPadWidth/2 ), \
78         mm2mils100(-BackPadOffset - BackPadHeight/2 + BackPadWidth/2), \
79         mm2mils100(Pad4Setback + BackPadWidth/2 ), \
80         mm2mils100(-BackPadOffset + BackPadHeight/2 - BackPadWidth/2), \
81         mm2mils100(BackPadWidth), \
82         mm2mils100(Clearance), \
83         mm2mils100(BackPadWidth + Mask), \
84         '"4" "4" 0x0100]')
85
86 print('   Pin[',\
87         mm2mils100(HoleSetback), \
88         0, \
89         mm2mils100(HoleDiam), \
90         mm2mils100(0.5), \
91         mm2mils100(1.5*HoleDiam), \
92         mm2mils100(HoleDiam), \
93         '"mounting" "M" 0x0008]')
94
95 print('   Pin[',\
96         mm2mils100(HoleSetback+HoleSpacing), \
97         0, \
98         mm2mils100(HoleDiam), \
99         mm2mils100(0.5), \
100         mm2mils100(1.5*HoleDiam), \
101         mm2mils100(HoleDiam), \
102         '"mounting" "M" 0x0008]')
103
104 print('   ElementLine[',\
105         0, \
106         mm2mils100(-BodyHeight/2), \
107         mm2mils100(BodyWidth), \
108         mm2mils100(-BodyHeight/2), \
109         1000, \
110         ']')
111
112 print('   ElementLine[',\
113         0, \
114         mm2mils100(BodyHeight/2), \
115         mm2mils100(BodyWidth), \
116         mm2mils100(BodyHeight/2), \
117         1000, \
118         ']')
119
120 print('   ElementLine[',\
121         mm2mils100(BodyWidth), \
122         mm2mils100(-BodyHeight/2), \
123         mm2mils100(BodyWidth), \
124         mm2mils100(BodyHeight/2), \
125         1000, \
126         ']')
127
128 print('   ElementLine[',\
129         mm2mils100(-SnoutWidth), \
130         mm2mils100(SnoutHeight/2), \
131         0, \
132         mm2mils100(SnoutHeight/2), \
133         1000, \
134         ']')
135
136 print('   ElementLine[',\
137         mm2mils100(-SnoutWidth), \
138         mm2mils100(-SnoutHeight/2), \
139         0, \
140         mm2mils100(-SnoutHeight/2), \
141         1000, \
142         ']')
143
144 print('   ElementLine[',\
145         mm2mils100(-SnoutWidth), \
146         mm2mils100(-SnoutHeight/2), \
147         mm2mils100(-SnoutWidth), \
148         mm2mils100(SnoutHeight/2), \
149         1000, \
150         ']')
151
152 print('   ElementLine[',\
153         0, \
154         mm2mils100(SnoutHeight/2), \
155         0, \
156         mm2mils100(BodyHeight/2), \
157         1000, \
158         ']')
159
160 print('   ElementLine[',\
161         0, \
162         mm2mils100(-SnoutHeight/2), \
163         0, \
164         mm2mils100(-BodyHeight/2), \
165         1000, \
166         ']')
167
168
169 print(")")