Add router footprints and switch traces / vias

This commit is contained in:
Marco Massarelli 2023-10-08 20:30:21 -04:00
parent d514dc06e0
commit 8287f01f18
2 changed files with 311 additions and 4 deletions

View File

@ -211,7 +211,7 @@ points:
home.key: home.key:
led_prev: LED_11 led_prev: LED_11
led_next: LED_12 led_next: LED_12
middle: mid:
key: key:
splay: -splay_thumb_middle splay: -splay_thumb_middle
column_net: C4 column_net: C4
@ -646,7 +646,130 @@ pcbs:
adjust: adjust:
shift: [-1 * horizontal_diode_shift,vertical_diode_shift] shift: [-1 * horizontal_diode_shift,vertical_diode_shift]
rotate: 90 + diode_rotation rotate: 90 + diode_rotation
routes_inter_switch_column_net_1:
what: router
where: ["/matrix_[^_]+_top/", "/matrix_[^_]+_home/"]
params:
locked: false
routes:
- "B(-7.085,-2.54)(-7.085,16.46)" # net: {{column_net}}
net: "{{column_net}}"
routes_inter_switch_column_net_2:
what: router
where: /matrix_middle_bottom/
params:
locked: false
routes:
- "B(2.415,19.46)(-7.085,9.96)(-7.085,-2.54)" # net: {{column_net}}
net: "{{column_net}}"
routes_inter_switch_column_net_3:
what: router
where: /matrix_index_bottom/
params:
locked: false
routes:
- "B(-7.085,-2.54)(-7.085,5.689)(5.31382,18.08782)" # net: {{column_net}}
net: "{{column_net}}"
routes_inter_switch_column_net_4:
what: router
where: /matrix_inner_bottom/
params:
locked: false
routes:
- "B(-7.085,-2.54)(-7.085,8.35548)(-1.17721,14.26326)(0.84826,14.26326)(2.88,16.295)(2.88,24.14453)(6.99908,28.26361)" # net: {{column_net}}
net: "{{column_net}}"
routes_inter_switch_row_net_1:
what: router
where: /matrix_outer_.*/
params:
locked: false
routes:
- "F(12,0.325)(11.205,1.12)(6.08,1.12)(6.06,1.14)" # net: {{row_net}}
net: "{{row_net}}"
routes_inter_switch_row_net_2:
what: router
where: /matrix_pinky_.*/
params:
locked: false
routes:
- "F(12,-4.425)(6.435,1.14)(6.06,1.14)" # net: {{row_net}}
net: "{{row_net}}"
routes_inter_switch_row_net_3:
what: router
where: /matrix_ring_.*/
params:
locked: false
routes:
- "F(6.06,1.14)(8.81,1.14)(12,-2.05)" # net: {{row_net}}
net: "{{row_net}}"
routes_inter_switch_row_net_4:
what: router
where: ["/matrix_middle_.*/", "/matrix_index_.*/"]
params:
locked: false
routes:
- "F(4.8291,2.3709)(5.1582,2.7)(12,2.7)" # net: {{row_net}}
net: "{{row_net}}"
routes_inter_switch_row_net_5:
what: router
where: /thumbfan_near_home/
params:
locked: false
routes:
- "F(14.1544,1.25219)(6.17219,1.25219)(6.06,1.14)" # net: {{row_net}}
net: "{{row_net}}"
routes_inter_switch_row_net_6:
what: router
where: /thumbfan_mid_home/
params:
locked: false
routes:
- "F(20.96519,4.7236)(15.0242,6.31548)(6.06,1.14)" # net: {{row_net}}
net: "{{row_net}}"
routes_switch_hotswap_column_net:
what: router
where: /key/
params:
locked: false
routes:
- "F(7.085,-2.54)(7.085,-4.67813)(4.42113,-7.342)(-6.867,-7.342)(-7.7705,-6.4385)(-7.7705,-4.495)V(-7.7705,-3.2255)(-7.085,-2.54)" # net: {{column_net}}
net: "{{column_net}}"
adjust:
rotate: switch_rotation
routes_switch_hotswap_colrow_net:
what: router
where: /key/
params:
locked: false
routes:
- "B(7,-2.975)(7,-3.922)(5.842,-5.08)(4.357,-6.565)(4.17,-6.565)V(3.774,-6.961)(-3.961,-6.961)(-5.842,-5.08)(-7,-3.922)(-7,-2.975)" # net: {{colrow}}
net: "{{colrow}}"
adjust:
rotate: switch_rotation
routes_switch_diode_row_net:
what: router
where: /key/
params:
locked: false
routes:
- "B(7,0.325)(6.185,1.14)(6.06,1.14)V(4.8291,2.3709)(-4.9541,2.3709)(-7,0.325)" # net: {{row_net}}
net: "{{row_net}}"
adjust:
rotate: switch_rotation
per_key_leds: per_key_leds:
what: sk6812mini-e what: sk6812mini-e
where: /key/ where: /key/
@ -658,6 +781,8 @@ pcbs:
reversible: true reversible: true
reverse_mount: true reverse_mount: true
add_traces_vias: true add_traces_vias: true
gnd_trace_width: 0.25
pwr_trace_width: 0.25
adjust: adjust:
shift: [led_pos_x, led_pos_y] shift: [led_pos_x, led_pos_y]
rotate: led_rotation rotate: led_rotation
@ -679,6 +804,8 @@ pcbs:
reversible: true reversible: true
reverse_mount: false reverse_mount: false
add_traces_vias: true add_traces_vias: true
gnd_trace_width: 0.25
pwr_trace_width: 0.25
adjust: adjust:
shift: [0, vertical_underglow_shift] shift: [0, vertical_underglow_shift]
@ -699,14 +826,14 @@ pcbs:
P6: R1 P6: R1
P7: R2 P7: R2
P8: R3 P8: R3
traces: false traces: true
show_instructions: false show_instructions: false
show_silk_labels: false show_silk_labels: true
show_via_labels: true show_via_labels: true
adjust: adjust:
shift: [19.704, 0.375 kp -18.37] shift: [19.704, 0.375 kp -18.37]
oled: display:
what: combo_display what: combo_display
where: matrix_inner_top where: matrix_inner_top
params: params:

View File

@ -0,0 +1,180 @@
// Router
// Version: 0.1
// Snippets of code used here were taken from https://github.com/infused-kim/kb_ergogen_fp (adjust_oint)
// Credits goes to Github infused-kim, Thanks!
module.exports = {
params: {
net: { type: "net", value: "" },
width: { type: "number", value: 0.25 },
route: { type: "string", value: "" },
routes: { type: "array", value: [] },
via_size: { type: "number", value: 0.8 },
via_drill: { type: "number", value: 0.4 },
locked: false,
},
body: (p) => {
const get_at_coordinates = () => {
const pattern = /\(at (-?[\d\.]*) (-?[\d\.]*) (-?[\d\.]*)\)/
const matches = p.at.match(pattern)
if (matches && matches.length == 4) {
return [
parseFloat(matches[1]),
parseFloat(matches[2]),
parseFloat(matches[3]),
]
} else {
return null
}
}
const adjust_point = (x, y) => {
const at_l = get_at_coordinates()
if (at_l == null) {
throw new Error(`Could not get x and y coordinates from p.at: ${p.at}`)
}
const at_x = at_l[0]
const at_y = at_l[1]
const at_angle = at_l[2]
const radians = (Math.PI / 180) * at_angle,
cos = Math.cos(radians),
sin = Math.sin(radians),
nx = cos * x + sin * y + at_x,
ny = cos * y - sin * x + at_y
const point_str = `${nx.toFixed(5)/1} ${ny.toFixed(5)/1}` // the division by 1 is to remove trailing zeros
return point_str
}
// (segment (start 108.8 108) (end 109.7 108) (width 0.2) (layer "F.Cu") (net 0))
const get_segment = (start, end, layer, net) => {
if (!layer) {
throw new Error(
"Can't place segment before layer is set, use 'f' or 'b', to set starting layer"
)
}
return `(segment ${locked}(start ${adjust_point(
start[0],
start[1]
)}) (end ${adjust_point(end[0], end[1])}) (width ${
p.width
}) (layer ${layer}) (net ${net}))`
}
// (via (at 108.8 108) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 0))
const get_via = (pos, net) => {
if (!pos) {
throw new Error(
"Can't place via when position is not set, use (x,y) to set position"
)
}
return `(via ${locked}(at ${adjust_point(pos[0], pos[1])}) (size ${
p.via_size
}) (drill ${p.via_drill}) (layers "F.Cu" "B.Cu") (net ${net}))`
}
const parse_tuple = (t) => {
let str_tuple = JSON.parse(t.replace(/\(/g, "[").replace(/\)/g, "]"))
let num_tuple = str_tuple.map((v) => Number(v))
if (isNaN(num_tuple[0] || isNaN(num_tuple[1]))) {
throw new Error(`Invalid position encountered: ${str_tuple}`)
}
return num_tuple
}
const get_traces = (route, net) => {
let traces = ""
let layer = undefined
let start = undefined // [x, y]
for (let i = 0; i < route.length; i++) {
ch = route[i].toLowerCase()
switch (ch) {
case "f":
layer = "F.Cu"
break
case "b":
layer = "B.Cu"
break
case "v":
traces = traces + get_via(start, net) + "\n"
switch (layer) {
case "F.Cu":
layer = "B.Cu"
break
case "B.Cu":
layer = "F.Cu"
break
}
break
case "(":
let tuple_str = "("
let parenthesis_idx = i
for (i = i + 1; i < route.length; i++) {
let ch = route[i]
tuple_str += ch
if (route[i] == ")") {
break
}
if (i > route.length) {
throw new Error(
`Unclosed position parenthesis in ${route} at character position ${parenthesis_idx}`
)
}
}
let pos = parse_tuple(tuple_str)
if (start) {
traces = traces + get_segment(start, pos, layer, net) + "\n"
}
start = pos
break
case "<":
let net_name = ""
let lt_idx = i
for (i = i + 1; i < route.length; i++) {
let ch = route[i]
if (route[i] == ">") {
break
}
net_name += ch
if (i > route.length) {
throw new Error(
`Unclosed net parenthesis in ${route} at character position ${lt_idx}`
)
}
}
net = p.global_net(net_name)
case "x":
case "|":
start = undefined
break
default:
throw new Error(`Unsupported character '${ch}' at position ${i}.`)
}
}
return traces
}
const get_routes_traces = (routes, net) => {
let routes_traces = routes.reduce((acc_traces, route) => {
return acc_traces + get_traces(route, net)
}, "")
return routes_traces
}
let combined_traces = ""
let locked = p.locked ? 'locked ' : ''
if (p.route) {
combined_traces += get_traces(p.route, p.net.index)
}
if (p.routes) {
combined_traces += get_routes_traces(p.routes, p.net.index)
}
return combined_traces
},
}