cf2d6dcdbe0c48df7d20073fcedab3398b93fa0f
[hw/altusmetrum] / packages / NINA-W131.py
1 #!/usr/bin/python3
2 # Copyright 2022 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for U-Blox NINA-W131 WIFI module
5 #
6
7 # dimensions in mm from:
8 #       NINA_W13_Datasheet_UBX_17006694-2324218.pdf
9
10 BodyLength = 10.6       # (A)
11 BodyWidth = 10.0        # (B)
12
13 KerfTab = 0.10          # (G) depanelizing residual
14
15 OuterPitch = 1.00       # (H) lateral and antenna row pin pitch
16 OuterWidth = 0.70       # (I)
17 OuterHeight = 1.15      # (J)
18 OuterEdge2pin1 = 0.45   # (D)
19
20 InnerPitch = 1.15       # (P) central area pin pitch
21 InnerSize = 0.70        # (O)
22
23 import sys
24
25 # we're going to use the 1/100 of a mil fundamental unit form
26 def mm2mils100( mm ):
27         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28
29 print('# author: Bdale Garbee')
30 print('# email: bdale@gag.com')
31 print('# dist-license: GPL 3')
32 print('# use-license: unlimited')
33
34 print('Element[0x0 "NINA-W131" "" "" 0 0 11000 0 0 100 0x0]')
35 print("(")
36
37 #rows = ['A','B','C','D','E','F','G','H','J']
38 #for row in rows:
39 #  rownum = rows.index(row)     # rownum will run 0..8
40 #  for col in range (1,10):     # col wil run 1..9
41 #    ThisPin = row+str(col)
42 #    if ThisPin in ValidPin:
43 #      print('   Pad[',\
44 #        mm2mils100((col-5) * PadSpacing), \
45 #        mm2mils100((rownum-4) * PadSpacing), \
46 #        mm2mils100((col-5) * PadSpacing), \
47 #        mm2mils100((rownum-4) * PadSpacing), \
48 #        mm2mils100(PadDiam), \
49 #        mm2mils100(Clearance), \
50 #        mm2mils100(Mask), \
51 #        '"%s"' % ThisPin, '"%s"' % ThisPin, '""]')
52
53 print('   ElementLine[',\
54         mm2mils100(-BodyLength/2), \
55         mm2mils100(-BodyWidth/2), \
56         mm2mils100(-BodyLength/2), \
57         mm2mils100( BodyWidth/2), \
58         '1000 ]')
59
60 print('   ElementLine[',\
61         mm2mils100(-BodyLength/2), \
62         mm2mils100( BodyWidth/2), \
63         mm2mils100( BodyLength/2), \
64         mm2mils100( BodyWidth/2), \
65         '1000 ]')
66
67 print('   ElementLine[',\
68         mm2mils100( BodyLength/2), \
69         mm2mils100( BodyWidth/2), \
70         mm2mils100( BodyLength/2), \
71         mm2mils100(-BodyWidth/2), \
72         '1000 ]')
73
74 print('   ElementLine[',\
75         mm2mils100( BodyLength/2), \
76         mm2mils100(-BodyWidth/2), \
77         mm2mils100(-BodyLength/2), \
78         mm2mils100(-BodyWidth/2), \
79         '1000 ]')
80
81 # depanelization residuals
82 print('   ElementLine[',\
83         mm2mils100(-BodyLength/2-KerfTab), \
84         mm2mils100(-BodyWidth/2), \
85         mm2mils100(-BodyLength/2-KerfTab), \
86         mm2mils100(-BodyWidth/2+OuterHeight), \
87         '1000 ]')
88
89 print('   ElementLine[',\
90         mm2mils100(-BodyLength/2-KerfTab), \
91         mm2mils100(BodyWidth/2), \
92         mm2mils100(-BodyLength/2-KerfTab), \
93         mm2mils100(BodyWidth/2-OuterHeight), \
94         '1000 ]')
95
96 #print('   ElementArc[',\
97 #        mm2mils100(-5 * PadSpacing), \
98 #        mm2mils100(-5 * PadSpacing), \
99 #        '500 500 0 360 1000 ]')
100
101 print(")")