8cb6422688aedf599db07e3a31b34634e2f2f8ca
[hw/altusmetrum] / packages / molex / picoflex-th-v.py
1 #!/usr/bin/python2
2 # Copyright 2008 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for
5 #   Molex 1.25mm PicoBlade, vertical through-hole header 53047-XX10, 2-15 pins 
6 #
7 # Needs pin count on command line, in range of 2..15
8 #
9
10 # dimensions in mm from 903257004_sd.pdf datasheet
11 PinDiam = 0.8
12 PinSpacing = 2.54
13 RowSpacing = 2.54
14 RowOffset = 1.27
15 BoxHeight = 5.98
16 BoxEnd = 2.755
17 MntX = 1.8
18 MntY = 1.48
19 MntDiam = 1.5
20 LineWidth = 600
21
22 import sys
23
24 # we're going to use the 1/100 of a mil fundamental unit form
25 def mm2mils100( mm ):
26         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
27
28 pins = int(sys.argv[1])
29 if pins < 4:
30         sys.stderr.write('Must be at least 4 pins\n')
31         sys.exit(1)
32 if pins > 26:
33         sys.stderr.write('Must be no more than 26 pins\n')
34         sys.exit(1)
35
36 print '# author: Bdale Garbee'
37 print '# email: bdale@gag.com'
38 print '# dist-license: GPL 2'
39 print '# use-license: unlimited'
40
41 print 'Element[0x0 "PicoFlex%i"' % pins,'"" "" 0 0 0 0 0 100 0x0]'
42 print "("
43 for col in range ((pins+1)/2):
44     for row in range (2):
45         if row == 1:
46             offset=RowOffset
47             spacing=RowSpacing
48         else:
49             offset=0
50             spacing=0
51         pinnum = (col * 2) + row + 1
52         if pinnum == 1:
53             Flags = '0x0101'
54         else:
55             Flags = '0x0001'
56         print '   Pin[', \
57             mm2mils100(col*PinSpacing + offset), \
58             mm2mils100(spacing), \
59             mm2mils100(PinDiam*2), \
60             600, \
61             mm2mils100(PinDiam*2)+1000, \
62             mm2mils100(PinDiam), \
63             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']'
64
65 print '   Pin[', \
66     mm2mils100(-MntX), \
67     mm2mils100(-MntY), \
68     mm2mils100(MntDiam), \
69     0, \
70     mm2mils100(MntDiam), \
71     mm2mils100(MntDiam), \
72     '"mnt" "0"', '0x0008', ']'
73
74 print '   Pin[', \
75     mm2mils100(((pins+1)/2-1)*PinSpacing+RowOffset+MntX), \
76     mm2mils100(-MntY), \
77     mm2mils100(MntDiam), \
78     0, \
79     mm2mils100(MntDiam), \
80     mm2mils100(MntDiam), \
81     '"mnt" "0"', '0x0008', ']'
82
83 BoxWidth = BoxEnd + ((pins/2-1) * PinSpacing + RowOffset);
84 BoxYOff = MntY + MntDiam/2 + .1524
85
86 print '   ElementLine[', \
87         mm2mils100(-BoxEnd), \
88         mm2mils100(-BoxYOff), \
89         mm2mils100(-BoxEnd), \
90         mm2mils100(BoxHeight-BoxYOff), \
91         LineWidth, ']'
92
93 print '   ElementLine[', \
94         mm2mils100(-BoxEnd), \
95         mm2mils100(BoxHeight-BoxYOff), \
96         mm2mils100(BoxWidth), \
97         mm2mils100(BoxHeight-BoxYOff), \
98         LineWidth, ']'
99
100 print '   ElementLine[', \
101         mm2mils100(BoxWidth), \
102         mm2mils100(BoxHeight-BoxYOff), \
103         mm2mils100(BoxWidth), \
104         mm2mils100(-BoxYOff), \
105         LineWidth, ']'
106
107 print '   ElementLine[', \
108         mm2mils100(BoxWidth), \
109         mm2mils100(-BoxYOff), \
110         mm2mils100(-BoxEnd), \
111         mm2mils100(-BoxYOff), \
112         LineWidth, ']'
113   
114 print ")"