polygon1.c: #ifdef DEBUG_ALL_LABELS build print_labels()
[geda-pcb/gde.git] / lib / qfpdj.inc
blob51e30b1a04e9499010b435939adb377cd488ac53
2 #                             COPYRIGHT
3
4 #   PCB, interactive printed circuit board design
5 #   Copyright (C) 1994,1995,1996 Thomas Nau
6
7 #   This program is free software; you can redistribute it and/or modify
8 #   it under the terms of the GNU General Public License as published by
9 #   the Free Software Foundation; either version 2 of the License, or
10 #   (at your option) any later version.
11
12 #   This program is distributed in the hope that it will be useful,
13 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #   GNU General Public License for more details.
16
17 #   You should have received a copy of the GNU General Public License
18 #   along with this program; if not, write to the Free Software
19 #   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 #   Contact addresses for paper mail and Email:
22 #   Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany
23 #   Thomas.Nau@rz.uni-ulm.de
24 #   Improvments by D.J. Barrow dj_barrow@ariasoft.ie
25 #   Further improved by W. Kazubski <wk@ire.pw.edu.pl>
26
27 #   RCS: $Id$
29 #  QFP packages
31 # $1: canonical name
32 # $2: name on PCB
33 # $3: value
34 # $4: number of pins
35 # $5: body size in mm (0 if rectangular 20x14 mm)
36 # $6: pad pitch in 1/100 mmm
37 # $7: pad thickness in 1/100 mmm
38 # $8: pad min offset ( edge nearest package )
39 # $9: pad max offset ( edge furthest away from package )
40 # $10: pin 1 in middle
41 # $11: Exposed paddle size, 0 for no exposed paddle (1/100 mm)
43 define(`PKG_GENERIC_QFP',
44        `define(`QUARTER',  `ifelse(0,`$5',`eval($4 * 3 / 10)',`eval($4 / 4)')')
45         define(`QUARTER2', `eval(`$4' / 2 - QUARTER)')
46         define(`OFFSET', `eval((QUARTER +1) /2)')
47         define(`WIDTH', `ifelse(0,`$5',`78740',`eval(`$5'*1000000/254)')')
48         define(`WIDTH2',`ifelse(0,`$5',`55118',`eval(`$5'*1000000/254)')')
49         define(`PITCH',`eval(`$6'*100000/254)')
50         define(`PINREACH',  `eval(((QUARTER-1)*PITCH/10)/2)')
51         define(`PINREACH2', `eval(((QUARTER2-1)*PITCH/10)/2)')
52         define(`HALFWIDTH', `eval(WIDTH / 2)')
53         define(`HALFWIDTH2', `eval(WIDTH2 / 2)')
54         define(`NUMPINS', `$4')
55         define(`PADTHICKNESS',`eval(`$7'*10000/254)')
56         define(`PADMINOFFSET',`eval(`$8'*100+PADTHICKNESS/2)')
57         define(`PADMAXOFFSET',`eval(`$9'*100-PADTHICKNESS/2)')
58         define(`PIN1INMIDDLE',`$10')
59         define(`CUTSIZE',`3300')
60         define(`EDGECUT',`ifelse(1,eval(PIN1INMIDDLE),`HALFWIDTH',`eval(HALFWIDTH-CUTSIZE)')')
61         define(`EDGECUT2',`ifelse(1,eval(PIN1INMIDDLE),`HALFWIDTH2',`eval(HALFWIDTH2-CUTSIZE)')')
62         define(`STARTPIN',`ifelse(1,eval(PIN1INMIDDLE),`eval(((QUARTER+1)/2)+1)',`1')')
63         define(`CIRCLECENTRE',`eval(-EDGECUT)')
64         define(`CIRCLECENTRE2',`ifelse(1,eval(PIN1INMIDDLE),`0',`eval(-EDGECUT2)')')
65         define(`PADMASK', `eval(2*150 + PADTHICKNESS)')
66         define(`PADCLEAR', `3000')
67         define(`EPCLEAR', `500')
68         define(`EPSIZE', `eval(`$11'*10000/254)')
69         define(`EPMASK', `eval(2*200 + EPSIZE)')
70         define(`SILKW', `800')
71         define(`SLX', `eval(-HALFWIDTH2 + SILKW/2)')
72         define(`SRX', `eval( HALFWIDTH2 - SILKW/2)')
73         define(`SUY', `eval(-HALFWIDTH  + SILKW/2)')
74         define(`SLY', `eval( HALFWIDTH  - SILKW/2)')
77 Element[0x00000000 "$1" "`$2'" "$3" 0 0 -2000 -6000 0 100 0x00000000]
80         # left row
81 define(`QFPPIN',`STARTPIN')
82 define(`idx',0)
83 define(`PADIN',`eval(-HALFWIDTH2-PADMINOFFSET)')
84 define(`PADOUT',`eval(-HALFWIDTH2-PADMAXOFFSET)')
85 forloop(`i', 1, QUARTER,
86         `define(`Y', `eval(-PINREACH+((PITCH*idx)/10))')'
87         `Pad[PADOUT  Y  PADIN  Y  PADTHICKNESS  PADCLEAR PADMASK "QFPPIN" "QFPPIN"  0x00000100]'
88         `define(`QFPPIN', incr(QFPPIN))'
89         `define(`idx',incr(idx))'
92         # bottom row
93 define(`idx',0)
94 define(`PADIN',`eval(HALFWIDTH+PADMINOFFSET)')
95 define(`PADOUT',`eval(HALFWIDTH+PADMAXOFFSET)')
96 forloop(`i', 1, QUARTER2,
97         `define(`X', `eval(-PINREACH2+((PITCH*idx)/10))')'
98         `Pad[X PADOUT  X  PADIN  PADTHICKNESS  PADCLEAR PADMASK "QFPPIN" "QFPPIN"  0x00000900]'
99         `define(`QFPPIN', incr(QFPPIN))'
100         `define(`idx',incr(idx))'
103         # right row
104 define(`idx',0)
105 define(`PADIN',`eval(HALFWIDTH2+PADMINOFFSET)')
106 define(`PADOUT',`eval(HALFWIDTH2+PADMAXOFFSET)')
107 forloop(`i', 1, QUARTER,
108         `define(`Y', `eval(PINREACH-((PITCH*idx)/10))')'
109         `Pad[PADOUT  Y  PADIN  Y  PADTHICKNESS  PADCLEAR PADMASK "QFPPIN" "QFPPIN"  0x00000100]'
110         `define(`QFPPIN', incr(QFPPIN))'
111         `define(`idx',incr(idx))'
114         # top row
115 define(`idx',0)
116 define(`PADIN',`eval(-HALFWIDTH-PADMINOFFSET)')
117 define(`PADOUT',`eval(-HALFWIDTH-PADMAXOFFSET)')
118 forloop(`i', 1, QUARTER2,
119         `define(`X',`eval(PINREACH2-((PITCH*idx)/10))')'
120         `Pad[X PADOUT  X  PADIN  PADTHICKNESS  PADCLEAR PADMASK "QFPPIN" "QFPPIN"  0x00000900]'
121         `define(`QFPPIN', incr(QFPPIN))'
122         `ifelse(eval(QFPPIN > NUMPINS), 1, `define(`QFPPIN', 1)')'
123         `define(`idx',incr(idx))'
126         # exposed paddle (if this is an exposed paddle part) 
127 ifelse(1, eval(EPSIZE>0), 
128         `Pad[0 0 0 0 EPSIZE EPCLEAR EPMASK "QFPPIN" "QFPPIN" 0x00000100]'
129         `define(`QFPPIN', incr(QFPPIN))'
132         # top
133         ElementLine[-EDGECUT2 SUY SRX SUY SILKW]
134         # right
135         ElementLine[SRX SUY SRX SLY SILKW]
136         # bottom
137         ElementLine[SRX SLY SLX SLY SILKW]
138         # left
139         ElementLine[SLX SLY SLX -EDGECUT SILKW]
140         # angled corner
141         ElementLine[SLX -EDGECUT -EDGECUT2 SUY SILKW]
143         ElementArc[CIRCLECENTRE2 CIRCLECENTRE 1000 1000 0 360 SILKW]
147 # -------------------------------------------------------------------
148 # ThanX to Johan Andersson (johan@homemail.com), modified by Thomas Nau
149 # the definition of a plcc package for base code to make qfp package.
150 # modified for correct pad numbering by Holm Tiffe
152 # Code from plcc.inc modified by Thomas Olson to make this qfp.inc definition.
153 # Although in retrospec quad flat packs are more diverse than this algorithm will do.
154 # Many qfp are the same physical size but have more thus narrower pads.
155 # $1: canonical name
156 # $2: name on PCB
157 # $3: value
158 # $4: number of pins
159 # $5: body size in mm
160 # $6: pad pitch in 1/100 mmm
161 # $7: pad thickness
162 # $8: pad min offset ( edge nearest package )
163 # $9: pad max offset ( edge furthest away from package )
164 # $10: pin 1 in middle
167 # pins 1.9-2.1mm long
168 define(`PKG_QFP_100',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5',`100',`50',`20',`100',`0',`$6')')
169 define(`PKG_QFP_80L',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `80',`50',`20',`100',`0',`$6')')
170 define(`PKG_QFP_65L',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `65',`40',`20',`100',`0',`$6')')
171 define(`PKG_QFP_50L',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `50',`28',`20',`100',`0',`$6')')
173 # pins 1.6mm long
174 define(`PKG_QFP_80', `PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `80',`40',`20', `80',`0',`$6')')
175 define(`PKG_QFP_65', `PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `65',`40',`20', `80',`0',`$6')')
176 define(`PKG_QFP_50', `PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `50',`28',`20', `80',`0',`$6')')
177 define(`PKG_QFP_40', `PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `40',`25',`20', `80',`0',`$6')')
179 # pins 1mm long
180 define(`PKG_LQFP_80',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `80',`40', `5', `50',`0',`$6')')
181 define(`PKG_LQFP_65',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `65',`40', `5', `50',`0',`$6')')
182 define(`PKG_LQFP_50',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `50',`28', `5', `50',`0',`$6')')
183 define(`PKG_LQFP_40',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`$5', `40',`25', `5', `50',`0',`$6')')
185 # -------------------------------------------------------------------