-#! /usr/bin/python
+#! /usr/bin/python3
#
# generate lihata footprint for 4ucon 11071 tabbed micro USB connector
# Copyright 2020 by Bdale Garbee <bdale@gag.com>
import math
from fplht import *
+# dimensions taken from 4ucon part drawing
+# note that we define Y origin to be the board edge, not center mass
+
+pad_width = 0.4
+pad_height = 1.35
+pad_spacing = 0.65
+pad_y = 1.45 + 3.35 - pad_height/2
+
+tab_width = 1.9
+tab_height = 1.9
+tab_x = 0.2 + tab_width / 2
+tab_y = 1.45
+
+slot_x = 6.40 / 2
+slot_y = 1.45
+slot_width = 0.45
+slot_height = 1.55
+slot_copper = (2.15 - 1.55) / 2
+
+wing_width = 1.6
+wing_height = 1.4
+wing_x = 3.2
+wing_y = 1.45 + 2.25
+
fp = footprint()
fp.name = "11071"
fp.description = "4ucon 11071 tabbed micro USB connector"
+fp.pad({'x' : pad_spacing* 2, 'y' : pad_y, 'width' : pad_width, 'height' : pad_height, 'name' : 'VBUS', 'number' : '1'})
+fp.pad({'x' : pad_spacing* 1, 'y' : pad_y, 'width' : pad_width, 'height' : pad_height, 'name' : 'D-', 'number' : '2'})
+fp.pad({'x' : pad_spacing* 0, 'y' : pad_y, 'width' : pad_width, 'height' : pad_height, 'name' : 'D+', 'number' : '3'})
+fp.pad({'x' : pad_spacing* -1, 'y' : pad_y, 'width' : pad_width, 'height' : pad_height, 'name' : 'HS', 'number' : '4'})
+fp.pad({'x' : pad_spacing* -2, 'y' : pad_y, 'width' : pad_width, 'height' : pad_height, 'name' : 'GND', 'number' : '5'})
+
+# mounting "wings", or tabs next to the signal pads
+
+fp.pad({'x' : -wing_x, 'y' : wing_y, 'width' : wing_width, 'height' : wing_height, 'spacing' : 0, 'name' : "", 'number' : "G"})
+fp.pad({'x' : wing_x, 'y' : wing_y, 'width' : wing_width, 'height' : wing_height, 'spacing' : 0, 'name' : "", 'number' : "G"})
+
+# mounting tabs under package
+
+fp.pad({'x' : -tab_x, 'y' : tab_y, 'width' : tab_width, 'height' : tab_height, 'spacing' : 0, 'name' : "", 'number' : "G"})
+fp.pad({'x' : tab_x, 'y' : tab_y, 'width' : tab_width, 'height' : tab_height, 'spacing' : 0, 'name' : "", 'number' : "G"})
+
+# slots for through-hole mounting tabs
+fp.slot({'x' : -slot_x, 'y' : slot_y, 'width' : slot_width, 'height' : slot_height, 'thickness' : slot_width + slot_copper * 2, 'name' : 'GND', 'number' : 5})
+fp.slot({'x' : slot_x, 'y' : slot_y, 'width' : slot_width, 'height' : slot_height, 'thickness' : slot_width + slot_copper * 2, 'name' : 'GND', 'number' : 5})
+
fp.emit()