Add router footprints and switch traces / vias
This commit is contained in:
parent
d514dc06e0
commit
8287f01f18
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
},
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue