#!/usr/bin/python3
# Copyright 2022 by Bdale Garbee <bdale@gag.com>.  GPLv3
#
# Program to emit PCB footprint for
#   CviLux CU01SAV1S00 USB Type-A Single Port Vertical Connector
#
# dimensions in mm from cvilux/CU0112S.pdf

PinDiam = 0.92
InnerSpacing = 2.00
OuterSpacing = 7.00

MntDiam = 2.33
MntSpacing = 13.14

Pin2Mnt = 2.71
Pin2Box = 1.69

BoxX = 13.2
BoxY = 5.12		# this is the core box, not including lips, etc

LineWidth = 600
ThicknessDelta = 1.0
Clearance = .32
MaskDelta = 0.32

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 "CU01SAV" "" "" 0 0 0 0 0 100 0x0]')
print("(")

print('   Pin[', \
        mm2mils100(-OuterSpacing/2), \
        0, \
        mm2mils100(PinDiam+ThicknessDelta/2), \
        mm2mils100(Clearance), \
        mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
        mm2mils100(PinDiam), \
	'"1"', \
	'"1"', \
	"0x0101", ']')

print('   Pin[', \
        mm2mils100(-InnerSpacing/2), \
        0, \
        mm2mils100(PinDiam+ThicknessDelta/2), \
        mm2mils100(Clearance), \
        mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
        mm2mils100(PinDiam), \
	'"2"', \
	'"2"', \
	"0x0001", ']')

print('   Pin[', \
        mm2mils100(InnerSpacing/2), \
        0, \
        mm2mils100(PinDiam+ThicknessDelta/2), \
        mm2mils100(Clearance), \
        mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
        mm2mils100(PinDiam), \
	'"3"', \
	'"3"', \
	"0x0001", ']')

print('   Pin[', \
        mm2mils100(OuterSpacing/2), \
        0, \
        mm2mils100(PinDiam+ThicknessDelta/2), \
        mm2mils100(Clearance), \
        mm2mils100(PinDiam+ThicknessDelta/2+MaskDelta), \
        mm2mils100(PinDiam), \
	'"4"', \
	'"4"', \
	"0x0001", ']')

# ground the mounting tab holes, which means pin 4 since this is a USB A
print('   Pin[', \
        mm2mils100(-MntSpacing/2), \
        mm2mils100(Pin2Mnt), \
        mm2mils100(MntDiam+ThicknessDelta), \
        mm2mils100(Clearance), \
        mm2mils100(MntDiam+ThicknessDelta+MaskDelta), \
        mm2mils100(MntDiam), \
	'"4"', \
	'"4"', \
	"0x0001", ']')

print('   Pin[', \
        mm2mils100(MntSpacing/2), \
        mm2mils100(Pin2Mnt), \
        mm2mils100(MntDiam+ThicknessDelta), \
        mm2mils100(Clearance), \
        mm2mils100(MntDiam+ThicknessDelta+MaskDelta), \
        mm2mils100(MntDiam), \
	'"4"', \
	'"4"', \
	"0x0001", ']')

# silkscreen box
print('   ElementLine[', \
        mm2mils100(BoxX/2), \
        mm2mils100(-Pin2Box), \
        mm2mils100(BoxX/2), \
        mm2mils100(-Pin2Box+BoxY), \
        LineWidth, ']')

print('   ElementLine[', \
        mm2mils100(-BoxX/2), \
        mm2mils100(-Pin2Box), \
        mm2mils100(-BoxX/2), \
        mm2mils100(-Pin2Box+BoxY), \
        LineWidth, ']')

print('   ElementLine[', \
        mm2mils100(-BoxX/2), \
        mm2mils100(-Pin2Box), \
        mm2mils100(+BoxX/2), \
        mm2mils100(-Pin2Box), \
        LineWidth, ']')

print('   ElementLine[', \
        mm2mils100(-BoxX/2), \
        mm2mils100(-Pin2Box+BoxY), \
        mm2mils100(+BoxX/2), \
        mm2mils100(-Pin2Box+BoxY), \
        LineWidth, ']')

print(")")
