4c4c3e43413e2351bff2ced7dc3e4128fa00c5c6
[hw/micropeak] / packages / pico-ezmate.py
1 # author: Keith Packard
2 # email: keithp@keithp.com
3 # dist-license: GPL 2
4 # use-license: unlimited
5
6 def mm2mils100( mm ):
7         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
8
9 PadWidth = 0.60
10 PadHeight = 0.85
11 PadSpacing = 1.20
12 PadToHoldX = 0.80
13 PadToHoldY = 3.75
14 HoldWidth = 0.70
15 HoldHeight = 0.80
16 Clearance = 0.6
17
18 OutlineX = 1.5
19 OutlineYPad = - (0.38 / 2)
20 OutlineYHold = OutlineYPad + 4.5
21
22 NumPad=6
23
24 print '# author: Keith Packard'
25 print '# email: keithp@keithp.com'
26 print '# dist-license: GPL 2'
27 print '# use-license: unlimited'
28
29 print 'Element["" "pico-ezmate-%d" "" "" 0 0 0 0 0 100 ""]' % NumPad
30 print "("
31
32 PadX = PadSpacing * NumPad / 2
33
34 # Hold-down pads
35
36 HoldY = PadHeight / 2 + PadToHoldY - HoldHeight / 2
37
38 def pad(cx, cy, w, h, name, num):
39     x1 = 0
40     y1 = 0
41     x2 = 0
42     y2 = 0
43     thickness = 0
44     if w > h:
45         thickness = h
46         y1 = cy
47         x1 = cx - (w - h) / 2
48         y2 = cy
49         x2 = cx + (w - h) / 2
50     else:
51         thickness = w
52         x1 = cx
53         y1 = cy - (h - w) / 2
54         x2 = cx
55         y2 = cy + (h - w) / 2
56     mask = thickness + Clearance / 2
57     print '    Pad[',\
58         mm2mils100(x1), \
59         mm2mils100(y1), \
60         mm2mils100(x2), \
61         mm2mils100(y2), \
62         mm2mils100(thickness), \
63         mm2mils100(Clearance), \
64         mm2mils100(mask),\
65         '"%s"' % name, '"%s"' % num, '"square"]'
66     
67 def line(x1, y1, x2, y2):
68     print '    ElementLine[',\
69         mm2mils100(x1), \
70         mm2mils100(y1), \
71         mm2mils100(x2), \
72         mm2mils100(y2), \
73         '500]'
74     
75 def rect(x, y, w, h):
76     line(x,y,x+w,y)
77     line(x+w,y,x+w,y+h)
78     line(x+w,y+h,x,y+h)
79     line(x,y+h,x,y)
80
81 def padx(p):
82     return -PadSpacing * (NumPad-1) / 2 + PadSpacing * (p - 1)
83
84 def holdx(h):
85     return h * (padx(1) - PadToHoldX - HoldWidth / 2)
86
87
88 for p in range(1,NumPad+1):
89     pad(padx(p), 0, PadWidth, PadHeight, 'pin%i' % p, '%i' % p)
90
91 for h in -1, 1:
92     pad(holdx(h), HoldY, HoldWidth, HoldHeight, 'GND', 'GND')
93
94 rect(padx(1) - OutlineX, OutlineYPad,
95      PadSpacing * (NumPad-1) + OutlineX*2,
96      4.5)
97
98 print '    )'    
99         # 11000 2000
100 #       ElementLine[-11000 -1000 -3600 -1000 100]
101 #       ElementLine[  3600 -1000 11000 -1000 100]
102 #
103 #       ElementLine[11000 -1000 11000 17000 100]
104 #       ElementLine[11000 17000 6000 17000 100]
105 #       ElementLine[ 6000 17000 4000 15000 100]
106 #       ElementLine[ 4000 15000 -4000 15000 100]
107 #       ElementLine[-4000 15000 -6000 17000 100]
108 #       ElementLine[-6000 17000 -11000 17000 100]
109 #       ElementLine[-11000 17000 -11000 -1000 100]
110 #       )
111 #