Index: pcblib/parametric/qf.awk =================================================================== --- pcblib/parametric/qf.awk (revision 741) +++ pcblib/parametric/qf.awk (revision 742) @@ -1,5 +1,10 @@ -function qf_globals(extra_args) +function qf_globals(pre_args, post_args ,reqs) { + if (hook_spc_conv == "") + hook_spc_conv = 1.8 + if (hook_cpad_mult == "") + hook_cpad_mult = 1 + if (!qf_no_defaults) { set_arg(P, "?pad_spacing", "0.5mm") set_arg(P, "?ext_bloat", "0.37mm") @@ -9,11 +14,19 @@ set_arg(P, "?line_thickness", "0.1mm") } - if ((extra_args != "") && (!(extra_args ~ "^,"))) - extra_args = "," extra_args + reqs = "nx,ny" + + if (pre_args != "") + reqs="" - proc_args(P, "nx,ny,x_spacing,y_spacing,pad_spacing,ext_bloat,int_bloat,width,height,cpad_width,cpad_height,cpad_auto,silkmark" extra_args, "nx,ny") + if ((post_args != "") && (!(post_args ~ "^,"))) + post_args = "," post_args + if ((pre_args != "") && (!(pre_args ~ ",$"))) + pre_args = pre_args "," + + proc_args(P, pre_args "nx,ny,x_spacing,y_spacing,pad_spacing,ext_bloat,int_bloat,width,height,cpad_width,cpad_height,cpad_auto,silkmark" post_args, reqs) + nx = int(P["nx"]) ny = int(P["ny"]) @@ -33,20 +46,21 @@ height=parse_dim(P["height"]) if (x_spacing == "") - x_spacing = (nx+1) * pad_spacing + 2*int_bloat + x_spacing = (nx+hook_spc_conv) * pad_spacing if (y_spacing == "") - y_spacing = (ny+1) * pad_spacing + 2*int_bloat + y_spacing = (ny+hook_spc_conv) * pad_spacing cpad_width=parse_dim(P["cpad_width"]) cpad_height=parse_dim(P["cpad_height"]) - if (tobool(P["cpad_auto"])) { + if (tobool(P["cpad_auto"]) || hook_cpad_auto) { if (cpad_width == "") - cpad_width = x_spacing - int_bloat*2 - pt - int_bloat*2 + cpad_width = (x_spacing*0.85 - int_bloat*2 - pt) * hook_cpad_mult if (cpad_height == "") - cpad_height = y_spacing - int_bloat*2 - pt - int_bloat*2 + cpad_height = (y_spacing*0.85 - int_bloat*2 - pt) * hook_cpad_mult } + if (width == "") width = x_spacing if (height == "") Index: pcblib/parametric/qfn =================================================================== --- pcblib/parametric/qfn (nonexistent) +++ pcblib/parametric/qfn (revision 742) @@ -0,0 +1,21 @@ +#!/bin/sh + +#@@example so(14) + +#@@purpose Generate QFN packages +#@@desc Generate QFN packages - a simplified frontend to qf() - +#@@desc look up 3..4 data in the datasheet and get a regular QFN footprint! +#@@desc NOTE: some of the qf() parameters can be also used. + +#@@params:pins,size,pitch,cpad_size + +#@@param:pin total number of pins (leads); must be divisible by 4 +#@@param:size a single integer N or NxN or NxNxH; the pad spacing dimension (outer dimension, lead-to-lead) in mm +#@@param:pitch lead pitch (distance between the centerline of two adjacent leads), in mm; must be one of 0.4, 0.5, 0.65 + +#@@param:cpad_size width (and height) of the central pad, in mm +#@@optional:cpad_size +#@@default:cpad_size empty, there's no central pad + +awk -f `dirname $0`/common.awk -f `dirname $0`/qfn.awk -f `dirname $0`/qf.awk -v "args=$*" -v gen=`basename $0` + Property changes on: pcblib/parametric/qfn ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: pcblib/parametric/qfn.awk =================================================================== --- pcblib/parametric/qfn.awk (nonexistent) +++ pcblib/parametric/qfn.awk (revision 742) @@ -0,0 +1,44 @@ +function parri(A ,s,i) +{ + for(i in A) + s = s " " i + return s +} + +BEGIN { + + PT["0.65"] = "0.35mm" + PT["0.5"] = "0.3mm" + PT["0.4"] = "0.2mm" + + proc_args(P, "pins,size,pitch,cpad_size", "pins,size,pitch") + + pitch = P["pitch"] + if (!(pitch in PT)) + error("Unkown pitch, should be one of:" parri(PT)) + pt = PT[pitch] + + split(P["size"], S, "x") + if (S[2] == "") + S[2] = S[1] + if (S[1] != S[2]) + error("need n*n size") + + pins = int(P["pins"]) + if (pins / 4 != int(pins / 4)) + error("number of pins must be divisible by 4") + + pins=pins/4 + + + args = args ",nx=" pins ",ny=" pins ",x_spacing=" S[1] "mm,y_spacing=" S[2] "mm,pad_spacing=" pitch "mm,pad_thickness=" pt + + if (P["cpad_size"] != "") + args = args ",cpad_width=" P["cpad_size"] "mm,cpad_height=" P["cpad_size"] "mm" + + + print "args=" args > "/dev/stderr" + +# qf_globals("pins,size") + +}