convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / RN4678.py
1 #!/usr/bin/python3
2 # Copyright 2016 by Bdale Garbee <bdale@gag.com>.  GPLv3+
3 #
4 # Program to emit PCB footprint for Microchip RN4678 Bluetooth LE module
5 #
6
7 # dimensions in mm from BM70/71 Data Sheet (part of the same family)
8
9 BodyWidth = 12.00
10 BodyHeight = 22.00
11
12 GndEdgeLine = 18.00
13
14 PinWidth = 0.7
15 PinHeight = 1.5
16 PinSpacing = 1.1
17 PinOffset = 0.5
18
19 import sys
20
21 # we're going to use the 1/100 of a mil fundamental unit form
22 def mm2mils100( mm ):
23         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
24
25 print('# author: Bdale Garbee')
26 print('# email: bdale@gag.com')
27 print('# dist-license: GPL 3')
28 print('# use-license: unlimited')
29
30 print('Element[0x0 "BM70BLES1FC2" "" "" 0 0 -10161 -12011 0 100 0x0]')
31 print("(")
32 print('   Pad[',\
33         mm2mils100(BodyHeight - 21.2), \
34         mm2mils100(BodyWidth + PinOffset - PinWidth/2), \
35         mm2mils100(BodyHeight - 21.2), \
36         mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \
37         mm2mils100(PinWidth), \
38         mm2mils100(PinSpacing - PinWidth), \
39         mm2mils100(PinWidth)+600, \
40         '"pin1" "1" 0x0100]')
41
42 print('   Pad[',\
43         mm2mils100(BodyHeight - 21.2), \
44         mm2mils100(-PinOffset + PinWidth/2), \
45         mm2mils100(BodyHeight - 21.2), \
46         mm2mils100(-PinOffset + PinHeight - PinWidth/2), \
47         mm2mils100(PinWidth), \
48         mm2mils100(PinSpacing - PinWidth), \
49         mm2mils100(PinWidth)+600, \
50         '"pin33" "33" 0x0100]')
51
52 print('   Pad[',\
53         mm2mils100(BodyHeight - 20.1), \
54         mm2mils100(BodyWidth + PinOffset - PinWidth/2), \
55         mm2mils100(BodyHeight - 20.1), \
56         mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \
57         mm2mils100(PinWidth), \
58         mm2mils100(PinSpacing - PinWidth), \
59         mm2mils100(PinWidth)+600, \
60         '"pin2" "2" 0x0100]')
61
62 print('   Pad[',\
63         mm2mils100(BodyHeight - 20.1), \
64         mm2mils100(-PinOffset + PinWidth/2), \
65         mm2mils100(BodyHeight - 20.1), \
66         mm2mils100(-PinOffset + PinHeight - PinWidth/2), \
67         mm2mils100(PinWidth), \
68         mm2mils100(PinSpacing - PinWidth), \
69         mm2mils100(PinWidth)+600, \
70         '"pin32" "32" 0x0100]')
71
72 print('   Pad[',\
73         mm2mils100(BodyHeight - 13.9), \
74         mm2mils100(BodyWidth + PinOffset - PinWidth/2), \
75         mm2mils100(BodyHeight - 13.9), \
76         mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \
77         mm2mils100(PinWidth), \
78         mm2mils100(PinSpacing - PinWidth), \
79         mm2mils100(PinWidth)+600, \
80         '"pin3" "3" 0x0100]')
81
82 print('   Pad[',\
83         mm2mils100(BodyHeight - 12.8), \
84         mm2mils100(BodyWidth + PinOffset - PinWidth/2), \
85         mm2mils100(BodyHeight - 12.8), \
86         mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \
87         mm2mils100(PinWidth), \
88         mm2mils100(PinSpacing - PinWidth), \
89         mm2mils100(PinWidth)+600, \
90         '"pin4" "4" 0x0100]')
91
92 for pin in range (5,15):
93     print('   Pad[',\
94         mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \
95         mm2mils100(BodyWidth + PinOffset - PinWidth/2), \
96         mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \
97         mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \
98         mm2mils100(PinWidth), \
99         mm2mils100(PinSpacing - PinWidth), \
100         mm2mils100(PinWidth)+600, \
101         '"pin%i"' % pin, '"%i"' % pin, '0x0100]')
102
103     print('   Pad[',\
104         mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \
105         mm2mils100(- PinOffset + PinWidth/2), \
106         mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \
107         mm2mils100(- PinOffset + PinHeight - PinWidth/2), \
108         mm2mils100(PinWidth), \
109         mm2mils100(PinSpacing - PinWidth), \
110         mm2mils100(PinWidth)+600, \
111         '"pin%i"' % (36 - pin), '"%i"' % (36 - pin), '0x0100]')
112
113 for pin in range (15,22):
114     print('   Pad[',\
115         mm2mils100(BodyHeight + PinOffset - PinWidth/2), \
116         mm2mils100(BodyWidth - 2.7 + (-(pin - 15) * PinSpacing)), \
117         mm2mils100(BodyHeight - PinHeight + PinOffset + PinWidth/2), \
118         mm2mils100(BodyWidth - 2.7 + (-(pin - 15) * PinSpacing)), \
119         mm2mils100(PinWidth), \
120         mm2mils100(PinSpacing - PinWidth), \
121         mm2mils100(PinWidth)+600, \
122         '"pin%i"' % pin, '"%i"' % pin, '0x0100]')
123
124
125 # body outline
126
127 print('   ElementLine[',\
128         0, \
129         0, \
130         0, \
131         mm2mils100(BodyWidth), \
132         '1000 ]')
133
134 print('   ElementLine[',\
135         0, \
136         mm2mils100(BodyWidth), \
137         mm2mils100(BodyHeight), \
138         mm2mils100(BodyWidth), \
139         '1000 ]')
140
141 print('   ElementLine[',\
142         mm2mils100(BodyHeight), \
143         mm2mils100(BodyWidth), \
144         mm2mils100(BodyHeight), \
145         0, \
146         '1000 ]')
147
148 print('   ElementLine[',\
149         mm2mils100(BodyHeight), \
150         0, \
151         0, \
152         0, \
153         '1000 ]')
154
155 # hash marks where gnd plane should end
156
157 print('   ElementLine[',\
158         mm2mils100(BodyHeight-GndEdgeLine), \
159         mm2mils100(BodyWidth-1), \
160         mm2mils100(BodyHeight-GndEdgeLine), \
161         mm2mils100(BodyWidth-3), \
162         '1000 ]')
163
164 print('   ElementLine[',\
165         mm2mils100(BodyHeight-GndEdgeLine), \
166         mm2mils100(1), \
167         mm2mils100(BodyHeight-GndEdgeLine), \
168         mm2mils100(3), \
169         '1000 ]')
170
171 print(")")