Inital commit
Some checks failed
CI / release (push) Has been cancelled
CI / generate_outputs (push) Has been cancelled

This commit is contained in:
2026-02-17 08:39:27 -05:00
commit 1d094e6a04
81 changed files with 25739 additions and 0 deletions

View File

@@ -0,0 +1,312 @@
{
"3d_viewer": {
"background_bottom": "rgb(102, 102, 128)",
"background_top": "rgb(204, 204, 230)",
"board": "rgba(51, 43, 23, 0.902)",
"copper": "rgb(179, 156, 0)",
"silkscreen_bottom": "rgb(230, 230, 230)",
"silkscreen_top": "rgb(230, 230, 230)",
"soldermask_bottom": "rgba(20, 51, 36, 0.831)",
"soldermask_top": "rgba(20, 51, 36, 0.831)",
"solderpaste": "rgb(128, 128, 128)",
"use_board_stackup_colors": true,
"user_1": "rgb(194, 194, 194)",
"user_10": "rgb(89, 148, 220)",
"user_11": "rgb(180, 219, 210)",
"user_12": "rgb(216, 200, 82)",
"user_13": "rgb(194, 194, 194)",
"user_14": "rgb(89, 148, 220)",
"user_15": "rgb(180, 219, 210)",
"user_16": "rgb(216, 200, 82)",
"user_17": "rgb(194, 194, 194)",
"user_18": "rgb(89, 148, 220)",
"user_19": "rgb(180, 219, 210)",
"user_2": "rgb(89, 148, 220)",
"user_20": "rgb(216, 200, 82)",
"user_21": "rgb(194, 194, 194)",
"user_22": "rgb(89, 148, 220)",
"user_23": "rgb(180, 219, 210)",
"user_24": "rgb(216, 200, 82)",
"user_25": "rgb(194, 194, 194)",
"user_26": "rgb(89, 148, 220)",
"user_27": "rgb(180, 219, 210)",
"user_28": "rgb(216, 200, 82)",
"user_29": "rgb(194, 194, 194)",
"user_3": "rgb(180, 219, 210)",
"user_30": "rgb(89, 148, 220)",
"user_31": "rgb(180, 219, 210)",
"user_32": "rgb(216, 200, 82)",
"user_33": "rgb(194, 194, 194)",
"user_34": "rgb(89, 148, 220)",
"user_35": "rgb(180, 219, 210)",
"user_36": "rgb(216, 200, 82)",
"user_37": "rgb(194, 194, 194)",
"user_38": "rgb(89, 148, 220)",
"user_39": "rgb(180, 219, 210)",
"user_4": "rgb(216, 200, 82)",
"user_40": "rgb(216, 200, 82)",
"user_41": "rgb(194, 194, 194)",
"user_42": "rgb(89, 148, 220)",
"user_43": "rgb(180, 219, 210)",
"user_44": "rgb(216, 200, 82)",
"user_45": "rgb(194, 194, 194)",
"user_5": "rgb(194, 194, 194)",
"user_6": "rgb(89, 148, 220)",
"user_7": "rgb(180, 219, 210)",
"user_8": "rgb(216, 200, 82)",
"user_9": "rgb(232, 178, 167)"
},
"board": {
"anchor": "rgb(255, 38, 226)",
"aux_items": "rgb(255, 255, 255)",
"b_adhes": "rgb(0, 0, 132)",
"b_crtyd": "rgb(38, 233, 255)",
"b_fab": "rgb(88, 93, 132)",
"b_mask": "rgba(2, 255, 238, 0.400)",
"b_paste": "rgba(0, 194, 194, 0.902)",
"b_silks": "rgb(232, 178, 167)",
"background": "rgb(0, 16, 35)",
"cmts_user": "rgb(89, 148, 220)",
"conflicts_shadow": "rgba(255, 0, 5, 0.502)",
"copper": {
"b": "rgb(77, 127, 196)",
"f": "rgb(200, 52, 52)",
"in1": "rgb(127, 200, 127)",
"in10": "rgb(237, 124, 51)",
"in11": "rgb(91, 195, 235)",
"in12": "rgb(247, 111, 142)",
"in13": "rgb(167, 165, 198)",
"in14": "rgb(40, 204, 217)",
"in15": "rgb(232, 178, 167)",
"in16": "rgb(242, 237, 161)",
"in17": "rgb(237, 124, 51)",
"in18": "rgb(91, 195, 235)",
"in19": "rgb(247, 111, 142)",
"in2": "rgb(206, 125, 44)",
"in20": "rgb(167, 165, 198)",
"in21": "rgb(40, 204, 217)",
"in22": "rgb(232, 178, 167)",
"in23": "rgb(242, 237, 161)",
"in24": "rgb(237, 124, 51)",
"in25": "rgb(91, 195, 235)",
"in26": "rgb(247, 111, 142)",
"in27": "rgb(167, 165, 198)",
"in28": "rgb(40, 204, 217)",
"in29": "rgb(232, 178, 167)",
"in3": "rgb(79, 203, 203)",
"in30": "rgb(242, 237, 161)",
"in4": "rgb(219, 98, 139)",
"in5": "rgb(167, 165, 198)",
"in6": "rgb(40, 204, 217)",
"in7": "rgb(232, 178, 167)",
"in8": "rgb(242, 237, 161)",
"in9": "rgb(141, 203, 129)"
},
"cursor": "rgb(255, 255, 255)",
"drc_error": "rgba(215, 91, 107, 0.800)",
"drc_exclusion": "rgba(255, 255, 255, 0.800)",
"drc_warning": "rgba(255, 208, 66, 0.800)",
"dwgs_user": "rgb(194, 194, 194)",
"eco1_user": "rgb(180, 219, 210)",
"eco2_user": "rgb(216, 200, 82)",
"edge_cuts": "rgb(208, 210, 205)",
"f_adhes": "rgb(132, 0, 132)",
"f_crtyd": "rgb(255, 38, 226)",
"f_fab": "rgb(175, 175, 175)",
"f_mask": "rgba(216, 100, 255, 0.400)",
"f_paste": "rgba(180, 160, 154, 0.902)",
"f_silks": "rgb(242, 237, 161)",
"footprint_text_invisible": "rgb(132, 132, 132)",
"grid": "rgb(132, 132, 132)",
"grid_axes": "rgb(194, 194, 194)",
"locked_shadow": "rgba(255, 38, 226, 0.502)",
"margin": "rgb(255, 38, 226)",
"pad_net_names": "rgba(255, 255, 255, 0.902)",
"pad_plated_hole": "rgb(194, 194, 0)",
"pad_through_hole": "rgb(227, 183, 46)",
"page_limits": "rgb(132, 132, 132)",
"plated_hole": "rgb(26, 196, 210)",
"ratsnest": "rgba(0, 248, 255, 0.349)",
"track_net_names": "rgba(255, 255, 255, 0.702)",
"user_1": "rgb(194, 194, 194)",
"user_10": "rgb(89, 148, 220)",
"user_11": "rgb(180, 219, 210)",
"user_12": "rgb(216, 200, 82)",
"user_13": "rgb(194, 194, 194)",
"user_14": "rgb(89, 148, 220)",
"user_15": "rgb(180, 219, 210)",
"user_16": "rgb(216, 200, 82)",
"user_17": "rgb(194, 194, 194)",
"user_18": "rgb(89, 148, 220)",
"user_19": "rgb(180, 219, 210)",
"user_2": "rgb(89, 148, 220)",
"user_20": "rgb(216, 200, 82)",
"user_21": "rgb(194, 194, 194)",
"user_22": "rgb(89, 148, 220)",
"user_23": "rgb(180, 219, 210)",
"user_24": "rgb(216, 200, 82)",
"user_25": "rgb(194, 194, 194)",
"user_26": "rgb(89, 148, 220)",
"user_27": "rgb(180, 219, 210)",
"user_28": "rgb(216, 200, 82)",
"user_29": "rgb(194, 194, 194)",
"user_3": "rgb(180, 219, 210)",
"user_30": "rgb(89, 148, 220)",
"user_31": "rgb(180, 219, 210)",
"user_32": "rgb(216, 200, 82)",
"user_33": "rgb(194, 194, 194)",
"user_34": "rgb(89, 148, 220)",
"user_35": "rgb(180, 219, 210)",
"user_36": "rgb(216, 200, 82)",
"user_37": "rgb(194, 194, 194)",
"user_38": "rgb(89, 148, 220)",
"user_39": "rgb(180, 219, 210)",
"user_4": "rgb(216, 200, 82)",
"user_40": "rgb(216, 200, 82)",
"user_41": "rgb(194, 194, 194)",
"user_42": "rgb(89, 148, 220)",
"user_43": "rgb(180, 219, 210)",
"user_44": "rgb(216, 200, 82)",
"user_45": "rgb(194, 194, 194)",
"user_5": "rgb(194, 194, 194)",
"user_6": "rgb(89, 148, 220)",
"user_7": "rgb(180, 219, 210)",
"user_8": "rgb(216, 200, 82)",
"user_9": "rgb(232, 178, 167)",
"via_blind_buried": "rgb(187, 151, 38)",
"via_hole": "rgb(227, 183, 46)",
"via_hole_walls": "rgb(236, 236, 236)",
"via_micro": "rgb(0, 132, 132)",
"via_net_names": "rgba(50, 50, 50, 0.902)",
"via_through": "rgb(236, 236, 236)",
"worksheet": "rgb(200, 114, 171)"
},
"gerbview": {
"axes": "rgb(0, 0, 132)",
"background": "rgb(0, 0, 0)",
"dcodes": "rgb(255, 255, 255)",
"grid": "rgb(132, 132, 132)",
"layers": [
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)"
],
"negative_objects": "rgb(132, 132, 132)",
"page_limits": "rgb(132, 132, 132)",
"worksheet": "rgb(0, 0, 132)"
},
"meta": {
"name": "Altium_Theme",
"version": 5
},
"schematic": {
"anchor": "rgb(0, 0, 255)",
"aux_items": "rgb(0, 0, 0)",
"background": "rgb(245, 244, 239)",
"brightened": "rgb(255, 0, 255)",
"bus": "rgb(0, 0, 132)",
"bus_junction": "rgb(0, 0, 132)",
"component_body": "rgb(255, 255, 194)",
"component_outline": "rgb(132, 0, 0)",
"cursor": "rgb(15, 15, 15)",
"dnp_marker": "rgba(220, 9, 13, 0.851)",
"erc_error": "rgba(230, 9, 13, 0.800)",
"erc_exclusion": "rgba(94, 194, 194, 0.800)",
"erc_warning": "rgba(209, 146, 0, 0.800)",
"excluded_from_sim": "rgba(194, 194, 194, 0.949)",
"fields": "rgb(132, 0, 132)",
"grid": "rgb(181, 181, 181)",
"grid_axes": "rgb(0, 0, 132)",
"hidden": "rgb(94, 194, 194)",
"hovered": "rgb(0, 0, 255)",
"junction": "rgb(0, 0, 0)",
"label_global": "rgb(132, 0, 0)",
"label_hier": "rgb(114, 86, 0)",
"label_local": "rgb(132, 0, 0)",
"netclass_flag": "rgb(72, 72, 72)",
"no_connect": "rgb(0, 0, 132)",
"note": "rgb(0, 0, 194)",
"note_background": "rgba(0, 0, 0, 0.000)",
"op_currents": "rgb(224, 0, 12)",
"op_voltages": "rgb(132, 0, 50)",
"override_item_colors": false,
"page_limits": "rgb(181, 181, 181)",
"pin": "rgb(0, 0, 0)",
"pin_name": "rgb(0, 0, 0)",
"pin_number": "rgb(0, 0, 0)",
"private_note": "rgb(72, 72, 255)",
"reference": "rgb(0, 0, 194)",
"rule_area": "rgb(255, 0, 0)",
"shadow": "rgba(102, 179, 255, 0.800)",
"sheet": "rgb(0, 0, 0)",
"sheet_background": "rgba(255, 255, 255, 0.000)",
"sheet_fields": "rgb(132, 0, 132)",
"sheet_filename": "rgb(0, 0, 132)",
"sheet_label": "rgb(0, 0, 0)",
"sheet_name": "rgb(0, 0, 132)",
"value": "rgb(0, 0, 194)",
"wire": "rgb(0, 0, 0)",
"worksheet": "rgb(0, 0, 0)"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,46 @@
#!/bin/sh
# Default image version
IMAGE="ghcr.io/inti-cmnb/kicad8_auto_full:dev"
# Parse the optional -v flag
while getopts "v:" opt; do
case "$opt" in
v)
if [ "$OPTARG" = "9" ]; then
IMAGE="ghcr.io/inti-cmnb/kicad9_auto_full:dev"
else
echo "Unsupported version: $OPTARG" >&2
exit 1
fi
;;
*)
echo "Usage: $0 [-v 9]" >&2
exit 1
;;
esac
done
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)
export USER_NAME=$(whoami)
docker run --rm -it \
--user "$USER_ID:$GROUP_ID" \
--env NO_AT_BRIDGE=1 \
--env DISPLAY="$DISPLAY" \
--workdir="/home/$USER_NAME" \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/home/$USER_NAME:/home/$USER_NAME:rw" \
-p 8000:8000 \
--entrypoint /bin/bash \
"$IMAGE" -c "
if ! id $USER_NAME &>/dev/null; then
echo \"Creating user $USER_NAME ($USER_ID:$GROUP_ID)...\"
useradd -u $USER_ID -g $GROUP_ID -d /home/$USER_NAME -m $USER_NAME
chown -R $USER_ID:$GROUP_ID /home/$USER_NAME
fi
exec su - $USER_NAME"

View File

@@ -0,0 +1,28 @@
@echo off
REM Set variables for display and user name
set DISPLAY=host.docker.internal:0.0
set USER_NAME=%USERNAME%
REM Set default image
set "IMAGE=ghcr.io/inti-cmnb/kicad8_auto_full:dev"
REM Check for optional -v flag and version number
if /I "%~1"=="-v" (
if "%~2"=="9" (
set "IMAGE=ghcr.io/inti-cmnb/kicad9_auto_full:dev"
) else (
echo Unsupported version: %~2
goto :eof
)
)
REM Run the Docker container with mounted volumes
docker run --rm -it ^
--env NO_AT_BRIDGE=1 ^
--env DISPLAY=%DISPLAY% ^
--workdir="/home/%USER_NAME%" ^
--volume=C:\Users\%USER_NAME%:/home/%USER_NAME%:rw ^
--volume=/tmp/.X11-unix:/tmp/.X11-unix ^
--entrypoint /bin/bash ^
-p 8000:8000 ^
%IMAGE%

View File

@@ -0,0 +1,49 @@
import argparse
import re
import sys
def parse_changelog(file_path, version, title_only, extra_spaces, separators):
try:
with open(file_path, 'r') as f:
changelog = f.read()
except FileNotFoundError:
print(f"Error: File '{file_path}' not found.")
sys.exit(1)
# Regex to match the version block and stop at the next version or any line with square brackets
version_pattern = re.compile(rf"## \[{version}\] - (\d{{4}}-\d{{2}}-\d{{2}})\n(.*?)(?=## \[|\[Unreleased\]:|\[\d+\.\d+\.\d+\]:|$)", re.DOTALL)
match = version_pattern.search(changelog)
if not match:
print(f"Version {version} not found.")
return
date, content = match.groups()
if title_only:
print(f"Version {version} - {date}")
else:
if separators is not None:
content = re.sub(r'^(###.*?)$', '_' * separators + r'\n\1', content, flags=re.MULTILINE)
cleaned_content = re.sub(r'### ', '', content) # Remove ###
if extra_spaces:
cleaned_content = re.sub(r'(?<!\n)\n(?!\n)', '\n\n', cleaned_content)
print(cleaned_content)
def main():
parser = argparse.ArgumentParser(description="Extract and format a specific version from CHANGELOG.md")
parser.add_argument("-v", "--version", required=True, help="Version to extract (e.g., 1.0.1)")
parser.add_argument("-f", "--file", required=True, help="Path to CHANGELOG.md file")
parser.add_argument("-t", "--title-only", action="store_true", help="Print the title only")
parser.add_argument("-s", "--extra-spaces", action="store_true", help="Add extra spaces between lines")
parser.add_argument("-a", "--separators", type=int, required=False, help="Number of underscores for separators")
args = parser.parse_args()
parse_changelog(args.file, args.version, args.title_only, args.extra_spaces, args.separators)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,41 @@
import re
import sys
import argparse
def get_last_version(file_path):
try:
with open(file_path, 'r') as file:
content = file.read()
# Regex to match version entries
version_pattern = r"## \[(.*?)\]"
versions = re.findall(version_pattern, content)
if not versions:
return "N/A"
# Check the last entry
last_version = versions[0] # First match is the most recent
if last_version.lower() == "unreleased":
if len(versions) > 1:
second_last_version = versions[1]
return f"{second_last_version}+ (Unreleased)"
else:
return "(Unreleased)"
else:
return last_version
except FileNotFoundError:
return f"File '{file_path}' not found."
except Exception as e:
return f"An error occurred: {e}"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Get the latest version from a changelog file.")
parser.add_argument("-f", "--file", required=True, help="Path to the changelog file.")
args = parser.parse_args()
version = get_last_version(args.file)
if version:
print(version)

View File

@@ -0,0 +1,49 @@
import argparse
import xml.etree.ElementTree as ET
import sys
def get_sheet_title(file_path, page_number, dots_number):
try:
tree = ET.parse(file_path)
root = tree.getroot()
page_number = str(page_number)
titles = []
for sheet in root.findall(".//sheet"):
number = sheet.get("number")
if number == page_number:
# Get the last part of the 'name' attribute after '/'
name = sheet.get("name")
title_block = sheet.find("title_block")
title = title_block.find("title").text if title_block is not None else None
if name:
titles.append(name.split("/")[-2 if name.endswith("/") else -1])
if not titles:
print('.'*dots_number)
elif len(set(titles)) > 1:
print("Conflicting page numbers")
else:
print(titles[0])
except ET.ParseError:
print("Error: Invalid XML format")
except FileNotFoundError:
print("Error: XML File not found")
except Exception as e:
print(f"Error: {e}")
def main():
parser = argparse.ArgumentParser(description="Get the sheet title based on page number from a KiCad XML file")
parser.add_argument("-p", "--page-number", type=int, required=True, help="Page number to search")
parser.add_argument("-f", "--file", type=str, required=True, help="Path to the schematic XML file")
parser.add_argument("-d", "--dots-number", type=int, required=True, help="Number of dots for empty lines")
args = parser.parse_args()
get_sheet_title(args.file, args.page_number, args.dots_number)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,13 @@
ASSEMBLY NOTES (UNLESS OTHERWISE SPECIFIED)
1) DO NOT POPULATE PARTS ARE MARKED WITH A RED CROSS.
2) DO NOT POPULATE PARTS ARE NOT PRESENT IN THE BOM.
3) IF CONFLICTING INFORMATION IS FOUND BETWEEN THE ASSEMBLY
FILE AND BOM, BOM SHOULD BE USED AS THE MAIN SOURCE.
4) CONFORMAL COATING IS NOT REQUIRED.
5) DOT IDENTIFIES PIN #1 LOCATION AND DEVICE ORIENTATION
WHEN VIEWED FROM THE TOP.

View File

@@ -0,0 +1,58 @@
FABRICATION NOTES (UNLESS OTHERWISE SPECIFIED)
1) FABRICATE PER IPC-6012A CLASS 2.
2) OUTLINE DEFINED IN SEPARATE GERBER FILE WITH
"Edge_Cuts.GBR" SUFFIX.
DIMENSIONS OF CIRCUMSIZED RECTANGLE SHOWN ON THIS
DRAWING FOR REFERENCE ONLY.
3) SEE SEPARATE DRILL FILES WITH ".DRL" SUFFIX
FOR HOLE LOCATIONS.
SELECTED HOLE LOCATIONS SHOWN ON THIS DRAWING
FOR REFERENCE ONLY.
4) SURFACE FINISH: ${pcb_finish_cap}
5) SOLDERMASK ON BOTH SIDES OF THE BOARD SHALL
BE LPI, COLOR ${solder_mask_color_text_cap}.
6) SILK SCREEN LEGEND TO BE APPLIED PER LAYER
STACKUP USING ${silk_screen_color_text_cap} NON-CONDUCTIVE EPOXY INK.
7) ALL VIAS ARE TENTED ON BOTH SIDES UNLESS
SOLDERMASK OPENED IN GERBER.
8) VENDOR SHOULD FOLLOW ROHS COMPLIANT PROCESS
AND Pb FREE FOR MANUFACTURING
9) PCB MATERIAL REQUIREMENTS:
A. FLAMMABILITY RATING MUST MEET OR EXCEED
UL94V-0 REQUIREMENTS.
B. Tg 170 C OR EQUIVALENT.
C. EQUIVALENT MATERIAL SHALL BE RoHS COMPLIANT,
HALOGEN FREE AND APPROVED BY ${COMPANY_cap}.
10) DESIGN GEOMETRY MINIMUM FEATURE SIZES:
BOARD SIZE ${bb_w_mm} × ${bb_h_mm} mm
BOARD THICKNESS ${thickness_mm} mm
TRACE WIDTH ${track_mm} mm
TRACE TO TRACE ${clearance_mm} mm
MIN. HOLE (PTH) ${drill_pth_real_mm} mm
MIN. HOLE (NPTH) ${drill_npth_real_mm} mm
ANNULAR RING ${oar_mm} mm
COPPER TO HOLE ${c2h_mm} mm
COPPER TO EDGE ${c2e_mm} mm
HOLE TO HOLE ${h2h_mm} mm
#?stackup and impedance_controlled
#?stackup and impedance_controlled
11) REFER TO IMPEDANCE TABLE FOR IMPEDANCE CONTROL REQUIREMENTS.
#?stackup and impedance_controlled
#?stackup and impedance_controlled
12) CONFIRM SPACE WIDTHS AND SPACINGS.

View File

@@ -0,0 +1,2 @@
Transmission Line, Impedance [ohms], Tolerance [ohms], Layer, Trace Width [mm], Gap [mm], Ref. Layers
Edge-Coupled Coated Microstrip, 100, ±10 %, L1, 0.2032, 0.28, L2

View File

@@ -0,0 +1,71 @@
<p align="center" width="100%">
<img alt="Logo" width="33%" src="Logos/dummy_logo.svg">
</p>
<h1 align="center">${BOARD_NAME}</h1>
<p align="center" width="100%">
<a href="${GIT_URL}/actions/workflows/ci.yaml">
<img alt="CI Badge" src="${GIT_URL}/actions/workflows/ci.yaml/badge.svg?branch=">
</a>
</p>
<p align="center" width="100%">
<img src="Images/dummy_image.png">
</p>
***
<p align="center">
<img alt="3D Top Angled" src="${png_3d_viewer_angled_top_outpath}" width="45%">
&nbsp; &nbsp; &nbsp; &nbsp;
<img alt="3D Bottom Angled" src="${png_3d_viewer_angled_bottom_outpath}" width="45%">
</p>
***
## SPECIFICATIONS
| Parameter | Value |
| --- | --- |
| Dimensions | ${bb_w_mm} × ${bb_h_mm} mm |
***
## DIRECTORY STRUCTURE
.
├─ Computations # Misc calculations
├─ HTML # HTML files for generated webpage
├─ Images # Pictures and renders
├─ kibot_resources # External resources for KiBot
│ ├─ colors # Color theme for KiCad
│ ├─ fonts # Fonts used in the project
│ ├─ scripts # External scripts used with KiBot
│ └─ templates # Templates for KiBot generated reports
├─ kibot_yaml # KiBot YAML config files
├─ KiRI # KiRI (PCB diff viewer) files
├─ lib # KiCad footprint and symbol libraries
│ ├─ 3d_models # Component 3D models
│ ├─ lib_fp # Footprint libraries
│ └─ lib_sym # Symbol libraries
├─ Logos # Logos
├─ Manufacturing # Assembly and fabrication documents
│ ├─ Assembly # Assembly documents (BoM, pos, notes)
│ │
│ └─ Fabrication # Fabrication documents (ZIP, notes)
│ ├─ Drill Tables # CSV drill tables
│ └─ Gerbers # Gerbers
├─ Report # Reports for ERC/DRC
├─ Schematic # PDF of schematic
├─ Templates # Title block templates
├─ Testing
│ └─ Testpoints # Testpoints tables
└─ Variants # Outputs for assembly variants