├── ergogen ├── kicad │ └── avocado │ │ ├── fp-info-cache │ │ ├── top_plate │ │ ├── fp-info-cache │ │ ├── top_plate.kicad_sch │ │ ├── top_plate.kicad_prl │ │ └── top_plate.kicad_pro │ │ ├── bottom_plate │ │ ├── fp-info-cache │ │ ├── bottom_plate.kicad_sch │ │ ├── bottom_plate-backups │ │ │ └── bottom_plate-2024-07-17_163928.zip │ │ ├── bottom_plate.kicad_prl │ │ └── bottom_plate.kicad_pro │ │ ├── avocado.kicad_sch │ │ └── avocado.kicad_prl ├── gerbers │ ├── main_pcb.zip │ ├── top_plate.zip │ ├── bottom_plate.zip │ ├── top_plate │ │ ├── top_plate-NPTH.drl │ │ ├── top_plate-PTH.drl │ │ ├── top_plate-B_Paste.gbr │ │ ├── top_plate-F_Paste.gbr │ │ ├── top_plate-B_Mask.gbr │ │ ├── top_plate-F_Mask.gbr │ │ ├── top_plate-B_Cu.gbr │ │ ├── top_plate-F_Cu.gbr │ │ ├── top_plate-job.gbrjob │ │ ├── top_plate-B_Silkscreen.gbr │ │ ├── top_plate-F_Silkscreen.gbr │ │ └── top_plate-Edge_Cuts.gbr │ ├── bottom_plate │ │ ├── bottom_plate-NPTH.drl │ │ ├── bottom_plate-PTH.drl │ │ ├── bottom_plate-B_Paste.gbr │ │ ├── bottom_plate-F_Paste.gbr │ │ ├── bottom_plate-B_Mask.gbr │ │ ├── bottom_plate-F_Mask.gbr │ │ ├── bottom_plate-B_Cu.gbr │ │ ├── bottom_plate-F_Cu.gbr │ │ ├── bottom_plate-job.gbrjob │ │ ├── bottom_plate-Edge_Cuts.gbr │ │ ├── bottom_plate-B_Silkscreen.gbr │ │ └── bottom_plate-F_Silkscreen.gbr │ └── main_pcb │ │ ├── avocado-B_Paste.gbr │ │ ├── avocado-F_Paste.gbr │ │ ├── avocado-NPTH.drl │ │ ├── avocado-job.gbrjob │ │ ├── avocado-Edge_Cuts.gbr │ │ └── avocado-PTH.drl ├── footprints │ ├── via.js │ ├── route.js │ ├── text.js │ ├── keepout.js │ ├── wuerth-434121025816.js │ ├── sk6812mini.js │ ├── mounting_hole.js │ ├── pcm12.js │ ├── sod-123w.js │ ├── rotary.js │ ├── jst-s2b-ph-kl.js │ ├── rotary_encoder_ec11_ec12.js │ └── promicro_pretty.js ├── images │ ├── avocado1.svg │ └── avocado.svg └── config.yaml ├── config ├── boards │ └── shields │ │ └── avocado │ │ ├── avocado_left.conf │ │ ├── avocado_right.conf │ │ ├── avocado.conf │ │ ├── Kconfig.shield │ │ ├── avocado.zmk.yaml │ │ ├── Kconfig.defconfig │ │ ├── avocado_left.overlay │ │ ├── avocado_right.overlay │ │ ├── avocado.dtsi │ │ └── avocado.keymap └── west.yml ├── zephyr └── module.yml ├── images ├── v1.jpg ├── josukey.png └── keyboard.jpeg ├── .gitignore ├── svg_converter └── config.json ├── .github └── workflows │ └── build.yml ├── package.json ├── LICENSE └── README.md /ergogen/kicad/avocado/fp-info-cache: -------------------------------------------------------------------------------- 1 | 0 2 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado_left.conf: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado_right.conf: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/top_plate/fp-info-cache: -------------------------------------------------------------------------------- 1 | 0 2 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/bottom_plate/fp-info-cache: -------------------------------------------------------------------------------- 1 | 0 2 | -------------------------------------------------------------------------------- /zephyr/module.yml: -------------------------------------------------------------------------------- 1 | build: 2 | settings: 3 | board_root: . 4 | -------------------------------------------------------------------------------- /images/v1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/images/v1.jpg -------------------------------------------------------------------------------- /images/josukey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/images/josukey.png -------------------------------------------------------------------------------- /images/keyboard.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/images/keyboard.jpeg -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/ergogen/gerbers/main_pcb.zip -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/ergogen/gerbers/top_plate.zip -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | ergogen/output 3 | ergogen/kicad/gerber 4 | zmk/build 5 | **/.DS_Store 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/ergogen/gerbers/bottom_plate.zip -------------------------------------------------------------------------------- /svg_converter/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "joinPathData": true, 3 | "minDistance": 0.5, 4 | "roundToNearest": 0.25, 5 | "sampleFrequency": 0.001 6 | } 7 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado.conf: -------------------------------------------------------------------------------- 1 | CONFIG_ZMK_RGB_UNDERGLOW=n 2 | CONFIG_WS2812_STRIP=n 3 | CONFIG_ZMK_SLEEP=y 4 | CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=900000 5 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/avocado.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0") 2 | (paper "A4") 3 | (lib_symbols) 4 | (symbol_instances) 5 | ) 6 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/top_plate/top_plate.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0") 2 | (paper "A4") 3 | (lib_symbols) 4 | (symbol_instances) 5 | ) 6 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/bottom_plate/bottom_plate.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0") 2 | (paper "A4") 3 | (lib_symbols) 4 | (symbol_instances) 5 | ) 6 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/Kconfig.shield: -------------------------------------------------------------------------------- 1 | config SHIELD_AVOCADO_LEFT 2 | def_bool $(shields_list_contains,avocado_left) 3 | 4 | config SHIELD_AVOCADO_RIGHT 5 | def_bool $(shields_list_contains,avocado_right) 6 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/bottom_plate/bottom_plate-backups/bottom_plate-2024-07-17_163928.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/auryn31/avocado/HEAD/ergogen/kicad/avocado/bottom_plate/bottom_plate-backups/bottom_plate-2024-07-17_163928.zip -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado.zmk.yaml: -------------------------------------------------------------------------------- 1 | file_format: "1" 2 | id: avocado 3 | name: Avocado 4 | type: shield 5 | url: https://github.com/Narkoleptika/josukey/ 6 | requires: [pro_micro] 7 | features: 8 | - keys 9 | siblings: 10 | - avocado_left 11 | - avocado_right 12 | -------------------------------------------------------------------------------- /config/west.yml: -------------------------------------------------------------------------------- 1 | manifest: 2 | remotes: 3 | - name: zmkfirmware 4 | url-base: https://github.com/zmkfirmware 5 | projects: 6 | - name: zmk 7 | remote: zmkfirmware 8 | revision: main 9 | import: app/west.yml 10 | self: 11 | path: config 12 | 13 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request, workflow_dispatch] 2 | 3 | jobs: 4 | build: 5 | uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main 6 | with: 7 | # # build_matrix_path: "zmk/build.yaml" 8 | # # config_path: "zmk/config" 9 | archive_name: "avocado_firmware" 10 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:40:20+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:40:20+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | % 10 | G90 11 | G05 12 | M30 13 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:45:19+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:45:19+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | % 10 | G90 11 | G05 12 | M30 13 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/Kconfig.defconfig: -------------------------------------------------------------------------------- 1 | if SHIELD_AVOCADO_LEFT 2 | 3 | config ZMK_KEYBOARD_NAME 4 | default "Avocado" 5 | 6 | config ZMK_SPLIT_ROLE_CENTRAL 7 | default y 8 | 9 | config ZMK_USB 10 | default y 11 | 12 | endif 13 | 14 | if SHIELD_AVOCADO_LEFT || SHIELD_AVOCADO_RIGHT 15 | 16 | config ZMK_SPLIT 17 | default y 18 | 19 | endif 20 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado_left.overlay: -------------------------------------------------------------------------------- 1 | #include "avocado.dtsi" 2 | 3 | &default_kscan { 4 | col-gpios = <&pro_micro 7 GPIO_ACTIVE_HIGH>, 5 | <&pro_micro 6 GPIO_ACTIVE_HIGH>, 6 | <&pro_micro 5 GPIO_ACTIVE_HIGH>, 7 | <&pro_micro 4 GPIO_ACTIVE_HIGH>, 8 | <&pro_micro 3 GPIO_ACTIVE_HIGH>; 9 | }; 10 | -------------------------------------------------------------------------------- /ergogen/footprints/via.js: -------------------------------------------------------------------------------- 1 | // Via 2 | // Nets 3 | // net: the net this via should be connected to 4 | 5 | module.exports = { 6 | params: { 7 | net: undefined 8 | }, 9 | body: p => ` 10 | (via 11 | ${p.at.replace(/ [-\d]+\)$/, ')')} 12 | (size 0.8) 13 | (drill 0.4) 14 | (layers "F.Cu" "B.Cu") 15 | (net ${p.net.index}) 16 | ) 17 | ` 18 | } 19 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado_right.overlay: -------------------------------------------------------------------------------- 1 | #include "avocado.dtsi" 2 | 3 | &default_transform { 4 | col-offset = <5>; 5 | }; 6 | 7 | &default_kscan { 8 | col-gpios = <&pro_micro 3 GPIO_ACTIVE_HIGH>, 9 | <&pro_micro 4 GPIO_ACTIVE_HIGH>, 10 | <&pro_micro 5 GPIO_ACTIVE_HIGH>, 11 | <&pro_micro 6 GPIO_ACTIVE_HIGH>, 12 | <&pro_micro 7 GPIO_ACTIVE_HIGH>; 13 | }; 14 | -------------------------------------------------------------------------------- /ergogen/footprints/route.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | width: 0.25, 4 | side: 'F', 5 | net: {type: 'net', value: 'net'}, 6 | points: [], 7 | }, 8 | body: p => p.points 9 | .map(({start, end}) => ` 10 | (segment (start ${p.xy(start.x, start.y)}) (end ${p.xy(end.x, end.y)}) (width ${p.width}) (layer "${p.side}.Cu") (net ${p.net.index})) 11 | `) 12 | .join('\n') 13 | } 14 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:40:20+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:40:20+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.1693 11 | % 12 | G90 13 | G05 14 | T1 15 | X1.4633Y-1.5428 16 | X1.4633Y-2.2908 17 | X3.6811Y-1.6266 18 | X3.6811Y-2.3746 19 | X4.6576Y-3.8377 20 | M30 21 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:45:19+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:45:19+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.0866 11 | % 12 | G90 13 | G05 14 | T1 15 | X1.4396Y-1.6247 16 | X1.4396Y-2.3727 17 | X3.6575Y-1.7085 18 | X3.6575Y-2.4565 19 | X4.634Y-3.9196 20 | M30 21 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-B_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 APERTURE END LIST* 15 | M02* 16 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-F_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 APERTURE END LIST* 15 | M02* 16 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-B_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 APERTURE END LIST* 15 | M02* 16 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-F_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 APERTURE END LIST* 15 | M02* 16 | -------------------------------------------------------------------------------- /ergogen/footprints/text.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | layer: 'F.SilkS', 4 | text: '', 5 | h_size: 1, 6 | v_size: 1, 7 | thickness: 0.15, 8 | justify: '', 9 | style: '' 10 | }, 11 | body: p => { 12 | const justify = p.justify && `(justify ${p.justify})` || ''; 13 | return ` 14 | (gr_text "${p.text}" ${p.at} (layer ${p.layer}) 15 | (effects (font (size ${p.h_size} ${p.v_size}) (thickness ${p.thickness}) ${p.style}) ${justify}) 16 | ) 17 | ` 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ergogen/footprints/keepout.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | points: [] 4 | }, 5 | body: p => ` 6 | (zone 7 | (layers "F&B.Cu") 8 | (hatch edge 0.5) 9 | (connect_pads (clearance 0)) 10 | (min_thickness 0.25) 11 | (filled_areas_thickness no) 12 | (keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed) (copperpour allowed) (footprints allowed)) 13 | (fill (thermal_gap 0.5) (thermal_bridge_width 0.5)) 14 | (polygon 15 | (pts 16 | ${ 17 | p.points 18 | .map(({x, y}) => `(xy ${p.xy(x, y)})`) 19 | .join('\n') 20 | } 21 | ) 22 | ) 23 | ) 24 | ` 25 | } 26 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-B_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:05:20+02:00*% 3 | %TF.ProjectId,avocado,61766f63-6164-46f2-9e6b-696361645f70,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:05:20* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10R,1.500000X0.700000*% 15 | %ADD11R,0.800000X1.000000*% 16 | G04 APERTURE END LIST* 17 | D10* 18 | %TO.C,T1*% 19 | X132170000Y-66650000D03* 20 | X132170000Y-69650000D03* 21 | X132170000Y-71150000D03* 22 | D11* 23 | X135030000Y-65250000D03* 24 | X135030000Y-72550000D03* 25 | X132820000Y-72550000D03* 26 | X132820000Y-65250000D03* 27 | %TD*% 28 | M02* 29 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-F_Paste.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:05:20+02:00*% 3 | %TF.ProjectId,avocado,61766f63-6164-46f2-9e6b-696361645f70,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Paste,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:05:20* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10R,1.500000X0.700000*% 15 | %ADD11R,0.800000X1.000000*% 16 | G04 APERTURE END LIST* 17 | D10* 18 | %TO.C,T1*% 19 | X132170000Y-71150000D03* 20 | X132170000Y-68150000D03* 21 | X132170000Y-66650000D03* 22 | D11* 23 | X135030000Y-72550000D03* 24 | X135030000Y-65250000D03* 25 | X132820000Y-65250000D03* 26 | X132820000Y-72550000D03* 27 | %TD*% 28 | M02* 29 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-B_Mask.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Soldermask,Bot*% 6 | %TF.FilePolarity,Negative*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,5.200000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | %TO.C,H1*% 18 | X37166667Y-39186667D03* 19 | %TD*% 20 | %TO.C,H2*% 21 | X37166667Y-58186667D03* 22 | %TD*% 23 | %TO.C,H3*% 24 | X93500000Y-41315000D03* 25 | %TD*% 26 | %TO.C,H4*% 27 | X93500000Y-60315000D03* 28 | %TD*% 29 | %TO.C,H5*% 30 | X118302667Y-97476630D03* 31 | %TD*% 32 | M02* 33 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-F_Mask.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Soldermask,Top*% 6 | %TF.FilePolarity,Negative*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,5.200000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | %TO.C,H1*% 18 | X37166667Y-39186667D03* 19 | %TD*% 20 | %TO.C,H2*% 21 | X37166667Y-58186667D03* 22 | %TD*% 23 | %TO.C,H3*% 24 | X93500000Y-41315000D03* 25 | %TD*% 26 | %TO.C,H4*% 27 | X93500000Y-60315000D03* 28 | %TD*% 29 | %TO.C,H5*% 30 | X118302667Y-97476630D03* 31 | %TD*% 32 | M02* 33 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-B_Mask.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Soldermask,Bot*% 6 | %TF.FilePolarity,Negative*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,3.900000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | %TO.C,H1*% 18 | X36566667Y-41266667D03* 19 | %TD*% 20 | %TO.C,H2*% 21 | X36566667Y-60266667D03* 22 | %TD*% 23 | %TO.C,H3*% 24 | X92900000Y-43395000D03* 25 | %TD*% 26 | %TO.C,H4*% 27 | X92900000Y-62395000D03* 28 | %TD*% 29 | %TO.C,H5*% 30 | X117702667Y-99556630D03* 31 | %TD*% 32 | M02* 33 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-F_Mask.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Soldermask,Top*% 6 | %TF.FilePolarity,Negative*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,3.900000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | %TO.C,H1*% 18 | X36566667Y-41266667D03* 19 | %TD*% 20 | %TO.C,H2*% 21 | X36566667Y-60266667D03* 22 | %TD*% 23 | %TO.C,H3*% 24 | X92900000Y-43395000D03* 25 | %TD*% 26 | %TO.C,H4*% 27 | X92900000Y-62395000D03* 28 | %TD*% 29 | %TO.C,H5*% 30 | X117702667Y-99556630D03* 31 | %TD*% 32 | M02* 33 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-B_Cu.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Copper,L2,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %TA.AperFunction,ComponentPad*% 15 | %ADD10C,5.100000*% 16 | %TD*% 17 | G04 APERTURE END LIST* 18 | D10* 19 | %TO.P,H1,*% 20 | %TO.N,*% 21 | X37166667Y-39186667D03* 22 | %TD*% 23 | %TO.P,H2,*% 24 | %TO.N,*% 25 | X37166667Y-58186667D03* 26 | %TD*% 27 | %TO.P,H3,*% 28 | %TO.N,*% 29 | X93500000Y-41315000D03* 30 | %TD*% 31 | %TO.P,H4,*% 32 | %TO.N,*% 33 | X93500000Y-60315000D03* 34 | %TD*% 35 | %TO.P,H5,*% 36 | %TO.N,*% 37 | X118302667Y-97476630D03* 38 | %TD*% 39 | M02* 40 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-F_Cu.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Copper,L1,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %TA.AperFunction,ComponentPad*% 15 | %ADD10C,5.100000*% 16 | %TD*% 17 | G04 APERTURE END LIST* 18 | D10* 19 | %TO.P,H1,*% 20 | %TO.N,*% 21 | X37166667Y-39186667D03* 22 | %TD*% 23 | %TO.P,H2,*% 24 | %TO.N,*% 25 | X37166667Y-58186667D03* 26 | %TD*% 27 | %TO.P,H3,*% 28 | %TO.N,*% 29 | X93500000Y-41315000D03* 30 | %TD*% 31 | %TO.P,H4,*% 32 | %TO.N,*% 33 | X93500000Y-60315000D03* 34 | %TD*% 35 | %TO.P,H5,*% 36 | %TO.N,*% 37 | X118302667Y-97476630D03* 38 | %TD*% 39 | M02* 40 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-B_Cu.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Copper,L2,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %TA.AperFunction,ComponentPad*% 15 | %ADD10C,3.800000*% 16 | %TD*% 17 | G04 APERTURE END LIST* 18 | D10* 19 | %TO.P,H1,*% 20 | %TO.N,*% 21 | X36566667Y-41266667D03* 22 | %TD*% 23 | %TO.P,H2,*% 24 | %TO.N,*% 25 | X36566667Y-60266667D03* 26 | %TD*% 27 | %TO.P,H3,*% 28 | %TO.N,*% 29 | X92900000Y-43395000D03* 30 | %TD*% 31 | %TO.P,H4,*% 32 | %TO.N,*% 33 | X92900000Y-62395000D03* 34 | %TD*% 35 | %TO.P,H5,*% 36 | %TO.N,*% 37 | X117702667Y-99556630D03* 38 | %TD*% 39 | M02* 40 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-F_Cu.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Copper,L1,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %TA.AperFunction,ComponentPad*% 15 | %ADD10C,3.800000*% 16 | %TD*% 17 | G04 APERTURE END LIST* 18 | D10* 19 | %TO.P,H1,*% 20 | %TO.N,*% 21 | X36566667Y-41266667D03* 22 | %TD*% 23 | %TO.P,H2,*% 24 | %TO.N,*% 25 | X36566667Y-60266667D03* 26 | %TD*% 27 | %TO.P,H3,*% 28 | %TO.N,*% 29 | X92900000Y-43395000D03* 30 | %TD*% 31 | %TO.P,H4,*% 32 | %TO.N,*% 33 | X92900000Y-62395000D03* 34 | %TD*% 35 | %TO.P,H5,*% 36 | %TO.N,*% 37 | X117702667Y-99556630D03* 38 | %TD*% 39 | M02* 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "josukey", 3 | "description": "A keyboard for Joey", 4 | "version": "0.0.2", 5 | "author": "Joey ", 6 | "license": "MIT", 7 | "private": true, 8 | "homepage": "https://github.com/Narkoleptika/josukey", 9 | "repository": "github:Narkoleptika/josukey", 10 | "bugs": "https://github.com/Narkoleptika/josukey/issues", 11 | "type": "module", 12 | "scripts": { 13 | "ergogen:build": "ergogen --clean -o ergogen/output ergogen", 14 | "ergogen:watch": "nodemon --ext .js,.yaml --watch ergogen/footprints --watch ergogen/config.yaml --exec npm run ergogen:build", 15 | "zmk:update": "docker compose -f zmk/docker-compose.yml run --rm firmware-env zmk-update", 16 | "zmk:build": "docker compose -f zmk/docker-compose.yml run --rm firmware-env zmk-build", 17 | "zmk:down": "docker compose -f zmk/docker-compose.yml down" 18 | }, 19 | "dependencies": { 20 | "ergogen": "^4.1.0", 21 | "fs": "^0.0.1-security" 22 | }, 23 | "devDependencies": { 24 | "nodemon": "^2.0.21" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Narkoleptika 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado.dtsi: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | / { 4 | chosen { 5 | zmk,kscan = &default_kscan; 6 | zmk,matrix_transform = &default_transform; 7 | }; 8 | 9 | default_transform: keymap_transform_0 { 10 | compatible = "zmk,matrix-transform"; 11 | columns = <10>; 12 | rows = <4>; 13 | // | SW1 | SW2 | SW3 | SW4 | SW5 | | SW5 | SW4 | SW3 | SW2 | SW1 | 14 | // | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | 15 | // | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | 16 | // | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | 17 | map = < 18 | RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) 19 | RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) 20 | RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) 21 | RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) 22 | >; 23 | }; 24 | 25 | default_kscan: kscan { 26 | compatible = "zmk,kscan-gpio-matrix"; 27 | label = "default_kscan"; 28 | diode-direction = "col2row"; 29 | 30 | row-gpios = <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>, 31 | <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>, 32 | <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>, 33 | <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>; 34 | }; 35 | }; 36 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/avocado.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 31, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "fffffff_80000001", 68 | "zone_display_mode": 0 69 | }, 70 | "git": { 71 | "repo_password": "", 72 | "repo_type": "", 73 | "repo_username": "", 74 | "ssh_key": "" 75 | }, 76 | "meta": { 77 | "filename": "avocado.kicad_prl", 78 | "version": 3 79 | }, 80 | "project": { 81 | "files": [] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/top_plate/top_plate.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "7ffffff_80000001", 68 | "zone_display_mode": 0 69 | }, 70 | "git": { 71 | "repo_password": "", 72 | "repo_type": "", 73 | "repo_username": "", 74 | "ssh_key": "" 75 | }, 76 | "meta": { 77 | "filename": "top_plate.kicad_prl", 78 | "version": 3 79 | }, 80 | "project": { 81 | "files": [] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/bottom_plate/bottom_plate.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "7ffffff_80000001", 68 | "zone_display_mode": 0 69 | }, 70 | "git": { 71 | "repo_password": "", 72 | "repo_type": "", 73 | "repo_username": "", 74 | "ssh_key": "" 75 | }, 76 | "meta": { 77 | "filename": "bottom_plate.kicad_prl", 78 | "version": 3 79 | }, 80 | "project": { 81 | "files": [] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:05:14+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:05:14+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 10 | T1C0.0354 11 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 12 | T2C0.0670 13 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 14 | T3C0.1570 15 | % 16 | G90 17 | G05 18 | T1 19 | X5.2728Y-2.6535 20 | X5.2728Y-2.6535 21 | X5.2728Y-2.7717 22 | X5.2728Y-2.7717 23 | T2 24 | X0.8669Y-1.5142 25 | X0.8669Y-2.2622 26 | X0.8669Y-3.0102 27 | X1.2669Y-1.5142 28 | X1.2669Y-2.2622 29 | X1.2669Y-3.0102 30 | X1.615Y-1.215 31 | X1.615Y-1.963 32 | X1.615Y-2.711 33 | X2.015Y-1.215 34 | X2.015Y-1.963 35 | X2.015Y-2.711 36 | X2.363Y-1.0055 37 | X2.363Y-1.7535 38 | X2.363Y-2.5016 39 | X2.763Y-1.0055 40 | X2.763Y-1.7535 41 | X2.763Y-2.5016 42 | X3.111Y-1.2524 43 | X3.111Y-2.0004 44 | X3.111Y-2.7484 45 | X3.111Y-3.6909 46 | X3.511Y-1.2524 47 | X3.511Y-2.0004 48 | X3.511Y-2.7484 49 | X3.511Y-3.6909 50 | X3.8591Y-1.3346 51 | X3.8591Y-2.0827 52 | X3.8591Y-2.8307 53 | X4.0248Y-3.7212 54 | X4.2591Y-1.3346 55 | X4.2591Y-2.0827 56 | X4.2591Y-2.8307 57 | X4.4193Y-3.7872 58 | X4.9119Y-3.9379 59 | X5.2901Y-4.0681 60 | T3 61 | X1.0669Y-1.5142 62 | X1.0669Y-2.2622 63 | X1.0669Y-3.0102 64 | X1.815Y-1.215 65 | X1.815Y-1.963 66 | X1.815Y-2.711 67 | X2.563Y-1.0055 68 | X2.563Y-1.7535 69 | X2.563Y-2.5016 70 | X3.311Y-1.2524 71 | X3.311Y-2.0004 72 | X3.311Y-2.7484 73 | X3.311Y-3.6909 74 | X4.0591Y-1.3346 75 | X4.0591Y-2.0827 76 | X4.0591Y-2.8307 77 | X4.2221Y-3.7542 78 | X5.101Y-4.003 79 | M30 80 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Avocado 2 | 3 | A keyboard for Auryn 4 | 5 | This is an ergogen based corne clone that I intend to modify and tweak as I descend into the rabbit hole 6 | 7 | ## Getting Started 8 | 9 | ```bash 10 | git clone https://github.com/auryn31/avocado 11 | cd avocado 12 | yarn 13 | ``` 14 | 15 | ## Ergogen 16 | 17 | ### Build 18 | 19 | This will run Ergogen and build all of the output files. 20 | 21 | ```bash 22 | npm run ergogen:build 23 | ``` 24 | 25 | ### Watch 26 | 27 | This will watch the `config.yaml` file and the `footprints` directory and run the build command whenever there are changes. 28 | 29 | ```bash 30 | npm run ergogen:watch 31 | ``` 32 | 33 | ## ZMK 34 | 35 | The code will run by github actions and will be automatically generated their. 36 | Just download the zip and push it onto your pro micro. 37 | 38 | ## Parts 39 | 40 | - [Batteries 301230](https://de.aliexpress.com/item/1005007002754764.html) 41 | - [Reset Switches](https://de.aliexpress.com/item/32873382894.html) 42 | - [On/Off Switch](https://de.aliexpress.com/item/4000685483225.html) 43 | - [Diodes](https://de.aliexpress.com/item/32849879904.html) 44 | - [Sockets](https://de.aliexpress.com/item/4001122376295.html) 45 | - [Battery Connector/Adapter/Pins](https://de.aliexpress.com/item/1005004955655144.html) 46 | - [Nice!Nano Clone](https://de.aliexpress.com/item/1005006446457448.html) 47 | - [DSA Keycaps](https://de.aliexpress.com/item/1005006005905021.html) 48 | - [Akko Cream Blue](https://de.aliexpress.com/item/1005006382591392.html) 49 | 50 | ## Video on YouTube 51 | 52 | [Part 1](https://youtu.be/ohu4tZ4qov8) 53 | [Part 2](https://youtu.be/3RLsh07ZFMo) 54 | 55 | ![keyboard](./images/keyboard.jpeg) 56 | 57 | ## Thanks 58 | 59 | - Ergogen 60 | - Absolem Club Discord 61 | - V4 Migration Guide 62 | - Claw 63 | - MrKeyboard 64 | - Corne keyboard 65 | - ZMK 66 | - Miryoku ZMK 67 | -------------------------------------------------------------------------------- /ergogen/footprints/wuerth-434121025816.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | designator: 'S', 4 | reverse: true, 5 | r1: { type: 'net', value: 'r1' }, 6 | r2: { type: 'net', value: 'r2' }, 7 | }, 8 | body: p => ` 9 | (footprint 434121025816 (layer F.Cu) (tedit 63B6D2D4) 10 | ${p.at /* parametric position */} 11 | (descr "WS-TASV
SMT Tact Switch 6.0x3.8 mm,2 pins") 12 | (fp_text reference "${p.ref}" (at 0 0 ${p.rot}) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) 13 | (fp_text value "" (at 0 0 ${p.rot}) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) 14 | (fp_line (start -3.0 1.95) (end 3.0 1.95) (layer F.Fab) (width 0.1)) 15 | (fp_line (start 3.0 1.95) (end 3.0 -1.95) (layer F.Fab) (width 0.1)) 16 | (fp_line (start 3.0 -1.95) (end -3.0 -1.95) (layer F.Fab) (width 0.1)) 17 | (fp_line (start -3.0 -1.95) (end -3.0 1.95) (layer F.Fab) (width 0.1)) 18 | (fp_poly 19 | (pts 20 | (xy -4.2 -2.25) 21 | (xy 4.2 -2.25) 22 | (xy 4.2 2.25) 23 | (xy -4.2 2.25) 24 | ) (layer F.CrtYd) (width 0.1) 25 | ) 26 | 27 | (fp_line (start -3.1 -1.1) (end -3.1 -2.05) (layer B.SilkS) (width 0.2)) 28 | (fp_line (start -3.1 -2.05) (end 3.1 -2.05) (layer B.SilkS) (width 0.2)) 29 | (fp_line (start 3.1 -2.05) (end 3.1 -1.1) (layer B.SilkS) (width 0.2)) 30 | (fp_line (start -3.1 1.1) (end -3.1 2.05) (layer B.SilkS) (width 0.2)) 31 | (fp_line (start -3.1 2.05) (end 3.1 2.05) (layer B.SilkS) (width 0.2)) 32 | (fp_line (start 3.1 2.05) (end 3.1 1.1) (layer B.SilkS) (width 0.2)) 33 | (fp_circle (center 2.6 1.2) (end 2.5 1.2) (layer B.SilkS) (width 0.2)) 34 | 35 | (fp_line (start -3.1 -1.1) (end -3.1 -2.05) (layer F.SilkS) (width 0.2)) 36 | (fp_line (start -3.1 -2.05) (end 3.1 -2.05) (layer F.SilkS) (width 0.2)) 37 | (fp_line (start 3.1 -2.05) (end 3.1 -1.1) (layer F.SilkS) (width 0.2)) 38 | (fp_line (start -3.1 1.1) (end -3.1 2.05) (layer F.SilkS) (width 0.2)) 39 | (fp_line (start -3.1 2.05) (end 3.1 2.05) (layer F.SilkS) (width 0.2)) 40 | (fp_line (start 3.1 2.05) (end 3.1 1.1) (layer F.SilkS) (width 0.2)) 41 | (fp_circle (center -2.6 -1.2) (end -2.5 -1.2) (layer F.SilkS) (width 0.2)) 42 | 43 | (pad 1 thru_hole rect (at -3.25 0.0 ${p.rot}) (size 1.5 1.4) (drill 0.3) (layers *.Cu *.Mask) ${p.r1.str}) 44 | (pad 2 thru_hole rect (at 3.25 0.0 ${p.rot}) (size 1.5 1.4) (drill 0.3) (layers *.Cu *.Mask) ${p.r2.str}) 45 | ) 46 | ` 47 | } 48 | 49 | -------------------------------------------------------------------------------- /ergogen/footprints/sk6812mini.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | designator: 'LED', 4 | din: undefined, 5 | dout: undefined, 6 | cutout: false, 7 | VCC: { type: 'net', value: 'VCC' }, 8 | GND: { type: 'net', value: 'GND' } 9 | }, 10 | body: p => ` 11 | (module WS2812B 12 | ${p.at /* parametric position */} 13 | ${'' /* footprint reference */} 14 | (fp_text reference "${p.ref}" (at 0 0) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) 15 | (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) 16 | 17 | ${p.cutout ? ` 18 | (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer Edge.Cuts) (width 0.15)) 19 | (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer Edge.Cuts) (width 0.15)) 20 | (fp_line (start 1.75 1.75) (end 1.75 -1.75) (layer Edge.Cuts) (width 0.15)) 21 | (fp_line (start 1.75 -1.75) (end -1.75 -1.75) (layer Edge.Cuts) (width 0.15)) 22 | ` : ` 23 | (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 1.75 1.75) (end 1.75 -1.75) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 1.75 -1.75) (end -1.75 -1.75) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer B.SilkS) (width 0.15)) 28 | (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer B.SilkS) (width 0.15)) 29 | (fp_line (start 1.75 1.75) (end 1.75 -1.75) (layer B.SilkS) (width 0.15)) 30 | (fp_line (start 1.75 -1.75) (end -1.75 -1.75) (layer B.SilkS) (width 0.15)) 31 | `} 32 | 33 | (fp_poly (pts (xy 4 1.375) (xy 4 0.375) (xy 4.5 0.875)) (layer F.SilkS) (width 0.1)) 34 | (pad 1 smd rect (at -2.2 -0.875 ${p.rot}) (size 2.6 1) (layers F.Cu F.Paste F.Mask) ${p.VCC.str}) 35 | (pad 2 smd rect (at -2.2 0.875 ${p.rot}) (size 2.6 1) (layers F.Cu F.Paste F.Mask) ${p.dout.str}) 36 | (pad 3 smd rect (at 2.2 0.875 ${p.rot}) (size 2.6 1) (layers F.Cu F.Paste F.Mask) ${p.GND.str}) 37 | (pad 4 smd rect (at 2.2 -0.875 ${p.rot}) (size 2.6 1) (layers F.Cu F.Paste F.Mask) ${p.din.str}) 38 | 39 | (fp_poly (pts (xy 4 -1.375) (xy 4 -0.375) (xy 4.5 -0.875)) (layer B.SilkS) (width 0.1)) 40 | (pad 2 smd rect (at -2.2 -0.875 ${p.rot}) (size 2.6 1) (layers B.Cu B.Paste B.Mask) ${p.dout.str}) 41 | (pad 1 smd rect (at -2.2 0.875 ${p.rot}) (size 2.6 1) (layers B.Cu B.Paste B.Mask) ${p.VCC.str}) 42 | (pad 4 smd rect (at 2.2 0.875 ${p.rot}) (size 2.6 1) (layers B.Cu B.Paste B.Mask) ${p.din.str}) 43 | (pad 3 smd rect (at 2.2 -0.875 ${p.rot}) (size 2.6 1) (layers B.Cu B.Paste B.Mask) ${p.GND.str}) 44 | 45 | ) 46 | ` 47 | } 48 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-job.gbrjob: -------------------------------------------------------------------------------- 1 | { 2 | "Header": { 3 | "GenerationSoftware": { 4 | "Vendor": "KiCad", 5 | "Application": "Pcbnew", 6 | "Version": "8.0.3" 7 | }, 8 | "CreationDate": "2024-07-17T09:40:22+02:00" 9 | }, 10 | "GeneralSpecs": { 11 | "ProjectId": { 12 | "Name": "top_plate", 13 | "GUID": "746f705f-706c-4617-9465-2e6b69636164", 14 | "Revision": "rev?" 15 | }, 16 | "Size": { 17 | "X": 126.8922, 18 | "Y": 99.7532 19 | }, 20 | "LayerNumber": 2, 21 | "BoardThickness": 1.6, 22 | "Finish": "None" 23 | }, 24 | "DesignRules": [ 25 | { 26 | "Layers": "Outer", 27 | "PadToPad": 0.2, 28 | "PadToTrack": 0.2, 29 | "TrackToTrack": 0.2 30 | } 31 | ], 32 | "FilesAttributes": [ 33 | { 34 | "Path": "top_plate-F_Cu.gbr", 35 | "FileFunction": "Copper,L1,Top", 36 | "FilePolarity": "Positive" 37 | }, 38 | { 39 | "Path": "top_plate-B_Cu.gbr", 40 | "FileFunction": "Copper,L2,Bot", 41 | "FilePolarity": "Positive" 42 | }, 43 | { 44 | "Path": "top_plate-F_Paste.gbr", 45 | "FileFunction": "SolderPaste,Top", 46 | "FilePolarity": "Positive" 47 | }, 48 | { 49 | "Path": "top_plate-B_Paste.gbr", 50 | "FileFunction": "SolderPaste,Bot", 51 | "FilePolarity": "Positive" 52 | }, 53 | { 54 | "Path": "top_plate-F_Silkscreen.gbr", 55 | "FileFunction": "Legend,Top", 56 | "FilePolarity": "Positive" 57 | }, 58 | { 59 | "Path": "top_plate-B_Silkscreen.gbr", 60 | "FileFunction": "Legend,Bot", 61 | "FilePolarity": "Positive" 62 | }, 63 | { 64 | "Path": "top_plate-F_Mask.gbr", 65 | "FileFunction": "SolderMask,Top", 66 | "FilePolarity": "Negative" 67 | }, 68 | { 69 | "Path": "top_plate-B_Mask.gbr", 70 | "FileFunction": "SolderMask,Bot", 71 | "FilePolarity": "Negative" 72 | }, 73 | { 74 | "Path": "top_plate-Edge_Cuts.gbr", 75 | "FileFunction": "Profile", 76 | "FilePolarity": "Positive" 77 | } 78 | ], 79 | "MaterialStackup": [ 80 | { 81 | "Type": "Legend", 82 | "Name": "Top Silk Screen" 83 | }, 84 | { 85 | "Type": "SolderPaste", 86 | "Name": "Top Solder Paste" 87 | }, 88 | { 89 | "Type": "SolderMask", 90 | "Thickness": 0.01, 91 | "Name": "Top Solder Mask" 92 | }, 93 | { 94 | "Type": "Copper", 95 | "Thickness": 0.035, 96 | "Name": "F.Cu" 97 | }, 98 | { 99 | "Type": "Dielectric", 100 | "Thickness": 1.51, 101 | "Material": "FR4", 102 | "Name": "F.Cu/B.Cu", 103 | "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" 104 | }, 105 | { 106 | "Type": "Copper", 107 | "Thickness": 0.035, 108 | "Name": "B.Cu" 109 | }, 110 | { 111 | "Type": "SolderMask", 112 | "Thickness": 0.01, 113 | "Name": "Bottom Solder Mask" 114 | }, 115 | { 116 | "Type": "SolderPaste", 117 | "Name": "Bottom Solder Paste" 118 | }, 119 | { 120 | "Type": "Legend", 121 | "Name": "Bottom Silk Screen" 122 | } 123 | ] 124 | } 125 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-job.gbrjob: -------------------------------------------------------------------------------- 1 | { 2 | "Header": { 3 | "GenerationSoftware": { 4 | "Vendor": "KiCad", 5 | "Application": "Pcbnew", 6 | "Version": "8.0.3" 7 | }, 8 | "CreationDate": "2024-07-17T09:05:20+02:00" 9 | }, 10 | "GeneralSpecs": { 11 | "ProjectId": { 12 | "Name": "avocado", 13 | "GUID": "61766f63-6164-46f2-9e6b-696361645f70", 14 | "Revision": "rev?" 15 | }, 16 | "Size": { 17 | "X": 128.312, 18 | "Y": 101.6344 19 | }, 20 | "LayerNumber": 2, 21 | "BoardThickness": 1.6, 22 | "Finish": "None" 23 | }, 24 | "DesignRules": [ 25 | { 26 | "Layers": "Outer", 27 | "PadToPad": 0.2, 28 | "PadToTrack": 0.2, 29 | "TrackToTrack": 0.2, 30 | "MinLineWidth": 0.2 31 | } 32 | ], 33 | "FilesAttributes": [ 34 | { 35 | "Path": "avocado-F_Cu.gbr", 36 | "FileFunction": "Copper,L1,Top", 37 | "FilePolarity": "Positive" 38 | }, 39 | { 40 | "Path": "avocado-B_Cu.gbr", 41 | "FileFunction": "Copper,L2,Bot", 42 | "FilePolarity": "Positive" 43 | }, 44 | { 45 | "Path": "avocado-F_Paste.gbr", 46 | "FileFunction": "SolderPaste,Top", 47 | "FilePolarity": "Positive" 48 | }, 49 | { 50 | "Path": "avocado-B_Paste.gbr", 51 | "FileFunction": "SolderPaste,Bot", 52 | "FilePolarity": "Positive" 53 | }, 54 | { 55 | "Path": "avocado-F_Silkscreen.gbr", 56 | "FileFunction": "Legend,Top", 57 | "FilePolarity": "Positive" 58 | }, 59 | { 60 | "Path": "avocado-B_Silkscreen.gbr", 61 | "FileFunction": "Legend,Bot", 62 | "FilePolarity": "Positive" 63 | }, 64 | { 65 | "Path": "avocado-F_Mask.gbr", 66 | "FileFunction": "SolderMask,Top", 67 | "FilePolarity": "Negative" 68 | }, 69 | { 70 | "Path": "avocado-B_Mask.gbr", 71 | "FileFunction": "SolderMask,Bot", 72 | "FilePolarity": "Negative" 73 | }, 74 | { 75 | "Path": "avocado-Edge_Cuts.gbr", 76 | "FileFunction": "Profile", 77 | "FilePolarity": "Positive" 78 | } 79 | ], 80 | "MaterialStackup": [ 81 | { 82 | "Type": "Legend", 83 | "Name": "Top Silk Screen" 84 | }, 85 | { 86 | "Type": "SolderPaste", 87 | "Name": "Top Solder Paste" 88 | }, 89 | { 90 | "Type": "SolderMask", 91 | "Thickness": 0.01, 92 | "Name": "Top Solder Mask" 93 | }, 94 | { 95 | "Type": "Copper", 96 | "Thickness": 0.035, 97 | "Name": "F.Cu" 98 | }, 99 | { 100 | "Type": "Dielectric", 101 | "Thickness": 1.51, 102 | "Material": "FR4", 103 | "Name": "F.Cu/B.Cu", 104 | "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" 105 | }, 106 | { 107 | "Type": "Copper", 108 | "Thickness": 0.035, 109 | "Name": "B.Cu" 110 | }, 111 | { 112 | "Type": "SolderMask", 113 | "Thickness": 0.01, 114 | "Name": "Bottom Solder Mask" 115 | }, 116 | { 117 | "Type": "SolderPaste", 118 | "Name": "Bottom Solder Paste" 119 | }, 120 | { 121 | "Type": "Legend", 122 | "Name": "Bottom Silk Screen" 123 | } 124 | ] 125 | } 126 | -------------------------------------------------------------------------------- /ergogen/footprints/mounting_hole.js: -------------------------------------------------------------------------------- 1 | // Author: @infused-kim 2 | // 3 | // Description: 4 | // Simple mounting hole with gold rim. 5 | // 6 | // Parameters: 7 | // - outline: The width of the gold rim around the hole (Default: 0.8mm) 8 | // - drill: The actual size for the hole (Default 2.2mm - for m2 screws) 9 | // - drill_y: The height if you want an oval hole (Default: off) 10 | 11 | module.exports = { 12 | params: { 13 | designator: "H", 14 | outline: 0.8, 15 | drill: 2.2, 16 | drill_y: 0, 17 | }, 18 | body: (p) => { 19 | if (p.drill_y == 0) { 20 | p.drill_y = p.drill; 21 | } 22 | 23 | const size_x = p.drill + p.outline * 2; 24 | const size_y = p.drill_y + p.outline * 2; 25 | 26 | const courtyard_offset = 0.25; 27 | const courtyard_x = size_x / 2 + courtyard_offset; 28 | const courtyard_y = size_y / 2 + courtyard_offset; 29 | 30 | const top = ` 31 | (module mounting_hole (layer F.Cu) (tedit 64B5A986) 32 | ${p.at /* parametric position */} 33 | (fp_text reference "${p.ref}" (at 0 3) (layer F.SilkS) ${ 34 | p.ref_hide 35 | } 36 | (effects (font (size 1 1) (thickness 0.15))) 37 | ) 38 | `; 39 | 40 | const pad_circle = ` 41 | (pad "" thru_hole circle (at 0 0 180) (size ${size_x} ${size_y}) (drill ${p.drill}) (layers *.Cu *.Mask)) 42 | `; 43 | const courtyard_circle = ` 44 | (fp_circle (center 0 0) (end -${courtyard_x} 0) (layer F.CrtYd) (width 0.05)) 45 | (fp_circle (center 0 0) (end -${courtyard_x} 0) (layer B.CrtYd) (width 0.05)) 46 | `; 47 | const pad_oval = ` 48 | (pad "" thru_hole oval (at 0 0 180) (size ${size_x} ${size_y}) (drill oval ${p.drill} ${p.drill_y}) (layers *.Cu *.Mask)) 49 | `; 50 | const courtyard_oval = ` 51 | (fp_line (start ${courtyard_x} -${courtyard_y}) (end ${courtyard_x} ${courtyard_y}) (layer F.CrtYd) (width 0.05)) 52 | (fp_line (start -${courtyard_x} -${courtyard_y}) (end -${courtyard_x} ${courtyard_y}) (layer F.CrtYd) (width 0.05)) 53 | (fp_line (start -${courtyard_x} ${courtyard_y}) (end ${courtyard_x} ${courtyard_y}) (layer F.CrtYd) (width 0.05)) 54 | (fp_line (start -${courtyard_x} -${courtyard_y}) (end ${courtyard_x} -${courtyard_y}) (layer F.CrtYd) (width 0.05)) 55 | (fp_line (start -${courtyard_x} ${courtyard_y}) (end ${courtyard_x} ${courtyard_y}) (layer B.CrtYd) (width 0.05)) 56 | (fp_line (start -${courtyard_x} ${courtyard_y}) (end -${courtyard_x} -${courtyard_y}) (layer B.CrtYd) (width 0.05)) 57 | (fp_line (start -${courtyard_x} -${courtyard_y}) (end ${courtyard_x} -${courtyard_y}) (layer B.CrtYd) (width 0.05)) 58 | (fp_line (start ${courtyard_x} ${courtyard_y}) (end ${courtyard_x} -${courtyard_y}) (layer B.CrtYd) (width 0.05)) 59 | `; 60 | 61 | const bottom = ` 62 | ) 63 | `; 64 | 65 | let final = top; 66 | if (size_x == size_y) { 67 | final += pad_circle; 68 | final += courtyard_circle; 69 | } else { 70 | final += pad_oval; 71 | final += courtyard_oval; 72 | } 73 | 74 | final += bottom; 75 | 76 | return final; 77 | }, 78 | }; 79 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-job.gbrjob: -------------------------------------------------------------------------------- 1 | { 2 | "Header": { 3 | "GenerationSoftware": { 4 | "Vendor": "KiCad", 5 | "Application": "Pcbnew", 6 | "Version": "8.0.3" 7 | }, 8 | "CreationDate": "2024-07-17T09:45:22+02:00" 9 | }, 10 | "GeneralSpecs": { 11 | "ProjectId": { 12 | "Name": "bottom_plate", 13 | "GUID": "626f7474-6f6d-45f7-906c-6174652e6b69", 14 | "Revision": "rev?" 15 | }, 16 | "Size": { 17 | "X": 128.312, 18 | "Y": 101.6344 19 | }, 20 | "LayerNumber": 2, 21 | "BoardThickness": 1.6, 22 | "Finish": "None" 23 | }, 24 | "DesignRules": [ 25 | { 26 | "Layers": "Outer", 27 | "PadToPad": 0.2, 28 | "PadToTrack": 0.2, 29 | "TrackToTrack": 0.2 30 | } 31 | ], 32 | "FilesAttributes": [ 33 | { 34 | "Path": "bottom_plate-F_Cu.gbr", 35 | "FileFunction": "Copper,L1,Top", 36 | "FilePolarity": "Positive" 37 | }, 38 | { 39 | "Path": "bottom_plate-B_Cu.gbr", 40 | "FileFunction": "Copper,L2,Bot", 41 | "FilePolarity": "Positive" 42 | }, 43 | { 44 | "Path": "bottom_plate-F_Paste.gbr", 45 | "FileFunction": "SolderPaste,Top", 46 | "FilePolarity": "Positive" 47 | }, 48 | { 49 | "Path": "bottom_plate-B_Paste.gbr", 50 | "FileFunction": "SolderPaste,Bot", 51 | "FilePolarity": "Positive" 52 | }, 53 | { 54 | "Path": "bottom_plate-F_Silkscreen.gbr", 55 | "FileFunction": "Legend,Top", 56 | "FilePolarity": "Positive" 57 | }, 58 | { 59 | "Path": "bottom_plate-B_Silkscreen.gbr", 60 | "FileFunction": "Legend,Bot", 61 | "FilePolarity": "Positive" 62 | }, 63 | { 64 | "Path": "bottom_plate-F_Mask.gbr", 65 | "FileFunction": "SolderMask,Top", 66 | "FilePolarity": "Negative" 67 | }, 68 | { 69 | "Path": "bottom_plate-B_Mask.gbr", 70 | "FileFunction": "SolderMask,Bot", 71 | "FilePolarity": "Negative" 72 | }, 73 | { 74 | "Path": "bottom_plate-Edge_Cuts.gbr", 75 | "FileFunction": "Profile", 76 | "FilePolarity": "Positive" 77 | } 78 | ], 79 | "MaterialStackup": [ 80 | { 81 | "Type": "Legend", 82 | "Name": "Top Silk Screen" 83 | }, 84 | { 85 | "Type": "SolderPaste", 86 | "Name": "Top Solder Paste" 87 | }, 88 | { 89 | "Type": "SolderMask", 90 | "Thickness": 0.01, 91 | "Name": "Top Solder Mask" 92 | }, 93 | { 94 | "Type": "Copper", 95 | "Thickness": 0.035, 96 | "Name": "F.Cu" 97 | }, 98 | { 99 | "Type": "Dielectric", 100 | "Thickness": 1.51, 101 | "Material": "FR4", 102 | "Name": "F.Cu/B.Cu", 103 | "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" 104 | }, 105 | { 106 | "Type": "Copper", 107 | "Thickness": 0.035, 108 | "Name": "B.Cu" 109 | }, 110 | { 111 | "Type": "SolderMask", 112 | "Thickness": 0.01, 113 | "Name": "Bottom Solder Mask" 114 | }, 115 | { 116 | "Type": "SolderPaste", 117 | "Name": "Bottom Solder Paste" 118 | }, 119 | { 120 | "Type": "Legend", 121 | "Name": "Bottom Silk Screen" 122 | } 123 | ] 124 | } 125 | -------------------------------------------------------------------------------- /ergogen/images/avocado1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-Edge_Cuts.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:05:20+02:00*% 3 | %TF.ProjectId,avocado,61766f63-6164-46f2-9e6b-696361645f70,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Profile,NP*% 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:05:20* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %TA.AperFunction,Profile*% 14 | %ADD10C,0.150000*% 15 | %TD*% 16 | G04 APERTURE END LIST* 17 | D10* 18 | X137583031Y-83773789D02* 19 | X143578941Y-93810828D01* 20 | X143753009Y-95487645D02* 21 | X137283806Y-114275574D01* 22 | X134741633Y-115515474D02* 23 | X118685729Y-109986983D01* 24 | X118650024Y-109974309D02* 25 | X113028336Y-107918684D01* 26 | X112671590Y-107824476D02* 27 | X97995106Y-105368475D01* 28 | X97728694Y-105342061D02* 29 | X91731832Y-105151014D01* 30 | X91668149Y-105150000D02* 31 | X73604729Y-105150000D01* 32 | X72102647Y-104470511D02* 33 | X58097353Y-88539489D01* 34 | X17700000Y-87860000D02* 35 | X56595271Y-87860000D01* 36 | X15700000Y-85860000D02* 37 | X15700000Y-29060000D01* 38 | X17700000Y-27060000D02* 39 | X32700000Y-27060000D01* 40 | X34700000Y-25060000D02* 41 | X34700000Y-21460000D01* 42 | X36700000Y-19460000D02* 43 | X51700000Y-19460000D01* 44 | X53700000Y-17460000D02* 45 | X53700000Y-16140000D01* 46 | X55700000Y-14140000D02* 47 | X74500000Y-14140000D01* 48 | X76500000Y-16140000D02* 49 | X76500000Y-18410000D01* 50 | X78500000Y-20410000D02* 51 | X92715260Y-20410000D01* 52 | X94195140Y-21064654D02* 53 | X95500000Y-22500000D01* 54 | X95500000Y-22500000D02* 55 | X111363932Y-22500000D01* 56 | X113152786Y-23605573D02* 57 | X113947214Y-25194427D01* 58 | X115736068Y-26300000D02* 59 | X135300000Y-26300000D01* 60 | X137300000Y-28300000D02* 61 | X137300000Y-82748109D01* 62 | X143578941Y-93810829D02* 63 | G75* 64 | G02* 65 | X143753009Y-95487645I-1716969J-1025679D01* 66 | G01* 67 | X137283806Y-114275573D02* 68 | G75* 69 | G02* 70 | X134741633Y-115515474I-1891037J651136D01* 71 | G01* 72 | X118685730Y-109986983D02* 73 | G75* 74 | G02* 75 | X118650024Y-109974309I651136J1891037D01* 76 | G01* 77 | X112671589Y-107824476D02* 78 | G75* 79 | G02* 80 | X113028336Y-107918684I-330095J-1972571D01* 81 | G01* 82 | X97728694Y-105342060D02* 83 | G75* 84 | G02* 85 | X97995106Y-105368475I-63683J-1998986D01* 86 | G01* 87 | X91668149Y-105150000D02* 88 | G75* 89 | G02* 90 | X91731832Y-105151014I0J-2000000D01* 91 | G01* 92 | X73604729Y-105150000D02* 93 | G75* 94 | G02* 95 | X72102647Y-104470511I0J2000000D01* 96 | G01* 97 | X56595271Y-87860000D02* 98 | G75* 99 | G02* 100 | X58097353Y-88539489I0J-2000000D01* 101 | G01* 102 | X17700000Y-87860000D02* 103 | G75* 104 | G02* 105 | X15700000Y-85860000I0J2000000D01* 106 | G01* 107 | X15700000Y-29060000D02* 108 | G75* 109 | G02* 110 | X17700000Y-27060000I2000000J0D01* 111 | G01* 112 | X34700000Y-25060000D02* 113 | G75* 114 | G02* 115 | X32700000Y-27060000I-2000000J0D01* 116 | G01* 117 | X34700000Y-21460000D02* 118 | G75* 119 | G02* 120 | X36700000Y-19460000I2000000J0D01* 121 | G01* 122 | X53700000Y-17460000D02* 123 | G75* 124 | G02* 125 | X51700000Y-19460000I-2000000J0D01* 126 | G01* 127 | X53700000Y-16140000D02* 128 | G75* 129 | G02* 130 | X55700000Y-14140000I2000000J0D01* 131 | G01* 132 | X74500000Y-14140000D02* 133 | G75* 134 | G02* 135 | X76500000Y-16140000I0J-2000000D01* 136 | G01* 137 | X78500000Y-20410000D02* 138 | G75* 139 | G02* 140 | X76500000Y-18410000I0J2000000D01* 141 | G01* 142 | X92715260Y-20410000D02* 143 | G75* 144 | G02* 145 | X94195140Y-21064654I0J-2000000D01* 146 | G01* 147 | X111363932Y-22500000D02* 148 | G75* 149 | G02* 150 | X113152786Y-23605573I0J-2000000D01* 151 | G01* 152 | X115736068Y-26300000D02* 153 | G75* 154 | G02* 155 | X113947214Y-25194427I0J2000000D01* 156 | G01* 157 | X135300000Y-26300000D02* 158 | G75* 159 | G02* 160 | X137300000Y-28300000I0J-2000000D01* 161 | G01* 162 | X137583031Y-83773789D02* 163 | G75* 164 | G02* 165 | X137299999Y-82748109I1716969J1025680D01* 166 | G01* 167 | M02* 168 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-Edge_Cuts.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Profile,NP*% 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %TA.AperFunction,Profile*% 14 | %ADD10C,0.150000*% 15 | %TD*% 16 | G04 APERTURE END LIST* 17 | D10* 18 | X136883031Y-84813789D02* 19 | X142878941Y-94850828D01* 20 | X143053009Y-96527645D02* 21 | X136583806Y-115315574D01* 22 | X134041633Y-116555474D02* 23 | X117985729Y-111026983D01* 24 | X117950024Y-111014309D02* 25 | X112328336Y-108958684D01* 26 | X111971590Y-108864476D02* 27 | X97295106Y-106408475D01* 28 | X97028694Y-106382061D02* 29 | X91031832Y-106191014D01* 30 | X90968149Y-106190000D02* 31 | X72904729Y-106190000D01* 32 | X71402647Y-105510511D02* 33 | X57397353Y-89579489D01* 34 | X17000000Y-88900000D02* 35 | X55895271Y-88900000D01* 36 | X15000000Y-86900000D02* 37 | X15000000Y-30100000D01* 38 | X17000000Y-28100000D02* 39 | X32000000Y-28100000D01* 40 | X34000000Y-26100000D02* 41 | X34000000Y-22500000D01* 42 | X36000000Y-20500000D02* 43 | X51000000Y-20500000D01* 44 | X53000000Y-18500000D02* 45 | X53000000Y-17180000D01* 46 | X55000000Y-15180000D02* 47 | X73800000Y-15180000D01* 48 | X75800000Y-17180000D02* 49 | X75800000Y-19450000D01* 50 | X77800000Y-21450000D02* 51 | X92015260Y-21450000D01* 52 | X93495140Y-22104654D02* 53 | X94800000Y-23540000D01* 54 | X94800000Y-23540000D02* 55 | X110663932Y-23540000D01* 56 | X112452786Y-24645573D02* 57 | X113247214Y-26234427D01* 58 | X115036068Y-27340000D02* 59 | X134600000Y-27340000D01* 60 | X136600000Y-29340000D02* 61 | X136600000Y-83788109D01* 62 | X142878941Y-94850829D02* 63 | G75* 64 | G02* 65 | X143053009Y-96527645I-1716969J-1025679D01* 66 | G01* 67 | X136583806Y-115315573D02* 68 | G75* 69 | G02* 70 | X134041633Y-116555474I-1891037J651136D01* 71 | G01* 72 | X117985730Y-111026983D02* 73 | G75* 74 | G02* 75 | X117950024Y-111014309I651136J1891037D01* 76 | G01* 77 | X111971589Y-108864476D02* 78 | G75* 79 | G02* 80 | X112328336Y-108958684I-330095J-1972571D01* 81 | G01* 82 | X97028694Y-106382060D02* 83 | G75* 84 | G02* 85 | X97295106Y-106408475I-63683J-1998986D01* 86 | G01* 87 | X90968149Y-106190000D02* 88 | G75* 89 | G02* 90 | X91031832Y-106191014I0J-2000000D01* 91 | G01* 92 | X72904729Y-106190000D02* 93 | G75* 94 | G02* 95 | X71402647Y-105510511I0J2000000D01* 96 | G01* 97 | X55895271Y-88900000D02* 98 | G75* 99 | G02* 100 | X57397353Y-89579489I0J-2000000D01* 101 | G01* 102 | X17000000Y-88900000D02* 103 | G75* 104 | G02* 105 | X15000000Y-86900000I0J2000000D01* 106 | G01* 107 | X15000000Y-30100000D02* 108 | G75* 109 | G02* 110 | X17000000Y-28100000I2000000J0D01* 111 | G01* 112 | X34000000Y-26100000D02* 113 | G75* 114 | G02* 115 | X32000000Y-28100000I-2000000J0D01* 116 | G01* 117 | X34000000Y-22500000D02* 118 | G75* 119 | G02* 120 | X36000000Y-20500000I2000000J0D01* 121 | G01* 122 | X53000000Y-18500000D02* 123 | G75* 124 | G02* 125 | X51000000Y-20500000I-2000000J0D01* 126 | G01* 127 | X53000000Y-17180000D02* 128 | G75* 129 | G02* 130 | X55000000Y-15180000I2000000J0D01* 131 | G01* 132 | X73800000Y-15180000D02* 133 | G75* 134 | G02* 135 | X75800000Y-17180000I0J-2000000D01* 136 | G01* 137 | X77800000Y-21450000D02* 138 | G75* 139 | G02* 140 | X75800000Y-19450000I0J2000000D01* 141 | G01* 142 | X92015260Y-21450000D02* 143 | G75* 144 | G02* 145 | X93495140Y-22104654I0J-2000000D01* 146 | G01* 147 | X110663932Y-23540000D02* 148 | G75* 149 | G02* 150 | X112452786Y-24645573I0J-2000000D01* 151 | G01* 152 | X115036068Y-27340000D02* 153 | G75* 154 | G02* 155 | X113247214Y-26234427I0J2000000D01* 156 | G01* 157 | X134600000Y-27340000D02* 158 | G75* 159 | G02* 160 | X136600000Y-29340000I0J-2000000D01* 161 | G01* 162 | X136883031Y-84813789D02* 163 | G75* 164 | G02* 165 | X136599999Y-83788109I1716969J1025680D01* 166 | G01* 167 | M02* 168 | -------------------------------------------------------------------------------- /ergogen/gerbers/main_pcb/avocado-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad 8.0.3} date 2024-07-17T09:05:14+0200 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2024-07-17T09:05:14+02:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.0118 11 | ; #@! TA.AperFunction,Plated,PTH,ViaDrill 12 | T2C0.0157 13 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 14 | T3C0.0157 15 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 16 | T4C0.0295 17 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 18 | T5C0.0394 19 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 20 | T6C0.0590 21 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 22 | T7C0.0866 23 | % 24 | G90 25 | G05 26 | T1 27 | X0.7677Y-1.522 28 | X0.7677Y-1.6323 29 | X0.7677Y-2.2701 30 | X0.7677Y-2.3803 31 | X0.7677Y-3.0181 32 | X0.7677Y-3.1283 33 | X1.5157Y-1.2228 34 | X1.5157Y-1.3331 35 | X1.5157Y-1.9709 36 | X1.5157Y-2.0811 37 | X1.5157Y-2.7189 38 | X1.5157Y-2.8291 39 | X2.2638Y-1.0134 40 | X2.2638Y-1.1236 41 | X2.2638Y-1.7614 42 | X2.2638Y-1.8717 43 | X2.2638Y-2.5094 44 | X2.2638Y-2.6197 45 | X3.0118Y-1.2602 46 | X3.0118Y-1.3705 47 | X3.0118Y-2.0083 48 | X3.0118Y-2.1185 49 | X3.0118Y-2.7563 50 | X3.0118Y-2.8665 51 | X3.0118Y-3.6988 52 | X3.0118Y-3.8091 53 | X3.7598Y-1.3425 54 | X3.7598Y-1.4528 55 | X3.7598Y-2.0906 56 | X3.7598Y-2.2008 57 | X3.7598Y-2.8386 58 | X3.7598Y-2.9488 59 | X3.9074Y-3.8213 60 | X3.9256Y-3.7126 61 | X4.7796Y-4.0173 62 | X4.8155Y-3.913 63 | X5.2402Y-2.939 64 | X5.2402Y-3.1949 65 | T2 66 | X5.0787Y-2.6181 67 | X5.0787Y-2.7165 68 | T3 69 | X4.7968Y-1.2768 70 | X4.7968Y-1.3768 71 | X4.7968Y-1.4768 72 | X4.7968Y-1.5768 73 | X4.7968Y-1.6768 74 | X4.7968Y-1.7768 75 | X4.7968Y-1.8768 76 | X4.7968Y-1.9768 77 | X4.7968Y-2.0768 78 | X4.7968Y-2.1768 79 | X4.7968Y-2.2768 80 | X4.7968Y-2.3768 81 | X5.0536Y-1.2768 82 | X5.0536Y-1.3768 83 | X5.0536Y-1.4768 84 | X5.0536Y-1.5768 85 | X5.0536Y-1.6768 86 | X5.0536Y-1.7768 87 | X5.0536Y-1.8768 88 | X5.0536Y-1.9768 89 | X5.0536Y-2.0768 90 | X5.0536Y-2.1768 91 | X5.0536Y-2.2768 92 | X5.0536Y-2.3768 93 | T4 94 | X4.8071Y-2.9094 95 | X4.8858Y-2.9094 96 | T5 97 | X4.6252Y-1.2768 98 | X4.6252Y-1.3768 99 | X4.6252Y-1.4768 100 | X4.6252Y-1.5768 101 | X4.6252Y-1.6768 102 | X4.6252Y-1.7768 103 | X4.6252Y-1.8768 104 | X4.6252Y-1.9768 105 | X4.6252Y-2.0768 106 | X4.6252Y-2.1768 107 | X4.6252Y-2.2768 108 | X4.6252Y-2.3768 109 | X5.2252Y-1.2768 110 | X5.2252Y-1.3768 111 | X5.2252Y-1.4768 112 | X5.2252Y-1.5768 113 | X5.2252Y-1.6768 114 | X5.2252Y-1.7768 115 | X5.2252Y-1.8768 116 | X5.2252Y-1.9768 117 | X5.2252Y-2.0768 118 | X5.2252Y-2.1768 119 | X5.2252Y-2.2768 120 | X5.2252Y-2.3768 121 | T6 122 | X0.9169Y-1.4142 123 | X0.9169Y-2.1622 124 | X0.9169Y-2.9102 125 | X0.9669Y-1.3142 126 | X0.9669Y-2.0622 127 | X0.9669Y-2.8102 128 | X1.1669Y-1.3142 129 | X1.1669Y-2.0622 130 | X1.1669Y-2.8102 131 | X1.2169Y-1.4142 132 | X1.2169Y-2.1622 133 | X1.2169Y-2.9102 134 | X1.665Y-1.115 135 | X1.665Y-1.863 136 | X1.665Y-2.611 137 | X1.715Y-1.015 138 | X1.715Y-1.763 139 | X1.715Y-2.511 140 | X1.915Y-1.015 141 | X1.915Y-1.763 142 | X1.915Y-2.511 143 | X1.965Y-1.115 144 | X1.965Y-1.863 145 | X1.965Y-2.611 146 | X2.413Y-0.9055 147 | X2.413Y-1.6535 148 | X2.413Y-2.4016 149 | X2.463Y-0.8055 150 | X2.463Y-1.5535 151 | X2.463Y-2.3016 152 | X2.663Y-0.8055 153 | X2.663Y-1.5535 154 | X2.663Y-2.3016 155 | X2.713Y-0.9055 156 | X2.713Y-1.6535 157 | X2.713Y-2.4016 158 | X3.161Y-1.1524 159 | X3.161Y-1.9004 160 | X3.161Y-2.6484 161 | X3.161Y-3.5909 162 | X3.211Y-1.0524 163 | X3.211Y-1.8004 164 | X3.211Y-2.5484 165 | X3.211Y-3.4909 166 | X3.411Y-1.0524 167 | X3.411Y-1.8004 168 | X3.411Y-2.5484 169 | X3.411Y-3.4909 170 | X3.461Y-1.1524 171 | X3.461Y-1.9004 172 | X3.461Y-2.6484 173 | X3.461Y-3.5909 174 | X3.9091Y-1.2346 175 | X3.9091Y-1.9827 176 | X3.9091Y-2.7307 177 | X3.9591Y-1.1346 178 | X3.9591Y-1.8827 179 | X3.9591Y-2.6307 180 | X4.0906Y-3.6308 181 | X4.1564Y-3.5405 182 | X4.1591Y-1.1346 183 | X4.1591Y-1.8827 184 | X4.1591Y-2.6307 185 | X4.2091Y-1.2346 186 | X4.2091Y-1.9827 187 | X4.2091Y-2.7307 188 | X4.3537Y-3.5735 189 | X4.3865Y-3.6803 190 | X4.9917Y-3.8596 191 | X5.0716Y-3.7813 192 | X5.2607Y-3.8465 193 | X5.2754Y-3.9573 194 | T7 195 | X1.4672Y-1.5837 196 | X1.4672Y-2.3318 197 | X3.685Y-1.6675 198 | X3.685Y-2.4156 199 | X4.6615Y-3.8786 200 | M30 201 | -------------------------------------------------------------------------------- /ergogen/footprints/pcm12.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | designator: 'T', 4 | from: { type: 'net', value: 'from' }, 5 | to: { type: 'net', value: 'to' }, 6 | }, 7 | body: p => ` 8 | (module Button_Switch_SMD:SW_SPDT_PCM12 (layer F.Cu) (tedit 5A02FC95) 9 | ${p.at /* parametric position */} 10 | (descr "Ultraminiature Surface Mount Slide Switch, right-angle, https://www.ckswitches.com/media/1424/pcm.pdf") 11 | (fp_text reference "${p.ref}" (at 0 0 ${p.rot}) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) 12 | (fp_text value "" (at 0 0 ${p.rot}) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) 13 | (attr smd) 14 | (fp_line (start -4.4 2.1) (end -4.4 -2.45) (layer F.CrtYd) (width 0.05)) 15 | (fp_line (start -1.65 2.1) (end -4.4 2.1) (layer F.CrtYd) (width 0.05)) 16 | (fp_line (start -1.65 3.4) (end -1.65 2.1) (layer F.CrtYd) (width 0.05)) 17 | (fp_line (start 1.65 3.4) (end -1.65 3.4) (layer F.CrtYd) (width 0.05)) 18 | (fp_line (start 1.65 2.1) (end 1.65 3.4) (layer F.CrtYd) (width 0.05)) 19 | (fp_line (start 4.4 2.1) (end 1.65 2.1) (layer F.CrtYd) (width 0.05)) 20 | (fp_line (start 4.4 -2.45) (end 4.4 2.1) (layer F.CrtYd) (width 0.05)) 21 | (fp_line (start -4.4 -2.45) (end 4.4 -2.45) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start 3.35 -1) (end -3.35 -1) (layer F.Fab) (width 0.1)) 23 | (fp_line (start 3.35 1.6) (end 3.35 -1) (layer F.Fab) (width 0.1)) 24 | (fp_line (start -3.35 1.6) (end 3.35 1.6) (layer F.Fab) (width 0.1)) 25 | (fp_line (start -3.35 -1) (end -3.35 1.6) (layer F.Fab) (width 0.1)) 26 | (fp_line (start -0.1 2.9) (end -0.1 1.6) (layer F.Fab) (width 0.1)) 27 | (fp_line (start -0.15 2.95) (end -0.1 2.9) (layer F.Fab) (width 0.1)) 28 | (fp_line (start -0.35 3.15) (end -0.15 2.95) (layer F.Fab) (width 0.1)) 29 | (fp_line (start -1.2 3.15) (end -0.35 3.15) (layer F.Fab) (width 0.1)) 30 | (fp_line (start -1.4 2.95) (end -1.2 3.15) (layer F.Fab) (width 0.1)) 31 | (fp_line (start -1.4 1.65) (end -1.4 2.95) (layer F.Fab) (width 0.1)) 32 | (fp_text user %R (at 0 -3.2) (layer F.Fab) 33 | (effects (font (size 1 1) (thickness 0.15))) 34 | ) 35 | 36 | 37 | (pad "" np_thru_hole circle (at -1.5 0.33 ${p.rot}) (size 0.9 0.9) (drill 0.9) (layers *.Cu *.Mask)) 38 | (pad "" np_thru_hole circle (at 1.5 0.33 ${p.rot}) (size 0.9 0.9) (drill 0.9) (layers *.Cu *.Mask)) 39 | (pad 1 smd rect (at -2.25 -1.43 ${p.rot}) (size 0.7 1.5) (layers F.Cu F.Paste F.Mask) ${p.from.str}) 40 | 41 | (pad 2 smd rect (at 0.75 -1.43 ${p.rot}) (size 0.7 1.5) (layers F.Cu F.Paste F.Mask) ${p.to.str}) 42 | (pad "" smd rect (at 2.25 -1.43 ${p.rot}) (size 0.7 1.5) (layers F.Cu F.Paste F.Mask)) 43 | (pad "" smd rect (at -3.65 1.43 ${p.rot}) (size 1 0.8) (layers F.Cu F.Paste F.Mask)) 44 | (pad "" smd rect (at 3.65 1.43 ${p.rot}) (size 1 0.8) (layers F.Cu F.Paste F.Mask)) 45 | (pad "" smd rect (at 3.65 -0.78 ${p.rot}) (size 1 0.8) (layers F.Cu F.Paste F.Mask)) 46 | (pad "" smd rect (at -3.65 -0.78 ${p.rot}) (size 1 0.8) (layers F.Cu F.Paste F.Mask)) 47 | 48 | (pad "" np_thru_hole circle (at -1.5 0.33 ${p.rot}) (size 0.9 0.9) (drill 0.9) (layers *.Cu *.Mask)) 49 | (pad "" np_thru_hole circle (at 1.5 0.33 ${p.rot}) (size 0.9 0.9) (drill 0.9) (layers *.Cu *.Mask)) 50 | (pad 1 smd rect (at 2.25 -1.43 ${p.rot}) (size 0.7 1.5) (layers B.Cu B.Paste B.Mask) ${p.from.str}) 51 | 52 | (pad 2 smd rect (at -0.75 -1.43 ${p.rot}) (size 0.7 1.5) (layers B.Cu B.Paste B.Mask) ${p.to.str}) 53 | (pad "" smd rect (at -2.25 -1.43 ${p.rot}) (size 0.7 1.5) (layers B.Cu B.Paste B.Mask)) 54 | (pad "" smd rect (at 3.65 1.43 ${p.rot}) (size 1 0.8) (layers B.Cu B.Paste B.Mask)) 55 | (pad "" smd rect (at -3.65 1.43 ${p.rot}) (size 1 0.8) (layers B.Cu B.Paste B.Mask)) 56 | (pad "" smd rect (at -3.65 -0.78 ${p.rot}) (size 1 0.8) (layers B.Cu B.Paste B.Mask)) 57 | (pad "" smd rect (at 3.65 -0.78 ${p.rot}) (size 1 0.8) (layers B.Cu B.Paste B.Mask)) 58 | 59 | ) 60 | ` 61 | } 62 | -------------------------------------------------------------------------------- /config/boards/shields/avocado/avocado.keymap: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | // The default keymap is roughly on Miryoku layout 6 | // (https://github.com/manna-harbour/miryoku). 7 | // Customize on your own on the config folder. 8 | 9 | #define BASE 0 10 | #define NAV 1 11 | #define SYM 2 12 | #define NUM 3 13 | #define FUN 4 14 | #define MED 5 15 | 16 | / { 17 | behaviors { 18 | hm: homerow_mods { 19 | compatible = "zmk,behavior-hold-tap"; 20 | label = "HOMEROW_MODS"; 21 | #binding-cells = <2>; 22 | tapping-term-ms = <200>; 23 | quick-tap-ms = <0>; 24 | flavor = "tap-preferred"; 25 | bindings = <&kp>, <&kp>; 26 | }; 27 | }; 28 | 29 | keymap { 30 | compatible = "zmk,keymap"; 31 | 32 | default_layer { 33 | bindings = < 34 | &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P 35 | &hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp H &hm LSHFT J &hm LCTRL K &hm LALT L &hm LGUI SEMI 36 | &kp Z &hm RALT X &kp C &kp V &kp B &kp N &kp M &kp COMMA &hm RALT DOT &kp FSLH 37 | < MED ESC < NAV SPACE &kp TAB < SYM RET < NUM BSPC < FUN DEL 38 | >; 39 | }; 40 | 41 | nav_layer { 42 | bindings = < 43 | &none &none &none &none &none &kp LC(Y) &kp LC(V) &kp LC(C) &kp LC(X) &kp LC(Z) 44 | &kp LGUI &kp LALT &kp LCTRL &kp LSHFT &none &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp CAPS 45 | &none &none &none &none &none &kp INS &kp HOME &kp PG_DN &kp PG_UP &kp END 46 | &none &trans &none &kp RET &kp BSPC &kp DEL 47 | >; 48 | }; 49 | 50 | sym_layer { 51 | bindings = < 52 | &kp LBRC &kp AMPS &kp STAR &kp LPAR &kp RBRC &none &none &none &none &none 53 | &kp COLON &kp DLLR &kp PRCNT &kp CARET &kp PLUS &none &kp RSHFT &kp RCTRL &kp RALT &kp RGUI 54 | &kp TILDE &kp EXCL &kp AT &kp HASH &kp PIPE &none &none &none &none &none 55 | &kp LPAR &kp RPAR &kp UNDER &trans &none &none 56 | >; 57 | }; 58 | 59 | num_layer { 60 | bindings = < 61 | &kp LBKT &kp N7 &kp N8 &kp N9 &kp RBKT &none &none &none &none &none 62 | &kp SQT &kp N4 &kp N5 &kp N6 &kp EQUAL &none &kp RSHFT &kp RCTRL &kp RALT &kp RGUI 63 | &kp GRAVE &kp N1 &kp N2 &kp N3 &kp BSLH &none &none &none &none &none 64 | &kp DOT &kp N0 &kp MINUS &none &trans &none 65 | >; 66 | }; 67 | 68 | fun_layer { 69 | bindings = < 70 | &kp F12 &kp F7 &kp F8 &kp F9 &kp PSCRN &none &none &none &none &none 71 | &kp F11 &kp F4 &kp F5 &kp F6 &kp SLCK &none &kp RSHFT &kp RCTRL &kp RALT &kp RGUI 72 | &kp F10 &kp F1 &kp F2 &kp F3 &kp PAUSE_BREAK &none &none &none &none &none 73 | &kp K_APP &kp SPACE &kp TAB &none &none &trans 74 | >; 75 | }; 76 | 77 | media_layer { 78 | bindings = < 79 | &none &none &none &none &none &none &none &none &none &none 80 | &kp LGUI &kp LALT &kp LCTRL &kp LSHFT &none &none &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT 81 | &none &none &none &none &none &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 82 | &trans &none &none &kp C_STOP &kp C_PP &kp C_MUTE 83 | >; 84 | }; 85 | }; 86 | }; 87 | -------------------------------------------------------------------------------- /ergogen/footprints/sod-123w.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | designator: 'D', 4 | from: {type: 'net', value: 'from'}, 5 | to: {type: 'net', value: 'to'} 6 | }, 7 | body: p => ` 8 | (footprint "Diode_SMD:Nexperia_CFP3_SOD-123W" 9 | ${p.at} 10 | (descr "Nexperia CFP3 (SOD-123W), https://assets.nexperia.com/documents/outline-drawing/SOD123W.pdf") 11 | (tags "CFP3 SOD-123W") 12 | (attr smd) 13 | (fp_text reference "${p.ref}" (at 0 -2 ${p.rot}) (layer "F.SilkS") ${p.ref_hide} 14 | (effects (font (size 1 1) (thickness 0.15))) 15 | ) 16 | (fp_text value "Nexperia_CFP3_SOD-123W" (at 0 2 ${p.rot}) (layer "F.Fab") hide 17 | (effects (font (size 1 1) (thickness 0.15))) 18 | ) 19 | (fp_line (start -2.26 -0.95) (end -2.26 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 20 | (fp_line (start -2.26 -0.95) (end 1.4 -0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 21 | (fp_line (start -2.26 0.95) (end 1.4 0.95) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 22 | (fp_line (start -2.25 -1.1) (end -2.25 1.1) (stroke (width 0.05) (type solid)) (layer "F.CrtYd")) 23 | (fp_line (start -2.25 -1.1) (end 2.25 -1.1) (stroke (width 0.05) (type solid)) (layer "F.CrtYd")) 24 | (fp_line (start 2.25 -1.1) (end 2.25 1.1) (stroke (width 0.05) (type solid)) (layer "F.CrtYd")) 25 | (fp_line (start 2.25 1.1) (end -2.25 1.1) (stroke (width 0.05) (type solid)) (layer "F.CrtYd")) 26 | (fp_line (start -1.3 -0.85) (end 1.3 -0.85) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 27 | (fp_line (start -1.3 0.85) (end -1.3 -0.85) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 28 | (fp_line (start -0.75 0) (end -0.35 0) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 29 | (fp_line (start -0.35 -0.55) (end -0.35 0.55) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 30 | (fp_line (start -0.35 0) (end 0.25 -0.4) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 31 | (fp_line (start -0.35 0) (end 0.25 0.4) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 32 | (fp_line (start 0.25 -0.4) (end 0.25 0.4) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 33 | (fp_line (start 0.75 0) (end 0.25 0) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 34 | (fp_line (start 1.3 -0.85) (end 1.3 0.85) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 35 | (fp_line (start 1.3 0.85) (end -1.3 0.85) (stroke (width 0.1) (type solid)) (layer "F.Fab")) 36 | 37 | (fp_line (start -2.26 -0.95) (end -2.26 0.95) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 38 | (fp_line (start -2.26 -0.95) (end 1.4 -0.95) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 39 | (fp_line (start -2.26 0.95) (end 1.4 0.95) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 40 | (fp_line (start -2.25 -1.1) (end -2.25 1.1) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 41 | (fp_line (start -2.25 -1.1) (end 2.25 -1.1) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 42 | (fp_line (start 2.25 -1.1) (end 2.25 1.1) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 43 | (fp_line (start 2.25 1.1) (end -2.25 1.1) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 44 | (fp_line (start -1.3 -0.85) (end 1.3 -0.85) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 45 | (fp_line (start -1.3 0.85) (end -1.3 -0.85) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 46 | (fp_line (start -0.75 0) (end -0.35 0) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 47 | (fp_line (start -0.35 -0.55) (end -0.35 0.55) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 48 | (fp_line (start -0.35 0) (end 0.25 -0.4) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 49 | (fp_line (start -0.35 0) (end 0.25 0.4) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 50 | (fp_line (start 0.25 -0.4) (end 0.25 0.4) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 51 | (fp_line (start 0.75 0) (end 0.25 0) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 52 | (fp_line (start 1.3 -0.85) (end 1.3 0.85) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 53 | (fp_line (start 1.3 0.85) (end -1.3 0.85) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 54 | (pad "1" thru_hole rect (at -1.4 0 ${ p.rot}) (size 1.2 1.2) (drill 0.3) (layers *.Cu *.Mask) (zone_connect 2) ${p.to.str}) 55 | (pad "2" thru_hole rect (at 1.4 0 ${p.rot}) (size 1.2 1.2) (drill 0.3) (layers *.Cu *.Mask) (zone_connect 2) ${p.from.str }) 56 | ) 57 | ` 58 | } 59 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-B_Silkscreen.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Legend,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.150000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X26110839Y-88469104D02* 18 | X25634649Y-88469104D01* 19 | X26206077Y-88754819D02* 20 | X25872744Y-87754819D01* 21 | X25872744Y-87754819D02* 22 | X25539411Y-88754819D01* 23 | X25301315Y-88088152D02* 24 | X25063220Y-88754819D01* 25 | X25063220Y-88754819D02* 26 | X24825125Y-88088152D01* 27 | X24301315Y-88754819D02* 28 | X24396553Y-88707200D01* 29 | X24396553Y-88707200D02* 30 | X24444172Y-88659580D01* 31 | X24444172Y-88659580D02* 32 | X24491791Y-88564342D01* 33 | X24491791Y-88564342D02* 34 | X24491791Y-88278628D01* 35 | X24491791Y-88278628D02* 36 | X24444172Y-88183390D01* 37 | X24444172Y-88183390D02* 38 | X24396553Y-88135771D01* 39 | X24396553Y-88135771D02* 40 | X24301315Y-88088152D01* 41 | X24301315Y-88088152D02* 42 | X24158458Y-88088152D01* 43 | X24158458Y-88088152D02* 44 | X24063220Y-88135771D01* 45 | X24063220Y-88135771D02* 46 | X24015601Y-88183390D01* 47 | X24015601Y-88183390D02* 48 | X23967982Y-88278628D01* 49 | X23967982Y-88278628D02* 50 | X23967982Y-88564342D01* 51 | X23967982Y-88564342D02* 52 | X24015601Y-88659580D01* 53 | X24015601Y-88659580D02* 54 | X24063220Y-88707200D01* 55 | X24063220Y-88707200D02* 56 | X24158458Y-88754819D01* 57 | X24158458Y-88754819D02* 58 | X24301315Y-88754819D01* 59 | X23110839Y-88707200D02* 60 | X23206077Y-88754819D01* 61 | X23206077Y-88754819D02* 62 | X23396553Y-88754819D01* 63 | X23396553Y-88754819D02* 64 | X23491791Y-88707200D01* 65 | X23491791Y-88707200D02* 66 | X23539410Y-88659580D01* 67 | X23539410Y-88659580D02* 68 | X23587029Y-88564342D01* 69 | X23587029Y-88564342D02* 70 | X23587029Y-88278628D01* 71 | X23587029Y-88278628D02* 72 | X23539410Y-88183390D01* 73 | X23539410Y-88183390D02* 74 | X23491791Y-88135771D01* 75 | X23491791Y-88135771D02* 76 | X23396553Y-88088152D01* 77 | X23396553Y-88088152D02* 78 | X23206077Y-88088152D01* 79 | X23206077Y-88088152D02* 80 | X23110839Y-88135771D01* 81 | X22253696Y-88754819D02* 82 | X22253696Y-88231009D01* 83 | X22253696Y-88231009D02* 84 | X22301315Y-88135771D01* 85 | X22301315Y-88135771D02* 86 | X22396553Y-88088152D01* 87 | X22396553Y-88088152D02* 88 | X22587029Y-88088152D01* 89 | X22587029Y-88088152D02* 90 | X22682267Y-88135771D01* 91 | X22253696Y-88707200D02* 92 | X22348934Y-88754819D01* 93 | X22348934Y-88754819D02* 94 | X22587029Y-88754819D01* 95 | X22587029Y-88754819D02* 96 | X22682267Y-88707200D01* 97 | X22682267Y-88707200D02* 98 | X22729886Y-88611961D01* 99 | X22729886Y-88611961D02* 100 | X22729886Y-88516723D01* 101 | X22729886Y-88516723D02* 102 | X22682267Y-88421485D01* 103 | X22682267Y-88421485D02* 104 | X22587029Y-88373866D01* 105 | X22587029Y-88373866D02* 106 | X22348934Y-88373866D01* 107 | X22348934Y-88373866D02* 108 | X22253696Y-88326247D01* 109 | X21348934Y-88754819D02* 110 | X21348934Y-87754819D01* 111 | X21348934Y-88707200D02* 112 | X21444172Y-88754819D01* 113 | X21444172Y-88754819D02* 114 | X21634648Y-88754819D01* 115 | X21634648Y-88754819D02* 116 | X21729886Y-88707200D01* 117 | X21729886Y-88707200D02* 118 | X21777505Y-88659580D01* 119 | X21777505Y-88659580D02* 120 | X21825124Y-88564342D01* 121 | X21825124Y-88564342D02* 122 | X21825124Y-88278628D01* 123 | X21825124Y-88278628D02* 124 | X21777505Y-88183390D01* 125 | X21777505Y-88183390D02* 126 | X21729886Y-88135771D01* 127 | X21729886Y-88135771D02* 128 | X21634648Y-88088152D01* 129 | X21634648Y-88088152D02* 130 | X21444172Y-88088152D01* 131 | X21444172Y-88088152D02* 132 | X21348934Y-88135771D01* 133 | X20729886Y-88754819D02* 134 | X20825124Y-88707200D01* 135 | X20825124Y-88707200D02* 136 | X20872743Y-88659580D01* 137 | X20872743Y-88659580D02* 138 | X20920362Y-88564342D01* 139 | X20920362Y-88564342D02* 140 | X20920362Y-88278628D01* 141 | X20920362Y-88278628D02* 142 | X20872743Y-88183390D01* 143 | X20872743Y-88183390D02* 144 | X20825124Y-88135771D01* 145 | X20825124Y-88135771D02* 146 | X20729886Y-88088152D01* 147 | X20729886Y-88088152D02* 148 | X20587029Y-88088152D01* 149 | X20587029Y-88088152D02* 150 | X20491791Y-88135771D01* 151 | X20491791Y-88135771D02* 152 | X20444172Y-88183390D01* 153 | X20444172Y-88183390D02* 154 | X20396553Y-88278628D01* 155 | X20396553Y-88278628D02* 156 | X20396553Y-88564342D01* 157 | X20396553Y-88564342D02* 158 | X20444172Y-88659580D01* 159 | X20444172Y-88659580D02* 160 | X20491791Y-88707200D01* 161 | X20491791Y-88707200D02* 162 | X20587029Y-88754819D01* 163 | X20587029Y-88754819D02* 164 | X20729886Y-88754819D01* 165 | M02* 166 | -------------------------------------------------------------------------------- /ergogen/gerbers/bottom_plate/bottom_plate-F_Silkscreen.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:45:22+02:00*% 3 | %TF.ProjectId,bottom_plate,626f7474-6f6d-45f7-906c-6174652e6b69,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Legend,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:45:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.150000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X19689160Y-88469104D02* 18 | X20165350Y-88469104D01* 19 | X19593922Y-88754819D02* 20 | X19927255Y-87754819D01* 21 | X19927255Y-87754819D02* 22 | X20260588Y-88754819D01* 23 | X20498684Y-88088152D02* 24 | X20736779Y-88754819D01* 25 | X20736779Y-88754819D02* 26 | X20974874Y-88088152D01* 27 | X21498684Y-88754819D02* 28 | X21403446Y-88707200D01* 29 | X21403446Y-88707200D02* 30 | X21355827Y-88659580D01* 31 | X21355827Y-88659580D02* 32 | X21308208Y-88564342D01* 33 | X21308208Y-88564342D02* 34 | X21308208Y-88278628D01* 35 | X21308208Y-88278628D02* 36 | X21355827Y-88183390D01* 37 | X21355827Y-88183390D02* 38 | X21403446Y-88135771D01* 39 | X21403446Y-88135771D02* 40 | X21498684Y-88088152D01* 41 | X21498684Y-88088152D02* 42 | X21641541Y-88088152D01* 43 | X21641541Y-88088152D02* 44 | X21736779Y-88135771D01* 45 | X21736779Y-88135771D02* 46 | X21784398Y-88183390D01* 47 | X21784398Y-88183390D02* 48 | X21832017Y-88278628D01* 49 | X21832017Y-88278628D02* 50 | X21832017Y-88564342D01* 51 | X21832017Y-88564342D02* 52 | X21784398Y-88659580D01* 53 | X21784398Y-88659580D02* 54 | X21736779Y-88707200D01* 55 | X21736779Y-88707200D02* 56 | X21641541Y-88754819D01* 57 | X21641541Y-88754819D02* 58 | X21498684Y-88754819D01* 59 | X22689160Y-88707200D02* 60 | X22593922Y-88754819D01* 61 | X22593922Y-88754819D02* 62 | X22403446Y-88754819D01* 63 | X22403446Y-88754819D02* 64 | X22308208Y-88707200D01* 65 | X22308208Y-88707200D02* 66 | X22260589Y-88659580D01* 67 | X22260589Y-88659580D02* 68 | X22212970Y-88564342D01* 69 | X22212970Y-88564342D02* 70 | X22212970Y-88278628D01* 71 | X22212970Y-88278628D02* 72 | X22260589Y-88183390D01* 73 | X22260589Y-88183390D02* 74 | X22308208Y-88135771D01* 75 | X22308208Y-88135771D02* 76 | X22403446Y-88088152D01* 77 | X22403446Y-88088152D02* 78 | X22593922Y-88088152D01* 79 | X22593922Y-88088152D02* 80 | X22689160Y-88135771D01* 81 | X23546303Y-88754819D02* 82 | X23546303Y-88231009D01* 83 | X23546303Y-88231009D02* 84 | X23498684Y-88135771D01* 85 | X23498684Y-88135771D02* 86 | X23403446Y-88088152D01* 87 | X23403446Y-88088152D02* 88 | X23212970Y-88088152D01* 89 | X23212970Y-88088152D02* 90 | X23117732Y-88135771D01* 91 | X23546303Y-88707200D02* 92 | X23451065Y-88754819D01* 93 | X23451065Y-88754819D02* 94 | X23212970Y-88754819D01* 95 | X23212970Y-88754819D02* 96 | X23117732Y-88707200D01* 97 | X23117732Y-88707200D02* 98 | X23070113Y-88611961D01* 99 | X23070113Y-88611961D02* 100 | X23070113Y-88516723D01* 101 | X23070113Y-88516723D02* 102 | X23117732Y-88421485D01* 103 | X23117732Y-88421485D02* 104 | X23212970Y-88373866D01* 105 | X23212970Y-88373866D02* 106 | X23451065Y-88373866D01* 107 | X23451065Y-88373866D02* 108 | X23546303Y-88326247D01* 109 | X24451065Y-88754819D02* 110 | X24451065Y-87754819D01* 111 | X24451065Y-88707200D02* 112 | X24355827Y-88754819D01* 113 | X24355827Y-88754819D02* 114 | X24165351Y-88754819D01* 115 | X24165351Y-88754819D02* 116 | X24070113Y-88707200D01* 117 | X24070113Y-88707200D02* 118 | X24022494Y-88659580D01* 119 | X24022494Y-88659580D02* 120 | X23974875Y-88564342D01* 121 | X23974875Y-88564342D02* 122 | X23974875Y-88278628D01* 123 | X23974875Y-88278628D02* 124 | X24022494Y-88183390D01* 125 | X24022494Y-88183390D02* 126 | X24070113Y-88135771D01* 127 | X24070113Y-88135771D02* 128 | X24165351Y-88088152D01* 129 | X24165351Y-88088152D02* 130 | X24355827Y-88088152D01* 131 | X24355827Y-88088152D02* 132 | X24451065Y-88135771D01* 133 | X25070113Y-88754819D02* 134 | X24974875Y-88707200D01* 135 | X24974875Y-88707200D02* 136 | X24927256Y-88659580D01* 137 | X24927256Y-88659580D02* 138 | X24879637Y-88564342D01* 139 | X24879637Y-88564342D02* 140 | X24879637Y-88278628D01* 141 | X24879637Y-88278628D02* 142 | X24927256Y-88183390D01* 143 | X24927256Y-88183390D02* 144 | X24974875Y-88135771D01* 145 | X24974875Y-88135771D02* 146 | X25070113Y-88088152D01* 147 | X25070113Y-88088152D02* 148 | X25212970Y-88088152D01* 149 | X25212970Y-88088152D02* 150 | X25308208Y-88135771D01* 151 | X25308208Y-88135771D02* 152 | X25355827Y-88183390D01* 153 | X25355827Y-88183390D02* 154 | X25403446Y-88278628D01* 155 | X25403446Y-88278628D02* 156 | X25403446Y-88564342D01* 157 | X25403446Y-88564342D02* 158 | X25355827Y-88659580D01* 159 | X25355827Y-88659580D02* 160 | X25308208Y-88707200D01* 161 | X25308208Y-88707200D02* 162 | X25212970Y-88754819D01* 163 | X25212970Y-88754819D02* 164 | X25070113Y-88754819D01* 165 | M02* 166 | -------------------------------------------------------------------------------- /ergogen/footprints/rotary.js: -------------------------------------------------------------------------------- 1 | // EC11 rotary encoder 2 | // 3 | // Nets 4 | // from: corresponds to switch pin 1 (for button presses) 5 | // to: corresponds to switch pin 2 (for button presses) 6 | // A: corresponds to pin 1 (for rotary) 7 | // B: corresponds to pin 2 (for rotary, should be GND) 8 | // C: corresponds to pin 3 (for rotary) 9 | 10 | module.exports = { 11 | params: { 12 | from: undefined, 13 | to: undefined, 14 | A: undefined, 15 | B: undefined, 16 | C: undefined, 17 | class: "ROT", 18 | }, 19 | body: (p) => ` 20 | (module rotary_encoder (layer F.Cu) (tedit 603326DE) 21 | 22 | ${p.at /* parametric position */} 23 | 24 | ${"" /* footprint reference */} 25 | (fp_text reference "${p.ref}" (at 0 0.5) (layer F.SilkS) 26 | ${p.ref_hide} (effects (font (size 1 1) (thickness 0.15)))) 27 | (fp_text value "" (at 0 8.89) (layer F.Fab) 28 | (effects (font (size 1 1) (thickness 0.15)))) 29 | 30 | ${"" /* component outline */} 31 | (fp_line (start -0.62 -0.04) (end 0.38 -0.04) (layer F.SilkS) (width 0.12)) 32 | (fp_line (start -0.12 -0.54) (end -0.12 0.46) (layer F.SilkS) (width 0.12)) 33 | (fp_line (start 5.98 3.26) (end 5.98 5.86) (layer F.SilkS) (width 0.12)) 34 | (fp_line (start 5.98 -1.34) (end 5.98 1.26) (layer F.SilkS) (width 0.12)) 35 | (fp_line (start 5.98 -5.94) (end 5.98 -3.34) (layer F.SilkS) (width 0.12)) 36 | (fp_line (start -3.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12)) 37 | (fp_line (start -0.12 -3.04) (end -0.12 2.96) (layer F.Fab) (width 0.12)) 38 | (fp_line (start -7.32 -4.14) (end -7.62 -3.84) (layer F.SilkS) (width 0.12)) 39 | (fp_line (start -7.92 -4.14) (end -7.32 -4.14) (layer F.SilkS) (width 0.12)) 40 | (fp_line (start -7.62 -3.84) (end -7.92 -4.14) (layer F.SilkS) (width 0.12)) 41 | (fp_line (start -6.22 -5.84) (end -6.22 5.86) (layer F.SilkS) (width 0.12)) 42 | (fp_line (start -2.12 -5.84) (end -6.22 -5.84) (layer F.SilkS) (width 0.12)) 43 | (fp_line (start -2.12 5.86) (end -6.22 5.86) (layer F.SilkS) (width 0.12)) 44 | (fp_line (start 5.98 5.86) (end 1.88 5.86) (layer F.SilkS) (width 0.12)) 45 | (fp_line (start 1.88 -5.94) (end 5.98 -5.94) (layer F.SilkS) (width 0.12)) 46 | 47 | (fp_line (start -0.62 -0.04) (end 0.38 -0.04) (layer B.SilkS) (width 0.12)) 48 | (fp_line (start -0.12 -0.54) (end -0.12 0.46) (layer B.SilkS) (width 0.12)) 49 | (fp_line (start 5.98 3.26) (end 5.98 5.86) (layer B.SilkS) (width 0.12)) 50 | (fp_line (start 5.98 -1.34) (end 5.98 1.26) (layer B.SilkS) (width 0.12)) 51 | (fp_line (start 5.98 -5.94) (end 5.98 -3.34) (layer B.SilkS) (width 0.12)) 52 | (fp_line (start -3.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12)) 53 | (fp_line (start -0.12 -3.04) (end -0.12 2.96) (layer F.Fab) (width 0.12)) 54 | (fp_line (start -7.32 -4.14) (end -7.62 -3.84) (layer B.SilkS) (width 0.12)) 55 | (fp_line (start -7.92 -4.14) (end -7.32 -4.14) (layer B.SilkS) (width 0.12)) 56 | (fp_line (start -7.62 -3.84) (end -7.92 -4.14) (layer B.SilkS) (width 0.12)) 57 | (fp_line (start -6.22 -5.84) (end -6.22 5.86) (layer B.SilkS) (width 0.12)) 58 | (fp_line (start -2.12 -5.84) (end -6.22 -5.84) (layer B.SilkS) (width 0.12)) 59 | (fp_line (start -2.12 5.86) (end -6.22 5.86) (layer B.SilkS) (width 0.12)) 60 | (fp_line (start 5.98 5.86) (end 1.88 5.86) (layer B.SilkS) (width 0.12)) 61 | (fp_line (start 1.88 -5.94) (end 5.98 -5.94) (layer B.SilkS) (width 0.12)) 62 | 63 | (fp_line (start -6.12 -4.74) (end -5.12 -5.84) (layer F.Fab) (width 0.12)) 64 | (fp_line (start -6.12 5.76) (end -6.12 -4.74) (layer F.Fab) (width 0.12)) 65 | (fp_line (start 5.88 5.76) (end -6.12 5.76) (layer F.Fab) (width 0.12)) 66 | (fp_line (start 5.88 -5.84) (end 5.88 5.76) (layer F.Fab) (width 0.12)) 67 | (fp_line (start -5.12 -5.84) (end 5.88 -5.84) (layer F.Fab) (width 0.12)) 68 | (fp_line (start -8.87 -6.89) (end 7.88 -6.89) (layer F.CrtYd) (width 0.05)) 69 | (fp_line (start -8.87 -6.89) (end -8.87 6.81) (layer F.CrtYd) (width 0.05)) 70 | (fp_line (start 7.88 6.81) (end 7.88 -6.89) (layer F.CrtYd) (width 0.05)) 71 | (fp_line (start 7.88 6.81) (end -8.87 6.81) (layer F.CrtYd) (width 0.05)) 72 | (fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer F.SilkS) (width 0.12)) 73 | (fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer B.SilkS) (width 0.12)) 74 | (fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12)) 75 | 76 | ${"" /* pin names */} 77 | (pad A thru_hole rect (at -7.62 -2.54 ${ 78 | p.rot 79 | }) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.A.str}) 80 | (pad C thru_hole circle (at -7.62 -0.04) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${ 81 | p.C.str 82 | }) 83 | (pad B thru_hole circle (at -7.62 2.46) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${ 84 | p.B.str 85 | }) 86 | (pad 1 thru_hole circle (at 6.88 -2.54) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${ 87 | p.from.str 88 | }) 89 | (pad 2 thru_hole circle (at 6.88 2.46) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${ 90 | p.to.str 91 | }) 92 | 93 | ${"" /* Legs */} 94 | (pad "" np_thru_hole rect (at -0.12 -5.64 ${ 95 | p.rot 96 | }) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Mask)) 97 | (pad "" np_thru_hole rect (at -0.12 5.56 ${ 98 | p.rot 99 | }) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Mask)) 100 | ) 101 | `, 102 | }; 103 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-B_Silkscreen.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Legend,Bot*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.150000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X90663220Y-80024819D02* 18 | X90663220Y-79024819D01* 19 | X90663220Y-79024819D02* 20 | X90329887Y-79739104D01* 21 | X90329887Y-79739104D02* 22 | X89996554Y-79024819D01* 23 | X89996554Y-79024819D02* 24 | X89996554Y-80024819D01* 25 | X89615601Y-79024819D02* 26 | X88948935Y-80024819D01* 27 | X88948935Y-79024819D02* 28 | X89615601Y-80024819D01* 29 | X87853696Y-79977200D02* 30 | X87710839Y-80024819D01* 31 | X87710839Y-80024819D02* 32 | X87472744Y-80024819D01* 33 | X87472744Y-80024819D02* 34 | X87377506Y-79977200D01* 35 | X87377506Y-79977200D02* 36 | X87329887Y-79929580D01* 37 | X87329887Y-79929580D02* 38 | X87282268Y-79834342D01* 39 | X87282268Y-79834342D02* 40 | X87282268Y-79739104D01* 41 | X87282268Y-79739104D02* 42 | X87329887Y-79643866D01* 43 | X87329887Y-79643866D02* 44 | X87377506Y-79596247D01* 45 | X87377506Y-79596247D02* 46 | X87472744Y-79548628D01* 47 | X87472744Y-79548628D02* 48 | X87663220Y-79501009D01* 49 | X87663220Y-79501009D02* 50 | X87758458Y-79453390D01* 51 | X87758458Y-79453390D02* 52 | X87806077Y-79405771D01* 53 | X87806077Y-79405771D02* 54 | X87853696Y-79310533D01* 55 | X87853696Y-79310533D02* 56 | X87853696Y-79215295D01* 57 | X87853696Y-79215295D02* 58 | X87806077Y-79120057D01* 59 | X87806077Y-79120057D02* 60 | X87758458Y-79072438D01* 61 | X87758458Y-79072438D02* 62 | X87663220Y-79024819D01* 63 | X87663220Y-79024819D02* 64 | X87425125Y-79024819D01* 65 | X87425125Y-79024819D02* 66 | X87282268Y-79072438D01* 67 | X86948934Y-79358152D02* 68 | X86758458Y-80024819D01* 69 | X86758458Y-80024819D02* 70 | X86567982Y-79548628D01* 71 | X86567982Y-79548628D02* 72 | X86377506Y-80024819D01* 73 | X86377506Y-80024819D02* 74 | X86187030Y-79358152D01* 75 | X85806077Y-80024819D02* 76 | X85806077Y-79358152D01* 77 | X85806077Y-79024819D02* 78 | X85853696Y-79072438D01* 79 | X85853696Y-79072438D02* 80 | X85806077Y-79120057D01* 81 | X85806077Y-79120057D02* 82 | X85758458Y-79072438D01* 83 | X85758458Y-79072438D02* 84 | X85806077Y-79024819D01* 85 | X85806077Y-79024819D02* 86 | X85806077Y-79120057D01* 87 | X85472744Y-79358152D02* 88 | X85091792Y-79358152D01* 89 | X85329887Y-79024819D02* 90 | X85329887Y-79881961D01* 91 | X85329887Y-79881961D02* 92 | X85282268Y-79977200D01* 93 | X85282268Y-79977200D02* 94 | X85187030Y-80024819D01* 95 | X85187030Y-80024819D02* 96 | X85091792Y-80024819D01* 97 | X84329887Y-79977200D02* 98 | X84425125Y-80024819D01* 99 | X84425125Y-80024819D02* 100 | X84615601Y-80024819D01* 101 | X84615601Y-80024819D02* 102 | X84710839Y-79977200D01* 103 | X84710839Y-79977200D02* 104 | X84758458Y-79929580D01* 105 | X84758458Y-79929580D02* 106 | X84806077Y-79834342D01* 107 | X84806077Y-79834342D02* 108 | X84806077Y-79548628D01* 109 | X84806077Y-79548628D02* 110 | X84758458Y-79453390D01* 111 | X84758458Y-79453390D02* 112 | X84710839Y-79405771D01* 113 | X84710839Y-79405771D02* 114 | X84615601Y-79358152D01* 115 | X84615601Y-79358152D02* 116 | X84425125Y-79358152D01* 117 | X84425125Y-79358152D02* 118 | X84329887Y-79405771D01* 119 | X83901315Y-80024819D02* 120 | X83901315Y-79024819D01* 121 | X83472744Y-80024819D02* 122 | X83472744Y-79501009D01* 123 | X83472744Y-79501009D02* 124 | X83520363Y-79405771D01* 125 | X83520363Y-79405771D02* 126 | X83615601Y-79358152D01* 127 | X83615601Y-79358152D02* 128 | X83758458Y-79358152D01* 129 | X83758458Y-79358152D02* 130 | X83853696Y-79405771D01* 131 | X83853696Y-79405771D02* 132 | X83901315Y-79453390D01* 133 | X82234648Y-80024819D02* 134 | X82234648Y-79024819D01* 135 | X82234648Y-79024819D02* 136 | X81853696Y-79024819D01* 137 | X81853696Y-79024819D02* 138 | X81758458Y-79072438D01* 139 | X81758458Y-79072438D02* 140 | X81710839Y-79120057D01* 141 | X81710839Y-79120057D02* 142 | X81663220Y-79215295D01* 143 | X81663220Y-79215295D02* 144 | X81663220Y-79358152D01* 145 | X81663220Y-79358152D02* 146 | X81710839Y-79453390D01* 147 | X81710839Y-79453390D02* 148 | X81758458Y-79501009D01* 149 | X81758458Y-79501009D02* 150 | X81853696Y-79548628D01* 151 | X81853696Y-79548628D02* 152 | X82234648Y-79548628D01* 153 | X81091791Y-80024819D02* 154 | X81187029Y-79977200D01* 155 | X81187029Y-79977200D02* 156 | X81234648Y-79881961D01* 157 | X81234648Y-79881961D02* 158 | X81234648Y-79024819D01* 159 | X80282267Y-80024819D02* 160 | X80282267Y-79501009D01* 161 | X80282267Y-79501009D02* 162 | X80329886Y-79405771D01* 163 | X80329886Y-79405771D02* 164 | X80425124Y-79358152D01* 165 | X80425124Y-79358152D02* 166 | X80615600Y-79358152D01* 167 | X80615600Y-79358152D02* 168 | X80710838Y-79405771D01* 169 | X80282267Y-79977200D02* 170 | X80377505Y-80024819D01* 171 | X80377505Y-80024819D02* 172 | X80615600Y-80024819D01* 173 | X80615600Y-80024819D02* 174 | X80710838Y-79977200D01* 175 | X80710838Y-79977200D02* 176 | X80758457Y-79881961D01* 177 | X80758457Y-79881961D02* 178 | X80758457Y-79786723D01* 179 | X80758457Y-79786723D02* 180 | X80710838Y-79691485D01* 181 | X80710838Y-79691485D02* 182 | X80615600Y-79643866D01* 183 | X80615600Y-79643866D02* 184 | X80377505Y-79643866D01* 185 | X80377505Y-79643866D02* 186 | X80282267Y-79596247D01* 187 | X79948933Y-79358152D02* 188 | X79567981Y-79358152D01* 189 | X79806076Y-79024819D02* 190 | X79806076Y-79881961D01* 191 | X79806076Y-79881961D02* 192 | X79758457Y-79977200D01* 193 | X79758457Y-79977200D02* 194 | X79663219Y-80024819D01* 195 | X79663219Y-80024819D02* 196 | X79567981Y-80024819D01* 197 | X78853695Y-79977200D02* 198 | X78948933Y-80024819D01* 199 | X78948933Y-80024819D02* 200 | X79139409Y-80024819D01* 201 | X79139409Y-80024819D02* 202 | X79234647Y-79977200D01* 203 | X79234647Y-79977200D02* 204 | X79282266Y-79881961D01* 205 | X79282266Y-79881961D02* 206 | X79282266Y-79501009D01* 207 | X79282266Y-79501009D02* 208 | X79234647Y-79405771D01* 209 | X79234647Y-79405771D02* 210 | X79139409Y-79358152D01* 211 | X79139409Y-79358152D02* 212 | X78948933Y-79358152D01* 213 | X78948933Y-79358152D02* 214 | X78853695Y-79405771D01* 215 | X78853695Y-79405771D02* 216 | X78806076Y-79501009D01* 217 | X78806076Y-79501009D02* 218 | X78806076Y-79596247D01* 219 | X78806076Y-79596247D02* 220 | X79282266Y-79691485D01* 221 | M02* 222 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-F_Silkscreen.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Legend,Top*% 6 | %TF.FilePolarity,Positive*% 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.150000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X77336779Y-80024819D02* 18 | X77336779Y-79024819D01* 19 | X77336779Y-79024819D02* 20 | X77670112Y-79739104D01* 21 | X77670112Y-79739104D02* 22 | X78003445Y-79024819D01* 23 | X78003445Y-79024819D02* 24 | X78003445Y-80024819D01* 25 | X78384398Y-79024819D02* 26 | X79051064Y-80024819D01* 27 | X79051064Y-79024819D02* 28 | X78384398Y-80024819D01* 29 | X80146303Y-79977200D02* 30 | X80289160Y-80024819D01* 31 | X80289160Y-80024819D02* 32 | X80527255Y-80024819D01* 33 | X80527255Y-80024819D02* 34 | X80622493Y-79977200D01* 35 | X80622493Y-79977200D02* 36 | X80670112Y-79929580D01* 37 | X80670112Y-79929580D02* 38 | X80717731Y-79834342D01* 39 | X80717731Y-79834342D02* 40 | X80717731Y-79739104D01* 41 | X80717731Y-79739104D02* 42 | X80670112Y-79643866D01* 43 | X80670112Y-79643866D02* 44 | X80622493Y-79596247D01* 45 | X80622493Y-79596247D02* 46 | X80527255Y-79548628D01* 47 | X80527255Y-79548628D02* 48 | X80336779Y-79501009D01* 49 | X80336779Y-79501009D02* 50 | X80241541Y-79453390D01* 51 | X80241541Y-79453390D02* 52 | X80193922Y-79405771D01* 53 | X80193922Y-79405771D02* 54 | X80146303Y-79310533D01* 55 | X80146303Y-79310533D02* 56 | X80146303Y-79215295D01* 57 | X80146303Y-79215295D02* 58 | X80193922Y-79120057D01* 59 | X80193922Y-79120057D02* 60 | X80241541Y-79072438D01* 61 | X80241541Y-79072438D02* 62 | X80336779Y-79024819D01* 63 | X80336779Y-79024819D02* 64 | X80574874Y-79024819D01* 65 | X80574874Y-79024819D02* 66 | X80717731Y-79072438D01* 67 | X81051065Y-79358152D02* 68 | X81241541Y-80024819D01* 69 | X81241541Y-80024819D02* 70 | X81432017Y-79548628D01* 71 | X81432017Y-79548628D02* 72 | X81622493Y-80024819D01* 73 | X81622493Y-80024819D02* 74 | X81812969Y-79358152D01* 75 | X82193922Y-80024819D02* 76 | X82193922Y-79358152D01* 77 | X82193922Y-79024819D02* 78 | X82146303Y-79072438D01* 79 | X82146303Y-79072438D02* 80 | X82193922Y-79120057D01* 81 | X82193922Y-79120057D02* 82 | X82241541Y-79072438D01* 83 | X82241541Y-79072438D02* 84 | X82193922Y-79024819D01* 85 | X82193922Y-79024819D02* 86 | X82193922Y-79120057D01* 87 | X82527255Y-79358152D02* 88 | X82908207Y-79358152D01* 89 | X82670112Y-79024819D02* 90 | X82670112Y-79881961D01* 91 | X82670112Y-79881961D02* 92 | X82717731Y-79977200D01* 93 | X82717731Y-79977200D02* 94 | X82812969Y-80024819D01* 95 | X82812969Y-80024819D02* 96 | X82908207Y-80024819D01* 97 | X83670112Y-79977200D02* 98 | X83574874Y-80024819D01* 99 | X83574874Y-80024819D02* 100 | X83384398Y-80024819D01* 101 | X83384398Y-80024819D02* 102 | X83289160Y-79977200D01* 103 | X83289160Y-79977200D02* 104 | X83241541Y-79929580D01* 105 | X83241541Y-79929580D02* 106 | X83193922Y-79834342D01* 107 | X83193922Y-79834342D02* 108 | X83193922Y-79548628D01* 109 | X83193922Y-79548628D02* 110 | X83241541Y-79453390D01* 111 | X83241541Y-79453390D02* 112 | X83289160Y-79405771D01* 113 | X83289160Y-79405771D02* 114 | X83384398Y-79358152D01* 115 | X83384398Y-79358152D02* 116 | X83574874Y-79358152D01* 117 | X83574874Y-79358152D02* 118 | X83670112Y-79405771D01* 119 | X84098684Y-80024819D02* 120 | X84098684Y-79024819D01* 121 | X84527255Y-80024819D02* 122 | X84527255Y-79501009D01* 123 | X84527255Y-79501009D02* 124 | X84479636Y-79405771D01* 125 | X84479636Y-79405771D02* 126 | X84384398Y-79358152D01* 127 | X84384398Y-79358152D02* 128 | X84241541Y-79358152D01* 129 | X84241541Y-79358152D02* 130 | X84146303Y-79405771D01* 131 | X84146303Y-79405771D02* 132 | X84098684Y-79453390D01* 133 | X85765351Y-80024819D02* 134 | X85765351Y-79024819D01* 135 | X85765351Y-79024819D02* 136 | X86146303Y-79024819D01* 137 | X86146303Y-79024819D02* 138 | X86241541Y-79072438D01* 139 | X86241541Y-79072438D02* 140 | X86289160Y-79120057D01* 141 | X86289160Y-79120057D02* 142 | X86336779Y-79215295D01* 143 | X86336779Y-79215295D02* 144 | X86336779Y-79358152D01* 145 | X86336779Y-79358152D02* 146 | X86289160Y-79453390D01* 147 | X86289160Y-79453390D02* 148 | X86241541Y-79501009D01* 149 | X86241541Y-79501009D02* 150 | X86146303Y-79548628D01* 151 | X86146303Y-79548628D02* 152 | X85765351Y-79548628D01* 153 | X86908208Y-80024819D02* 154 | X86812970Y-79977200D01* 155 | X86812970Y-79977200D02* 156 | X86765351Y-79881961D01* 157 | X86765351Y-79881961D02* 158 | X86765351Y-79024819D01* 159 | X87717732Y-80024819D02* 160 | X87717732Y-79501009D01* 161 | X87717732Y-79501009D02* 162 | X87670113Y-79405771D01* 163 | X87670113Y-79405771D02* 164 | X87574875Y-79358152D01* 165 | X87574875Y-79358152D02* 166 | X87384399Y-79358152D01* 167 | X87384399Y-79358152D02* 168 | X87289161Y-79405771D01* 169 | X87717732Y-79977200D02* 170 | X87622494Y-80024819D01* 171 | X87622494Y-80024819D02* 172 | X87384399Y-80024819D01* 173 | X87384399Y-80024819D02* 174 | X87289161Y-79977200D01* 175 | X87289161Y-79977200D02* 176 | X87241542Y-79881961D01* 177 | X87241542Y-79881961D02* 178 | X87241542Y-79786723D01* 179 | X87241542Y-79786723D02* 180 | X87289161Y-79691485D01* 181 | X87289161Y-79691485D02* 182 | X87384399Y-79643866D01* 183 | X87384399Y-79643866D02* 184 | X87622494Y-79643866D01* 185 | X87622494Y-79643866D02* 186 | X87717732Y-79596247D01* 187 | X88051066Y-79358152D02* 188 | X88432018Y-79358152D01* 189 | X88193923Y-79024819D02* 190 | X88193923Y-79881961D01* 191 | X88193923Y-79881961D02* 192 | X88241542Y-79977200D01* 193 | X88241542Y-79977200D02* 194 | X88336780Y-80024819D01* 195 | X88336780Y-80024819D02* 196 | X88432018Y-80024819D01* 197 | X89146304Y-79977200D02* 198 | X89051066Y-80024819D01* 199 | X89051066Y-80024819D02* 200 | X88860590Y-80024819D01* 201 | X88860590Y-80024819D02* 202 | X88765352Y-79977200D01* 203 | X88765352Y-79977200D02* 204 | X88717733Y-79881961D01* 205 | X88717733Y-79881961D02* 206 | X88717733Y-79501009D01* 207 | X88717733Y-79501009D02* 208 | X88765352Y-79405771D01* 209 | X88765352Y-79405771D02* 210 | X88860590Y-79358152D01* 211 | X88860590Y-79358152D02* 212 | X89051066Y-79358152D01* 213 | X89051066Y-79358152D02* 214 | X89146304Y-79405771D01* 215 | X89146304Y-79405771D02* 216 | X89193923Y-79501009D01* 217 | X89193923Y-79501009D02* 218 | X89193923Y-79596247D01* 219 | X89193923Y-79596247D02* 220 | X88717733Y-79691485D01* 221 | M02* 222 | -------------------------------------------------------------------------------- /ergogen/gerbers/top_plate/top_plate-Edge_Cuts.gbr: -------------------------------------------------------------------------------- 1 | %TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*% 2 | %TF.CreationDate,2024-07-17T09:40:22+02:00*% 3 | %TF.ProjectId,top_plate,746f705f-706c-4617-9465-2e6b69636164,rev?*% 4 | %TF.SameCoordinates,Original*% 5 | %TF.FileFunction,Profile,NP*% 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 8.0.3) date 2024-07-17 09:40:22* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %TA.AperFunction,Profile*% 14 | %ADD10C,0.150000*% 15 | %TD*% 16 | G04 APERTURE END LIST* 17 | D10* 18 | X18000000Y-85920000D02* 19 | X36000000Y-85920000D01* 20 | X38000000Y-83920000D02* 21 | G75* 22 | G02* 23 | X36000000Y-85920000I-2000000J0D01* 24 | G01* 25 | X38000000Y-83920000D02* 26 | X38000000Y-78320000D01* 27 | X38000000Y-78320000D02* 28 | X55000000Y-78320000D01* 29 | X57000000Y-76320000D02* 30 | G75* 31 | G02* 32 | X55000000Y-78320000I-2000000J0D01* 33 | G01* 34 | X57000000Y-76320000D02* 35 | X57000000Y-73000000D01* 36 | X57000000Y-73000000D02* 37 | X73000000Y-73000000D01* 38 | X73000000Y-101210000D02* 39 | X73000000Y-73000000D01* 40 | X74850177Y-103204380D02* 41 | G75* 42 | G02* 43 | X73000000Y-101210000I149823J1994380D01* 44 | G01* 45 | X74850177Y-103204380D02* 46 | X114192313Y-106159869D01* 47 | X114192313Y-106159869D02* 48 | X116679211Y-107055584D01* 49 | X117537102Y-107634053D02* 50 | G75* 51 | G02* 52 | X116679211Y-107055584I651137J1891036D01* 53 | G01* 54 | X117537103Y-107634054D02* 55 | X134556437Y-113494281D01* 56 | X137098611Y-112254379D02* 57 | G75* 58 | G02* 59 | X134556437Y-113494281I-1891038J651136D01* 60 | G01* 61 | X137098611Y-112254380D02* 62 | X142633269Y-96180564D01* 63 | X141393368Y-93638391D02* 64 | G75* 65 | G02* 66 | X142633269Y-96180564I-651136J-1891037D01* 67 | G01* 68 | X141393368Y-93638390D02* 69 | X124374034Y-87778164D01* 70 | X123046676Y-87786989D02* 71 | G75* 72 | G02* 73 | X124374034Y-87778164I676222J-1882212D01* 74 | G01* 75 | X123046675Y-87786988D02* 76 | X119230391Y-86569956D01* 77 | X117749669Y-85446468D02* 78 | G75* 79 | G02* 80 | X119230391Y-86569956I-330095J-1972571D01* 81 | G01* 82 | X117749669Y-85446468D02* 83 | X114879027Y-84966087D01* 84 | X114879027Y-84966087D02* 85 | X114000000Y-70798016D01* 86 | X114000000Y-70798016D02* 87 | X114000000Y-24360000D01* 88 | X112000000Y-22360000D02* 89 | G75* 90 | G02* 91 | X114000000Y-24360000I0J-2000000D01* 92 | G01* 93 | X95000000Y-22360000D02* 94 | X112000000Y-22360000D01* 95 | X95000000Y-22360000D02* 96 | X95000000Y-22270000D01* 97 | X93000000Y-20270000D02* 98 | G75* 99 | G02* 100 | X95000000Y-22270000I0J-2000000D01* 101 | G01* 102 | X76000000Y-20270000D02* 103 | X93000000Y-20270000D01* 104 | X76000000Y-20270000D02* 105 | X76000000Y-16000000D01* 106 | X74000000Y-14000000D02* 107 | G75* 108 | G02* 109 | X76000000Y-16000000I0J-2000000D01* 110 | G01* 111 | X74000000Y-14000000D02* 112 | X56000000Y-14000000D01* 113 | X54000000Y-16000000D02* 114 | G75* 115 | G02* 116 | X56000000Y-14000000I2000000J0D01* 117 | G01* 118 | X54000000Y-16000000D02* 119 | X54000000Y-19320000D01* 120 | X37000000Y-19320000D02* 121 | X54000000Y-19320000D01* 122 | X35000000Y-21320000D02* 123 | G75* 124 | G02* 125 | X37000000Y-19320000I2000000J0D01* 126 | G01* 127 | X35000000Y-21320000D02* 128 | X35000000Y-26920000D01* 129 | X18000000Y-26920000D02* 130 | X35000000Y-26920000D01* 131 | X16000000Y-28920000D02* 132 | G75* 133 | G02* 134 | X18000000Y-26920000I2000000J0D01* 135 | G01* 136 | X16000000Y-83920000D02* 137 | X16000000Y-28920000D01* 138 | X18000000Y-85920000D02* 139 | G75* 140 | G02* 141 | X16000000Y-83920000I0J2000000D01* 142 | G01* 143 | X20000000Y-82420000D02* 144 | X34000000Y-82420000D01* 145 | X34000000Y-82420000D02* 146 | X34000000Y-68420000D01* 147 | X34000000Y-68420000D02* 148 | X20000000Y-68420000D01* 149 | X20000000Y-68420000D02* 150 | X20000000Y-82420000D01* 151 | X20000000Y-63420000D02* 152 | X34000000Y-63420000D01* 153 | X34000000Y-63420000D02* 154 | X34000000Y-49420000D01* 155 | X34000000Y-49420000D02* 156 | X20000000Y-49420000D01* 157 | X20000000Y-49420000D02* 158 | X20000000Y-63420000D01* 159 | X20000000Y-44420000D02* 160 | X34000000Y-44420000D01* 161 | X34000000Y-44420000D02* 162 | X34000000Y-30420000D01* 163 | X34000000Y-30420000D02* 164 | X20000000Y-30420000D01* 165 | X20000000Y-30420000D02* 166 | X20000000Y-44420000D01* 167 | X39000000Y-74820000D02* 168 | X53000000Y-74820000D01* 169 | X53000000Y-74820000D02* 170 | X53000000Y-60820000D01* 171 | X53000000Y-60820000D02* 172 | X39000000Y-60820000D01* 173 | X39000000Y-60820000D02* 174 | X39000000Y-74820000D01* 175 | X39000000Y-55820000D02* 176 | X53000000Y-55820000D01* 177 | X53000000Y-55820000D02* 178 | X53000000Y-41820000D01* 179 | X53000000Y-41820000D02* 180 | X39000000Y-41820000D01* 181 | X39000000Y-41820000D02* 182 | X39000000Y-55820000D01* 183 | X39000000Y-36820000D02* 184 | X53000000Y-36820000D01* 185 | X53000000Y-36820000D02* 186 | X53000000Y-22820000D01* 187 | X53000000Y-22820000D02* 188 | X39000000Y-22820000D01* 189 | X39000000Y-22820000D02* 190 | X39000000Y-36820000D01* 191 | X58000000Y-69500000D02* 192 | X72000000Y-69500000D01* 193 | X72000000Y-69500000D02* 194 | X72000000Y-55500000D01* 195 | X72000000Y-55500000D02* 196 | X58000000Y-55500000D01* 197 | X58000000Y-55500000D02* 198 | X58000000Y-69500000D01* 199 | X58000000Y-50500000D02* 200 | X72000000Y-50500000D01* 201 | X72000000Y-50500000D02* 202 | X72000000Y-36500000D01* 203 | X72000000Y-36500000D02* 204 | X58000000Y-36500000D01* 205 | X58000000Y-36500000D02* 206 | X58000000Y-50500000D01* 207 | X58000000Y-31500000D02* 208 | X72000000Y-31500000D01* 209 | X72000000Y-31500000D02* 210 | X72000000Y-17500000D01* 211 | X72000000Y-17500000D02* 212 | X58000000Y-17500000D01* 213 | X58000000Y-17500000D02* 214 | X58000000Y-31500000D01* 215 | X77000000Y-75770000D02* 216 | X91000000Y-75770000D01* 217 | X91000000Y-75770000D02* 218 | X91000000Y-61770000D01* 219 | X91000000Y-61770000D02* 220 | X77000000Y-61770000D01* 221 | X77000000Y-61770000D02* 222 | X77000000Y-75770000D01* 223 | X77000000Y-56770000D02* 224 | X91000000Y-56770000D01* 225 | X91000000Y-56770000D02* 226 | X91000000Y-42770000D01* 227 | X91000000Y-42770000D02* 228 | X77000000Y-42770000D01* 229 | X77000000Y-42770000D02* 230 | X77000000Y-56770000D01* 231 | X77000000Y-37770000D02* 232 | X91000000Y-37770000D01* 233 | X91000000Y-37770000D02* 234 | X91000000Y-23770000D01* 235 | X91000000Y-23770000D02* 236 | X77000000Y-23770000D01* 237 | X77000000Y-23770000D02* 238 | X77000000Y-37770000D01* 239 | X96000000Y-77860000D02* 240 | X110000000Y-77860000D01* 241 | X110000000Y-77860000D02* 242 | X110000000Y-63860000D01* 243 | X110000000Y-63860000D02* 244 | X96000000Y-63860000D01* 245 | X96000000Y-63860000D02* 246 | X96000000Y-77860000D01* 247 | X96000000Y-58860000D02* 248 | X110000000Y-58860000D01* 249 | X110000000Y-58860000D02* 250 | X110000000Y-44860000D01* 251 | X110000000Y-44860000D02* 252 | X96000000Y-44860000D01* 253 | X96000000Y-44860000D02* 254 | X96000000Y-58860000D01* 255 | X96000000Y-39860000D02* 256 | X110000000Y-39860000D01* 257 | X110000000Y-39860000D02* 258 | X110000000Y-25860000D01* 259 | X110000000Y-25860000D02* 260 | X96000000Y-25860000D01* 261 | X96000000Y-25860000D02* 262 | X96000000Y-39860000D01* 263 | X77000000Y-99710000D02* 264 | X91000000Y-99710000D01* 265 | X91000000Y-99710000D02* 266 | X91000000Y-85710000D01* 267 | X91000000Y-85710000D02* 268 | X77000000Y-85710000D01* 269 | X77000000Y-85710000D02* 270 | X77000000Y-99710000D01* 271 | X99080766Y-100065704D02* 272 | X112888765Y-102376371D01* 273 | X112888765Y-102376371D02* 274 | X115199431Y-88568372D01* 275 | X115199431Y-88568372D02* 276 | X101391433Y-86257706D01* 277 | X101391433Y-86257706D02* 278 | X99080766Y-100065704D01* 279 | X120567628Y-104975875D02* 280 | X133804888Y-109533829D01* 281 | X133804888Y-109533829D02* 282 | X138362843Y-96296569D01* 283 | X138362843Y-96296569D02* 284 | X125125583Y-91738615D01* 285 | X125125583Y-91738615D02* 286 | X120567628Y-104975875D01* 287 | M02* 288 | -------------------------------------------------------------------------------- /ergogen/footprints/jst-s2b-ph-kl.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | pos: { type: 'net', value: 'pos' }, 4 | neg: { type: 'net', value: 'neg' }, 5 | }, 6 | body: p => ` 7 | (footprint "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal" 8 | ${p.at} 9 | (descr "JST PH series connector, S2B-PH-K (http://www.jst-mfg.com/product/pdf/eng/ePH.pdf), generated with kicad-footprint-generator") 10 | (tags "connector JST PH top entry") 11 | (attr through_hole) 12 | (fp_text reference "${p.ref}" (at 1 -2.55 ${p.rot}) (layer "F.SilkS") ${p.ref_hide} 13 | (effects (font (size 1 1) (thickness 0.15))) 14 | ) 15 | (fp_text value "" (at 1 7.45 ${p.rot}) (layer "F.Fab") hide 16 | (effects (font (size 1 1) (thickness 0.15))) 17 | ) 18 | (fp_line (start -2.06 -1.46) (end -2.06 6.36) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 19 | (fp_line (start -2.06 0.14) (end -1.14 0.14) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 20 | (fp_line (start -2.06 6.36) (end 4.06 6.36) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 21 | (fp_line (start -1.3 2.5) (end -1.3 4.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 22 | (fp_line (start -1.3 4.1) (end -0.3 4.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 23 | (fp_line (start -1.14 -1.46) (end -2.06 -1.46) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 24 | (fp_line (start -1.14 0.14) (end -1.14 -1.46) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 25 | (fp_line (start -0.86 0.14) (end -1.14 0.14) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 26 | (fp_line (start -0.86 0.14) (end -0.86 -1.075) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 27 | (fp_line (start -0.8 4.1) (end -0.8 6.36) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 28 | (fp_line (start -0.3 2.5) (end -1.3 2.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 29 | (fp_line (start -0.3 4.1) (end -0.3 2.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 30 | (fp_line (start -0.3 4.1) (end -0.3 6.36) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 31 | (fp_line (start 0.5 2) (end 1.5 2) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 32 | (fp_line (start 0.5 6.36) (end 0.5 2) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 33 | (fp_line (start 1.5 2) (end 1.5 6.36) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 34 | (fp_line (start 2.3 2.5) (end 3.3 2.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 35 | (fp_line (start 2.3 4.1) (end 2.3 2.5) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 36 | (fp_line (start 3.14 -1.46) (end 3.14 0.14) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 37 | (fp_line (start 3.14 0.14) (end 2.86 0.14) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 38 | (fp_line (start 3.3 2.5) (end 3.3 4.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 39 | (fp_line (start 3.3 4.1) (end 2.3 4.1) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 40 | (fp_line (start 4.06 -1.46) (end 3.14 -1.46) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 41 | (fp_line (start 4.06 0.14) (end 3.14 0.14) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 42 | (fp_line (start 4.06 6.36) (end 4.06 -1.46) (stroke (width 0.12) (type solid)) (layer "F.SilkS")) 43 | 44 | (fp_line (start -2.06 -1.46) (end -2.06 6.36) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 45 | (fp_line (start -2.06 0.14) (end -1.14 0.14) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 46 | (fp_line (start -2.06 6.36) (end 4.06 6.36) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 47 | (fp_line (start -1.3 2.5) (end -1.3 4.1) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 48 | (fp_line (start -1.3 4.1) (end -0.3 4.1) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 49 | (fp_line (start -1.14 -1.46) (end -2.06 -1.46) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 50 | (fp_line (start -1.14 0.14) (end -1.14 -1.46) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 51 | (fp_line (start -0.86 0.14) (end -1.14 0.14) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 52 | (fp_line (start -0.86 0.14) (end -0.86 -1.075) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 53 | (fp_line (start -0.8 4.1) (end -0.8 6.36) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 54 | (fp_line (start -0.3 2.5) (end -1.3 2.5) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 55 | (fp_line (start -0.3 4.1) (end -0.3 2.5) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 56 | (fp_line (start -0.3 4.1) (end -0.3 6.36) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 57 | (fp_line (start 0.5 2) (end 1.5 2) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 58 | (fp_line (start 0.5 6.36) (end 0.5 2) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 59 | (fp_line (start 1.5 2) (end 1.5 6.36) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 60 | (fp_line (start 2.3 2.5) (end 3.3 2.5) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 61 | (fp_line (start 2.3 4.1) (end 2.3 2.5) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 62 | (fp_line (start 3.14 -1.46) (end 3.14 0.14) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 63 | (fp_line (start 3.14 0.14) (end 2.86 0.14) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 64 | (fp_line (start 3.3 2.5) (end 3.3 4.1) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 65 | (fp_line (start 3.3 4.1) (end 2.3 4.1) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 66 | (fp_line (start 4.06 -1.46) (end 3.14 -1.46) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 67 | (fp_line (start 4.06 0.14) (end 3.14 0.14) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 68 | (fp_line (start 4.06 6.36) (end 4.06 -1.46) (stroke (width 0.12) (type solid)) (layer "B.SilkS")) 69 | (fp_line (start -2.45 -1.85) (end -2.45 6.75) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 70 | (fp_line (start -2.45 6.75) (end 4.45 6.75) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 71 | (fp_line (start 4.45 -1.85) (end -2.45 -1.85) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 72 | (fp_line (start 4.45 6.75) (end 4.45 -1.85) (stroke (width 0.05) (type solid)) (layer "B.CrtYd")) 73 | (fp_line (start -1.95 -1.35) (end -1.95 6.25) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 74 | (fp_line (start -1.95 6.25) (end 3.95 6.25) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 75 | (fp_line (start -1.25 -1.35) (end -1.95 -1.35) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 76 | (fp_line (start -1.25 0.25) (end -1.25 -1.35) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 77 | (fp_line (start -0.5 1.375) (end 0.5 1.375) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 78 | (fp_line (start 0 0.875) (end -0.5 1.375) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 79 | (fp_line (start 0.5 1.375) (end 0 0.875) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 80 | (fp_line (start 3.25 -1.35) (end 3.25 0.25) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 81 | (fp_line (start 3.25 0.25) (end -1.25 0.25) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 82 | (fp_line (start 3.95 -1.35) (end 3.25 -1.35) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 83 | (fp_line (start 3.95 6.25) (end 3.95 -1.35) (stroke (width 0.1) (type solid)) (layer "B.Fab")) 84 | 85 | (pad "1" thru_hole roundrect (at 0 0 ${p.rot}) (size 1.2 1.75) (drill 0.75) (layers "*.Cu" "*.Mask") (roundrect_rratio 0.208333) ${p.pos.str}) 86 | (pad "2" thru_hole oval (at 2 0 ${p.rot}) (size 1.2 1.75) (drill 0.75) (layers "*.Cu" "*.Mask") ${p.neg.str}) 87 | ) 88 | ` 89 | } 90 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/bottom_plate/bottom_plate.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "apply_defaults_to_fp_fields": false, 7 | "apply_defaults_to_fp_shapes": false, 8 | "apply_defaults_to_fp_text": false, 9 | "board_outline_line_width": 0.05, 10 | "copper_line_width": 0.2, 11 | "copper_text_italic": false, 12 | "copper_text_size_h": 1.5, 13 | "copper_text_size_v": 1.5, 14 | "copper_text_thickness": 0.3, 15 | "copper_text_upright": false, 16 | "courtyard_line_width": 0.05, 17 | "dimension_precision": 4, 18 | "dimension_units": 3, 19 | "dimensions": { 20 | "arrow_length": 1270000, 21 | "extension_offset": 500000, 22 | "keep_text_aligned": true, 23 | "suppress_zeroes": false, 24 | "text_position": 0, 25 | "units_format": 1 26 | }, 27 | "fab_line_width": 0.1, 28 | "fab_text_italic": false, 29 | "fab_text_size_h": 1.0, 30 | "fab_text_size_v": 1.0, 31 | "fab_text_thickness": 0.15, 32 | "fab_text_upright": false, 33 | "other_line_width": 0.1, 34 | "other_text_italic": false, 35 | "other_text_size_h": 1.0, 36 | "other_text_size_v": 1.0, 37 | "other_text_thickness": 0.15, 38 | "other_text_upright": false, 39 | "pads": { 40 | "drill": 0.762, 41 | "height": 1.524, 42 | "width": 1.524 43 | }, 44 | "silk_line_width": 0.12, 45 | "silk_text_italic": false, 46 | "silk_text_size_h": 1.0, 47 | "silk_text_size_v": 1.0, 48 | "silk_text_thickness": 0.15, 49 | "silk_text_upright": false, 50 | "zones": { 51 | "min_clearance": 0.508 52 | } 53 | }, 54 | "diff_pair_dimensions": [], 55 | "drc_exclusions": [], 56 | "meta": { 57 | "version": 2 58 | }, 59 | "rule_severities": { 60 | "annular_width": "error", 61 | "clearance": "error", 62 | "connection_width": "warning", 63 | "copper_edge_clearance": "error", 64 | "copper_sliver": "warning", 65 | "courtyards_overlap": "error", 66 | "diff_pair_gap_out_of_range": "error", 67 | "diff_pair_uncoupled_length_too_long": "error", 68 | "drill_out_of_range": "error", 69 | "duplicate_footprints": "warning", 70 | "extra_footprint": "warning", 71 | "footprint": "error", 72 | "footprint_symbol_mismatch": "warning", 73 | "footprint_type_mismatch": "ignore", 74 | "hole_clearance": "error", 75 | "hole_near_hole": "error", 76 | "holes_co_located": "warning", 77 | "invalid_outline": "error", 78 | "isolated_copper": "warning", 79 | "item_on_disabled_layer": "error", 80 | "items_not_allowed": "error", 81 | "length_out_of_range": "error", 82 | "lib_footprint_issues": "warning", 83 | "lib_footprint_mismatch": "warning", 84 | "malformed_courtyard": "error", 85 | "microvia_drill_out_of_range": "error", 86 | "missing_courtyard": "ignore", 87 | "missing_footprint": "warning", 88 | "net_conflict": "warning", 89 | "npth_inside_courtyard": "ignore", 90 | "padstack": "warning", 91 | "pth_inside_courtyard": "ignore", 92 | "shorting_items": "error", 93 | "silk_edge_clearance": "warning", 94 | "silk_over_copper": "warning", 95 | "silk_overlap": "warning", 96 | "skew_out_of_range": "error", 97 | "solder_mask_bridge": "error", 98 | "starved_thermal": "error", 99 | "text_height": "warning", 100 | "text_thickness": "warning", 101 | "through_hole_pad_without_hole": "error", 102 | "too_many_vias": "error", 103 | "track_dangling": "warning", 104 | "track_width": "error", 105 | "tracks_crossing": "error", 106 | "unconnected_items": "error", 107 | "unresolved_variable": "error", 108 | "via_dangling": "warning", 109 | "zones_intersect": "error" 110 | }, 111 | "rules": { 112 | "max_error": 0.005, 113 | "min_clearance": 0.0, 114 | "min_connection": 0.0, 115 | "min_copper_edge_clearance": 0.5, 116 | "min_hole_clearance": 0.25, 117 | "min_hole_to_hole": 0.25, 118 | "min_microvia_diameter": 0.2, 119 | "min_microvia_drill": 0.1, 120 | "min_resolved_spokes": 2, 121 | "min_silk_clearance": 0.0, 122 | "min_text_height": 0.8, 123 | "min_text_thickness": 0.08, 124 | "min_through_hole_diameter": 0.3, 125 | "min_track_width": 0.2, 126 | "min_via_annular_width": 0.1, 127 | "min_via_diameter": 0.4, 128 | "solder_mask_to_copper_clearance": 0.0, 129 | "use_height_for_length_calcs": true 130 | }, 131 | "teardrop_options": [ 132 | { 133 | "td_onpadsmd": true, 134 | "td_onroundshapesonly": false, 135 | "td_ontrackend": false, 136 | "td_onviapad": true 137 | } 138 | ], 139 | "teardrop_parameters": [ 140 | { 141 | "td_allow_use_two_tracks": true, 142 | "td_curve_segcount": 0, 143 | "td_height_ratio": 1.0, 144 | "td_length_ratio": 0.5, 145 | "td_maxheight": 2.0, 146 | "td_maxlen": 1.0, 147 | "td_on_pad_in_zone": false, 148 | "td_target_name": "td_round_shape", 149 | "td_width_to_size_filter_ratio": 0.9 150 | }, 151 | { 152 | "td_allow_use_two_tracks": true, 153 | "td_curve_segcount": 0, 154 | "td_height_ratio": 1.0, 155 | "td_length_ratio": 0.5, 156 | "td_maxheight": 2.0, 157 | "td_maxlen": 1.0, 158 | "td_on_pad_in_zone": false, 159 | "td_target_name": "td_rect_shape", 160 | "td_width_to_size_filter_ratio": 0.9 161 | }, 162 | { 163 | "td_allow_use_two_tracks": true, 164 | "td_curve_segcount": 0, 165 | "td_height_ratio": 1.0, 166 | "td_length_ratio": 0.5, 167 | "td_maxheight": 2.0, 168 | "td_maxlen": 1.0, 169 | "td_on_pad_in_zone": false, 170 | "td_target_name": "td_track_end", 171 | "td_width_to_size_filter_ratio": 0.9 172 | } 173 | ], 174 | "track_widths": [], 175 | "tuning_pattern_settings": { 176 | "diff_pair_defaults": { 177 | "corner_radius_percentage": 80, 178 | "corner_style": 1, 179 | "max_amplitude": 1.0, 180 | "min_amplitude": 0.2, 181 | "single_sided": false, 182 | "spacing": 1.0 183 | }, 184 | "diff_pair_skew_defaults": { 185 | "corner_radius_percentage": 80, 186 | "corner_style": 1, 187 | "max_amplitude": 1.0, 188 | "min_amplitude": 0.2, 189 | "single_sided": false, 190 | "spacing": 0.6 191 | }, 192 | "single_track_defaults": { 193 | "corner_radius_percentage": 80, 194 | "corner_style": 1, 195 | "max_amplitude": 1.0, 196 | "min_amplitude": 0.2, 197 | "single_sided": false, 198 | "spacing": 0.6 199 | } 200 | }, 201 | "via_dimensions": [], 202 | "zones_allow_external_fillets": false 203 | }, 204 | "ipc2581": { 205 | "dist": "", 206 | "distpn": "", 207 | "internal_id": "", 208 | "mfg": "", 209 | "mpn": "" 210 | }, 211 | "layer_presets": [], 212 | "viewports": [] 213 | }, 214 | "boards": [], 215 | "cvpcb": { 216 | "equivalence_files": [] 217 | }, 218 | "libraries": { 219 | "pinned_footprint_libs": [], 220 | "pinned_symbol_libs": [] 221 | }, 222 | "meta": { 223 | "filename": "bottom_plate.kicad_pro", 224 | "version": 1 225 | }, 226 | "net_settings": { 227 | "classes": [ 228 | { 229 | "bus_width": 12, 230 | "clearance": 0.2, 231 | "diff_pair_gap": 0.25, 232 | "diff_pair_via_gap": 0.25, 233 | "diff_pair_width": 0.2, 234 | "line_style": 0, 235 | "microvia_diameter": 0.3, 236 | "microvia_drill": 0.1, 237 | "name": "Default", 238 | "pcb_color": "rgba(0, 0, 0, 0.000)", 239 | "schematic_color": "rgba(0, 0, 0, 0.000)", 240 | "track_width": 0.25, 241 | "via_diameter": 0.8, 242 | "via_drill": 0.4, 243 | "wire_width": 6 244 | } 245 | ], 246 | "meta": { 247 | "version": 3 248 | }, 249 | "net_colors": null, 250 | "netclass_assignments": null, 251 | "netclass_patterns": [ 252 | { 253 | "netclass": "Default", 254 | "pattern": "" 255 | }, 256 | { 257 | "netclass": "Default", 258 | "pattern": "" 259 | }, 260 | { 261 | "netclass": "Default", 262 | "pattern": "" 263 | }, 264 | { 265 | "netclass": "Default", 266 | "pattern": "" 267 | } 268 | ] 269 | }, 270 | "pcbnew": { 271 | "last_paths": { 272 | "gencad": "", 273 | "idf": "", 274 | "netlist": "", 275 | "plot": "../../../gerbers/bottom_plate/", 276 | "pos_files": "", 277 | "specctra_dsn": "", 278 | "step": "", 279 | "svg": "", 280 | "vrml": "" 281 | }, 282 | "page_layout_descr_file": "" 283 | }, 284 | "schematic": { 285 | "legacy_lib_dir": "", 286 | "legacy_lib_list": [] 287 | }, 288 | "sheets": [], 289 | "text_variables": {} 290 | } 291 | -------------------------------------------------------------------------------- /ergogen/footprints/rotary_encoder_ec11_ec12.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2023 Marco Massarelli 3 | 4 | SPDX-License-Identifier: MIT 5 | 6 | To view a copy of this license, visit https://opensource.org/license/mit/ 7 | 8 | Author: @ceoloide 9 | 10 | Description: 11 | Reversible Alps EC11 / EC12 rotary encoder footprint with customization options to make it 12 | compatible with Cherry MX or Choc v1 / v2 footprints, when co-located. 13 | 14 | The Alps EC12 (EC12E2440301) has a short through-shaft model that is well suited for low 15 | profile keyboards, although it doesn't include a momentary switch. 16 | 17 | Notes: 18 | - The footprint can be co-located with a Cherry MX hotswap footprint, as long as the outermost 19 | hotswap pads are at most 2 mm tall, so that they won't overlap with the plate mount legs 20 | of the rotary encoder. The encoder mounting pads can be positioned 7.5mm instead of 5.6mm to 21 | avoid overlap with mounting pins. 22 | - The footprint can be co-located with a Choc v1 / v2 hotswap footprint, as long as the encoder 23 | pads are positioned at leat 8.254 mm. If Choc v1 is co-located with the encoder, then mounting 24 | pads can be positioned 8.00mm instead of 5.6mm to avoid overlap with mounting pins. Choc v2 25 | don't have those pins, so wouldn't need the encoder mounting pads moved. 26 | - The footprint is inherently reversible, no solder jumper needed. Make sure to invert the pin 27 | assignment for pad A and C in firmware, to ensure the encoder rotation is handled consistently. 28 | 29 | Datasheet: 30 | https://www.soundwell.hk/ec12-rotary-encoder.html 31 | 32 | Params: 33 | side: default is F for Front 34 | the side on which to place the single-side footprint and designator, either F or B 35 | reversible: default is false 36 | if true, the footprint silkscreen will be placed on both sides so that the PCB can be 37 | reversible. Pads are all THT, and only A and C need to be reversed in software. 38 | include_momentary_switch_pads: default is true 39 | if true, the footprint will include 2 extra pads to accommodate for momentary switch pins, 40 | normally found in EC11-compatible rotary encoders. 41 | include_plate_hole_marking: default is false 42 | if true, will add a shape to indicate plate hole size and position for the encoder. If the 43 | encoder is co-located with a switch, then the regular 14mm plate hole will be slightly 44 | larger and work well enough. 45 | include_silkscreen: default is true 46 | if true it will include the silkscreen. 47 | include_plated_mounting_holes: default is true 48 | If true, it will include plated mounting holes and their pads, instead of just mechanical 49 | NPTH for the mounting pins. The advantage of NPTH is that they can be more easily co-located 50 | with Cherry MX mounting pins, allowing the Cherry MX hotswap pads to be 2.3 mm tall instead of 51 | 2.0 mmm. 52 | mounting_holes_position: default is 5.6 (mm) 53 | The distance in mm from the center of the footprint where to position the side mounting 54 | pads. The datasheet calls for 5.7mm, but wider position can be accommodated by bending 55 | legs slightly, while clearing up space for switch mounting pins (i.e. 7.5mm for Cherry, 56 | 8mm for Choc v1, see notes). 57 | mounting_hole_width: default is 1.5 (mm) 58 | The width of the mounting holes, in mm. The datasheet calls for 1.4mm rectangular, so an 59 | extra mm is added for the oval shape. Note that the plated pad is made 0.3mm larger. 60 | mounting_hole_height: default is 2.3 (mm) 61 | The height of the mounting holes, in mm. The datasheet calls for 2.1mm rectangular, but users 62 | reported a very tight fit with 2.1 mm oval holes, so the default is slightly larger. If the 63 | footprint is not co-located with hotswap sockets, then 2.8 mm is a safe default, as it is the 64 | same value used in the Sofle and other keyboards. Note that the plated pad is made 0.3mm larger. 65 | encoder_pads_position: default is 7.5 (mm) 66 | The position of the encoder pads, in mm. The datasheet calls for 7.5mm, but this makes it 67 | impossible for the encoder to be co-located wtih Choc v1 / v2 hotswap pads, as it would overlap. 68 | Increasing the value will require the encoder pins to be slightly bent. For Choc v1 / v2 use 69 | 8.254 as a minimum. 70 | encoder_3dmodel_filename: default is '' 71 | Allows you to specify the path to a 3D model STEP or WRL file to be 72 | used when rendering the PCB. Use the ${VAR_NAME} syntax to point to 73 | a KiCad configured path. 74 | encoder_3dmodel_xyz_offset: default is [0, 0, 0] 75 | xyz offset (in mm), used to adjust the position of the 3d model 76 | relative the footprint. 77 | encoder_3dmodel_xyz_scale: default is [1, 1, 1] 78 | xyz scale, used to adjust the size of the 3d model relative to its 79 | original size. 80 | encoder_3dmodel_xyz_rotation: default is [0, 0, 0] 81 | xyz rotation (in degrees), used to adjust the orientation of the 3d 82 | model relative the footprint. 83 | */ 84 | 85 | module.exports = { 86 | params: { 87 | designator: "RE", 88 | side: "F", 89 | reversible: false, 90 | include_momentary_switch_pads: true, 91 | include_plate_hole_marking: false, 92 | include_silkscreen: true, 93 | include_plated_mounting_holes: true, 94 | mounting_holes_position: 5.6, 95 | mounting_holes_height: 2.3, 96 | mounting_holes_width: 1.5, 97 | encoder_pads_position: 7.5, 98 | encoder_3dmodel_filename: "", 99 | encoder_3dmodel_xyz_offset: [0, 0, 0], 100 | encoder_3dmodel_xyz_rotation: [0, 0, 0], 101 | encoder_3dmodel_xyz_scale: [1, 1, 1], 102 | S1: { type: "net", value: "" }, 103 | S2: { type: "net", value: "" }, 104 | A: { type: "net", value: "RE_A" }, 105 | B: { type: "net", value: "GND" }, 106 | C: { type: "net", value: "RE_C" }, 107 | }, 108 | body: (p) => { 109 | const common_top = ` 110 | (footprint "ceoloide:rotary_encoder_ec11_ec12" 111 | (layer "${p.side}.Cu") 112 | ${p.at} 113 | (property "Reference" "${p.ref}" 114 | (at 0 -8.5) 115 | (layer "${p.side}.${p.include_silkscreen ? "SilkS" : "Fab"}") 116 | ${p.ref_hide} 117 | (effects (font (size 1 1) (thickness 0.15))${p.side == "B" ? " (justify mirror)" : ""}) 118 | )${ 119 | p.reversible && !p.ref_hide 120 | ? ` 121 | (fp_text user "${p.ref}" 122 | (at 0 -8.5) 123 | (layer "${p.side == "B" ? "F" : "B"}.${p.include_silkscreen ? "SilkS" : "Fab"}") 124 | (effects (font (size 1 1) (thickness 0.15))${p.side == "F" ? " (justify mirror)" : ""}) 125 | )` 126 | : "" 127 | } 128 | (attr through_hole) 129 | (pad "A" thru_hole oval (at 2.5 ${p.encoder_pads_position} ${p.r}) (size 1.6 1.1) (drill oval 1 0.5) (layers "*.Cu" "F.Mask") ${p.A}) 130 | (pad "B" thru_hole oval (at 0 ${p.encoder_pads_position} ${p.r}) (size 1.6 1.1) (drill oval 1 0.5) (layers "*.Cu" "F.Mask") ${p.B}) 131 | (pad "C" thru_hole oval (at -2.5 ${p.encoder_pads_position} ${p.r}) (size 1.6 1.1) (drill oval 1 0.5) (layers "*.Cu" "F.Mask") ${p.C}) 132 | `; 133 | const momentary_switch_pads = ` 134 | (pad "S1" thru_hole oval (at -2.5 -7 ${p.r}) (size 1.6 1.1) (drill oval 1 0.5) (layers "*.Cu" "F.Mask") ${p.S1}) 135 | (pad "S2" thru_hole oval (at 2.5 -7 ${p.r}) (size 1.6 1.1) (drill oval 1 0.5) (layers "*.Cu" "F.Mask") ${p.S2}) 136 | `; 137 | const plated_mp = ` 138 | (pad "" thru_hole roundrect 139 | (at -${p.mounting_holes_position} 0 ${p.r - 90}) 140 | (size ${p.mounting_holes_height + 0.3} ${p.mounting_holes_width + 0.3}) 141 | (drill oval ${p.mounting_holes_height} ${p.mounting_holes_width}) 142 | (layers "*.Cu" "*.Mask") 143 | (roundrect_rratio 0) 144 | (chamfer_ratio 0.2) 145 | (chamfer top_right top_left) 146 | ) 147 | (pad "" thru_hole roundrect 148 | (at ${p.mounting_holes_position} 0 ${p.r - 90}) 149 | (size ${p.mounting_holes_height + 0.3} ${p.mounting_holes_width + 0.3}) 150 | (drill oval ${p.mounting_holes_height} ${p.mounting_holes_width}) 151 | (layers "*.Cu" "*.Mask") 152 | (roundrect_rratio 0) 153 | (chamfer_ratio 0.2) 154 | (chamfer bottom_right bottom_left) 155 | ) 156 | `; 157 | const npth_mp = ` 158 | (pad "" np_thru_hole oval 159 | (at -${p.mounting_holes_position} 0 ${p.r - 90}) 160 | (size ${p.mounting_holes_height} ${p.mounting_holes_width}) 161 | (drill oval ${p.mounting_holes_height} ${p.mounting_holes_width}) 162 | ) 163 | (pad "" np_thru_hole oval 164 | (at ${p.mounting_holes_position} 0 ${p.r - 90}) 165 | (size ${p.mounting_holes_height} ${p.mounting_holes_width}) 166 | (drill oval ${p.mounting_holes_height} ${p.mounting_holes_width}) 167 | ) 168 | `; 169 | const plate_hole = ` 170 | (fp_rect (start -5.9 -6) (end 5.9 6) (layer "Dwgs.User") (stroke (width 0.15) (type solid)) (fill none)) 171 | `; 172 | const encoder_3dmodel = ` 173 | (model ${p.encoder_3dmodel_filename} 174 | (offset (xyz ${p.encoder_3dmodel_xyz_offset[0]} ${p.encoder_3dmodel_xyz_offset[1]} ${p.encoder_3dmodel_xyz_offset[2]})) 175 | (scale (xyz ${p.encoder_3dmodel_xyz_scale[0]} ${p.encoder_3dmodel_xyz_scale[1]} ${p.encoder_3dmodel_xyz_scale[2]})) 176 | (rotate (xyz ${p.encoder_3dmodel_xyz_rotation[0]} ${p.encoder_3dmodel_xyz_rotation[1]} ${p.encoder_3dmodel_xyz_rotation[2]})) 177 | ) 178 | `; 179 | const common_bottom = ` 180 | ) 181 | `; 182 | 183 | let final = common_top; 184 | if (p.include_momentary_switch_pads) { 185 | final += momentary_switch_pads; 186 | } 187 | if (p.include_plated_mounting_holes) { 188 | final += plated_mp; 189 | } else { 190 | final += npth_mp; 191 | } 192 | if (p.include_plate_hole_marking) { 193 | final += plate_hole; 194 | } 195 | if (p.encoder_3dmodel_filename) { 196 | final += encoder_3dmodel; 197 | } 198 | final += common_bottom; 199 | 200 | return final; 201 | }, 202 | }; 203 | -------------------------------------------------------------------------------- /ergogen/kicad/avocado/top_plate/top_plate.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "apply_defaults_to_fp_fields": false, 7 | "apply_defaults_to_fp_shapes": false, 8 | "apply_defaults_to_fp_text": false, 9 | "board_outline_line_width": 0.05, 10 | "copper_line_width": 0.2, 11 | "copper_text_italic": false, 12 | "copper_text_size_h": 1.5, 13 | "copper_text_size_v": 1.5, 14 | "copper_text_thickness": 0.3, 15 | "copper_text_upright": false, 16 | "courtyard_line_width": 0.05, 17 | "dimension_precision": 4, 18 | "dimension_units": 3, 19 | "dimensions": { 20 | "arrow_length": 1270000, 21 | "extension_offset": 500000, 22 | "keep_text_aligned": true, 23 | "suppress_zeroes": false, 24 | "text_position": 0, 25 | "units_format": 1 26 | }, 27 | "fab_line_width": 0.1, 28 | "fab_text_italic": false, 29 | "fab_text_size_h": 1.0, 30 | "fab_text_size_v": 1.0, 31 | "fab_text_thickness": 0.15, 32 | "fab_text_upright": false, 33 | "other_line_width": 0.1, 34 | "other_text_italic": false, 35 | "other_text_size_h": 1.0, 36 | "other_text_size_v": 1.0, 37 | "other_text_thickness": 0.15, 38 | "other_text_upright": false, 39 | "pads": { 40 | "drill": 0.762, 41 | "height": 1.524, 42 | "width": 1.524 43 | }, 44 | "silk_line_width": 0.12, 45 | "silk_text_italic": false, 46 | "silk_text_size_h": 1.0, 47 | "silk_text_size_v": 1.0, 48 | "silk_text_thickness": 0.15, 49 | "silk_text_upright": false, 50 | "zones": { 51 | "min_clearance": 0.508 52 | } 53 | }, 54 | "diff_pair_dimensions": [], 55 | "drc_exclusions": [], 56 | "meta": { 57 | "version": 2 58 | }, 59 | "rule_severities": { 60 | "annular_width": "error", 61 | "clearance": "error", 62 | "connection_width": "warning", 63 | "copper_edge_clearance": "error", 64 | "copper_sliver": "warning", 65 | "courtyards_overlap": "error", 66 | "diff_pair_gap_out_of_range": "error", 67 | "diff_pair_uncoupled_length_too_long": "error", 68 | "drill_out_of_range": "error", 69 | "duplicate_footprints": "warning", 70 | "extra_footprint": "warning", 71 | "footprint": "error", 72 | "footprint_symbol_mismatch": "warning", 73 | "footprint_type_mismatch": "ignore", 74 | "hole_clearance": "error", 75 | "hole_near_hole": "error", 76 | "holes_co_located": "warning", 77 | "invalid_outline": "error", 78 | "isolated_copper": "warning", 79 | "item_on_disabled_layer": "error", 80 | "items_not_allowed": "error", 81 | "length_out_of_range": "error", 82 | "lib_footprint_issues": "warning", 83 | "lib_footprint_mismatch": "warning", 84 | "malformed_courtyard": "error", 85 | "microvia_drill_out_of_range": "error", 86 | "missing_courtyard": "ignore", 87 | "missing_footprint": "warning", 88 | "net_conflict": "warning", 89 | "npth_inside_courtyard": "ignore", 90 | "padstack": "warning", 91 | "pth_inside_courtyard": "ignore", 92 | "shorting_items": "error", 93 | "silk_edge_clearance": "warning", 94 | "silk_over_copper": "warning", 95 | "silk_overlap": "warning", 96 | "skew_out_of_range": "error", 97 | "solder_mask_bridge": "error", 98 | "starved_thermal": "error", 99 | "text_height": "warning", 100 | "text_thickness": "warning", 101 | "through_hole_pad_without_hole": "error", 102 | "too_many_vias": "error", 103 | "track_dangling": "warning", 104 | "track_width": "error", 105 | "tracks_crossing": "error", 106 | "unconnected_items": "error", 107 | "unresolved_variable": "error", 108 | "via_dangling": "warning", 109 | "zones_intersect": "error" 110 | }, 111 | "rules": { 112 | "max_error": 0.005, 113 | "min_clearance": 0.0, 114 | "min_connection": 0.0, 115 | "min_copper_edge_clearance": 0.5, 116 | "min_hole_clearance": 0.25, 117 | "min_hole_to_hole": 0.25, 118 | "min_microvia_diameter": 0.2, 119 | "min_microvia_drill": 0.1, 120 | "min_resolved_spokes": 2, 121 | "min_silk_clearance": 0.0, 122 | "min_text_height": 0.8, 123 | "min_text_thickness": 0.08, 124 | "min_through_hole_diameter": 0.3, 125 | "min_track_width": 0.2, 126 | "min_via_annular_width": 0.1, 127 | "min_via_diameter": 0.4, 128 | "solder_mask_to_copper_clearance": 0.0, 129 | "use_height_for_length_calcs": true 130 | }, 131 | "teardrop_options": [ 132 | { 133 | "td_onpadsmd": true, 134 | "td_onroundshapesonly": false, 135 | "td_ontrackend": false, 136 | "td_onviapad": true 137 | } 138 | ], 139 | "teardrop_parameters": [ 140 | { 141 | "td_allow_use_two_tracks": true, 142 | "td_curve_segcount": 0, 143 | "td_height_ratio": 1.0, 144 | "td_length_ratio": 0.5, 145 | "td_maxheight": 2.0, 146 | "td_maxlen": 1.0, 147 | "td_on_pad_in_zone": false, 148 | "td_target_name": "td_round_shape", 149 | "td_width_to_size_filter_ratio": 0.9 150 | }, 151 | { 152 | "td_allow_use_two_tracks": true, 153 | "td_curve_segcount": 0, 154 | "td_height_ratio": 1.0, 155 | "td_length_ratio": 0.5, 156 | "td_maxheight": 2.0, 157 | "td_maxlen": 1.0, 158 | "td_on_pad_in_zone": false, 159 | "td_target_name": "td_rect_shape", 160 | "td_width_to_size_filter_ratio": 0.9 161 | }, 162 | { 163 | "td_allow_use_two_tracks": true, 164 | "td_curve_segcount": 0, 165 | "td_height_ratio": 1.0, 166 | "td_length_ratio": 0.5, 167 | "td_maxheight": 2.0, 168 | "td_maxlen": 1.0, 169 | "td_on_pad_in_zone": false, 170 | "td_target_name": "td_track_end", 171 | "td_width_to_size_filter_ratio": 0.9 172 | } 173 | ], 174 | "track_widths": [], 175 | "tuning_pattern_settings": { 176 | "diff_pair_defaults": { 177 | "corner_radius_percentage": 80, 178 | "corner_style": 1, 179 | "max_amplitude": 1.0, 180 | "min_amplitude": 0.2, 181 | "single_sided": false, 182 | "spacing": 1.0 183 | }, 184 | "diff_pair_skew_defaults": { 185 | "corner_radius_percentage": 80, 186 | "corner_style": 1, 187 | "max_amplitude": 1.0, 188 | "min_amplitude": 0.2, 189 | "single_sided": false, 190 | "spacing": 0.6 191 | }, 192 | "single_track_defaults": { 193 | "corner_radius_percentage": 80, 194 | "corner_style": 1, 195 | "max_amplitude": 1.0, 196 | "min_amplitude": 0.2, 197 | "single_sided": false, 198 | "spacing": 0.6 199 | } 200 | }, 201 | "via_dimensions": [], 202 | "zones_allow_external_fillets": false 203 | }, 204 | "ipc2581": { 205 | "dist": "", 206 | "distpn": "", 207 | "internal_id": "", 208 | "mfg": "", 209 | "mpn": "" 210 | }, 211 | "layer_presets": [], 212 | "viewports": [] 213 | }, 214 | "boards": [], 215 | "cvpcb": { 216 | "equivalence_files": [] 217 | }, 218 | "libraries": { 219 | "pinned_footprint_libs": [], 220 | "pinned_symbol_libs": [] 221 | }, 222 | "meta": { 223 | "filename": "top_plate.kicad_pro", 224 | "version": 1 225 | }, 226 | "net_settings": { 227 | "classes": [ 228 | { 229 | "bus_width": 12, 230 | "clearance": 0.2, 231 | "diff_pair_gap": 0.25, 232 | "diff_pair_via_gap": 0.25, 233 | "diff_pair_width": 0.2, 234 | "line_style": 0, 235 | "microvia_diameter": 0.3, 236 | "microvia_drill": 0.1, 237 | "name": "Default", 238 | "pcb_color": "rgba(0, 0, 0, 0.000)", 239 | "schematic_color": "rgba(0, 0, 0, 0.000)", 240 | "track_width": 0.25, 241 | "via_diameter": 0.8, 242 | "via_drill": 0.4, 243 | "wire_width": 6 244 | } 245 | ], 246 | "meta": { 247 | "version": 3 248 | }, 249 | "net_colors": null, 250 | "netclass_assignments": null, 251 | "netclass_patterns": [ 252 | { 253 | "netclass": "Default", 254 | "pattern": "" 255 | }, 256 | { 257 | "netclass": "Default", 258 | "pattern": "" 259 | }, 260 | { 261 | "netclass": "Default", 262 | "pattern": "" 263 | }, 264 | { 265 | "netclass": "Default", 266 | "pattern": "" 267 | }, 268 | { 269 | "netclass": "Default", 270 | "pattern": "" 271 | }, 272 | { 273 | "netclass": "Default", 274 | "pattern": "" 275 | }, 276 | { 277 | "netclass": "Default", 278 | "pattern": "" 279 | }, 280 | { 281 | "netclass": "Default", 282 | "pattern": "" 283 | }, 284 | { 285 | "netclass": "Default", 286 | "pattern": "" 287 | }, 288 | { 289 | "netclass": "Default", 290 | "pattern": "" 291 | }, 292 | { 293 | "netclass": "Default", 294 | "pattern": "" 295 | }, 296 | { 297 | "netclass": "Default", 298 | "pattern": "" 299 | }, 300 | { 301 | "netclass": "Default", 302 | "pattern": "" 303 | }, 304 | { 305 | "netclass": "Default", 306 | "pattern": "" 307 | } 308 | ] 309 | }, 310 | "pcbnew": { 311 | "last_paths": { 312 | "gencad": "", 313 | "idf": "", 314 | "netlist": "", 315 | "plot": "../../../gerbers/top_plate/", 316 | "pos_files": "", 317 | "specctra_dsn": "", 318 | "step": "", 319 | "svg": "", 320 | "vrml": "" 321 | }, 322 | "page_layout_descr_file": "" 323 | }, 324 | "schematic": { 325 | "legacy_lib_dir": "", 326 | "legacy_lib_list": [] 327 | }, 328 | "sheets": [], 329 | "text_variables": {} 330 | } 331 | -------------------------------------------------------------------------------- /ergogen/config.yaml: -------------------------------------------------------------------------------- 1 | meta: 2 | engine: 4.1.0 3 | version: 0.0.2 4 | author: auryn 5 | 6 | units: 7 | kx: u 8 | ky: u 9 | px: u + 2 10 | py: u + 2 11 | kcow: 14 12 | kcoh: 14 13 | 14 | points: 15 | key.padding: ky 16 | zones: 17 | main: 18 | rows: 19 | bottom.row_net: P2 20 | home.row_net: P0 21 | top.row_net: P1 22 | columns: 23 | pinky: 24 | key: 25 | col_net: P7 26 | spread: kx 27 | ring: 28 | key: 29 | col_net: P6 30 | stagger: 0.4 ky 31 | spread: kx 32 | middle: 33 | key: 34 | col_net: P5 35 | stagger: 0.28 ky 36 | spread: kx 37 | index: 38 | key: 39 | col_net: P4 40 | stagger: -0.33 ky 41 | spread: kx 42 | inner: 43 | key: 44 | col_net: P3 45 | stagger: -0.11 ky 46 | spread: kx 47 | thumb: 48 | anchor: 49 | ref: main_inner_bottom 50 | shift: [-1 kx, -1.15 ky] 51 | rows.home.row_net: P8 52 | columns: 53 | inner.key: 54 | origin: [-1 kx, -1.15 ky] 55 | col_net: P5 56 | spread: kx 57 | home.key: 58 | col_net: P4 59 | splay: -0.5 ky 60 | origin: [-0.5 kx, -0.15 ky] 61 | spread: 1.05 kx 62 | outer.key: 63 | col_net: P3 64 | spread: 1.05 kx 65 | splay: -0.5 ky 66 | origin: [-0.52 ky, -0.2 kx] 67 | mountscrew_top_left: 68 | anchor: 69 | ref.aggregate.parts: 70 | [main_pinky_top, main_ring_top, main_ring_home] 71 | shift: [-2.5, -0.5] 72 | columns.screw.key.tags: [screw] 73 | mountscrew_bottom_left: 74 | anchor: 75 | ref.aggregate.parts: 76 | [main_pinky_home, main_ring_home, main_ring_bottom] 77 | shift: [-2.5, -0.5] 78 | columns.screw.key.tags: [screw] 79 | mountscrew_top_right: 80 | anchor: 81 | ref.aggregate.parts: 82 | [main_index_top, main_index_home, main_inner_top, main_inner_home] 83 | shift: [0, 0] 84 | columns.screw.key.tags: [screw] 85 | mountscrew_bottom_right: 86 | anchor: 87 | ref.aggregate.parts: 88 | [main_index_home, main_index_bottom, main_inner_home, main_inner_bottom] 89 | shift: [0, 0] 90 | columns.screw.key.tags: [screw] 91 | mountscrew_right_right: 92 | anchor: 93 | ref.aggregate.parts: 94 | [thumb_home_home, thumb_outer_home] 95 | shift: [0, 0] 96 | columns.screw.key.tags: [screw] 97 | outlines: 98 | _base: 99 | - what: rectangle 100 | bound: true 101 | where: 102 | - /main/ 103 | - /thumb/ 104 | size: [cx, cy] 105 | _switch_cutouts: 106 | - what: rectangle 107 | where: 108 | - /main/ 109 | - /thumb/ 110 | size: [kcow, kcoh] 111 | _board_outline: 112 | - what: polygon 113 | fillet: 2 114 | points: 115 | - ref: thumb_outer_home 116 | shift: [0.6kx, 0.6ky] 117 | - ref: thumb_outer_home 118 | shift: [0.6kx, -0.6ky] 119 | - ref: thumb_outer_home 120 | shift: [-0.4kx, -0.6ky] 121 | 122 | - ref: thumb_home_home 123 | shift: [0.4kx, -0.6ky] 124 | - ref: thumb_home_home 125 | shift: [-0.4kx, -0.6ky] 126 | 127 | - ref: thumb_inner_home 128 | shift: [0.4kx, -0.6ky] 129 | - ref: thumb_inner_home 130 | shift: [-0.6kx, -0.6ky] 131 | 132 | - ref: main_pinky_bottom 133 | shift: [1.6kx, -0.6ky] 134 | - ref: main_pinky_bottom 135 | shift: [0.6kx, -0.6ky] 136 | - ref: main_pinky_bottom 137 | shift: [-0.6kx, -0.6ky] 138 | 139 | - ref: main_pinky_top 140 | shift: [-0.6kx, 0.6ky] 141 | - ref: main_pinky_top 142 | shift: [0.4kx, 0.6ky] 143 | 144 | - ref: main_ring_top 145 | shift: [-0.6kx, 0.6ky] 146 | - ref: main_ring_top 147 | shift: [0.4kx, 0.6ky] 148 | 149 | - ref: main_middle_top 150 | shift: [-0.6kx, 0.6ky] 151 | - ref: main_middle_top 152 | shift: [0.6kx, 0.6ky] 153 | 154 | - ref: main_index_top 155 | shift: [-0.4kx, 0.6ky] 156 | - ref: main_index_top 157 | shift: [0.5kx, 0.6ky] 158 | 159 | - ref: main_inner_top 160 | shift: [-0.4kx, 0.6ky] 161 | - ref: main_inner_top 162 | shift: [0.5kx, 0.6ky] 163 | 164 | - ref: main_inner_top 165 | shift: [0.6kx, 0.4ky] 166 | - ref: main_inner_top 167 | shift: [1.8kx, 0.4ky] 168 | 169 | - ref: main_inner_bottom 170 | shift: [1.8kx, -0.6ky] 171 | _keycap_outlines: 172 | - what: rectangle 173 | fillet: 2 174 | where: 175 | - /main/ 176 | - /thumb/ 177 | size: [1kx , 1ky ] # Choc keycaps are 17.5 x 16.5 178 | _board_plate: 179 | - what: outline 180 | name: _base 181 | - what: polygon 182 | operation: add 183 | points: 184 | - ref: main_index_bottom 185 | shift: [-0.5 cx, 0] 186 | - ref: thumb_inner_home 187 | shift: [-0.5 cx, -0.5 cy] 188 | - ref: thumb_home_home 189 | shift: [0.5 cx, -0.5 cy] 190 | - ref: thumb_outer_home 191 | shift: [0.5 cx, -0.5 cy] 192 | - ref: thumb_outer_home 193 | shift: [0.5 cx, 0.5 cy] 194 | - ref: thumb_home_home 195 | shift: [0.25 cx, 0.5 cy] 196 | - ref: main_inner_bottom 197 | shift: [0.5 cx, 0] 198 | - what: outline 199 | name: _board_plate 200 | expand: 2 201 | - what: outline 202 | name: _switch_cutouts 203 | operation: subtract 204 | plate: 205 | - what: outline 206 | name: _board_plate 207 | preview: 208 | - what: outline 209 | name: _board_outline 210 | operation: stack 211 | - what: outline 212 | name: _keycap_outlines 213 | operation: stack 214 | cases.avocado: 215 | - what: outline 216 | name: _board_outline 217 | extrude: 3 218 | operation: subtract 219 | - what: outline 220 | name: _keycap_outlines 221 | extrude: 6 222 | operation: add 223 | pcbs: 224 | plate: 225 | outlines: 226 | main.outline: plate 227 | footprints: 228 | screws: 229 | what: mounting_hole 230 | params: 231 | drill: 4.3 232 | outline: 0.4 233 | where: [screw] 234 | front_text: &text 235 | what: text 236 | where: &textWhere 237 | ref: 238 | - main_index_bottom 239 | shift: [-7, -0.6 cx] 240 | params: &textParams 241 | text: MX Switch Plate 242 | justify: left 243 | back_text: 244 | <<: *text 245 | where: 246 | <<: *textWhere 247 | shift: [7, -0.6 cx] 248 | params: 249 | <<: *textParams 250 | layer: B.SilkS 251 | justify: left mirror 252 | 253 | bottom: 254 | outlines: 255 | main.outline: _board_outline 256 | footprints: 257 | screws: 258 | what: mounting_hole 259 | params: 260 | where: [screw] 261 | front_text: &text 262 | what: text 263 | where: &textWhere 264 | ref: 265 | - main_pinky_bottom 266 | shift: [-7, -0.6 cx] 267 | params: &textParams 268 | text: Avocado 269 | justify: left 270 | back_text: 271 | <<: *text 272 | where: 273 | <<: *textWhere 274 | shift: [0, -0.6 cx] 275 | params: 276 | <<: *textParams 277 | layer: B.SilkS 278 | justify: left mirror 279 | 280 | avocado: 281 | outlines: 282 | main.outline: _board_outline 283 | keycaps: 284 | outline: _keycap_outlines 285 | layer: Eco1.User 286 | footprints: 287 | diode: 288 | what: sod-123w 289 | where: 290 | - /main/ 291 | - /thumb/ 292 | params: 293 | from: "{{row_net}}" 294 | to: "{{row_net}}" 295 | adjust: 296 | shift: [ -7.6, -1.6 ] 297 | rotate: 90 298 | mx: 299 | what: mx 300 | where: 301 | - /main/ 302 | - /thumb/ 303 | params: 304 | keycaps: true 305 | reverse: true 306 | hotswap: true 307 | from: "{{col_net}}" 308 | to: "{{row_net}}" 309 | promicro: 310 | what: promicro_pretty 311 | where: 312 | ref: 313 | - main_inner_home 314 | shift: [22, 6.5] 315 | params: 316 | reversable_pins: 13 317 | # rotate: -90 318 | battery_connector: 319 | what: jst-s2b-ph-kl 320 | where: 321 | ref: 322 | - main_inner_bottom 323 | shift: [21, -2] 324 | rotate: 180 325 | params: 326 | neg: B- 327 | pos: pos 328 | on_off_switch: 329 | what: pcm12 330 | where: 331 | ref: 332 | - main_inner_bottom 333 | shift: [32, 3] 334 | rotate: 90 335 | params: 336 | from: pos 337 | to: B+ 338 | wuerth-434121025816: 339 | what: wuerth-434121025816 340 | where: 341 | ref: 342 | - main_inner_bottom 343 | shift: [31.5, -6] 344 | rotate: 90 345 | params: 346 | r1: RST 347 | r2: GND 348 | front_text: &text 349 | what: text 350 | where: &textWhere 351 | ref: 352 | - main_pinky_bottom 353 | shift: [12, -7] 354 | params: &textParams 355 | text: Avocado\nA keyboard from Auryn 356 | justify: left 357 | back_text: 358 | <<: *text 359 | where: 360 | <<: *textWhere 361 | shift: [27, -7] 362 | params: 363 | <<: *textParams 364 | layer: B.SilkS 365 | justify: left mirror 366 | avocado_image: 367 | where: 368 | ref: main_middle_bottom 369 | shift: [-5, -15] 370 | what: avocado 371 | screws: 372 | what: mounting_hole 373 | params: 374 | where: [screw] 375 | -------------------------------------------------------------------------------- /ergogen/images/avocado.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 153 | 209 | 214 | 218 | 225 | 226 | 227 | -------------------------------------------------------------------------------- /ergogen/footprints/promicro_pretty.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | params: { 3 | reversable: { type: "boolean", value: true }, 4 | label: { type: "boolean", value: true }, 5 | instructions: { type: "boolean", value: true }, 6 | traces: { type: "boolean", value: true }, 7 | view: { type: "boolean", value: true }, 8 | reversable_pins: { type: "boolean", value: 4 }, 9 | 10 | P1: { type: "net", value: "P1" }, 11 | P0: { type: "net", value: "P0" }, 12 | P2: { type: "net", value: "P2" }, 13 | P3: { type: "net", value: "P3" }, 14 | P4: { type: "net", value: "P4" }, 15 | P5: { type: "net", value: "P5" }, 16 | P6: { type: "net", value: "P6" }, 17 | P7: { type: "net", value: "P7" }, 18 | P8: { type: "net", value: "P8" }, 19 | P9: { type: "net", value: "P9" }, 20 | 21 | P21: { type: "net", value: "P21" }, 22 | P20: { type: "net", value: "P20" }, 23 | P19: { type: "net", value: "P19" }, 24 | P18: { type: "net", value: "P18" }, 25 | P15: { type: "net", value: "P15" }, 26 | P14: { type: "net", value: "P14" }, 27 | P16: { type: "net", value: "P16" }, 28 | P10: { type: "net", value: "P10" }, 29 | 30 | RAW: { type: "net", value: "RAW" }, 31 | BAP: { type: "net", value: "B+" }, 32 | BAM: { type: "net", value: "B-" }, 33 | RST: { type: "net", value: "RST" }, 34 | VCC: { type: "net", value: "VCC" }, 35 | GND: { type: "net", value: "GND" }, 36 | }, 37 | body: (p) => { 38 | /* Putting the nets into an array so that it can be itterated through */ 39 | const pin_nets = [ 40 | [`${p.BAM.str}`, `${p.BAP.str}`], 41 | [`${p.P1.str}`, `${p.RAW.str}`], 42 | [`${p.P0.str}`, `${p.GND.str}`], 43 | [`${p.GND.str}`, `${p.RST.str}`], 44 | [`${p.GND.str}`, `${p.VCC.str}`], 45 | [`${p.P2.str}`, `${p.P21.str}`], 46 | [`${p.P3.str}`, `${p.P20.str}`], 47 | [`${p.P4.str}`, `${p.P19.str}`], 48 | [`${p.P5.str}`, `${p.P18.str}`], 49 | [`${p.P6.str}`, `${p.P15.str}`], 50 | [`${p.P7.str}`, `${p.P14.str}`], 51 | [`${p.P8.str}`, `${p.P16.str}`], 52 | [`${p.P9.str}`, `${p.P10.str}`], 53 | ]; 54 | 55 | /*These constants are the magic of this code, they allow us to adjust almost everything important aspect of the microcontroller. 56 | The reason this is helpfull is that if you don't want to use a Seeed Xiao you can easily adjust the paramiters to make a different microcontroller. 57 | 58 | top_left_pin: This is the position of the top left pin of the microcontroller. 59 | top_right_pin: This is the position of the top right pin of the microcontroller. 60 | pin_dist: The distance in between each pin horizontaly 61 | total_pin_num: The total number of pins the microcontroller has. This number must be divisable by two. 62 | pin_to_male_pad: The distance from the pin on the microcontroller to the male pad. 63 | pin_to_female_pad: The distance from the pin on te microcontroller to the female pad. 64 | pin_to_via: the distance from the pin on the microcontroller to the via. 65 | */ 66 | const spacing = { 67 | top_left_pin: { x: -7.62, y: -13.97 }, 68 | top_right_pin: { x: 7.62, y: -13.97 }, 69 | pin_dist: 2.54, 70 | total_pin_num: 26, 71 | pin_to_male_pad: 2, 72 | pin_to_female_pad: 2.845, 73 | pin_to_via: 4.358, 74 | }; 75 | 76 | /*The other distances needed to make the traces work. This is basically just two points. 77 | 78 | top_left top_right 79 | ^ ^ 80 | /``````````````\ 81 | [] 0 O [] 82 | \............../ 83 | ^ ^ 84 | bottom_left bottom_right 85 | 86 | The number is the distance from the pin to the corner of the trace. 87 | */ 88 | const trace_spacing = { 89 | top_left: { x: 3.6, y: 0.85 }, 90 | top_right: { x: 5.2, y: 0.85 }, 91 | bottom_left: { x: 5.2, y: 0.85 }, 92 | bottom_right: { x: 3.6, y: 0.85 }, 93 | }; 94 | 95 | /*Generates all of the through holes on the microcontroller*/ 96 | const get_thru_hole = () => { 97 | let thru_hole = ""; 98 | /* Starts at the top two microcontrollers and goes down. 99 | It makes the nets internal if it reversable and straight to the pin_nets if not.*/ 100 | for (let i = 0; i < spacing.total_pin_num / 2; i++) { 101 | if (i < p.reversable_pins) { 102 | thru_hole += `(pad ${i} thru_hole oval (at ${spacing.top_left_pin.x} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) ${p.reversable ? p.local_net(i).str : pin_nets[i][0]})\n`; 103 | thru_hole += `(pad ${spacing.total_pin_num - 1 - i} thru_hole oval (at ${spacing.top_right_pin.x} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) ${p.reversable ? p.local_net(spacing.total_pin_num - 1 - i).str : pin_nets[i][1]})\n`; 104 | } else { 105 | thru_hole += `(pad ${i} thru_hole oval (at ${spacing.top_left_pin.x} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) ${pin_nets[i][0]})\n`; 106 | thru_hole += `(pad ${spacing.total_pin_num - 1 - i} thru_hole oval (at ${spacing.top_right_pin.x} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) ${pin_nets[i][1]})\n`; 107 | } 108 | } 109 | return thru_hole; 110 | }; 111 | 112 | /*I made the male pad and female pads that I stole from infused-kim at https://nilnil.notion.site/Convert-Kicad-Footprints-to-Ergogen-8340ce87ad554c69af4e3f92bc9a0898 113 | into constants so that I didn't have to copy and paste them a million times in get_solder_pads. Changing these will change the shape of the pads in the reversable footprint. 114 | 115 | |`````\ \```````| 116 | Male: | > Female: > | 117 | |...../ /.......| 118 | */ 119 | const male_pad = ` 120 | (zone_connect 2) 121 | (options (clearance outline) (anchor rect)) 122 | (primitives 123 | (gr_poly 124 | (pts 125 | (xy -0.5 -0.625) 126 | (xy -0.25 -0.625) 127 | (xy 0.25 0) 128 | (xy -0.25 0.625) 129 | (xy -0.5 0.625) 130 | ) 131 | (width 0) (fill yes)) 132 | ) 133 | )\n`; 134 | const female_pad = ` 135 | (zone_connect 2) 136 | (options (clearance outline) (anchor rect)) 137 | (primitives 138 | (gr_poly 139 | (pts 140 | (xy -0.65 -0.625) 141 | (xy 0.5 -0.625) 142 | (xy 0.5 0.625) 143 | (xy -0.65 0.625) 144 | (xy -0.15 0) 145 | ) 146 | (width 0) (fill yes)) 147 | ) 148 | )\n`; 149 | 150 | /*This generates all of the solder pads that make the reversable footprints possible.*/ 151 | const get_solder_pads = () => { 152 | let solder_pads = ""; 153 | 154 | /*It starts with making the first row then itterates down. 155 | Front means the front layer of the pcb while back means the back layer of the pcb. 156 | left and right mean the left and right side of the microcontroller*/ 157 | for (let i = 0; i < p.reversable_pins; i++) { 158 | //Left VIAS 159 | solder_pads += `\t\t(pad ${i} thru_hole circle (at ${spacing.top_left_pin.x + spacing.pin_to_via} ${spacing.top_left_pin.y + i * spacing.pin_dist}) (size 0.8 0.8) (drill 0.4) (layers *.Cu *.Mask) ${pin_nets[i][0]})\n`; 160 | 161 | //Left Front male 162 | solder_pads += `\t\t(pad ${i} smd custom (at ${spacing.top_left_pin.x + spacing.pin_to_male_pad} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 0.2 0.2) (layers F.Cu F.Mask) ${p.local_net(i).str}`; 163 | solder_pads += male_pad; 164 | 165 | //Left Front female 166 | solder_pads += `\t\t(pad ${spacing.total_pin_num - 1 - i} smd custom (at ${spacing.top_left_pin.x + spacing.pin_to_female_pad} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 0.2 0.2) (layers F.Cu F.Mask) ${pin_nets[i][1]}`; 167 | solder_pads += female_pad; 168 | 169 | //Left Back male 170 | solder_pads += `\t\t(pad ${i} smd custom (at ${spacing.top_left_pin.x + spacing.pin_to_male_pad} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 0.2 0.2) (layers B.Cu B.Mask) ${p.local_net(i).str}`; 171 | solder_pads += male_pad; 172 | 173 | //Left Back female 174 | solder_pads += `\t\t(pad ${i} smd custom (at ${spacing.top_left_pin.x + spacing.pin_to_female_pad} ${spacing.top_left_pin.y + i * spacing.pin_dist} ${p.rot}) (size 0.2 0.2) (layers B.Cu B.Mask) ${pin_nets[i][0]}`; 175 | solder_pads += female_pad; 176 | 177 | //Right VIAS 178 | solder_pads += `\t\t(pad ${spacing.total_pin_num - 1 - i} thru_hole circle (at ${spacing.top_right_pin.x - spacing.pin_to_via} ${spacing.top_right_pin.y + i * spacing.pin_dist}) (size 0.8 0.8) (drill 0.4) (layers *.Cu *.Mask) ${pin_nets[i][1]})\n`; 179 | 180 | //Right Back male 181 | solder_pads += `\t\t(pad ${spacing.total_pin_num - 1 - i} smd custom (at ${spacing.top_right_pin.x - spacing.pin_to_male_pad} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 0.2 0.2) (layers B.Cu B.Mask) ${p.local_net(spacing.total_pin_num - 1 - i).str}`; 182 | solder_pads += male_pad; 183 | 184 | //Right Back female 185 | solder_pads += `\t\t(pad ${spacing.total_pin_num - 1 - i} smd custom (at ${spacing.top_right_pin.x - spacing.pin_to_female_pad} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 0.2 0.2) (layers B.Cu B.Mask) ${pin_nets[i][1]}`; 186 | solder_pads += female_pad; 187 | 188 | //Right Front female 189 | solder_pads += `\t\t(pad ${i} smd custom (at ${spacing.top_right_pin.x - spacing.pin_to_female_pad} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 0.2 0.2) (layers F.Cu F.Mask) ${pin_nets[i][0]}`; 190 | solder_pads += female_pad; 191 | 192 | //Right Front male 193 | solder_pads += `\t\t(pad ${spacing.total_pin_num - 1 - i} smd custom (at ${spacing.top_right_pin.x - spacing.pin_to_male_pad} ${spacing.top_right_pin.y + i * spacing.pin_dist} ${180 + p.rot}) (size 0.2 0.2) (layers F.Cu F.Mask) ${p.local_net(spacing.total_pin_num - 1 - i).str}`; 194 | solder_pads += male_pad; 195 | } 196 | return solder_pads; 197 | }; 198 | 199 | /*I stole get_at_coordinates() and adjust_point() from infused-kim's guide at https://nilnil.notion.site/Convert-Kicad-Footprints-to-Ergogen-8340ce87ad554c69af4e3f92bc9a0898 200 | I have no idea how it works. I am pretty sure that it interfaces with the other ergogen code in fancy ways. 201 | I do know that get_at_coordinates() is a helper funciton for adjust_point*/ 202 | const get_at_coordinates = () => { 203 | const pattern = /\(at (-?[\d\.]*) (-?[\d\.]*) (-?[\d\.]*)\)/; 204 | const matches = p.at.match(pattern); 205 | if (matches && matches.length == 4) { 206 | return [ 207 | parseFloat(matches[1]), 208 | parseFloat(matches[2]), 209 | parseFloat(matches[3]), 210 | ]; 211 | } else { 212 | return null; 213 | } 214 | }; 215 | 216 | /*Call adjust_point if you want to make something move that is outisde of the main body of the footprint. Aka after the ')' in the return statement*/ 217 | const adjust_point = (x, y) => { 218 | const at_l = get_at_coordinates(); 219 | if (at_l == null) { 220 | throw new Error(`Could not get x and y coordinates from p.at: ${p.at}`); 221 | } 222 | const at_x = at_l[0]; 223 | const at_y = at_l[1]; 224 | const at_angle = at_l[2]; 225 | const adj_x = at_x + x; 226 | const adj_y = at_y + y; 227 | 228 | const radians = (Math.PI / 180) * at_angle, 229 | cos = Math.cos(radians), 230 | sin = Math.sin(radians), 231 | nx = cos * (adj_x - at_x) + sin * (adj_y - at_y) + at_x, 232 | ny = cos * (adj_y - at_y) - sin * (adj_x - at_x) + at_y; 233 | 234 | const point_str = `${nx.toFixed(2)} ${ny.toFixed(2)}`; 235 | return point_str; 236 | }; 237 | 238 | /*This generates traces that connect all the internal peices that should be connected*/ 239 | const get_traces = () => { 240 | let traces = ``; 241 | /*Starts by generating all of the traces for one row, then itterates down all of the pins.*/ 242 | for (let i = 0; i < p.reversable_pins; i++) { 243 | /* Left pin to Right male pad F and B*/ 244 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_male_pad, spacing.top_left_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x, spacing.top_left_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 245 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_male_pad, spacing.top_left_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x, spacing.top_left_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "B.Cu"))`; 246 | /* Right pin to Right male pad F and B*/ 247 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_male_pad, spacing.top_right_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x, spacing.top_right_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 248 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_male_pad, spacing.top_right_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x, spacing.top_right_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "B.Cu"))`; 249 | 250 | /*Left female pad to right via F*/ 251 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_female_pad, spacing.top_left_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x + trace_spacing.top_left.x, spacing.top_left_pin.y - trace_spacing.top_left.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 252 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + trace_spacing.top_left.x, spacing.top_left_pin.y - trace_spacing.top_left.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x - trace_spacing.top_right.x, spacing.top_right_pin.y - trace_spacing.top_right.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 253 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - trace_spacing.top_right.x, spacing.top_right_pin.y - trace_spacing.top_right.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_via, spacing.top_right_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 254 | 255 | /*Right female pad to left via F*/ 256 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_female_pad, spacing.top_right_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x - trace_spacing.bottom_right.x, spacing.top_right_pin.y + trace_spacing.bottom_right.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 257 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - trace_spacing.bottom_right.x, spacing.top_right_pin.y + trace_spacing.bottom_right.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x + trace_spacing.bottom_left.x, spacing.top_left_pin.y + trace_spacing.bottom_left.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 258 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + trace_spacing.bottom_left.x, spacing.top_left_pin.y + trace_spacing.bottom_left.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_via, spacing.top_left_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "F.Cu"))`; 259 | 260 | /*Left female pad to left via B*/ 261 | traces += `\t(segment (start ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_female_pad, spacing.top_left_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_left_pin.x + spacing.pin_to_via, spacing.top_left_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "B.Cu"))`; 262 | 263 | /*Right female pad to right via B*/ 264 | traces += `\t(segment (start ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_female_pad, spacing.top_right_pin.y + i * spacing.pin_dist)}) (end ${adjust_point(spacing.top_right_pin.x - spacing.pin_to_via, spacing.top_right_pin.y + i * spacing.pin_dist)}) (width 0.25) (layer "B.Cu"))`; 265 | } 266 | return traces; 267 | }; 268 | 269 | /* Adding lables on the front side of the pcb */ 270 | const lable_txt = ` 271 | ${"" /*Lettering on the silkscreen*/} 272 | (fp_text user "promicro" (at 0 -20 ${p.rot}) (layer F.SilkS) 273 | (effects (font (size 1 1) (thickness 0.15))) 274 | ) 275 | `; 276 | 277 | /* Adds lables on the back side of the pcb */ 278 | const reversable_lable_txt = ` 279 | ${"" /*Lettering on the silkscreen*/} 280 | (fp_text user "promicro" (at 0 -20 ${p.rot}) (layer B.SilkS) 281 | (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) 282 | ) 283 | `; 284 | 285 | /* Instructions about which side the solder should be on. */ 286 | const instructions = ` 287 | (fp_text user "R. Side - Jumper Here" (at 0 19 ${p.rot}) (layer F.SilkS) 288 | (effects (font (size 1 1) (thickness 0.15))) 289 | ) 290 | (fp_text user "L. Side - Jumper Here" (at 0 19 ${p.rot}) (layer B.SilkS) 291 | (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) 292 | ) 293 | `; 294 | 295 | /* Code for hte reversable footprints */ 296 | const standard = ` 297 | (module ProMicro ${p.at /* parametric position */} 298 | (layer F.Cu) 299 | (tedit 5A06A962) 300 | (descr "Pro Micro footprint") 301 | (tags "promicro ProMicro") 302 | 303 | (fp_line (start 8.89 -15.24) (end 8.89 15.24) (layer F.SilkS) (width 0.15)) 304 | (fp_line (start 8.89 -15.24) (end 3.81 -15.24) (layer F.SilkS) (width 0.15)) 305 | (fp_line (start 3.81 -15.24) (end 3.81 -17.78) (layer F.SilkS) (width 0.15)) 306 | (fp_line (start 3.81 -17.78) (end -3.81 -17.78) (layer F.SilkS) (width 0.15)) 307 | (fp_line (start -3.81 -17.78) (end -3.81 -15.24) (layer F.SilkS) (width 0.15)) 308 | (fp_line (start -3.81 -15.24) (end -8.89 -15.24) (layer F.SilkS) (width 0.15)) 309 | (fp_line (start -8.89 -15.24) (end -8.89 15.24) (layer F.SilkS) (width 0.15)) 310 | (fp_line (start -8.89 15.24) (end 8.89 15.24) (layer F.SilkS) (width 0.15)) 311 | 312 | ${"" /*Getting the through holes*/} 313 | ${get_thru_hole()} 314 | 315 | 316 | `; 317 | 318 | /* The code for the reversable footprint */ 319 | const reversable_txt = ` 320 | (module ProMicro ${p.at /* parametric position */} 321 | (layer F.Cu) 322 | (tedit 5A06A962) 323 | (descr "Pro Micro footprint") 324 | (tags "promicro ProMicro") 325 | 326 | (fp_line (start -8.89 17.78) (end 8.89 17.78) (layer B.SilkS) (width 0.15)) 327 | (fp_line (start 8.89 17.78) (end 8.89 -15.24) (layer B.SilkS) (width 0.15)) 328 | (fp_line (start 8.89 -15.24) (end 3.81 -15.24) (layer B.SilkS) (width 0.15)) 329 | (fp_line (start 3.81 -15.24) (end 3.81 -17.78) (layer B.SilkS) (width 0.15)) 330 | (fp_line (start 3.81 -17.78) (end -3.81 -17.78) (layer B.SilkS) (width 0.15)) 331 | (fp_line (start -3.81 -17.78) (end -3.81 -15.24) (layer B.SilkS) (width 0.15)) 332 | (fp_line (start -3.81 -15.24) (end -8.89 -15.24) (layer B.SilkS) (width 0.15)) 333 | (fp_line (start -8.89 -15.24) (end -8.89 17.78) (layer B.SilkS) (width 0.15)) 334 | 335 | (fp_line (start 8.89 -15.24) (end 8.89 17.78) (layer F.SilkS) (width 0.15)) 336 | (fp_line (start 8.89 -15.24) (end 3.81 -15.24) (layer F.SilkS) (width 0.15)) 337 | (fp_line (start 3.81 -15.24) (end 3.81 -17.78) (layer F.SilkS) (width 0.15)) 338 | (fp_line (start 3.81 -17.78) (end -3.81 -17.78) (layer F.SilkS) (width 0.15)) 339 | (fp_line (start -3.81 -17.78) (end -3.81 -15.24) (layer F.SilkS) (width 0.15)) 340 | (fp_line (start -3.81 -15.24) (end -8.89 -15.24) (layer F.SilkS) (width 0.15)) 341 | (fp_line (start -8.89 -15.24) (end -8.89 17.78) (layer F.SilkS) (width 0.15)) 342 | (fp_line (start -8.89 17.78) (end 8.89 17.78) (layer F.SilkS) (width 0.15)) 343 | 344 | 345 | ${"" /*Getting the through holes*/} 346 | ${get_thru_hole()} 347 | 348 | ${"" /*Getting the solder pads*/} 349 | ${get_solder_pads()} 350 | 351 | ${"" /* Getting the lables */} 352 | ${p.label ? reversable_lable_txt : ""} 353 | 354 | ${"" /* Getting the instructions */} 355 | ${p.instructions ? instructions : ""} 356 | 357 | `; 358 | 359 | return ` 360 | ${p.reversable ? reversable_txt : standard} 361 | ${p.label ? lable_txt : ""} 362 | ) 363 | ${p.traces ? (p.reversable ? get_traces() : "") : ""} 364 | `; 365 | }, 366 | }; 367 | --------------------------------------------------------------------------------