691d1d904a6e56d8f82a6712c95f7b67583c1141
[hw/altusmetrum] / packages / cu01sav.py
1 #!/usr/bin/python3
2 # Copyright 2022 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for
5 #   CviLux CU01SAV1S00 USB Type-A Single Port Straight Connector
6 #
7 # dimensions in mm from cvilux/CU0112S.pdf
8
9 PinDiam = 0.92
10 InnerSpacing = 2.00
11 OuterSpacing = 7.00
12
13 MntDiam = 2.33
14 MntSpacing = 13.14
15
16 Pin2Mnt = 2.71
17 Pin2Box = 1.69
18
19 BoxX = 13.2
20 BoxY = 5.12             # this is the core box, not including lips, etc
21
22 LineWidth = 600
23 ThicknessDelta = 1.0
24 Clearance = .32
25 MaskDelta = 0.32
26
27 import sys
28
29 # we're going to use the 1/100 of a mil fundamental unit form
30 def mm2mils100( mm ):
31         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
32
33 print('# author: Bdale Garbee')
34 print('# email: bdale@gag.com')
35 print('# dist-license: GPL 3')
36 print('# use-license: unlimited')
37
38 print('Element[0x0 "CU01SAV" "" "" 0 0 0 0 0 100 0x0]')
39 print("(")
40
41 print('   Pin[', \
42         mm2mils100(-OuterSpacing/2), \
43         0, \
44         mm2mils100(PinDiam+ThicknessDelta/2), \
45         mm2mils100(Clearance), \
46         mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
47         mm2mils100(PinDiam), \
48         '"1"', \
49         '"1"', \
50         "0x0101", ']')
51
52 print('   Pin[', \
53         mm2mils100(-InnerSpacing/2), \
54         0, \
55         mm2mils100(PinDiam+ThicknessDelta/2), \
56         mm2mils100(Clearance), \
57         mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
58         mm2mils100(PinDiam), \
59         '"2"', \
60         '"2"', \
61         "0x0001", ']')
62
63 print('   Pin[', \
64         mm2mils100(InnerSpacing/2), \
65         0, \
66         mm2mils100(PinDiam+ThicknessDelta/2), \
67         mm2mils100(Clearance), \
68         mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
69         mm2mils100(PinDiam), \
70         '"3"', \
71         '"3"', \
72         "0x0001", ']')
73
74 print('   Pin[', \
75         mm2mils100(OuterSpacing/2), \
76         0, \
77         mm2mils100(PinDiam+ThicknessDelta/2), \
78         mm2mils100(Clearance), \
79         mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
80         mm2mils100(PinDiam), \
81         '"4"', \
82         '"4"', \
83         "0x0001", ']')
84
85 # ground the mounting tab holes, which means pin 4 since this is a USB A
86 print('   Pin[', \
87         mm2mils100(-MntSpacing/2), \
88         mm2mils100(Pin2Mnt), \
89         mm2mils100(MntDiam+ThicknessDelta), \
90         mm2mils100(Clearance), \
91         mm2mils100(MntDiam+ThicknessDelta+MaskDelta), \
92         mm2mils100(MntDiam), \
93         '"4"', \
94         '"4"', \
95         "0x0001", ']')
96
97 print('   Pin[', \
98         mm2mils100(MntSpacing/2), \
99         mm2mils100(Pin2Mnt), \
100         mm2mils100(MntDiam+ThicknessDelta), \
101         mm2mils100(Clearance), \
102         mm2mils100(MntDiam+ThicknessDelta+MaskDelta), \
103         mm2mils100(MntDiam), \
104         '"4"', \
105         '"4"', \
106         "0x0001", ']')
107
108 # silkscreen box
109 print('   ElementLine[', \
110         mm2mils100(BoxX/2), \
111         mm2mils100(-Pin2Box), \
112         mm2mils100(BoxX/2), \
113         mm2mils100(-Pin2Box+BoxY), \
114         LineWidth, ']')
115
116 print('   ElementLine[', \
117         mm2mils100(-BoxX/2), \
118         mm2mils100(-Pin2Box), \
119         mm2mils100(-BoxX/2), \
120         mm2mils100(-Pin2Box+BoxY), \
121         LineWidth, ']')
122
123 print('   ElementLine[', \
124         mm2mils100(-BoxX/2), \
125         mm2mils100(-Pin2Box), \
126         mm2mils100(+BoxX/2), \
127         mm2mils100(-Pin2Box), \
128         LineWidth, ']')
129
130 print('   ElementLine[', \
131         mm2mils100(-BoxX/2), \
132         mm2mils100(-Pin2Box+BoxY), \
133         mm2mils100(+BoxX/2), \
134         mm2mils100(-Pin2Box+BoxY), \
135         LineWidth, ']')
136
137 print(")")