mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-26 05:19:41 +02:00
- added pad type (for non-solder and solder-paste-only pads) to FPD language
(GUI is still missing) git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5554 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
c37648e2a5
commit
8d94993c45
14
README
14
README
@ -208,7 +208,7 @@ Pads
|
|||||||
|
|
||||||
Pads are similar to rectangles, but they also have a name.
|
Pads are similar to rectangles, but they also have a name.
|
||||||
|
|
||||||
pad "<name>" <point-a> <point-b>
|
pad "<name>" <point-a> <point-b> [<type>]
|
||||||
|
|
||||||
Variables can be expanded in a pad's name by prefixing their name with
|
Variables can be expanded in a pad's name by prefixing their name with
|
||||||
a dollar sign. The ${name} syntax is also available.
|
a dollar sign. The ${name} syntax is also available.
|
||||||
@ -218,6 +218,16 @@ Example:
|
|||||||
vec @(1mm, 1mm)
|
vec @(1mm, 1mm)
|
||||||
pad "1" @ .
|
pad "1" @ .
|
||||||
|
|
||||||
|
Pads normally affect the surface copper layer, the solder mask layer,
|
||||||
|
and the solder paste layer. This can be modified with the optional
|
||||||
|
type argument:
|
||||||
|
|
||||||
|
Type Layers
|
||||||
|
--------- -------------------------------------
|
||||||
|
(default) copper, solder mask, and solder paste
|
||||||
|
bare copper and solder mask
|
||||||
|
paste solder paste
|
||||||
|
|
||||||
|
|
||||||
Rounded pads
|
Rounded pads
|
||||||
- - - - - -
|
- - - - - -
|
||||||
@ -226,7 +236,7 @@ Rounded pads are like rectangular pads except that they end with a
|
|||||||
semi-circle at each of the smaller sides of the enclosing rectangle.
|
semi-circle at each of the smaller sides of the enclosing rectangle.
|
||||||
If enclosed in a square, rounded pads form a circle.
|
If enclosed in a square, rounded pads form a circle.
|
||||||
|
|
||||||
rpad "<name>" <point-a> <point-b>
|
rpad "<name>" <point-a> <point-b> [<type>]
|
||||||
|
|
||||||
|
|
||||||
Measurements
|
Measurements
|
||||||
|
18
dump.c
18
dump.c
@ -318,8 +318,22 @@ char *print_obj(const struct obj *obj, const struct vec *prev)
|
|||||||
break;
|
break;
|
||||||
case ot_pad:
|
case ot_pad:
|
||||||
s1 = obj_base_name(obj->u.pad.other, prev);
|
s1 = obj_base_name(obj->u.pad.other, prev);
|
||||||
s = stralloc_printf("%spad \"%s\" %s %s",
|
switch (obj->u.pad.type) {
|
||||||
obj->u.pad.rounded ? "r" : "", obj->u.pad.name, base, s1);
|
case pt_normal:
|
||||||
|
s2 = "";
|
||||||
|
break;
|
||||||
|
case pt_bare:
|
||||||
|
s2 = " bare";
|
||||||
|
break;
|
||||||
|
case pt_paste:
|
||||||
|
s2 = " paste";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
s = stralloc_printf("%spad \"%s\" %s %s%s",
|
||||||
|
obj->u.pad.rounded ? "r" : "",
|
||||||
|
obj->u.pad.name, base, s1, s2);
|
||||||
free(s1);
|
free(s1);
|
||||||
break;
|
break;
|
||||||
case ot_arc:
|
case ot_arc:
|
||||||
|
21
fpd.y
21
fpd.y
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
@ -146,6 +147,7 @@ static struct obj *new_obj(enum obj_type type)
|
|||||||
struct value *value;
|
struct value *value;
|
||||||
struct vec *vec;
|
struct vec *vec;
|
||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
|
enum pad_type pt;
|
||||||
enum meas_type mt;
|
enum meas_type mt;
|
||||||
struct {
|
struct {
|
||||||
int inverted;
|
int inverted;
|
||||||
@ -172,6 +174,7 @@ static struct obj *new_obj(enum obj_type type)
|
|||||||
%type <obj> obj meas
|
%type <obj> obj meas
|
||||||
%type <expr> expr opt_expr add_expr mult_expr unary_expr primary_expr
|
%type <expr> expr opt_expr add_expr mult_expr unary_expr primary_expr
|
||||||
%type <str> opt_string
|
%type <str> opt_string
|
||||||
|
%type <pt> pad_type
|
||||||
%type <mt> meas_type
|
%type <mt> meas_type
|
||||||
%type <mo> meas_op
|
%type <mo> meas_op
|
||||||
|
|
||||||
@ -441,21 +444,23 @@ base:
|
|||||||
;
|
;
|
||||||
|
|
||||||
obj:
|
obj:
|
||||||
TOK_PAD STRING base base
|
TOK_PAD STRING base base pad_type
|
||||||
{
|
{
|
||||||
$$ = new_obj(ot_pad);
|
$$ = new_obj(ot_pad);
|
||||||
$$->base = $3;
|
$$->base = $3;
|
||||||
$$->u.pad.name = $2;
|
$$->u.pad.name = $2;
|
||||||
$$->u.pad.other = $4;
|
$$->u.pad.other = $4;
|
||||||
$$->u.pad.rounded = 0;
|
$$->u.pad.rounded = 0;
|
||||||
|
$$->u.pad.type = $5;
|
||||||
}
|
}
|
||||||
| TOK_RPAD STRING base base
|
| TOK_RPAD STRING base base pad_type
|
||||||
{
|
{
|
||||||
$$ = new_obj(ot_pad);
|
$$ = new_obj(ot_pad);
|
||||||
$$->base = $3;
|
$$->base = $3;
|
||||||
$$->u.pad.name = $2;
|
$$->u.pad.name = $2;
|
||||||
$$->u.pad.other = $4;
|
$$->u.pad.other = $4;
|
||||||
$$->u.pad.rounded = 1;
|
$$->u.pad.rounded = 1;
|
||||||
|
$$->u.pad.type = $5;
|
||||||
}
|
}
|
||||||
| TOK_RECT base base opt_expr
|
| TOK_RECT base base opt_expr
|
||||||
{
|
{
|
||||||
@ -506,6 +511,18 @@ obj:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
pad_type:
|
||||||
|
ID
|
||||||
|
{
|
||||||
|
if (!strcmp($1, "bare"))
|
||||||
|
$$ = pt_bare;
|
||||||
|
else if (!strcmp($1, "paste"))
|
||||||
|
$$ = pt_paste;
|
||||||
|
else
|
||||||
|
$$ = pt_normal;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
measurements:
|
measurements:
|
||||||
| measurements meas
|
| measurements meas
|
||||||
{
|
{
|
||||||
|
20
kicad.c
20
kicad.c
@ -56,6 +56,7 @@ static void kicad_pad(FILE *file, const struct inst *inst)
|
|||||||
{
|
{
|
||||||
struct coord min, max;
|
struct coord min, max;
|
||||||
unit_type tmp;
|
unit_type tmp;
|
||||||
|
int layers;
|
||||||
|
|
||||||
min.x = units_to_kicad(inst->base.x);
|
min.x = units_to_kicad(inst->base.x);
|
||||||
min.y = units_to_kicad(inst->base.y);
|
min.y = units_to_kicad(inst->base.y);
|
||||||
@ -85,10 +86,21 @@ static void kicad_pad(FILE *file, const struct inst *inst)
|
|||||||
/*
|
/*
|
||||||
* Attributes: pad type, N, layer mask
|
* Attributes: pad type, N, layer mask
|
||||||
*/
|
*/
|
||||||
fprintf(file, "At SMD N %8.8X\n",
|
layers = 0;
|
||||||
(1 << layer_top) |
|
switch (inst->obj->u.pad.type) {
|
||||||
(1 << layer_paste_top) |
|
case pt_normal:
|
||||||
(1 << layer_mask_top));
|
layers = 1 << layer_paste_top;
|
||||||
|
/* fall through */
|
||||||
|
case pt_bare:
|
||||||
|
layers |= (1 << layer_top) | (1 << layer_mask_top);
|
||||||
|
break;
|
||||||
|
case pt_paste:
|
||||||
|
layers = 1 << layer_paste_top;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
fprintf(file, "At SMD N %8.8X\n", layers);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Position: Xpos, Ypos
|
* Position: Xpos, Ypos
|
||||||
|
7
obj.h
7
obj.h
@ -139,6 +139,12 @@ enum obj_type {
|
|||||||
ot_meas,
|
ot_meas,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum pad_type {
|
||||||
|
pt_normal, /* copper and solder mask */
|
||||||
|
pt_bare, /* only copper (and finish) */
|
||||||
|
pt_paste, /* only solder paste */
|
||||||
|
};
|
||||||
|
|
||||||
struct frame_ref {
|
struct frame_ref {
|
||||||
struct frame *ref;
|
struct frame *ref;
|
||||||
int lineno;
|
int lineno;
|
||||||
@ -153,6 +159,7 @@ struct pad {
|
|||||||
char *name;
|
char *name;
|
||||||
struct vec *other; /* NULL if frame origin */
|
struct vec *other; /* NULL if frame origin */
|
||||||
int rounded;
|
int rounded;
|
||||||
|
enum pad_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct arc {
|
struct arc {
|
||||||
|
20
postscript.c
20
postscript.c
@ -172,6 +172,20 @@ static void ps_pad_name(FILE *file, const struct inst *inst)
|
|||||||
inst->u.pad.name, PS_FONT_OUTLINE);
|
inst->u.pad.name, PS_FONT_OUTLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *hatch(enum pad_type type)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case pt_normal:
|
||||||
|
return "crosspath";
|
||||||
|
case pt_bare:
|
||||||
|
return "hatchpath";
|
||||||
|
case pt_paste:
|
||||||
|
return "backhatchpath";
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void ps_pad(FILE *file, const struct inst *inst, int show_name)
|
static void ps_pad(FILE *file, const struct inst *inst, int show_name)
|
||||||
{
|
{
|
||||||
@ -183,7 +197,8 @@ static void ps_pad(FILE *file, const struct inst *inst, int show_name)
|
|||||||
fprintf(file, " %d %d lineto\n", b.x, a.y);
|
fprintf(file, " %d %d lineto\n", b.x, a.y);
|
||||||
fprintf(file, " %d %d lineto\n", b.x, b.y);
|
fprintf(file, " %d %d lineto\n", b.x, b.y);
|
||||||
fprintf(file, " %d %d lineto\n", a.x, b.y);
|
fprintf(file, " %d %d lineto\n", a.x, b.y);
|
||||||
fprintf(file, " closepath gsave crosspath grestore stroke\n");
|
fprintf(file, " closepath gsave %s grestore stroke\n",
|
||||||
|
hatch(inst->obj->u.pad.type));
|
||||||
|
|
||||||
if (show_name)
|
if (show_name)
|
||||||
ps_pad_name(file, inst);
|
ps_pad_name(file, inst);
|
||||||
@ -213,7 +228,8 @@ static void ps_rpad(FILE *file, const struct inst *inst, int show_name)
|
|||||||
fprintf(file, " %d %d lineto\n", a.x+r, b.y);
|
fprintf(file, " %d %d lineto\n", a.x+r, b.y);
|
||||||
fprintf(file, " %d %d %d 90 270 arc\n", a.x+r, a.y+r, r);
|
fprintf(file, " %d %d %d 90 270 arc\n", a.x+r, a.y+r, r);
|
||||||
}
|
}
|
||||||
fprintf(file, " closepath gsave hatchpath grestore stroke\n");
|
fprintf(file, " closepath gsave %s grestore stroke\n",
|
||||||
|
hatch(inst->obj->u.pad.type));
|
||||||
|
|
||||||
if (show_name)
|
if (show_name)
|
||||||
ps_pad_name(file, inst);
|
ps_pad_name(file, inst);
|
||||||
|
Loading…
Reference in New Issue
Block a user