From 826591789bf9ca6d1fb23389ca4417df7ef8fe84 Mon Sep 17 00:00:00 2001 From: tslil clingman Date: Fri, 13 Mar 2026 09:35:48 +0000 Subject: working on ULP version, v5 --- README.md | 5 ++ ergogen/footprints/mx6c_ulp.js | 130 +++++++++++++++++++++++++++++++++++++++++ ergogen/fpkb_v2.yaml | 118 +++++++++++++++++++++++++++++++++++++ ergogen/fpkb_v4.yaml | 118 +++++++++++++++++++++++++++++++++++++ ergogen/fpkb_v5.yaml | 116 ++++++++++++++++++++++++++++++++++++ ergogen_fpkb_v2.yaml | 118 ------------------------------------- ergogen_fpkb_v4.yaml | 118 ------------------------------------- 7 files changed, 487 insertions(+), 236 deletions(-) create mode 100644 ergogen/footprints/mx6c_ulp.js create mode 100644 ergogen/fpkb_v2.yaml create mode 100644 ergogen/fpkb_v4.yaml create mode 100644 ergogen/fpkb_v5.yaml delete mode 100644 ergogen_fpkb_v2.yaml delete mode 100644 ergogen_fpkb_v4.yaml diff --git a/README.md b/README.md index 378c3ed..3279bf9 100644 --- a/README.md +++ b/README.md @@ -57,3 +57,8 @@ and it's v4 variant, with full size switches # Copyright See LICENSE & COPYING + +# Credit + +Cherry MX6C ULP and Kailh low profile switch footprint with through hole soldering cutout copied from [DELTA OMEGA](https://github.com/unspecworks/delta-omega) and licensed under [CERN-OHL-W-2.0](https://github.com/unspecworks/delta-omega/blob/main/LICENSE.md). + diff --git a/ergogen/footprints/mx6c_ulp.js b/ergogen/footprints/mx6c_ulp.js new file mode 100644 index 0000000..5a2d789 --- /dev/null +++ b/ergogen/footprints/mx6c_ulp.js @@ -0,0 +1,130 @@ +module.exports = { + params: { + designator: 's', + side: 'f', + reversible: false, + hotswap: false, + include_silkscreen: true, + include_keycaps: true, + keycap_width: 17.5, + keycap_height: 16.5, + switch_3dmodel_filename: '', + switch_3dmodel_xyz_offset: [-5.5, 0, 3], + switch_3dmodel_xyz_rotation: [0, 0, -90], + switch_3dmodel_xyz_scale: [1, 1, 1], + keycap_3dmodel_filename: '', + keycap_3dmodel_xyz_offset: [-12.18, -14.8, 4], + keycap_3dmodel_xyz_rotation: [180, 0, 0], + keycap_3dmodel_xyz_scale: [1, 1, 1], + from: undefined, + to: undefined, + }, + body: p => { + const keycap_xo = 0.5 * p.keycap_width + const keycap_yo = 0.5 * p.keycap_height + + return ` + (footprint "Cherry_ULP_HANDSOLDER" (version 20221018) (generator pcbnew) + (layer "F.Cu") + ${p.at} + (attr smd) + (property "Reference" "${p.ref}" + (at -0.05 -7.5 ${p.r}) + (unlocked yes) + (layer "F.SilkS") + ${p.ref_hide} + (effects (font (size 1 1) (thickness 0.15))) + ) + (property "Value" "ULP_SW" + (at 0 0 ${p.r}) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (effects (font (size 1 1) (thickness 0.15))) + ) + ${p.include_silkscreen ? ` + (fp_poly + (pts + (xy -7.1 -6.4) (xy 7.1 -6.4) (xy 7.1 6.4) (xy -7.1 6.4) + ) + (stroke (width 0.1) (type solid)) + (fill no) + (layer "F.SilkS") + ) + ` : ''} + (fp_poly + (pts + (xy -6.8 -6.1) (xy 6.8 -6.1) (xy 6.8 6.1) (xy -6.8 6.1) + ) + (stroke (width 0.1) (type solid)) + (fill no) + (layer "F.CrtYd") + ) + ${p.include_keycaps ? ` + (fp_rect (start ${keycap_xo} ${keycap_yo}) (end ${-keycap_xo} ${-keycap_yo}) + (stroke (width 0.15) (type solid)) + (fill no) + (layer "Dwgs.User") + ) + ` : ''} + (fp_line (start -2.4 4.5) (end -2.4 3.4) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_line (start -1.4 2.4) (end 2.6 2.4) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_line (start 2.6 5.5) (end -1.4 5.5) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_line (start 3.6 3.4) (end 3.6 4.5) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_arc (start -2.4 3.4) (mid -2.107107 2.692893) (end -1.4 2.4) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_arc (start -1.4 5.5) (mid -2.107107 5.207107) (end -2.4 4.5) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_arc (start 2.6 2.4) (mid 3.307107 2.692893) (end 3.6 3.4) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (fp_arc (start 3.6 4.5) (mid 3.307108 5.207107) (end 2.6 5.5) + (stroke (width 0.05) (type default)) + (layer "Edge.Cuts") + ) + (pad "" np_thru_hole circle (at -5.8 1.2 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask")) + (pad "" np_thru_hole circle (at -5.8 2.75 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask")) + (pad "" np_thru_hole oval (at 5.8 -2.96 ${p.r}) (size 1.2 1.8) (drill oval 1.2 1.8) (layers "*.Cu" "*.Mask")) + (pad "" np_thru_hole circle (at 5.8 3.26 ${p.r}) (size 1.2 1.2) (drill 1.2) (layers "*.Cu" "*.Mask")) + (pad "1" thru_hole circle (at -0.5 2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.from}) + (pad "2" thru_hole circle (at 1.8 2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.to}) + (pad "3" smd rect (at -6.4 -4.6 ${p.r}) (size 2.15 5) (layers "F.Cu" "F.Mask" "F.Paste")) + (pad "3" smd rect (at -6.4 5.3 ${p.r}) (size 2.15 3.2) (layers "F.Cu" "F.Mask" "F.Paste")) + (pad "3" smd rect (at 6.4 -5.75 ${p.r}) (size 2 2.7) (layers "F.Cu" "F.Mask" "F.Paste")) + (pad "3" smd rect (at 6.4 0 ${p.r}) (size 2 2.6) (layers "F.Cu" "F.Mask" "F.Paste")) + (pad "3" smd rect (at 6.4 5.75 ${p.r}) (size 2 2.3) (layers "F.Cu" "F.Mask" "F.Paste")) + ${p.switch_3dmodel_filename ? ` + (model ${p.switch_3dmodel_filename} + (offset (xyz ${p.switch_3dmodel_xyz_offset[0]} ${p.switch_3dmodel_xyz_offset[1]} ${p.switch_3dmodel_xyz_offset[2]})) + (scale (xyz ${p.switch_3dmodel_xyz_scale[0]} ${p.switch_3dmodel_xyz_scale[1]} ${p.switch_3dmodel_xyz_scale[2]})) + (rotate (xyz ${p.switch_3dmodel_xyz_rotation[0]} ${p.switch_3dmodel_xyz_rotation[1]} ${p.switch_3dmodel_xyz_rotation[2]})) + ) + ` : ''} + ${p.keycap_3dmodel_filename ? ` + (model ${p.keycap_3dmodel_filename} + (offset (xyz ${p.keycap_3dmodel_xyz_offset[0]} ${p.keycap_3dmodel_xyz_offset[1]} ${p.keycap_3dmodel_xyz_offset[2]})) + (scale (xyz ${p.keycap_3dmodel_xyz_scale[0]} ${p.keycap_3dmodel_xyz_scale[1]} ${p.keycap_3dmodel_xyz_scale[2]})) + (rotate (xyz ${p.keycap_3dmodel_xyz_rotation[0]} ${p.keycap_3dmodel_xyz_rotation[1]} ${p.keycap_3dmodel_xyz_rotation[2]})) + ) + ` : ''} + ) + ` + } +} diff --git a/ergogen/fpkb_v2.yaml b/ergogen/fpkb_v2.yaml new file mode 100644 index 0000000..0d8b7df --- /dev/null +++ b/ergogen/fpkb_v2.yaml @@ -0,0 +1,118 @@ +points: + zones: + matrix: + columns: + pinky: + rows.top.bind: [1, 4, 0, 1] + rows.home.bind: [0, 1, 0, 1] + rows.bottom.bind: [0, 1, 1, 1] + key.splay: 10 + ring: + key.stagger: 0.66cy + rows.top.bind: [1,4,0,1] + rows.home.bind: [0,3,0,2] + rows.bottom.bind: [0,1,1,1.5] + key.splay: -5 + key.spread: cx+1 + middle: + key.stagger: 0.25cy + rows.top.bind: [1,1,0,1] + rows.home.bind: [1,3,0,2] + rows.bottom.bind: [0,3,1,3] + key.splay: -5 + key.spread: cx+1 + index: + key.stagger: -0.25cy + rows.top.bind: [1,1,0,5] + rows.home.bind: [0,2,0,2] + rows.bottom.bind: [0,2,1,1] + key.splay: -5 + key.spread: cx+0.7 + inner: + key.stagger: -0.2cy + rows.top.bind: [1,2+1cx,0,1] + rows.home.bind: [0,2+1cx,0,0] + rows.bottom.bind: [0,2+1cx,1,1] + key.spread: cx + rows: + bottom.padding: cy + home.padding: cy + top.padding: cy + thumb: + anchor: + ref: matrix_inner_bottom + shift: [0cx, -1.5cy] + rotate: -10 + columns: + tucky: + key.name: thumb_tucky + rows.home.bind: [12,6,1,1] + reachy: + key.spread: 1.0cx + key.splay: -15 + key.origin: [-0.5cx, -0.5cy] + key.name: thumb_reachy + rows.home.bind: [1,1,1,1] +outlines: + raw: + - what: rectangle + where: true + bound: true + asym: left + size: [1cx, 1cy] + cutout: + - what: outline + name: raw + fillet: 1 +pcbs: + fpkb_v2: + outlines: + main: + outline: cutout + footprints: + switches: + what: choc + where: true + params: + from: "{{name}}" + to: GND + reverse: true + keycaps: true + hotswap: false + promicro: + what: promicro + where: + ref: matrix_inner_home + shift: [1cx+1.5, 0.5cy] + rotate: -90 + params: + P20: matrix_inner_top + P19: matrix_index_top + P18: matrix_middle_top + P15: matrix_ring_top + P14: matrix_pinky_top + P16: matrix_inner_home + P10: matrix_index_home + P1: matrix_middle_home + P0: matrix_ring_home + P2: matrix_pinky_home + P3: matrix_pinky_bottom + P4: matrix_ring_bottom + P5: matrix_middle_bottom + P7: matrix_inner_bottom + P6: matrix_index_bottom + P8: thumb_tucky + P9: thumb_reachy + trrs: + what: trrs + params: + A: GND + B: GND + C: P21 + D: VCC + reverse: true + symmetric: true + where: + ref: matrix_inner_bottom + shift: [1+1.5cx, -0.4cy] + rotate: -90 diff --git a/ergogen/fpkb_v4.yaml b/ergogen/fpkb_v4.yaml new file mode 100644 index 0000000..16c5144 --- /dev/null +++ b/ergogen/fpkb_v4.yaml @@ -0,0 +1,118 @@ +points: + zones: + matrix: + columns: + pinky: + rows.top.bind: [1, 4, 0, 1] + rows.home.bind: [0, 1, 0, 1] + rows.bottom.bind: [0, 1, 1, 1] + key.splay: 10 + ring: + key.stagger: 0.66u + rows.top.bind: [1,4,0,1] + rows.home.bind: [0,3,0,2] + rows.bottom.bind: [0,1,1,1.5] + key.splay: -5 + key.spread: u+1 + middle: + key.stagger: 0.25u + rows.top.bind: [1,1,0,1] + rows.home.bind: [1,3,0,2] + rows.bottom.bind: [0,3,1,3] + key.splay: -5 + key.spread: u+1 + index: + key.stagger: -0.25u + rows.top.bind: [1,1,0,5] + rows.home.bind: [0,2,0,2] + rows.bottom.bind: [0,2,1,1] + key.splay: -5 + key.spread: u+0.7 + inner: + key.stagger: -0.2u + rows.top.bind: [1,2+1u,0,1] + rows.home.bind: [0,2+1u,0,0] + rows.bottom.bind: [0,2+1u,1,1] + key.spread: u + rows: + bottom.padding: u + home.padding: u + top.padding: u + thumb: + anchor: + ref: matrix_inner_bottom + shift: [0u, -1.5u] + rotate: -10 + columns: + tucky: + key.name: thumb_tucky + rows.home.bind: [12,6,1,1] + reachy: + key.spread: 1.0u + key.splay: -15 + key.origin: [-0.5u, -0.5u] + key.name: thumb_reachy + rows.home.bind: [1,1,1,1] +outlines: + raw: + - what: rectangle + where: true + bound: true + asym: left + size: [1u, 1u] + cutout: + - what: outline + name: raw + fillet: 1 +pcbs: + fpkb_v4: + outlines: + main: + outline: cutout + footprints: + switches: + what: mx + where: true + params: + from: "{{name}}" + to: GND + reverse: true + keycaps: true + hotswap: false + promicro: + what: promicro + where: + ref: matrix_inner_home + shift: [1u+1.5, 0.5u] + rotate: -90 + params: + P20: matrix_inner_top + P19: matrix_index_top + P18: matrix_middle_top + P15: matrix_ring_top + P14: matrix_pinky_top + P16: matrix_inner_home + P10: matrix_index_home + P1: matrix_middle_home + P0: matrix_ring_home + P2: matrix_pinky_home + P3: matrix_pinky_bottom + P4: matrix_ring_bottom + P5: matrix_middle_bottom + P7: matrix_inner_bottom + P6: matrix_index_bottom + P8: thumb_tucky + P9: thumb_reachy + trrs: + what: trrs + params: + A: GND + B: GND + C: P21 + D: VCC + reverse: true + symmetric: true + where: + ref: matrix_inner_bottom + shift: [1+1.5u, -0.4u] + rotate: -90 diff --git a/ergogen/fpkb_v5.yaml b/ergogen/fpkb_v5.yaml new file mode 100644 index 0000000..ab71090 --- /dev/null +++ b/ergogen/fpkb_v5.yaml @@ -0,0 +1,116 @@ +points: + zones: + matrix: + columns: + pinky: + rows.top.bind: [1, 4, 0, 1] + rows.home.bind: [0, 1, 0, 1] + rows.bottom.bind: [0, 1, 1, 1] + key.splay: 10 + ring: + key.stagger: 0.66cy + rows.top.bind: [1,4,0,1] + rows.home.bind: [0,3,0,2] + rows.bottom.bind: [0,1,1,1.5] + key.splay: -5 + key.spread: cx+1 + middle: + key.stagger: 0.25cy + rows.top.bind: [1,1,0,1] + rows.home.bind: [1,3,0,2] + rows.bottom.bind: [0,3,1,3] + key.splay: -5 + key.spread: cx+1 + index: + key.stagger: -0.25cy + rows.top.bind: [1,1,0,5] + rows.home.bind: [0,2,0,2] + rows.bottom.bind: [0,2,1,1] + key.splay: -5 + key.spread: cx+0.7 + inner: + key.stagger: -0.2cy + rows.top.bind: [1,2+1cx,0,1] + rows.home.bind: [0,2+1cx,0,0] + rows.bottom.bind: [0,2+1cx,1,1] + key.spread: cx + rows: + bottom.padding: cy + home.padding: cy + top.padding: cy + thumb: + anchor: + ref: matrix_inner_bottom + shift: [0cx, -1.5cy] + rotate: -10 + columns: + tucky: + key.name: thumb_tucky + rows.home.bind: [12,6,1,1] + reachy: + key.spread: 1.0cx + key.splay: -15 + key.origin: [-0.5cx, -0.5cy] + key.name: thumb_reachy + rows.home.bind: [1,1,1,1] +outlines: + raw: + - what: rectangle + where: true + bound: true + asym: left + size: [1cx, 1cy] + cutout: + - what: outline + name: raw + fillet: 1 +pcbs: + fpkb_v5: + template: kicad8 + outlines: + main: + outline: cutout + footprints: + switches: + what: mx6c_ulp + where: true + params: + from: "{{name}}" + to: GND + promicro: + what: promicro + where: + ref: matrix_inner_home + shift: [1cx+1.5, 0.5cy] + rotate: -90 + params: + P20: matrix_inner_top + P19: matrix_index_top + P18: matrix_middle_top + P15: matrix_ring_top + P14: matrix_pinky_top + P16: matrix_inner_home + P10: matrix_index_home + P1: matrix_middle_home + P0: matrix_ring_home + P2: matrix_pinky_home + P3: matrix_pinky_bottom + P4: matrix_ring_bottom + P5: matrix_middle_bottom + P7: matrix_inner_bottom + P6: matrix_index_bottom + P8: thumb_tucky + P9: thumb_reachy + trrs: + what: trrs + params: + A: GND + B: GND + C: P21 + D: VCC + reverse: false + symmetric: true + where: + ref: matrix_inner_bottom + shift: [1+1.5cx, -0.4cy] + rotate: -90 diff --git a/ergogen_fpkb_v2.yaml b/ergogen_fpkb_v2.yaml deleted file mode 100644 index 0d8b7df..0000000 --- a/ergogen_fpkb_v2.yaml +++ /dev/null @@ -1,118 +0,0 @@ -points: - zones: - matrix: - columns: - pinky: - rows.top.bind: [1, 4, 0, 1] - rows.home.bind: [0, 1, 0, 1] - rows.bottom.bind: [0, 1, 1, 1] - key.splay: 10 - ring: - key.stagger: 0.66cy - rows.top.bind: [1,4,0,1] - rows.home.bind: [0,3,0,2] - rows.bottom.bind: [0,1,1,1.5] - key.splay: -5 - key.spread: cx+1 - middle: - key.stagger: 0.25cy - rows.top.bind: [1,1,0,1] - rows.home.bind: [1,3,0,2] - rows.bottom.bind: [0,3,1,3] - key.splay: -5 - key.spread: cx+1 - index: - key.stagger: -0.25cy - rows.top.bind: [1,1,0,5] - rows.home.bind: [0,2,0,2] - rows.bottom.bind: [0,2,1,1] - key.splay: -5 - key.spread: cx+0.7 - inner: - key.stagger: -0.2cy - rows.top.bind: [1,2+1cx,0,1] - rows.home.bind: [0,2+1cx,0,0] - rows.bottom.bind: [0,2+1cx,1,1] - key.spread: cx - rows: - bottom.padding: cy - home.padding: cy - top.padding: cy - thumb: - anchor: - ref: matrix_inner_bottom - shift: [0cx, -1.5cy] - rotate: -10 - columns: - tucky: - key.name: thumb_tucky - rows.home.bind: [12,6,1,1] - reachy: - key.spread: 1.0cx - key.splay: -15 - key.origin: [-0.5cx, -0.5cy] - key.name: thumb_reachy - rows.home.bind: [1,1,1,1] -outlines: - raw: - - what: rectangle - where: true - bound: true - asym: left - size: [1cx, 1cy] - cutout: - - what: outline - name: raw - fillet: 1 -pcbs: - fpkb_v2: - outlines: - main: - outline: cutout - footprints: - switches: - what: choc - where: true - params: - from: "{{name}}" - to: GND - reverse: true - keycaps: true - hotswap: false - promicro: - what: promicro - where: - ref: matrix_inner_home - shift: [1cx+1.5, 0.5cy] - rotate: -90 - params: - P20: matrix_inner_top - P19: matrix_index_top - P18: matrix_middle_top - P15: matrix_ring_top - P14: matrix_pinky_top - P16: matrix_inner_home - P10: matrix_index_home - P1: matrix_middle_home - P0: matrix_ring_home - P2: matrix_pinky_home - P3: matrix_pinky_bottom - P4: matrix_ring_bottom - P5: matrix_middle_bottom - P7: matrix_inner_bottom - P6: matrix_index_bottom - P8: thumb_tucky - P9: thumb_reachy - trrs: - what: trrs - params: - A: GND - B: GND - C: P21 - D: VCC - reverse: true - symmetric: true - where: - ref: matrix_inner_bottom - shift: [1+1.5cx, -0.4cy] - rotate: -90 diff --git a/ergogen_fpkb_v4.yaml b/ergogen_fpkb_v4.yaml deleted file mode 100644 index 16c5144..0000000 --- a/ergogen_fpkb_v4.yaml +++ /dev/null @@ -1,118 +0,0 @@ -points: - zones: - matrix: - columns: - pinky: - rows.top.bind: [1, 4, 0, 1] - rows.home.bind: [0, 1, 0, 1] - rows.bottom.bind: [0, 1, 1, 1] - key.splay: 10 - ring: - key.stagger: 0.66u - rows.top.bind: [1,4,0,1] - rows.home.bind: [0,3,0,2] - rows.bottom.bind: [0,1,1,1.5] - key.splay: -5 - key.spread: u+1 - middle: - key.stagger: 0.25u - rows.top.bind: [1,1,0,1] - rows.home.bind: [1,3,0,2] - rows.bottom.bind: [0,3,1,3] - key.splay: -5 - key.spread: u+1 - index: - key.stagger: -0.25u - rows.top.bind: [1,1,0,5] - rows.home.bind: [0,2,0,2] - rows.bottom.bind: [0,2,1,1] - key.splay: -5 - key.spread: u+0.7 - inner: - key.stagger: -0.2u - rows.top.bind: [1,2+1u,0,1] - rows.home.bind: [0,2+1u,0,0] - rows.bottom.bind: [0,2+1u,1,1] - key.spread: u - rows: - bottom.padding: u - home.padding: u - top.padding: u - thumb: - anchor: - ref: matrix_inner_bottom - shift: [0u, -1.5u] - rotate: -10 - columns: - tucky: - key.name: thumb_tucky - rows.home.bind: [12,6,1,1] - reachy: - key.spread: 1.0u - key.splay: -15 - key.origin: [-0.5u, -0.5u] - key.name: thumb_reachy - rows.home.bind: [1,1,1,1] -outlines: - raw: - - what: rectangle - where: true - bound: true - asym: left - size: [1u, 1u] - cutout: - - what: outline - name: raw - fillet: 1 -pcbs: - fpkb_v4: - outlines: - main: - outline: cutout - footprints: - switches: - what: mx - where: true - params: - from: "{{name}}" - to: GND - reverse: true - keycaps: true - hotswap: false - promicro: - what: promicro - where: - ref: matrix_inner_home - shift: [1u+1.5, 0.5u] - rotate: -90 - params: - P20: matrix_inner_top - P19: matrix_index_top - P18: matrix_middle_top - P15: matrix_ring_top - P14: matrix_pinky_top - P16: matrix_inner_home - P10: matrix_index_home - P1: matrix_middle_home - P0: matrix_ring_home - P2: matrix_pinky_home - P3: matrix_pinky_bottom - P4: matrix_ring_bottom - P5: matrix_middle_bottom - P7: matrix_inner_bottom - P6: matrix_index_bottom - P8: thumb_tucky - P9: thumb_reachy - trrs: - what: trrs - params: - A: GND - B: GND - C: P21 - D: VCC - reverse: true - symmetric: true - where: - ref: matrix_inner_bottom - shift: [1+1.5u, -0.4u] - rotate: -90 -- cgit v1.3.1