# pcb-rnd devlog

## qf()

The next group of footprints I decided to generate are qfn(), tqfp(), lqfp(). The generic set of rules for these footprints is:

- there is a virtual rectangle that forms rows of pads
- pads are evenly spaced among the edges of that rectangle
- pin numbering is counter-clockwise
- the body of the part may be inside of the rectangle or may extend over the pads

## low level flexibility vs. high level comfort

qf() currently has 14 arguments. It is flexible enough to generate qfn, tqfp, lqfp, and anything similar I've seen in the package datasheet of a major vendor. However, it is not straight forward to convert datasheet tables into qf() parameters.

On the other hand, in practice we need qfn() and tqfp(), which are special cases of qf(). To nail the common use cases, qfn() and tqfp() narrows down the number of parameters to 3..4. Even better, these parameters are exactly those that are in the name of a typical QFN or TQFP footprint or in the first few lines of the dimensions table. I call these scripts frontends to qf().

This makes the common footprints very easy to produce using frontends while leaves a (bit more complicated) plan B, qf(), for special cases.