+#!/usr/bin/python3
+# Copyright 2022 by Bdale Garbee <bdale@gag.com>. GPLv3
+#
+# Program to emit PCB footprint for U-Blox NINA-W131 WIFI module
+#
+
+# dimensions in mm from:
+# NINA_W13_Datasheet_UBX_17006694-2324218.pdf
+
+BodyLength = 10.6 # (A)
+BodyWidth = 10.0 # (B)
+
+KerfTab = 0.10 # (G) depanelizing residual
+
+OuterPitch = 1.00 # (H) lateral and antenna row pin pitch
+OuterWidth = 0.70 # (I)
+OuterHeight = 1.15 # (J)
+OuterEdge2pin1 = 0.45 # (D)
+
+InnerPitch = 1.15 # (P) central area pin pitch
+InnerSize = 0.70 # (O)
+
+import sys
+
+# we're going to use the 1/100 of a mil fundamental unit form
+def mm2mils100( mm ):
+ return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
+
+print('# author: Bdale Garbee')
+print('# email: bdale@gag.com')
+print('# dist-license: GPL 3')
+print('# use-license: unlimited')
+
+print('Element[0x0 "NINA-W131" "" "" 0 0 11000 0 0 100 0x0]')
+print("(")
+
+#rows = ['A','B','C','D','E','F','G','H','J']
+#for row in rows:
+# rownum = rows.index(row) # rownum will run 0..8
+# for col in range (1,10): # col wil run 1..9
+# ThisPin = row+str(col)
+# if ThisPin in ValidPin:
+# print(' Pad[',\
+# mm2mils100((col-5) * PadSpacing), \
+# mm2mils100((rownum-4) * PadSpacing), \
+# mm2mils100((col-5) * PadSpacing), \
+# mm2mils100((rownum-4) * PadSpacing), \
+# mm2mils100(PadDiam), \
+# mm2mils100(Clearance), \
+# mm2mils100(Mask), \
+# '"%s"' % ThisPin, '"%s"' % ThisPin, '""]')
+
+print(' ElementLine[',\
+ mm2mils100(-BodyLength/2), \
+ mm2mils100(-BodyWidth/2), \
+ mm2mils100(-BodyLength/2), \
+ mm2mils100( BodyWidth/2), \
+ '1000 ]')
+
+print(' ElementLine[',\
+ mm2mils100(-BodyLength/2), \
+ mm2mils100( BodyWidth/2), \
+ mm2mils100( BodyLength/2), \
+ mm2mils100( BodyWidth/2), \
+ '1000 ]')
+
+print(' ElementLine[',\
+ mm2mils100( BodyLength/2), \
+ mm2mils100( BodyWidth/2), \
+ mm2mils100( BodyLength/2), \
+ mm2mils100(-BodyWidth/2), \
+ '1000 ]')
+
+print(' ElementLine[',\
+ mm2mils100( BodyLength/2), \
+ mm2mils100(-BodyWidth/2), \
+ mm2mils100(-BodyLength/2), \
+ mm2mils100(-BodyWidth/2), \
+ '1000 ]')
+
+# depanelization residuals
+print(' ElementLine[',\
+ mm2mils100(-BodyLength/2-KerfTab), \
+ mm2mils100(-BodyWidth/2), \
+ mm2mils100(-BodyLength/2-KerfTab), \
+ mm2mils100(-BodyWidth/2+OuterHeight), \
+ '1000 ]')
+
+print(' ElementLine[',\
+ mm2mils100(-BodyLength/2-KerfTab), \
+ mm2mils100(BodyWidth/2), \
+ mm2mils100(-BodyLength/2-KerfTab), \
+ mm2mils100(BodyWidth/2-OuterHeight), \
+ '1000 ]')
+
+#print(' ElementArc[',\
+# mm2mils100(-5 * PadSpacing), \
+# mm2mils100(-5 * PadSpacing), \
+# '500 500 0 360 1000 ]')
+
+print(")")