Add router footprints and switch traces / vias
This commit is contained in:
parent
d514dc06e0
commit
8287f01f18
|
|
@ -211,7 +211,7 @@ points:
|
|||
home.key:
|
||||
led_prev: LED_11
|
||||
led_next: LED_12
|
||||
middle:
|
||||
mid:
|
||||
key:
|
||||
splay: -splay_thumb_middle
|
||||
column_net: C4
|
||||
|
|
@ -646,7 +646,130 @@ pcbs:
|
|||
adjust:
|
||||
shift: [-1 * horizontal_diode_shift,vertical_diode_shift]
|
||||
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:
|
||||
what: sk6812mini-e
|
||||
where: /key/
|
||||
|
|
@ -658,6 +781,8 @@ pcbs:
|
|||
reversible: true
|
||||
reverse_mount: true
|
||||
add_traces_vias: true
|
||||
gnd_trace_width: 0.25
|
||||
pwr_trace_width: 0.25
|
||||
adjust:
|
||||
shift: [led_pos_x, led_pos_y]
|
||||
rotate: led_rotation
|
||||
|
|
@ -679,6 +804,8 @@ pcbs:
|
|||
reversible: true
|
||||
reverse_mount: false
|
||||
add_traces_vias: true
|
||||
gnd_trace_width: 0.25
|
||||
pwr_trace_width: 0.25
|
||||
adjust:
|
||||
shift: [0, vertical_underglow_shift]
|
||||
|
||||
|
|
@ -699,14 +826,14 @@ pcbs:
|
|||
P6: R1
|
||||
P7: R2
|
||||
P8: R3
|
||||
traces: false
|
||||
traces: true
|
||||
show_instructions: false
|
||||
show_silk_labels: false
|
||||
show_silk_labels: true
|
||||
show_via_labels: true
|
||||
adjust:
|
||||
shift: [19.704, 0.375 kp -18.37]
|
||||
|
||||
oled:
|
||||
display:
|
||||
what: combo_display
|
||||
where: matrix_inner_top
|
||||
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