From 1ff7e0746e19b25da1647fb851acd3ce525ab4c3 Mon Sep 17 00:00:00 2001 From: tapioki Date: Sun, 23 May 2021 23:13:17 +0200 Subject: [PATCH] Added new switch footprints, updated reversibility functionality, integrated hotswap footprints, added orientation to promicro, alphabetized index, and added net and paramter documentation --- src/footprints/TRRS-PJ-320A-dual.js | 55 ---------- src/footprints/choc.js | 107 +++++++++++++------- src/footprints/choc_hotswap.js | 59 ----------- src/footprints/chocmini.js | 84 ++++++++++++++++ src/footprints/index.js | 22 ++-- src/footprints/mx.js | 66 +++++++++--- src/footprints/mx_hotswap.js | 62 ------------ src/footprints/promicro.js | 150 ++++++++++++++++------------ src/footprints/promicro_front.js | 65 ------------ src/footprints/rotary.js | 11 +- src/footprints/scrollwheel.js | 79 +++++++++++++++ src/footprints/trrs.js | 77 ++++++++++++++ src/footprints/via.js | 23 +++-- 13 files changed, 483 insertions(+), 377 deletions(-) delete mode 100644 src/footprints/TRRS-PJ-320A-dual.js delete mode 100644 src/footprints/choc_hotswap.js create mode 100644 src/footprints/chocmini.js delete mode 100644 src/footprints/mx_hotswap.js delete mode 100644 src/footprints/promicro_front.js create mode 100644 src/footprints/scrollwheel.js create mode 100644 src/footprints/trrs.js diff --git a/src/footprints/TRRS-PJ-320A-dual.js b/src/footprints/TRRS-PJ-320A-dual.js deleted file mode 100644 index 88c68bb..0000000 --- a/src/footprints/TRRS-PJ-320A-dual.js +++ /dev/null @@ -1,55 +0,0 @@ -module.exports = { - nets: ['A', 'B', 'C', 'D'], - params: { - class: 'T', // for TRRS - reverse: true - }, - body: p => { - - const reversal = (j) => { - if (j == true) return ` - (pad 1 thru_hole oval (at 0 11.3 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.A}) - (pad 2 thru_hole oval (at -4.6 10.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.B}) - (pad 3 thru_hole oval (at -4.6 6.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.C}) - (pad 4 thru_hole oval (at -4.6 3.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.D}) - (fp_line (start 0.5 -2) (end -5.1 -2) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.1 0) (end -5.1 -2) (layer B.SilkS) (width 0.15)) - (fp_line (start 0.5 0) (end 0.5 -2) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.35 0) (end -5.35 12.1) (layer B.SilkS) (width 0.15)) - (fp_line (start 0.75 0) (end 0.75 12.1) (layer B.SilkS) (width 0.15)) - (fp_line (start 0.75 12.1) (end -5.35 12.1) (layer B.SilkS) (width 0.15)) - (fp_line (start 0.75 0) (end -5.35 0) (layer B.SilkS) (width 0.15)) - ` - else return '' - } - - return ` - - (module TRRS-PJ-320A-dual (layer F.Cu) (tedit 5970F8E5) - - ${p.at /* parametric position */} - - (fp_text reference REF** (at 0 14.2) (layer Dwgs.User) (effects (font (size 1 1) (thickness 0.15)))) - (fp_text value TRRS-PJ-320A-dual (at 0 -5.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) - (fp_line (start 0.5 -2) (end -5.1 -2) (layer F.SilkS) (width 0.15)) - (fp_line (start -5.1 0) (end -5.1 -2) (layer F.SilkS) (width 0.15)) - (fp_line (start 0.5 0) (end 0.5 -2) (layer F.SilkS) (width 0.15)) - (fp_line (start -5.35 0) (end -5.35 12.1) (layer F.SilkS) (width 0.15)) - (fp_line (start 0.75 0) (end 0.75 12.1) (layer F.SilkS) (width 0.15)) - (fp_line (start 0.75 12.1) (end -5.35 12.1) (layer F.SilkS) (width 0.15)) - (fp_line (start 0.75 0) (end -5.35 0) (layer F.SilkS) (width 0.15)) - - (pad 1 thru_hole oval (at -4.6 11.3 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.A}) - (pad 2 thru_hole oval (at 0 10.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.B}) - (pad 3 thru_hole oval (at 0 6.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.C}) - (pad 4 thru_hole oval (at 0 3.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.D}) - - ${reversal(p.param.reverse)} - - (pad "" np_thru_hole circle (at -2.3 8.6) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at -2.3 8.6) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at -2.3 1.6) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) - ) - ` -} -} \ No newline at end of file diff --git a/src/footprints/choc.js b/src/footprints/choc.js index c225d8f..af4e8a6 100644 --- a/src/footprints/choc.js +++ b/src/footprints/choc.js @@ -1,39 +1,78 @@ +// Kailh Choc PG1350 +// Nets +// from: corresponds to pin 1 +// to: corresponds to pin 2 +// Params +// hotswap: default is false +// if true, will include holes and pads for Kailh choc hotswap sockets +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible +// +// note: hotswap and reverse can be used simultaneously + module.exports = { - nets: ['from', 'to'], - params: { - class: 'S' - }, - body: p => ` + nets: ['from', 'to'], + params: { + class: 'S', + hotswap: false, + reverse: false + }, + body: p => { + const standard = ` + (module PG1350 (layer F.Cu) (tedit 5DD50112) + ${p.at /* parametric position */} - (module PG1350 (layer F.Cu) (tedit 5DD50112) + ${'' /* footprint reference */} + (fp_text reference "${p.ref}" (at 0 0) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) + (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) - ${p.at /* parametric position */} - - ${'' /* footprint reference */} - (fp_text reference "${p.ref}" (at 0 0) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) - (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) - - ${''/* corner marks */} - (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15)) - - ${''/* pins */} - (pad 1 thru_hole circle (at 5 -3.8) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.net.from}) - (pad 2 thru_hole circle (at 0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.net.to}) + ${''/* corner marks */} + (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15)) + (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15)) + (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15)) + (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15)) + (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15)) + (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15)) + (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15)) + (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15)) + + ${''/* middle shaft */} + (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask)) - ${''/* middle shaft */} - (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask)) - - ${''/* stabilizers */} - (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) - ) - - ` + ${''/* stabilizers */} + (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) + ` + function pins(def_neg, def_pos, def_side) { + if(p.param.hotswap) { + return ` + ${'' /* holes */} + (pad "" np_thru_hole circle (at ${def_pos}5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + + ${'' /* net pads */} + (pad 1 smd rect (at ${def_neg}3.275 -5.95 ${p.rot}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.net.from}) + (pad 2 smd rect (at ${def_pos}8.275 -3.75 ${p.rot}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.net.to}) + ` + } else { + return ` + ${''/* pins */} + (pad 1 thru_hole circle (at ${def_pos}5 -3.8) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.net.from}) + (pad 2 thru_hole circle (at ${def_pos}0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.net.to}) + ` + } + } + if(p.param.reverse) { + return ` + ${standard} + ${pins('-', '', 'B')} + ${pins('', '-', 'F')}) + ` + } else { + return ` + ${standard} + ${pins('-', '', 'B')}) + ` + } + } } \ No newline at end of file diff --git a/src/footprints/choc_hotswap.js b/src/footprints/choc_hotswap.js deleted file mode 100644 index 68afe25..0000000 --- a/src/footprints/choc_hotswap.js +++ /dev/null @@ -1,59 +0,0 @@ -module.exports = { - nets: ['from', 'to'], - params: { - class: 'S', - reverse: true - }, - body: p => { - - const reversal = (j) => { - if (j == true) return ` - (pad "" np_thru_hole circle (at -5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask)) - (pad 1 smd rect (at 3.275 -5.95 ${p.rot}) (size 2.6 2.6) (layers F.Cu F.Paste F.Mask) ${p.net.from}) - (pad 2 smd rect (at -8.275 -3.75 ${p.rot}) (size 2.6 2.6) (layers F.Cu F.Paste F.Mask) ${p.net.to}) - ` - else return '' - } - - return ` - (module Kailh_socket_PG1350_optional (layer F.Cu) (tedit 5DD50F3F) - - ${p.at /* parametric position */} - - ${'' /* footprint reference */} - (fp_text reference "${p.ref}" (at 0 -8.255) (layer F.SilkS) ${p.ref_hide} - (effects (font (size 1 1) (thickness 0.15)))) - (fp_text value "" (at 0 8.25) (layer F.Fab) - (effects (font (size 1 1) (thickness 0.15)))) - - - (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer Eco2.User) (width 0.15)) - (fp_line (start 6.9 -6.9) (end -6.9 -6.9) (layer Eco2.User) (width 0.15)) - (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer Eco2.User) (width 0.15)) - (fp_line (start -6.9 6.9) (end -6.9 -6.9) (layer Eco2.User) (width 0.15)) - - ${''/* Outline */} - (fp_line (start -7.5 -7.5) (end 7.5 -7.5) (layer F.Fab) (width 0.15)) - (fp_line (start 7.5 -7.5) (end 7.5 7.5) (layer F.Fab) (width 0.15)) - (fp_line (start 7.5 7.5) (end -7.5 7.5) (layer F.Fab) (width 0.15)) - (fp_line (start -7.5 7.5) (end -7.5 -7.5) (layer F.Fab) (width 0.15)) - - ${'' /* holes */} - (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask)) - - ${'' /* net pads */} - (pad 1 smd rect (at -3.275 -5.95 ${p.rot}) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) ${p.net.from}) - (pad 2 smd rect (at 8.275 -3.75 ${p.rot}) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) ${p.net.to}) - - ${reversal(p.param.reverse)} - - ) - - - ` -} -} \ No newline at end of file diff --git a/src/footprints/chocmini.js b/src/footprints/chocmini.js new file mode 100644 index 0000000..71a964b --- /dev/null +++ b/src/footprints/chocmini.js @@ -0,0 +1,84 @@ +// Kailh Choc PG1232 +// Nets +// from: corresponds to pin 1 +// to: corresponds to pin 2 +// Params +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible + +module.exports = { + nets: ['from', 'to'], + params: { + class: 'S', + side: 'F', + reverse: false + }, + body: p => { + const standard = ` + (module lib:Kailh_PG1232 (layer F.Cu) (tedit 5E1ADAC2) + ${p.at /* parametric position */} + + ${'' /* footprint reference */} + (fp_text reference REF** (at 0 7.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value Kailh_PG1232 (at 0 -7.3) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + + ${''/* corner marks */} + (fp_line (start 9 -8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.12)) + (fp_line (start 9 8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.12)) + (fp_line (start -9 8.5) (end 9 8.5) (layer Dwgs.User) (width 0.12)) + (fp_line (start -9 -8.5) (end -9 8.5) (layer Dwgs.User) (width 0.12)) + (fp_line (start 2.25 2.95) (end 5.95 2.95) (layer Dwgs.User) (width 0.12)) + (fp_line (start -2.25 2.95) (end -5.95 2.95) (layer Dwgs.User) (width 0.12)) + (fp_line (start 2.25 4) (end 2.25 2.95) (layer Dwgs.User) (width 0.12)) + (fp_line (start -2.25 4) (end 2.25 4) (layer Dwgs.User) (width 0.12)) + (fp_line (start -2.25 2.95) (end -2.25 4) (layer Dwgs.User) (width 0.12)) + (fp_line (start -6.75 6.25) (end -6.75 -6.25) (layer Dwgs.User) (width 0.12)) + (fp_line (start 6.75 6.25) (end -6.75 6.25) (layer Dwgs.User) (width 0.12)) + (fp_line (start 6.75 -6.25) (end 6.75 6.25) (layer Dwgs.User) (width 0.12)) + (fp_line (start -6.75 -6.25) (end 6.75 -6.25) (layer Dwgs.User) (width 0.12)) + (fp_line (start -5.95 2.95) (end -5.95 -2.95) (layer Dwgs.User) (width 0.12)) + (fp_line (start 5.95 -2.95) (end 5.95 2.95) (layer Dwgs.User) (width 0.12)) + (fp_line (start -5.95 -2.95) (end 5.95 -2.95) (layer Dwgs.User) (width 0.12)) + + ${''/* stabilizers */} + (pad 3 thru_hole circle (at 5.3 -4.75) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (clearance 0.2)) + (pad 4 thru_hole circle (at -5.3 -4.75) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (clearance 0.2)) + ` + function pins(def_neg, def_pos) { + return ` + ${''/* middle shaft */} + (pad "" np_thru_hole oval (at ${def_pos}0 3.5 ${p.rot}) (size 4.7 1) (drill oval 4.7 1) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_neg}2.2 3.5 ${90 + p.rot}) (size 1.2 0.3) (drill oval 1.2 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}2.2 3.5 ${90 + p.rot}) (size 1.2 0.3) (drill oval 1.2 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}0 3.95 ${p.rot}) (size 4.7 0.3) (drill oval 4.7 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}5.36 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}4.59 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}4.2 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_neg}4.2 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_neg}4.59 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_neg}5.9 0 ${90 + p.rot}) (size 6.1 0.3) (drill oval 6.1 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}5.9 0 ${90 + p.rot}) (size 6.1 0.3) (drill oval 6.1 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}0 2.9 ${p.rot}) (size 12.1 0.3) (drill oval 12.1 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}0 -2.9 ${p.rot}) (size 12.1 0.3) (drill oval 12.1 0.3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_neg}5.36 0 ${p.rot}) (size 1 5.9) (drill oval 1 5.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole oval (at ${def_pos}0 0 ${p.rot}) (size 11.85 5.9) (drill oval 11.85 5.9) (layers *.Cu *.Mask)) + + ${''/* pins */} + (pad 1 thru_hole circle (at ${def_neg}4.58 5.1) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.net.from} (clearance 0.2)) + (pad 2 thru_hole circle (at ${def_pos}2 5.4) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.net.to} (clearance 0.2)) + ` + } + if(p.param.reverse){ + return ` + ${standard} + ${pins('-', '')} + ${pins('', '-')}) + ` + } else { + return ` + ${standard} + ${pins('-', '')}) + ` + } + } + } \ No newline at end of file diff --git a/src/footprints/index.js b/src/footprints/index.js index 309d2ca..617d27f 100644 --- a/src/footprints/index.js +++ b/src/footprints/index.js @@ -1,19 +1,17 @@ module.exports = { - mx: require('./mx'), - mx_hotswap: require('./mx_hotswap'), alps: require('./alps'), - choc: require('./choc'), - choc_hotswap: require('./choc_hotswap'), - diode: require('./diode'), - promicro: require('./promicro'), - slider: require('./slider'), button: require('./button'), - rgb: require('./rgb'), + choc: require('./choc'), + chocmini: require('./chocmini'), + diode: require('./diode'), jstph: require('./jstph'), + mx: require('./mx'), pad: require('./pad'), + promicro: require('./promicro'), + rgb: require('./rgb'), rotary: require('./rotary'), - // Fresh prints - promicro_front: require('./promicro_front'), - trrs: require('./TRRS-PJ-320A-dual'), - via: require('./via.js') + scrollwheel: require('./scrollwheel'), + slider: require('./slider'), + trrs: require('./trrs'), + via: require('./via'), } \ No newline at end of file diff --git a/src/footprints/mx.js b/src/footprints/mx.js index c63f3f0..5143cbb 100644 --- a/src/footprints/mx.js +++ b/src/footprints/mx.js @@ -1,12 +1,25 @@ +// Any MX switch +// Nets +// from: corresponds to pin 1 +// to: corresponds to pin 2 +// Params +// hotswap: default is false +// if true, will include holes and pads for Kailh MX hotswap sockets +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible +// +// note: hotswap and reverse can be used simultaneously + module.exports = { nets: ['from', 'to'], params: { - class: 'S' + class: 'S', + hotswap: false, + reverse: false }, - body: p => ` - - (module MX (layer F.Cu) (tedit 5DD4F656) - + body: p => { + const standard = ` + (module MX (layer F.Cu) (tedit 5DD4F656) ${p.at /* parametric position */} ${'' /* footprint reference */} @@ -22,18 +35,45 @@ module.exports = { (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15)) (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15)) (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15)) - - ${''/* pins */} - (pad 1 thru_hole circle (at 2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.net.from}) - (pad 2 thru_hole circle (at -3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.net.to}) - + ${''/* middle shaft */} (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) ${''/* stabilizers */} (pad "" np_thru_hole circle (at 5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) (pad "" np_thru_hole circle (at -5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask)) - ) - - ` + ) + ` + function pins(def_neg, def_pos, def_side) { + if(p.param.hotswap == TRUE) { + return ` + ${'' /* holes */} + (pad "" np_thru_hole circle (at ${def_pos}2.54 -5.08) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at ${def_neg}3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + + ${'' /* net pads */} + (pad 1 smd rect (at ${def_neg}7.085 -2.54 180) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.net.from}) + (pad 2 smd rect (at ${def_pos}5.842 -5.08 180) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.net.to}) + ` + } else { + return ` + ${''/* pins */} + (pad 1 thru_hole circle (at ${def_pos}2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.net.from}) + (pad 2 thru_hole circle (at ${def_neg}3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.net.to}) + ` + } + } + if(p.param.reverse){ + return ` + ${standard} + ${pins('-', '', 'B')} + ${pins('', '-', 'F')}) + ` + } else { + return ` + ${standard} + ${pins('-', '', 'B')}) + ` + } + } } \ No newline at end of file diff --git a/src/footprints/mx_hotswap.js b/src/footprints/mx_hotswap.js deleted file mode 100644 index b1895a0..0000000 --- a/src/footprints/mx_hotswap.js +++ /dev/null @@ -1,62 +0,0 @@ -module.exports = { - nets: ['from', 'to'], - params: { - class: 'S' - }, - body: p => ` - - (module MX_Hotswap (layer F.Cu) (tedit 5DD4F656) - - ${p.at /* parametric position */} - - ${'' /* footprint reference */} - (fp_text reference "${p.ref}" (at 7.1 8.2) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) - (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) - - ${'' /* silk stuff */} - (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15)) - (fp_line (start -7 -7) (end -6 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 7) (end 7 6) (layer Dwgs.User) (width 0.15)) - (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -7 6) (end -7 7) (layer Dwgs.User) (width 0.15)) - (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15)) - (fp_line (start -9.525 9.525) (end -9.525 -9.525) (layer Dwgs.User) (width 0.15)) - (fp_line (start 9.525 9.525) (end -9.525 9.525) (layer Dwgs.User) (width 0.15)) - (fp_line (start 9.525 -9.525) (end 9.525 9.525) (layer Dwgs.User) (width 0.15)) - (fp_line (start -9.525 -9.525) (end 9.525 -9.525) (layer Dwgs.User) (width 0.15)) - (fp_line (start -5.8 -4.05) (end -5.8 -4.7) (layer B.SilkS) (width 0.3)) - (fp_line (start -5.3 -1.6) (end -5.3 -3.399999) (layer B.SilkS) (width 0.8)) - (fp_line (start -4.17 -5.1) (end -4.17 -2.86) (layer B.SilkS) (width 3)) - (fp_line (start 4.2 -3.25) (end 2.9 -3.3) (layer B.SilkS) (width 0.5)) - (fp_line (start 3.9 -6) (end 3.9 -3.5) (layer B.SilkS) (width 1)) - (fp_line (start 2.6 -4.8) (end -4.1 -4.8) (layer B.SilkS) (width 3.5)) - (fp_line (start 4.4 -3) (end 4.4 -6.6) (layer B.SilkS) (width 0.15)) - (fp_line (start 4.38 -4) (end 4.38 -6.25) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.9 -3.95) (end -5.7 -3.95) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.65 -5.55) (end -5.65 -1.1) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.9 -4.7) (end -5.9 -3.95) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.65 -1.1) (end -2.62 -1.1) (layer B.SilkS) (width 0.15)) - (fp_line (start -0.4 -3) (end 4.4 -3) (layer B.SilkS) (width 0.15)) - (fp_line (start 4.4 -6.6) (end -3.800001 -6.6) (layer B.SilkS) (width 0.15)) - (fp_arc (start -0.465 -0.83) (end -0.4 -3) (angle -84) (layer B.SilkS) (width 0.15)) - (fp_arc (start -3.9 -4.6) (end -3.800001 -6.6) (angle -90) (layer B.SilkS) (width 0.15)) - (fp_arc (start -0.865 -1.23) (end -0.8 -3.4) (angle -84) (layer B.SilkS) (width 1)) - (fp_line (start -5.45 -1.3) (end -3 -1.3) (layer B.SilkS) (width 0.5)) - (fp_line (start 4.25 -6.4) (end 3 -6.4) (layer B.SilkS) (width 0.4)) - - ${'' /* holes */} - (pad "" np_thru_hole circle (at 2.54 -5.08) (size 3 3) (drill 3) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at -3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at -5.08 0) (size 1.9 1.9) (drill 1.9) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 5.08 0) (size 1.9 1.9) (drill 1.9) (layers *.Cu *.Mask)) - (pad "" np_thru_hole circle (at 0 0 90) (size 4.1 4.1) (drill 4.1) (layers *.Cu *.Mask)) - - ${'' /* net pads */} - (pad 1 smd rect (at -7.085 -2.54 180) (size 2.55 2.5) (layers B.Cu B.Paste B.Mask) ${p.net.from}) - (pad 2 smd rect (at 5.842 -5.08 180) (size 2.55 2.5) (layers B.Cu B.Paste B.Mask) ${p.net.to}) - ) - - ` - } diff --git a/src/footprints/promicro.js b/src/footprints/promicro.js index 339986e..f3810e9 100644 --- a/src/footprints/promicro.js +++ b/src/footprints/promicro.js @@ -1,3 +1,9 @@ +// Arduino ProMicro atmega32u4au +// Params +// orientation: default is down +// if down, power led will face the pcb +// if up, power led will face away from pcb + module.exports = { static_nets: [ 'RAW', 'GND', 'RST', 'VCC', @@ -7,12 +13,12 @@ module.exports = { 'P5', 'P6', 'P7', 'P8', 'P9' ], params: { - class: 'C' // for Controller + class: 'C', // for Controller + orientation: 'down' }, - body: p => ` - - (module ProMicro (layer F.Cu) (tedit 5B307E4C) - + body: p => { + const standard = ` + (module ProMicro (layer F.Cu) (tedit 5B307E4C) ${p.at /* parametric position */} ${'' /* footprint reference */} @@ -30,65 +36,79 @@ module.exports = { (fp_line (start 15.24 8.89) (end 15.24 -8.89) (layer F.SilkS) (width 0.15)) (fp_line (start 15.24 -8.89) (end -17.78 -8.89) (layer F.SilkS) (width 0.15)) (fp_line (start -17.78 -8.89) (end -17.78 8.89) (layer F.SilkS) (width 0.15)) + ` + function pins(def_neg, def_pos) { + return ` + ${''/* extra border around "RAW", in case the rectangular shape is not distinctive enough */} + (fp_line (start -15.24 ${def_pos}6.35) (end -12.7 ${def_pos}6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 ${def_pos}6.35) (end -15.24 ${def_pos}8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 ${def_pos}6.35) (end -12.7 ${def_pos}8.89) (layer F.SilkS) (width 0.15)) - ${''/* extra border around "RAW", in case the rectangular shape is not distinctive enough */} - (fp_line (start -15.24 6.35) (end -12.7 6.35) (layer F.SilkS) (width 0.15)) - (fp_line (start -15.24 6.35) (end -15.24 8.89) (layer F.SilkS) (width 0.15)) - (fp_line (start -12.7 6.35) (end -12.7 8.89) (layer F.SilkS) (width 0.15)) - - ${''/* pin names */} - (fp_text user RAW (at -13.97 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user GND (at -11.43 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user RST (at -8.89 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user VCC (at -6.35 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P21 (at -3.81 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P20 (at -1.27 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P19 (at 1.27 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P18 (at 3.81 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P15 (at 6.35 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P14 (at 8.89 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P16 (at 11.43 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P10 (at 13.97 4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - - (fp_text user P01 (at -13.97 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P00 (at -11.43 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user GND (at -8.89 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user GND (at -6.35 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P02 (at -3.81 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P03 (at -1.27 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P04 (at 1.27 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P05 (at 3.81 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P06 (at 6.35 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P07 (at 8.89 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P08 (at 11.43 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (fp_text user P09 (at 13.97 -4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - - ${''/* and now the actual pins */} - (pad 1 thru_hole rect (at -13.97 7.62 ${p.rot}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RAW}) - (pad 2 thru_hole circle (at -11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 3 thru_hole circle (at -8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RST}) - (pad 4 thru_hole circle (at -6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.VCC}) - (pad 5 thru_hole circle (at -3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P21}) - (pad 6 thru_hole circle (at -1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P20}) - (pad 7 thru_hole circle (at 1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P19}) - (pad 8 thru_hole circle (at 3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P18}) - (pad 9 thru_hole circle (at 6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P15}) - (pad 10 thru_hole circle (at 8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P14}) - (pad 11 thru_hole circle (at 11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P16}) - (pad 12 thru_hole circle (at 13.97 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P10}) + ${''/* pin names */} + (fp_text user RAW (at -13.97 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user GND (at -11.43 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user RST (at -8.89 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user VCC (at -6.35 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P21 (at -3.81 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P20 (at -1.27 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P19 (at 1.27 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P18 (at 3.81 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P15 (at 6.35 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P14 (at 8.89 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P16 (at 11.43 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P10 (at 13.97 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) - (pad 13 thru_hole circle (at -13.97 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P1}) - (pad 14 thru_hole circle (at -11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P0}) - (pad 15 thru_hole circle (at -8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 16 thru_hole circle (at -6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 17 thru_hole circle (at -3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P2}) - (pad 18 thru_hole circle (at -1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P3}) - (pad 19 thru_hole circle (at 1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P4}) - (pad 20 thru_hole circle (at 3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P5}) - (pad 21 thru_hole circle (at 6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P6}) - (pad 22 thru_hole circle (at 8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P7}) - (pad 23 thru_hole circle (at 11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P8}) - (pad 24 thru_hole circle (at 13.97 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P9}) - ) - ` -} + (fp_text user P01 (at -13.97 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P00 (at -11.43 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user GND (at -8.89 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user GND (at -6.35 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P02 (at -3.81 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P03 (at -1.27 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P04 (at 1.27 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P05 (at 3.81 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P06 (at 6.35 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P07 (at 8.89 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P08 (at 11.43 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + (fp_text user P09 (at 13.97 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)))) + + ${''/* and now the actual pins */} + (pad 1 thru_hole rect (at -13.97 ${def_pos}7.62 ${p.rot}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RAW}) + (pad 2 thru_hole circle (at -11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) + (pad 3 thru_hole circle (at -8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RST}) + (pad 4 thru_hole circle (at -6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.VCC}) + (pad 5 thru_hole circle (at -3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P21}) + (pad 6 thru_hole circle (at -1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P20}) + (pad 7 thru_hole circle (at 1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P19}) + (pad 8 thru_hole circle (at 3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P18}) + (pad 9 thru_hole circle (at 6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P15}) + (pad 10 thru_hole circle (at 8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P14}) + (pad 11 thru_hole circle (at 11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P16}) + (pad 12 thru_hole circle (at 13.97 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P10}) + + (pad 13 thru_hole circle (at -13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P1}) + (pad 14 thru_hole circle (at -11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P0}) + (pad 15 thru_hole circle (at -8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) + (pad 16 thru_hole circle (at -6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) + (pad 17 thru_hole circle (at -3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P2}) + (pad 18 thru_hole circle (at -1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P3}) + (pad 19 thru_hole circle (at 1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P4}) + (pad 20 thru_hole circle (at 3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P5}) + (pad 21 thru_hole circle (at 6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P6}) + (pad 22 thru_hole circle (at 8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P7}) + (pad 23 thru_hole circle (at 11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P8}) + (pad 24 thru_hole circle (at 13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P9}) + ` + } + if(p.param.orientation == 'down') { + return ` + ${standard} + ${pins('-', '')}) + ` + } else { + return ` + ${standard} + ${pins('', '-')}) + ` + } + } +} \ No newline at end of file diff --git a/src/footprints/promicro_front.js b/src/footprints/promicro_front.js deleted file mode 100644 index a2d1b42..0000000 --- a/src/footprints/promicro_front.js +++ /dev/null @@ -1,65 +0,0 @@ -module.exports = { - static_nets: [ - 'RAW', 'GND', 'RST', 'VCC', - 'P21', 'P20', 'P19', 'P18', - 'P15', 'P14', 'P16', 'P10', - 'P1', 'P0', 'P2', 'P3', 'P4', - 'P5', 'P6', 'P7', 'P8', 'P9' - ], - params: { - class: 'C' // for Controller - }, - body: p => ` - - (module ArduinoProMicro-TopSide (layer F.Cu) (tedit 591BD5DD) - - ${p.at /* parametric position */} - (fp_text value "Arduino Pro Micro" (at 0 0) (layer F.SilkS) hide - (effects (font (size 1.27 1.524) (thickness 0.2032))) - ) - (fp_text user TX0 (at -13.9 4.6 90) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text user RAW (at -13.9 -4.7 90) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text user RAW (at -13.9 -4.6 90) (layer F.SilkS) - (effects (font (size 1 1) (thickness 0.15))) - ) - (fp_text user TX0 (at -13.9 4.5 90) (layer F.SilkS) - (effects (font (size 1 1) (thickness 0.15))) - ) - (fp_line (start -15.24 -8.89) (end -15.24 8.89) (layer F.SilkS) (width 0.381)) - (fp_line (start -15.24 8.89) (end 15.24 8.89) (layer F.SilkS) (width 0.381)) - (fp_line (start 15.24 8.89) (end 15.24 -8.89) (layer F.SilkS) (width 0.381)) - (fp_line (start 15.24 -8.89) (end -15.24 -8.89) (layer F.SilkS) (width 0.381)) - (fp_line (start -15.24 6.35) (end -12.7 6.35) (layer F.SilkS) (width 0.381)) - (fp_line (start -12.7 6.35) (end -12.7 8.89) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole rect (at -13.97 -7.62 ${p.rot}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RAW}) - (pad 2 thru_hole circle (at -11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 3 thru_hole circle (at -8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.RST}) - (pad 4 thru_hole circle (at -6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.VCC}) - (pad 5 thru_hole circle (at -3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P21}) - (pad 6 thru_hole circle (at -1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P20}) - (pad 7 thru_hole circle (at 1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P19}) - (pad 8 thru_hole circle (at 3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P18}) - (pad 9 thru_hole circle (at 6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P15}) - (pad 10 thru_hole circle (at 8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P14}) - (pad 11 thru_hole circle (at 11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P16}) - (pad 12 thru_hole circle (at 13.97 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P10}) - - (pad 13 thru_hole circle (at -13.97 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P1}) - (pad 14 thru_hole circle (at -11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P0}) - (pad 15 thru_hole circle (at -8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 16 thru_hole circle (at -6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.GND}) - (pad 17 thru_hole circle (at -3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P2}) - (pad 18 thru_hole circle (at -1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P3}) - (pad 19 thru_hole circle (at 1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P4}) - (pad 20 thru_hole circle (at 3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P5}) - (pad 21 thru_hole circle (at 6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P6}) - (pad 22 thru_hole circle (at 8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P7}) - (pad 23 thru_hole circle (at 11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P8}) - (pad 24 thru_hole circle (at 13.97 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.net.P9}) - ) - ` -} diff --git a/src/footprints/rotary.js b/src/footprints/rotary.js index b75fd40..c536b25 100644 --- a/src/footprints/rotary.js +++ b/src/footprints/rotary.js @@ -1,5 +1,14 @@ +// EC11 rotary encoder +// +// Nets +// from: corresponds to switch pin 1 (for button presses) +// to: corresponds to switch pin 2 (for button presses) +// A: corresponds to pin 1 (for rotary) +// B: corresponds to pin 2 (for rotary, should be GND) +// C: corresponds to pin 3 (for rotary) + module.exports = { - nets: ['A', 'B', 'C', 'from', 'to'], + nets: ['from', 'to', 'A', 'B', 'C'], params: { class: 'R' }, diff --git a/src/footprints/scrollwheel.js b/src/footprints/scrollwheel.js new file mode 100644 index 0000000..accadc0 --- /dev/null +++ b/src/footprints/scrollwheel.js @@ -0,0 +1,79 @@ +// Panasonic EVQWGD001 horizontal rotary encoder +// +// __________________ +// (f) (t) | | +// | (1) | | +// | (2) | | +// | (3) | | +// | (4) | | +// |_( )___________|_| +// +// Nets +// from: corresponds to switch pin 1 (for button presses) +// to: corresponds to switch pin 2 (for button presses) +// A: corresponds to pin 1 (for rotary) +// B: corresponds to pin 2 (for rotary, should be GND) +// C: corresponds to pin 3 (for rotary) +// D: corresponds to pin 4 (for rotary, unused) +// Params +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible + + +module.exports = { + nets: ['from', 'to', 'A', 'B', 'C', 'D'], + params: { + class: 'S', + reverse: false + }, + body: p => { + standard = ` + (module RollerEncoder_Panasonic_EVQWGD001 (layer F.Cu) (tedit 6040A10C) + ${p.at /* parametric position */} + (fp_text reference REF** (at 0 0 ${p.rot}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value RollerEncoder_Panasonic_EVQWGD001 (at -0.1 9 ${p.rot}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + + ${'' /* corner marks */} + (fp_line (start -8.4 -6.4) (end 8.4 -6.4) (layer Dwgs.User) (width 0.12)) + (fp_line (start 8.4 -6.4) (end 8.4 7.4) (layer Dwgs.User) (width 0.12)) + (fp_line (start 8.4 7.4) (end -8.4 7.4) (layer Dwgs.User) (width 0.12)) + (fp_line (start -8.4 7.4) (end -8.4 -6.4) (layer Dwgs.User) (width 0.12)) + ` + function pins(def_neg, def_pos) { + return ` + ${'' /* edge cuts */} + (fp_line (start ${def_pos}9.8 7.3) (end ${def_pos}9.8 -6.3) (layer Edge.Cuts) (width 0.15)) + (fp_line (start ${def_pos}7.4 -6.3) (end ${def_pos}7.4 7.3) (layer Edge.Cuts) (width 0.15)) + (fp_line (start ${def_pos}9.5 -6.6) (end ${def_pos}7.7 -6.6) (layer Edge.Cuts) (width 0.15)) + (fp_line (start ${def_pos}7.7 7.6) (end ${def_pos}9.5 7.6) (layer Edge.Cuts) (width 0.15)) + (fp_arc (start ${def_pos}7.7 7.3) (end ${def_pos}7.4 7.3) (angle ${def_neg}90) (layer Edge.Cuts) (width 0.15)) + (fp_arc (start ${def_pos}9.5 7.3) (end ${def_pos}9.5 7.6) (angle ${def_neg}90) (layer Edge.Cuts) (width 0.15)) + (fp_arc (start ${def_pos}7.7 -6.3) (end ${def_pos}7.7 -6.6) (angle ${def_neg}90) (layer Edge.Cuts) (width 0.15)) + (fp_arc (start ${def_pos}9.5 -6.3) (end ${def_pos}9.8 -6.3) (angle ${def_neg}90) (layer Edge.Cuts) (width 0.15)) + + ${'' /* pins */} + (pad S1 thru_hole circle (at ${def_neg}6.85 -6.2 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.from}) + (pad S2 thru_hole circle (at ${def_neg}5 -6.2 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.to}) + (pad A thru_hole circle (at ${def_neg}5.625 -3.81 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.A}) + (pad B thru_hole circle (at ${def_neg}5.625 -1.27 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.B}) + (pad C thru_hole circle (at ${def_neg}5.625 1.27 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.C}) + (pad D thru_hole circle (at ${def_neg}5.625 3.81 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.net.D}) + + ${'' /* stabilizer */} + (pad "" np_thru_hole circle (at ${def_neg}5.625 6.3 ${p.rot}) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) + ` + } + if(p.param.reverse) { + return ` + ${standard} + ${pins('-', '')} + ${pins('', '-')}) + ` + } else { + return ` + ${standard} + ${pins('-', '')}) + ` + } + } +} \ No newline at end of file diff --git a/src/footprints/trrs.js b/src/footprints/trrs.js new file mode 100644 index 0000000..b41a413 --- /dev/null +++ b/src/footprints/trrs.js @@ -0,0 +1,77 @@ +// TRRS-PJ-320A-dual +// _________________ +// | (1) (3) (4)| +// | | +// |___(2)__________| +// +// Nets +// A: corresponds to pin 1 +// B: corresponds to pin 2 +// C: corresponds to pin 3 +// D: corresponds to pin 4 +// Params +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible +// symmetric: default is false +// if true, will only work if reverse is also true +// this will cause the footprint to be symmetrical on each half +// pins 1 and 2 must be identical if symmetric is true, as they will overlap + +module.exports = { + nets: ['A', 'B', 'C', 'D'], + params: { + class: 'T', // for TRRS + reverse: false, + symmetric: false + }, + body: p => { + const standard = ` + (module TRRS-PJ-320A-dual (layer F.Cu) (tedit 5970F8E5) + + ${p.at /* parametric position */} + + ${'' /* footprint reference */} + (fp_text reference REF** (at 0 14.2) (layer Dwgs.User) (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value TRRS-PJ-320A-dual (at 0 -5.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + + ${''/* corner marks */} + (fp_line (start 0.5 -2) (end -5.1 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start -5.1 0) (end -5.1 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.5 0) (end 0.5 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start -5.35 0) (end -5.35 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 0) (end 0.75 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 12.1) (end -5.35 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 0) (end -5.35 0) (layer Dwgs.User) (width 0.15)) + + ${''/* stabilizers */} + (pad "" np_thru_hole circle (at -2.3 8.6) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -2.3 1.6) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) + ` + function pins(def_neg, def_pos) { + return ` + (pad 1 thru_hole oval (at ${def_neg} 11.3 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.A}) + (pad 2 thru_hole oval (at ${def_pos} 10.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.B}) + (pad 3 thru_hole oval (at ${def_pos} 6.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.C}) + (pad 4 thru_hole oval (at ${def_pos} 3.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.net.D}) + ` + } + if(p.param.reverse & p.param.symmetric) { + return ` + ${standard} + ${pins('0', '-4.6')} + ${pins('-4.6', '0')}) + ` + } else if(p.param.reverse) { + return ` + ${standard} + ${pins('-4.6', '0')} + ${pins('4.6', '0')}) + ` + } else { + return ` + ${standard} + ${pins('-4.6', '0')}) + ` + } + } +} diff --git a/src/footprints/via.js b/src/footprints/via.js index 4d37081..3726163 100644 --- a/src/footprints/via.js +++ b/src/footprints/via.js @@ -1,17 +1,18 @@ +// Via +// Nets +// from: the net this via should be connected to + module.exports = { nets: ['from'], body: p => ` + (module VIA-0.6mm (layer F.Cu) (tedit 591DBFB0) + ${p.at /* parametric position */} + ${'' /* footprint reference */} + (fp_text reference REF** (at 0 1.4) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value VIA-0.6mm (at 0 -1.4) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15)))) - (module VIA-0.6mm (layer F.Cu) (tedit 591DBFB0) - - ${p.at /* parametric position */} - (fp_text reference REF** (at 0 1.4) (layer F.SilkS) hide - (effects (font (size 1 1) (thickness 0.15))) - ) - (fp_text value VIA-0.6mm (at 0 -1.4) (layer F.Fab) hide - (effects (font (size 1 1) (thickness 0.15))) - ) - (pad 1 thru_hole circle (at 0 0) (size 0.6 0.6) (drill 0.3) (layers *.Cu) (zone_connect 2) ${p.net.from}) - ) + ${'' /* via */} + (pad 1 thru_hole circle (at 0 0) (size 0.6 0.6) (drill 0.3) (layers *.Cu) (zone_connect 2) ${p.net.from}) + ) ` } \ No newline at end of file