R2:底板 / 刀片布局布线脚本、快照、截图与规划文档更新(含外壳、打印件、布线归档)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# D16 南带补线上服务器(CLAUDE.md:布线运算只在 10.5.5.13 跑)。
|
||||
#
|
||||
# bash .claude/r2/remote_d16.sh [NET=宽度 ...]
|
||||
#
|
||||
# 前提:本机已把板上快照写成 .claude/r2/_board_for_nets.json(旧入口的铜已删)。
|
||||
# 结果拉回 .claude/r2/_d16_route.out.json / _d16_route.log,**不下发** —— 本机复核净距之后再下发。
|
||||
set -euo pipefail
|
||||
SERVER=${SERVER:-10.5.5.13}
|
||||
INTERP=${INTERP:-/root/pypy/bin/pypy3}
|
||||
SSH=/c/Windows/System32/OpenSSH/ssh.exe
|
||||
SCP=/c/Windows/System32/OpenSSH/scp.exe
|
||||
REPO=$(cd "$(dirname "$0")/../.." && pwd)
|
||||
cd "$REPO"
|
||||
[ -f .claude/r2/_board_for_nets.json ] || { echo '缺 _board_for_nets.json(先抓板)'; exit 1; }
|
||||
TMP=${TMPDIR:-/tmp}
|
||||
TGZ=$(mktemp -u "$TMP/d16-route-XXXXXX").tgz
|
||||
tar --exclude='*.png' --exclude='*.bak' --exclude='__pycache__' --exclude='archive_*' \
|
||||
--exclude='_base_routes.r*' --exclude='_blade_routes.*' --exclude='_base_board_*' -czf "$TGZ" \
|
||||
.claude/r2 .claude/eda.py .claude/eda-parts.json .claude/pcb_pour.py
|
||||
R=$("$SSH" "$SERVER" 'mktemp -d /tmp/dcdc-d16.XXXXXX' | tr -d '\r')
|
||||
case "$R" in /tmp/dcdc-d16.*) ;; *) echo "远程目录不对: $R"; exit 1 ;; esac
|
||||
cleanup() {
|
||||
rm -f "$TGZ"
|
||||
# ⚠ `[.]claude` 是故意的:直接写目录串的话 pkill 会先把执行这条命令的远程 shell 杀掉
|
||||
"$SSH" "$SERVER" "pkill -f '$R/[.]claude/r2/d16_route' ; rm -rf -- '$R'" || true
|
||||
}
|
||||
trap cleanup EXIT
|
||||
"$SCP" -q "$(cygpath -w "$TGZ")" "$SERVER:$R/b.tgz"
|
||||
"$SSH" "$SERVER" "tar -xzf $R/b.tgz -C $R"
|
||||
# MODE=gnd:d16_gndfix.py(给指定 GND 焊盘各打一个孔),拉回 _d16_gndfix.out.json
|
||||
if [ "${MODE:-route}" = gnd ]; then
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_gndfix.py $* 2>&1" | tee .claude/r2/_d16_gndfix.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_gndfix.out.json" .claude/r2/_d16_gndfix.out.json
|
||||
echo "已拉回 .claude/r2/_d16_gndfix.out.json(未下发)"
|
||||
exit 0
|
||||
fi
|
||||
# MODE=rip:d16_rip.py(拆 U13 I²C 三线束,连同 CH224A 的 SDA/SCL 一起重布;只改数据不动板),拉回 _d16_rip.out.json
|
||||
if [ "${MODE:-route}" = rip ]; then
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_rip.py $* 2>&1" | tee .claude/r2/_d16_rip.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_rip.out.json" .claude/r2/_d16_rip.out.json
|
||||
echo "已拉回 .claude/r2/_d16_rip.out.json(未下发)"
|
||||
exit 0
|
||||
fi
|
||||
# MODE=tap:d16_tap.py(孤立小块接到本网已有铜上,大块不挑焊盘代表),拉回 _d16_tap.out.json
|
||||
if [ "${MODE:-route}" = tap ]; then
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_tap.py $* 2>&1" | tee .claude/r2/_d16_tap.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_tap.out.json" .claude/r2/_d16_tap.out.json
|
||||
echo "已拉回 .claude/r2/_d16_tap.out.json(未下发)"
|
||||
exit 0
|
||||
fi
|
||||
# MODE=nets:只补给定的网(route_nets.py:板上铜全当障碍,按连通块接起来),拉回 _route_nets.out.json
|
||||
if [ "${MODE:-route}" = nets ]; then
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/route_nets.py $* 2>&1" | tee .claude/r2/_route_nets.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_route_nets.out.json" .claude/r2/_route_nets.out.json
|
||||
echo "已拉回 .claude/r2/_route_nets.out.json(未下发)"
|
||||
exit 0
|
||||
fi
|
||||
# MODE=reach:不布线,跑 d16_reach.py(SDA6 / SCL6 在布线网格上的泛洪诊断),拉回 _d16_reach.out.json
|
||||
if [ "${MODE:-route}" = reach ]; then
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_reach.py $* 2>&1" | tee .claude/r2/_d16_reach.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_reach.out.json" .claude/r2/_d16_reach.out.json
|
||||
echo "已拉回 .claude/r2/_d16_reach.out.json"
|
||||
exit 0
|
||||
fi
|
||||
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 /usr/bin/time -f 'REMOTE_TIME=%e sec RSS=%M KB' $INTERP .claude/r2/d16_route.py $* 2>&1" \
|
||||
| tee .claude/r2/_d16_route.log
|
||||
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_route.out.json" .claude/r2/_d16_route.out.json
|
||||
echo "已拉回 .claude/r2/_d16_route.out.json(未下发)"
|
||||
在新工单中引用
屏蔽一个用户