初始导入:PhoneRail 五路手机直供电源板

原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。
这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。

纳入:
- 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本
- .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、
  pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源)
- 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾)
- firmware/ 的 A1 骨架与 site/ 文档站源码

.gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、
site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。

.gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存,
不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
这个提交包含在:
zhou yang
2026-09-06 18:18:14 +08:00
共同撰写人 Claude Opus 5
当前提交 2bfe308b30
共修改 526 个文件,包含 80633 行新增和 0 行删除
+78
查看文件
@@ -0,0 +1,78 @@
{
"new": {
"EFUSE_EN1": 32,
"EFUSE_EN2": 25,
"EFUSE_EN3": 6,
"EFUSE_EN4": 34,
"EFUSE_EN5": 12,
"FAN_PWM": 11,
"FAN_TACH": 9,
"IOEXP_INT#": 31,
"KEY_OE#": 23,
"KEY_RCLK": 17,
"KEY_SER": 21,
"KEY_SRCLK": 20,
"NTC1": 39,
"NTC2": 38,
"SCL": 8,
"SDA": 22,
"UP_VBUS_DET": 24,
"VBUS_EN1": 33,
"VBUS_EN2": 18,
"VBUS_EN3": 19,
"VBUS_EN4": 35,
"VBUS_EN5": 10
},
"old": {
"EFUSE_EN1": 4,
"EFUSE_EN2": 5,
"EFUSE_EN3": 6,
"EFUSE_EN4": 7,
"SCL": 8,
"KEY_SER": 9,
"KEY_SRCLK": 10,
"KEY_RCLK": 11,
"EFUSE_EN5": 12,
"VBUS_EN1": 17,
"VBUS_EN2": 18,
"VBUS_EN3": 19,
"VBUS_EN4": 20,
"VBUS_EN5": 21,
"SDA": 22,
"KEY_OE#": 23,
"FAN_PWM": 24,
"FAN_TACH": 25,
"IOEXP_INT#": 31,
"UP_VBUS_DET": 36,
"NTC2": 38,
"NTC1": 39
},
"pin2io": {
"4": "IO4",
"5": "IO5",
"6": "IO6",
"7": "IO7",
"8": "IO15",
"9": "IO16",
"10": "IO17",
"11": "IO18",
"12": "IO8",
"17": "IO9",
"18": "IO10",
"19": "IO11",
"20": "IO12",
"21": "IO13",
"22": "IO14",
"23": "IO21",
"24": "IO47",
"25": "IO48",
"31": "IO38",
"36": "IO44",
"38": "IO2",
"39": "IO1",
"32": "IO39",
"33": "IO40",
"34": "IO41",
"35": "IO42"
}
}
+756
查看文件
@@ -0,0 +1,756 @@
{
"C740": [
[
"2",
"GND",
3993,
2638
],
[
"1",
"XTAL1",
3960,
2638
]
],
"C741": [
[
"2",
"GND",
4702,
2638
],
[
"1",
"XTAL2",
4669,
2638
]
],
"C742": [
[
"2",
"GND",
4347,
2992
],
[
"1",
"VDD18",
4314,
2992
]
],
"C743": [
[
"2",
"GND",
4229,
2284
],
[
"1",
"VDD18PLL",
4196,
2284
]
],
"C744": [
[
"2",
"GND",
4465,
2284
],
[
"1",
"+3V3_HUB",
4432,
2284
]
],
"C745": [
[
"2",
"GND",
3993,
2520
],
[
"1",
"+3V3_HUB",
3960,
2520
]
],
"C746": [
[
"2",
"GND",
4702,
2520
],
[
"1",
"+3V3_HUB",
4669,
2520
]
],
"C747": [
[
"2",
"GND",
3993,
2756
],
[
"1",
"+3V3_HUB",
3960,
2756
]
],
"C748": [
[
"2",
"GND",
4702,
2756
],
[
"1",
"+3V3_HUB",
4669,
2756
]
],
"C749": [
[
"2",
"GND",
4229,
2992
],
[
"1",
"+3V3_HUB",
4196,
2992
]
],
"C750": [
[
"2",
"GND",
4465,
2992
],
[
"1",
"+3V3_HUB",
4432,
2992
]
],
"C751": [
[
"2",
"GND",
4134,
2284
],
[
"1",
"+3V3_HUB",
4055,
2284
]
],
"R708": [
[
"2",
"GND",
4584,
2284
],
[
"1",
"RBIAS",
4550,
2284
]
],
"R709": [
[
"2",
"VBUS_DET",
3993,
2402
],
[
"1",
"VBUS_UP",
3959,
2402
]
],
"R710": [
[
"2",
"GND",
4702,
2402
],
[
"1",
"VBUS_DET",
4668,
2402
]
],
"R711": [
[
"2",
"GND",
3993,
2874
],
[
"1",
"CFGSEL0",
3959,
2874
]
],
"R712": [
[
"2",
"GND",
4702,
2874
],
[
"1",
"CFGSEL1",
4668,
2874
]
],
"R714": [
[
"2",
"+3V3_HUB",
4112,
2992
],
[
"1",
"PRTDIS6",
4078,
2992
]
],
"R715": [
[
"2",
"+3V3_HUB",
4584,
2992
],
[
"1",
"PRTDIS7",
4550,
2992
]
],
"R716": [
[
"2",
"+3V3_HUB",
4348,
2165
],
[
"1",
"HUB_RST",
4314,
2165
]
],
"R717": [
[
"2",
"GND",
3875,
2638
],
[
"1",
"$16N222",
3841,
2638
]
],
"R718": [
[
"2",
"GND",
4820,
2638
],
[
"1",
"$16N224",
4786,
2638
]
],
"R719": [
[
"2",
"GND",
4348,
3110
],
[
"1",
"NONREM1",
4314,
3110
]
],
"R720": [
[
"2",
"GND",
4230,
2165
],
[
"1",
"NONREM0",
4196,
2165
]
],
"U32": [
[
"16",
"",
4156,
2785
],
[
"15",
"",
4156,
2766
],
[
"14",
"",
4156,
2746
],
[
"13",
"GND",
4156,
2726
],
[
"12",
"USB5_DP",
4156,
2707
],
[
"11",
"USB5_DM",
4156,
2687
],
[
"10",
"+3V3_HUB",
4156,
2667
],
[
"9",
"USB4_DP",
4156,
2648
],
[
"8",
"USB4_DM",
4156,
2628
],
[
"7",
"USB3_DP",
4156,
2608
],
[
"6",
"USB3_DM",
4156,
2589
],
[
"5",
"+3V3_HUB",
4156,
2569
],
[
"4",
"USB2_DP",
4156,
2549
],
[
"3",
"USB2_DM",
4156,
2530
],
[
"2",
"USB1_DP",
4156,
2510
],
[
"1",
"USB1_DM",
4156,
2490
],
[
"17",
"",
4183,
2813
],
[
"18",
"",
4203,
2813
],
[
"19",
"GND",
4222,
2813
],
[
"20",
"",
4242,
2813
],
[
"21",
"",
4262,
2813
],
[
"22",
"",
4282,
2813
],
[
"23",
"",
4301,
2813
],
[
"24",
"+3V3_HUB",
4321,
2813
],
[
"25",
"VDD18",
4341,
2813
],
[
"26",
"",
4360,
2813
],
[
"27",
"",
4380,
2813
],
[
"28",
"",
4400,
2813
],
[
"29",
"",
4419,
2813
],
[
"30",
"",
4439,
2813
],
[
"31",
"",
4459,
2813
],
[
"32",
"",
4478,
2813
],
[
"33",
"",
4506,
2785
],
[
"34",
"",
4506,
2766
],
[
"35",
"",
4506,
2746
],
[
"36",
"",
4506,
2726
],
[
"37",
"",
4506,
2707
],
[
"38",
"",
4506,
2687
],
[
"39",
"",
4506,
2667
],
[
"40",
"NONREM1",
4506,
2648
],
[
"41",
"CFGSEL0",
4506,
2628
],
[
"42",
"CFGSEL1",
4506,
2608
],
[
"43",
"HUB_RST",
4506,
2589
],
[
"44",
"VBUS_DET",
4506,
2569
],
[
"45",
"NONREM0",
4506,
2549
],
[
"46",
"+3V3_HUB",
4506,
2530
],
[
"47",
"",
4506,
2510
],
[
"48",
"",
4506,
2490
],
[
"49",
"",
4478,
2463
],
[
"50",
"",
4459,
2463
],
[
"51",
"",
4439,
2463
],
[
"52",
"+3V3_HUB",
4419,
2463
],
[
"53",
"",
4400,
2463
],
[
"54",
"PRTDIS6",
4380,
2463
],
[
"55",
"",
4360,
2463
],
[
"56",
"PRTDIS7",
4341,
2463
],
[
"57",
"+3V3_HUB",
4321,
2463
],
[
"58",
"UP_DM",
4301,
2463
],
[
"59",
"UP_DP",
4282,
2463
],
[
"60",
"XTAL2",
4262,
2463
],
[
"61",
"XTAL1",
4242,
2463
],
[
"62",
"VDD18PLL",
4222,
2463
],
[
"63",
"RBIAS",
4203,
2463
],
[
"64",
"+3V3_HUB",
4183,
2463
],
[
"65",
"GND",
4331,
2638
]
],
"Y1": [
[
"1",
"XTAL1",
4287,
2317
],
[
"2",
"GND",
4374,
2317
],
[
"3",
"XTAL2",
4374,
2250
],
[
"4",
"GND",
4287,
2250
]
]
}
文件差异因一行或多行过长而隐藏
+326
查看文件
@@ -0,0 +1,326 @@
{
"J25": [
[
"1",
"+5V"
],
[
"2",
"+5V"
],
[
"3",
"+5V"
],
[
"4",
"+5V"
],
[
"5",
"POGO2_PWR"
],
[
"6",
"VBUS_EN5"
],
[
"7",
"POGO2_VUP"
],
[
"8",
"EDL_EN5"
],
[
"9",
"POGO2_VDN"
],
[
"10",
"GND"
],
[
"11",
"EDL_EN2"
],
[
"12",
"GND"
],
[
"13",
"VBUS_EN2"
],
[
"14",
"GND"
],
[
"15",
"HUB_RST"
],
[
"16",
"GND"
],
[
"17",
"GND"
],
[
"18",
"VO5_P"
],
[
"19",
"GND"
],
[
"20",
"VO5_P"
],
[
"21",
"GND"
],
[
"22",
"VO5_P"
],
[
"23",
"POGO3_PWR"
],
[
"24",
"POGO5_PWR"
],
[
"25",
"POGO3_VUP"
],
[
"26",
"POGO5_VUP"
],
[
"27",
"POGO3_VDN"
],
[
"28",
"POGO5_VDN"
],
[
"29",
"VO3_P"
],
[
"30",
"GND"
],
[
"31",
"VO3_P"
],
[
"32",
"GND"
],
[
"33",
"VO3_P"
],
[
"34",
"GND"
],
[
"35",
"EDL_EN3"
],
[
"36",
"GND"
],
[
"37",
"VBUS_EN3"
],
[
"38",
"GND"
],
[
"39",
"+5V"
],
[
"40",
"+5V"
]
],
"J24": [
[
"1",
"VO1_P"
],
[
"2",
"GND"
],
[
"3",
"VO1_P"
],
[
"4",
"GND"
],
[
"5",
"VO1_P"
],
[
"6",
"GND"
],
[
"7",
"+5V"
],
[
"8",
"GND"
],
[
"9",
"+5V"
],
[
"10",
"GND"
],
[
"11",
"POGO1_PWR"
],
[
"12",
"POGO4_PWR"
],
[
"13",
"POGO1_VUP"
],
[
"14",
"POGO4_VUP"
],
[
"15",
"POGO1_VDN"
],
[
"16",
"POGO4_VDN"
],
[
"17",
"EDL_EN1"
],
[
"18",
"EDL_EN4"
],
[
"19",
"VBUS_EN1"
],
[
"20",
"VBUS_EN4"
],
[
"21",
"SDA"
],
[
"22",
"+5V"
],
[
"23",
"SCL"
],
[
"24",
"+5V"
],
[
"25",
"GND"
],
[
"26",
"UP_VBUS_DET"
],
[
"27",
"GND"
],
[
"28",
"GND"
],
[
"29",
"GND"
],
[
"30",
"VO4_P"
],
[
"31",
"GND"
],
[
"32",
"VO4_P"
],
[
"33",
"GND"
],
[
"34",
"VO4_P"
],
[
"35",
"VO2_P"
],
[
"36",
"GND"
],
[
"37",
"VO2_P"
],
[
"38",
"GND"
],
[
"39",
"VO2_P"
],
[
"40",
"GND"
]
]
}
+19
查看文件
@@ -0,0 +1,19 @@
{
"opened": true,
"seq": [],
"buttons": [
"刷新",
"新增",
"报告错误",
"批量操作",
"弹出窗口",
"放置",
"S",
"F",
"P",
"3D",
"导出报告",
"应用修改",
"取消"
]
}
文件差异因一行或多行过长而隐藏
+726
查看文件
@@ -0,0 +1,726 @@
{
"success": true,
"result": [
[
"25f01320c7bb44a2",
"",
[
120,
615,
160,
615,
205,
615,
160,
615,
160,
615,
160,
635,
160,
635,
140,
635,
160,
690,
160,
635,
160,
690,
135,
690,
160,
700,
160,
690,
120,
590,
120,
615
]
],
[
"9253e68f958f5f21",
"",
[
80,
690,
105,
690,
80,
690,
80,
635,
80,
635,
100,
635,
80,
450,
80,
635,
80,
450,
120,
450,
120,
450,
120,
470
]
],
[
"2ac799a6dbcecf28",
"",
[
190,
605,
205,
605,
190,
530,
190,
605,
120,
530,
190,
530,
120,
550,
120,
530,
120,
510,
120,
530
]
],
[
"f645f3c1acd494e6",
"",
[
320,
440,
295,
440,
320,
430,
320,
440,
320,
430,
295,
430,
320,
430,
320,
400,
320,
400,
295,
400,
320,
380,
320,
400
]
],
[
"feb93b00a6f625c5",
"",
[
340,
790,
295,
790
]
],
[
"f64afa3df20737db",
"",
[
420,
780,
295,
780
]
],
[
"b209dbdf0548dc1b",
"",
[
340,
760,
295,
760
]
],
[
"27e1953ab488901d",
"",
[
420,
750,
295,
750
]
],
[
"1745ce13dbcf7921",
"",
[
500,
740,
295,
740
]
],
[
"e0cdd4ed4bb12a36",
"",
[
340,
730,
295,
730
]
],
[
"e4face74f674920b",
"",
[
420,
720,
295,
720
]
],
[
"6f6812224b7f33d4",
"",
[
500,
710,
295,
710
]
],
[
"06bcaac0ff747d05",
"",
[
340,
700,
295,
700
]
],
[
"35d017173d2665d8",
"",
[
420,
690,
295,
690
]
],
[
"8a3206e94b35b0f4",
"",
[
500,
680,
295,
680
]
],
[
"e29bf7da237fb69a",
"",
[
340,
670,
295,
670
]
],
[
"6d88fbae8a583d0f",
"",
[
420,
660,
295,
660
]
],
[
"464a44b96346b154",
"",
[
500,
650,
295,
650
]
],
[
"fb1323775772c56d",
"",
[
340,
640,
295,
640
]
],
[
"bfa90ea0f7a4275f",
"",
[
420,
630,
295,
630
]
],
[
"2c8defbafd153d1a",
"",
[
500,
620,
295,
620
]
],
[
"43dc2ed9b57fb451",
"",
[
340,
610,
295,
610
]
],
[
"fe046019066a4a44",
"",
[
420,
600,
295,
600
]
],
[
"56e8a5401b8623ec",
"",
[
500,
590,
295,
590
]
],
[
"cf7ccecf33b7a0d5",
"",
[
340,
550,
295,
550
]
],
[
"6e356ed0d28c0eb3",
"",
[
65,
225,
65,
315,
65,
315,
65,
325,
65,
325,
65,
335,
65,
345,
65,
335,
135,
225,
65,
225,
135,
225,
135,
235,
45,
225,
65,
225,
45,
375,
45,
225,
160,
375,
45,
375,
160,
345,
160,
375,
135,
345,
160,
345
]
],
[
"e3ff9cf7434252e5",
"",
[
330,
285,
310,
285,
310,
285,
310,
305,
310,
305,
135,
305,
310,
320,
310,
305,
135,
285,
310,
285
]
],
[
"243deb0ff9c16c0e",
"",
[
390,
295,
370,
295,
370,
295,
370,
275,
370,
275,
135,
275,
135,
295,
370,
295
]
],
[
"3cf63d651fa02c95",
"",
[
180,
265,
135,
265
]
],
[
"9b7fad37d5c4f3b1",
"",
[
180,
325,
135,
325
]
],
[
"22989673c57887cc",
"",
[
450,
265,
220,
265,
450,
325,
450,
265,
450,
325,
220,
325,
450,
240,
450,
265
]
],
[
"153f1d90a64abf9a",
"",
[
650,
650,
650,
620
]
],
[
"ca084052d6e32446",
"",
[
650,
550,
650,
580
]
],
[
"385af3e0bbccbecd",
"",
[
730,
650,
730,
620
]
],
[
"6d2cb31fb5be3fde",
"",
[
730,
550,
730,
580
]
],
[
"285547065cc80b03",
"",
[
810,
650,
810,
620
]
],
[
"be543e00dcef1077",
"",
[
810,
550,
810,
580
]
],
[
"8eaf5e606c17b851",
"",
[
890,
650,
890,
620
]
],
[
"34d57d50ac91bf69",
"",
[
890,
550,
890,
580
]
],
[
"7bcf40ed97efc3a1",
"",
[
980,
650,
980,
620
]
],
[
"4782c45a98766c01",
"",
[
980,
550,
980,
580
]
],
[
"e2df3e056bf7767e",
"",
[
660,
430,
660,
400
]
],
[
"e3f2c25126ac4b76",
"",
[
660,
320,
660,
340,
720,
340,
660,
340,
720,
330,
720,
340,
790,
340,
720,
340,
660,
360,
660,
340
]
],
[
"e913f18a43115b30",
"",
[
660,
250,
660,
280
]
],
[
"f3aeb405cca00a48",
"",
[
720,
260,
720,
290
]
],
[
"012116b88646d12c",
"",
[
880,
430,
880,
400
]
],
[
"4968688193434063",
"",
[
880,
320,
880,
340,
940,
340,
880,
340,
940,
330,
940,
340,
1010,
340,
940,
340,
880,
360,
880,
340
]
],
[
"87b1b7aaa7ebec84",
"",
[
880,
250,
880,
280
]
],
[
"ce117c28917cfd66",
"",
[
940,
260,
940,
290
]
],
[
"0c66b822cd6baac8",
"",
[
340,
480,
295,
480
]
],
[
"93e1d83328e4228e",
"",
[
340,
470,
295,
470
]
],
[
"08f3141cb1cfdf61",
"",
[
200,
595,
205,
595,
200,
480,
200,
595
]
]
],
"windowId": "1fc63338-da16-4591-bd8c-a22df2fba284"
}
+413
查看文件
@@ -0,0 +1,413 @@
{
"success": true,
"result": {
"u33": {
"x": 250,
"y": 600,
"rot": 0,
"pins": [
[
"1",
210,
635
],
[
"2",
210,
625
],
[
"3",
210,
615
],
[
"4",
210,
605
],
[
"5",
210,
595
],
[
"6",
210,
585
],
[
"7",
210,
575
],
[
"8",
210,
565
],
[
"9",
290,
565
],
[
"10",
290,
575
],
[
"11",
290,
585
],
[
"12",
290,
595
],
[
"13",
290,
605
],
[
"14",
290,
615
],
[
"15",
290,
625
],
[
"16",
290,
635
]
]
},
"wires": [
[
170,
635,
210,
635
],
[
170,
625,
210,
625
],
[
170,
615,
210,
615
],
[
170,
605,
210,
605
],
[
330,
625,
290,
625
],
[
330,
585,
290,
585
],
[
330,
595,
290,
595
],
[
330,
605,
290,
605
],
[
330,
615,
290,
615
],
[
400,
635,
290,
635,
400,
665,
400,
635
],
[
400,
575,
290,
575,
400,
540,
400,
575
],
[
170,
565,
210,
565,
170,
535,
170,
565
],
[
520,
650,
520,
620
],
[
520,
550,
520,
580
],
[
540,
330,
580,
330
],
[
680,
330,
660,
330,
660,
290,
660,
330,
620,
330,
660,
330
],
[
660,
225,
660,
250
],
[
710,
280,
710,
310
],
[
1000,
350,
790,
350,
790,
350,
790,
410,
710,
350,
790,
350,
1000,
350,
1000,
380,
1000,
380,
1065,
380,
1000,
460,
1000,
380,
1000,
460,
1065,
460,
1000,
540,
1000,
460,
1000,
540,
1065,
540,
1000,
620,
1000,
540,
1000,
620,
1065,
620,
1000,
700,
1000,
620,
1000,
700,
1065,
700
],
[
790,
480,
790,
450
],
[
1030,
710,
1065,
710,
1030,
630,
1030,
710,
1030,
630,
1065,
630,
1030,
550,
1030,
630,
1030,
550,
1065,
550,
1030,
470,
1030,
550,
1030,
470,
1065,
470,
1030,
470,
1030,
390,
1030,
390,
1065,
390,
1030,
710,
1030,
755,
1030,
755,
1090,
755,
1030,
755,
1030,
765,
1030,
765,
970,
765,
1030,
785,
1030,
765
],
[
970,
690,
1065,
690,
970,
725,
970,
690,
940,
725,
970,
725,
970,
610,
970,
690,
970,
610,
1065,
610,
970,
610,
970,
530,
970,
530,
1065,
530,
970,
450,
970,
530,
970,
450,
1065,
450,
970,
450,
970,
370,
970,
370,
1065,
370
],
[
1090,
700,
1090,
725
],
[
800,
725,
840,
725,
840,
710,
840,
725,
900,
725,
840,
725
],
[
840,
645,
840,
670
]
]
},
"windowId": "1fc63338-da16-4591-bd8c-a22df2fba284"
}
文件差异因一行或多行过长而隐藏
+22
查看文件
@@ -0,0 +1,22 @@
{
"U21": [
91.91,
51.73
],
"U22": [
92.1,
37.99
],
"U23": [
76.57,
47.39
],
"U6": [
78.16,
35.77
],
"U7": [
109.08,
32.27
]
}
+1
查看文件
@@ -0,0 +1 @@
{"segs": [], "vias": [["GND", 14.8, 5.0], ["GND", 38.5, 5.0], ["GND", 62.2, 5.0], ["GND", 110.3, 5.0], ["GND", 129.0, 5.0], ["GND", 147.7, 5.0]]}
+1
查看文件
@@ -0,0 +1 @@
{"segs": [["SCL", 1, 74.2254, 52.6537, 74.2254, 53.7792, 0.2], ["SCL", 2, 77.2, 52.0, 74.5, 52.0, 0.2], ["SCL", 2, 74.5, 52.0, 74.0, 51.5, 0.2], ["SCL", 2, 74.0, 51.5, 74.0, 51.3, 0.2], ["SCL", 2, 74.0, 51.3, 73.9, 51.2, 0.2], ["SCL", 1, 73.9, 51.2, 73.9, 51.3, 0.2], ["SCL", 1, 73.9, 51.3, 74.2, 51.6, 0.2], ["SCL", 1, 74.2, 51.6, 74.2, 51.9, 0.2], ["SCL", 16, 115.2, 37.2, 121.0, 43.0, 0.2], ["SCL", 16, 121.0, 43.0, 121.0, 43.2, 0.2], ["SCL", 2, 121.0, 43.2, 121.9, 44.1, 0.2], ["SCL", 2, 121.9, 44.1, 121.9, 44.4, 0.2], ["SCL", 2, 121.9, 44.4, 122.4, 44.9, 0.2], ["SCL", 2, 122.4, 44.9, 122.5, 44.9, 0.2], ["SCL", 2, 122.5, 44.9, 126.5, 48.9, 0.2], ["SCL", 2, 126.5, 48.9, 126.5, 49.0, 0.2], ["SCL", 2, 126.5, 49.0, 126.6, 49.1, 0.2], ["SCL", 2, 73.6, 51.2, 72.4, 50.0, 0.2], ["SCL", 2, 72.4, 50.0, 61.1, 50.0, 0.2], ["SCL", 16, 61.1, 50.0, 58.6, 50.0, 0.2], ["SCL", 16, 58.6, 50.0, 58.5, 49.9, 0.2], ["SCL", 16, 58.5, 49.9, 58.4, 49.9, 0.2], ["SCL", 2, 58.4, 49.9, 48.2, 49.9, 0.2], ["SCL", 16, 60.2, 50.1, 60.2, 62.2, 0.2], ["SCL", 16, 60.2, 62.2, 57.3, 65.1, 0.2], ["SCL", 16, 57.3, 65.1, 37.2, 65.1, 0.2], ["SCL", 16, 37.2, 65.1, 36.7, 64.6, 0.2], ["SCL", 16, 47.9, 65.1, 47.9, 75.8, 0.2], ["SCL", 16, 47.9, 75.8, 48.0, 75.9, 0.2], ["SCL", 1, 48.0, 75.9, 47.9, 75.8, 0.2], ["SCL", 1, 47.9, 75.8, 47.9, 73.3, 0.2], ["SCL", 1, 47.9, 73.3, 48.2, 73.0, 0.2], ["SCL", 1, 48.2, 73.0, 50.7, 73.0, 0.2], ["SCL", 1, 50.7, 73.0, 52.4, 74.7, 0.2], ["SCL", 16, 35.0, 64.6, 34.5, 65.1, 0.2], ["SCL", 16, 34.5, 65.1, 6.7, 65.1, 0.2], ["SCL", 16, 6.7, 65.1, 6.5, 64.9, 0.2], ["SCL", 16, 6.5, 64.9, 6.5, 60.3, 0.2], ["SCL", 16, 6.5, 60.3, 7.6, 59.2, 0.2], ["SCL", 16, 7.6, 59.2, 29.1, 59.2, 0.2], ["SCL", 16, 29.1, 59.2, 29.8, 58.5, 0.2], ["SCL", 16, 29.8, 58.5, 29.8, 58.4, 0.2], ["SCL", 1, 29.8, 58.4, 29.8, 58.1, 0.2], ["SCL", 1, 29.8, 58.1, 29.2, 57.5, 0.2], ["SCL", 1, 29.2, 57.5, 22.1, 57.5, 0.2], ["SCL", 1, 22.1, 57.5, 15.7, 51.1, 0.2], ["SCL", 1, 15.7, 51.1, 15.7, 51.0, 0.2], ["SCL", 1, 15.7, 51.0, 15.6, 50.9, 0.2], ["SCL", 16, 6.8, 65.1, 6.8, 87.6, 0.2], ["SCL", 1, 6.8, 87.6, 6.8, 93.6, 0.2], ["SDA", 1, 73.5752, 52.6537, 73.5752, 53.7792, 0.2], ["SDA", 16, 80.0, 41.7, 80.0, 42.6, 0.2], ["SDA", 16, 80.0, 42.6, 78.1, 44.5, 0.2], ["SDA", 16, 78.1, 44.5, 73.4, 44.5, 0.2], ["SDA", 16, 73.4, 44.5, 72.9, 45.0, 0.2], ["SDA", 16, 72.9, 45.0, 72.9, 54.8, 0.2], ["SDA", 1, 72.9, 54.8, 73.5, 54.2, 0.2], ["SDA", 1, 73.5, 54.2, 73.5, 53.8, 0.2], ["SDA", 2, 72.6, 54.8, 71.8, 54.8, 0.2], ["SDA", 2, 71.8, 54.8, 70.0, 53.0, 0.2], ["SDA", 2, 70.0, 53.0, 70.0, 51.9, 0.2], ["SDA", 2, 70.0, 51.9, 69.9, 51.8, 0.2], ["SDA", 1, 69.9, 51.8, 70.6, 51.1, 0.2], ["SDA", 1, 70.6, 51.1, 70.6, 48.7, 0.2], ["SDA", 1, 70.6, 48.7, 70.5, 48.6, 0.2], ["SDA", 2, 70.5, 48.6, 70.5, 48.8, 0.2], ["SDA", 2, 70.5, 48.8, 69.9, 49.4, 0.2], ["SDA", 2, 69.9, 49.4, 61.6, 49.4, 0.2], ["SDA", 2, 61.6, 49.4, 61.5, 49.3, 0.2], ["SDA", 2, 61.5, 49.3, 60.7, 49.3, 0.2], ["SDA", 2, 60.7, 49.3, 60.4, 49.6, 0.2], ["SDA", 2, 60.4, 49.6, 60.4, 50.4, 0.2], ["SDA", 2, 60.4, 50.4, 60.9, 50.9, 0.2], ["SDA", 16, 60.9, 50.9, 60.9, 59.6, 0.2], ["SDA", 1, 60.9, 59.6, 55.8, 59.6, 0.2], ["SDA", 1, 55.8, 59.6, 49.2, 53.0, 0.2], ["SDA", 1, 49.2, 53.0, 49.2, 52.9, 0.2], ["SDA", 1, 49.2, 52.9, 49.1, 52.8, 0.2], ["SDA", 16, 60.9, 59.9, 60.9, 64.0, 0.2], ["SDA", 16, 60.9, 64.0, 53.9, 71.0, 0.2], ["SDA", 16, 53.9, 71.0, 53.3, 71.0, 0.2], ["SDA", 16, 53.3, 71.0, 49.5, 74.8, 0.2], ["SDA", 16, 49.5, 74.8, 49.5, 75.5, 0.2], ["SDA", 16, 49.5, 75.5, 48.4, 76.6, 0.2], ["SDA", 16, 48.4, 76.6, 45.2, 76.6, 0.2], ["SDA", 16, 45.2, 76.6, 34.4, 65.8, 0.2], ["SDA", 16, 49.5, 75.6, 50.9, 77.0, 0.2], ["SDA", 16, 50.9, 77.0, 51.0, 77.0, 0.2], ["SDA", 16, 51.0, 77.0, 51.1, 77.1, 0.2], ["SDA", 16, 33.9, 66.0, 15.5, 84.4, 0.2], ["SDA", 16, 15.5, 84.4, 15.5, 85.5, 0.2], ["SDA", 16, 15.5, 85.5, 15.3, 85.7, 0.2], ["SDA", 16, 15.3, 85.7, 15.0, 85.7, 0.2], ["SDA", 16, 15.0, 85.7, 13.2, 87.5, 0.2], ["SDA", 16, 13.2, 87.5, 11.5, 87.5, 0.2], ["SDA", 16, 11.5, 87.5, 11.4, 87.6, 0.2], ["SDA", 2, 11.4, 87.6, 11.4, 94.0, 0.2], ["SDA", 2, 11.4, 94.0, 9.7, 95.7, 0.2], ["SDA", 1, 102.5, 31.0, 102.5, 38.1, 0.2], ["SDA", 16, 102.5, 38.1, 102.5, 49.0, 0.2], ["SDA", 2, 102.5, 49.0, 102.5, 56.9, 0.2], ["SDA", 16, 102.5, 56.9, 102.5, 64.9, 0.2], ["SDA", 16, 102.5, 64.9, 102.7, 65.1, 0.2], ["SDA", 16, 102.7, 65.1, 128.7, 65.1, 0.2], ["SDA", 16, 128.7, 65.1, 133.9, 70.3, 0.2], ["SDA", 16, 133.9, 70.3, 134.2, 70.3, 0.2], ["SDA", 16, 134.2, 70.3, 139.2, 75.3, 0.2], ["SDA", 16, 139.2, 75.3, 139.6, 75.3, 0.2], ["SDA", 16, 139.6, 75.3, 139.7, 75.4, 0.2]], "vias": [["SCL", 73.9, 51.2], ["SCL", 121.0, 43.2], ["SCL", 61.1, 50.0], ["SCL", 58.4, 49.9], ["SCL", 48.0, 75.9], ["SCL", 29.8, 58.4], ["SCL", 6.8, 87.6], ["SDA", 72.9, 54.8], ["SDA", 69.9, 51.8], ["SDA", 70.5, 48.6], ["SDA", 60.9, 50.9], ["SDA", 60.9, 59.6], ["SDA", 11.4, 87.6], ["SDA", 102.5, 38.1], ["SDA", 102.5, 49.0], ["SDA", 102.5, 56.9]]}
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
[{"net": "GND", "x": 151.9259, "y": 48.8, "num": "A1B12", "layer": 1, "pts": [6006.923, 1933.068, "L", 6006.923, 1921.258, 6006.929, 1921.258, 6006.929, 1909.447, 5955.747, 1909.447, 5955.747, 1921.257, 5955.741, 1921.257, 5955.741, 1933.068, 6006.923, 1933.068]}, {"net": "GND", "x": 151.9259, "y": 55.2, "num": "B1A12", "layer": 1, "pts": [5955.741, 2161.413, "L", 5955.741, 2173.224, 5955.741, 2173.225, 5955.741, 2185.036, 6006.921, 2185.036, 6006.921, 2173.225, 6006.921, 2173.224, 6006.921, 2161.413, 5955.741, 2161.413]}, {"net": "", "x": 151.9259, "y": 54.4002, "num": "B4A9", "layer": 1, "pts": [6006.921, 2153.546, "L", 6006.921, 2141.735, 6006.921, 2141.734, 6006.921, 2129.923, 5955.741, 2129.923, 5955.741, 2141.734, 5955.741, 2141.735, 5955.741, 2153.546, 6006.921, 2153.546]}, {"net": "", "x": 151.9259, "y": 49.5998, "num": "A4B9", "layer": 1, "pts": [6006.927, 1964.564, "L", 6006.927, 1952.755, 6006.928, 1952.755, 6006.928, 1940.943, 5955.748, 1940.943, 5955.748, 1952.752, 5955.747, 1952.752, 5955.747, 1964.564, 6006.927, 1964.564]}, {"net": "GND", "x": 16.8001, "y": 27.5001, "num": "15", "layer": 1, "pts": [621.424, 1122.676, "L", 645.676, 1122.676, 645.676, 1167.715, 655.125, 1167.715, 655.125, 1139.369, 667.723, 1139.369, 667.723, 1167.715, 677.172, 1167.715, 677.172, 1122.676, 701.424, 1122.676, 701.424, 1042.676, 677.172, 1042.676, 677.172, 997.637, 667.723, 997.637, 667.723, 1025.983, 655.125, 1025.983, 655.125, 997.637, 645.676, 997.637, 645.676, 1042.676, 621.424, 1042.676, 621.424, 1122.676]}, {"net": "GND", "x": 51.0891, "y": 98.0001, "num": "15", "layer": 1, "pts": [2051.376, 3818.274, "L", 2027.124, 3818.274, 2027.124, 3773.235, 2017.675, 3773.235, 2017.675, 3801.581, 2005.077, 3801.581, 2005.077, 3773.235, 1995.628, 3773.235, 1995.628, 3818.274, 1971.376, 3818.274, 1971.376, 3898.274, 1995.628, 3898.274, 1995.628, 3943.313, 2005.077, 3943.313, 2005.077, 3914.967, 2017.675, 3914.967, 2017.675, 3943.313, 2027.124, 3943.313, 2027.124, 3898.274, 2051.376, 3898.274, 2051.376, 3818.274]}, {"net": "GND", "x": 139.4691, "y": 98.0001, "num": "15", "layer": 1, "pts": [5530.906, 3818.274, "L", 5506.654, 3818.274, 5506.654, 3773.235, 5497.205, 3773.235, 5497.205, 3801.581, 5484.607, 3801.581, 5484.607, 3773.235, 5475.158, 3773.235, 5475.158, 3818.274, 5450.906, 3818.274, 5450.906, 3898.274, 5475.158, 3898.274, 5475.158, 3943.313, 5484.607, 3943.313, 5484.607, 3914.967, 5497.205, 3914.967, 5497.205, 3943.313, 5506.654, 3943.313, 5506.654, 3898.274, 5530.906, 3898.274, 5530.906, 3818.274]}, {"net": "GND", "x": 48.469, "y": 27.5001, "num": "15", "layer": 1, "pts": [1868.234, 1122.676, "L", 1892.486, 1122.676, 1892.486, 1167.715, 1901.935, 1167.715, 1901.935, 1139.369, 1914.533, 1139.369, 1914.533, 1167.715, 1923.982, 1167.715, 1923.982, 1122.676, 1948.234, 1122.676, 1948.234, 1042.676, 1923.982, 1042.676, 1923.982, 997.637, 1914.533, 997.637, 1914.533, 1025.983, 1901.935, 1025.983, 1901.935, 997.637, 1892.486, 997.637, 1892.486, 1042.676, 1868.234, 1042.676, 1868.234, 1122.676]}, {"net": "GND", "x": 128, "y": 27.5001, "num": "15", "layer": 1, "pts": [4999.374, 1122.676, "L", 5023.626, 1122.676, 5023.626, 1167.715, 5033.075, 1167.715, 5033.075, 1139.369, 5045.673, 1139.369, 5045.673, 1167.715, 5055.122, 1167.715, 5055.122, 1122.676, 5079.374, 1122.676, 5079.374, 1042.676, 5055.122, 1042.676, 5055.122, 997.637, 5045.673, 997.637, 5045.673, 1025.983, 5033.075, 1025.983, 5033.075, 997.637, 5023.626, 997.637, 5023.626, 1042.676, 4999.374, 1042.676, 4999.374, 1122.676]}, {"net": "GND", "x": 79.5801, "y": 38.01, "num": "17", "layer": 1, "pts": [3166.541, 1529.919, "L", 3166.541, 1462.989, 3099.611, 1462.989, 3099.611, 1516.139, 3113.391, 1529.919, 3166.541, 1529.919]}, {"net": "GND", "x": 109.5701, "y": 34.71, "num": "17", "layer": 1, "pts": [4347.251, 1399.999, "L", 4347.251, 1333.069, 4280.321, 1333.069, 4280.321, 1386.219, 4294.101, 1399.999, 4347.251, 1399.999]}]
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
[[211.2419, 65.1998], [211.2418, 58.7999], [212.3919, 65.1998], [212.3918, 58.7999], [211.2419, 65.1998], [211.2418, 58.7999]]
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
{"n": 161, "comps": [["C701", 1, 1752, 2854, 0], ["C702", 1, 4567, 2854, 0], ["C703", 1, 7382, 2854, 0], ["C704", 1, 2691, 2467, 180], ["C705", 1, 5506, 2467, 180], ["C711", 1, 2146, 2854, 0], ["C712", 1, 4961, 2854, 0], ["C713", 1, 7776, 2854, 0], ["C714", 1, 2297, 2467, 180], ["C715", 1, 5112, 2467, 180], ["C721", 1, 2264, 2854, 0], ["C722", 1, 5079, 2854, 0], ["C723", 1, 7894, 2854, 0], ["C724", 1, 2179, 2467, 180], ["C725", 1, 4994, 2467, 180], ["C736", 1, 669, 1654, 0], ["C737", 1, 1299, 1654, 0], ["C740", 2, 3976, 2638, 0], ["C741", 2, 4685, 2638, 0], ["C742", 2, 4331, 2992, 0], ["C743", 2, 4213, 2283, 0], ["C744", 2, 4449, 2283, 0], ["C745", 2, 3976, 2520, 0], ["C746", 2, 4685, 2520, 0], ["C747", 2, 3976, 2756, 0], ["C748", 2, 4685, 2756, 0], ["C749", 2, 4213, 2992, 0], ["C750", 2, 4449, 2992, 0], ["C751", 2, 4094, 2283, 0], ["C760", 1, 1417, 256, 0], ["J23", 1, 202, 1063, 270], ["J31", 2, 2441, 2657, 0], ["J32", 2, 6220, 2657, 0], ["J71", 1, 2461, 3248, 0], ["J72", 1, 5276, 3248, 0], ["J73", 1, 8091, 3248, 0], ["J74", 1, 1982, 2073, 180], ["J75", 1, 4797, 2073, 180], ["R701", 1, 2382, 2854, 0], ["R702", 1, 5197, 2854, 0], ["R703", 1, 8012, 2854, 0], ["R704", 1, 2061, 2467, 180], ["R705", 1, 4876, 2467, 180], ["R708", 2, 4567, 2283, 0], ["R709", 2, 3976, 2402, 0], ["R710", 2, 4685, 2402, 0], ["R711", 2, 3976, 2874, 0], ["R712", 2, 4685, 2874, 0], ["R714", 2, 4094, 2992, 0], ["R715", 2, 4567, 2992, 0], ["R716", 2, 4331, 2165, 0], ["R717", 2, 3858, 2638, 0], ["R718", 2, 4803, 2638, 0], ["R719", 2, 4331, 3110, 0], ["R720", 2, 4213, 2165, 0], ["R721", 1, 551, 1339, 0], ["R722", 1, 709, 1339, 0], ["R761", 1, 2618, 3051, 0], ["R762", 1, 5433, 3051, 0], ["R763", 1, 8248, 3051, 0], ["R764", 1, 1824, 2270, 180], ["R765", 1, 4639, 2270, 180], ["R771", 1, 2717, 3051, 0], ["R772", 1, 5532, 3051, 0], ["R773", 1, 8346, 3051, 0], ["R774", 1, 1726, 2270, 180], ["R775", 1, 4541, 2270, 180], ["U24", 1, 1969, 2854, 0], ["U25", 1, 4783, 2854, 0], ["U26", 1, 7598, 2854, 0], ["U27", 1, 2474, 2467, 180], ["U28", 1, 5289, 2467, 180], ["U31", 1, 984, 1654, 0], ["U32", 2, 4331, 2638, 0], ["U34", 1, 1417, 472, 0], ["U51", 1, 2461, 3051, 0], ["U52", 1, 5276, 3051, 0], ["U53", 1, 8091, 3051, 0], ["U54", 1, 1982, 2270, 180], ["U55", 1, 4797, 2270, 180], ["Y1", 2, 4331, 2283, 0], ["C761", 1, 2146, 3051, 0], ["C762", 1, 4961, 3051, 0], ["C763", 1, 7776, 3051, 0], ["C764", 1, 2297, 2270, 180], ["C765", 1, 5112, 2270, 180], ["C801", 1, 669, 2933, 0], ["C802", 1, 1417, 3240, 0], ["C803", 1, 1634, 3240, 0], ["C804", 1, 1417, 3051, 0], ["C805", 1, 1634, 3051, 0], ["C806", 1, 1122, 3240, 0], ["C811", 1, 3484, 2933, 0], ["C812", 1, 4232, 3240, 0], ["C813", 1, 4449, 3240, 0], ["C814", 1, 4232, 3051, 0], ["C815", 1, 4449, 3051, 0], ["C816", 1, 3937, 3240, 0], ["C821", 1, 6299, 2933, 0], ["C822", 1, 7047, 3240, 0], ["C823", 1, 7264, 3240, 0], ["C824", 1, 7047, 3051, 0], ["C825", 1, 7264, 3051, 0], ["C826", 1, 6752, 3240, 0], ["C831", 1, 3773, 2388, 180], ["C832", 1, 3025, 2081, 180], ["C833", 1, 2809, 2081, 180], ["C834", 1, 3025, 2270, 180], ["C835", 1, 2809, 2270, 180], ["C836", 1, 3320, 2081, 180], ["C841", 1, 6588, 2388, 180], ["C842", 1, 5840, 2081, 180], ["C843", 1, 5624, 2081, 180], ["C844", 1, 5840, 2270, 180], ["C845", 1, 5624, 2270, 180], ["C846", 1, 6135, 2081, 180], ["J41", 1, 319, 3638, 0], ["J42", 1, 303, 3547, 0], ["J43", 1, 410, 3623, 0], ["J44", 1, 280, 3463, 0], ["J45", 1, 3134, 3638, 0], ["J46", 1, 3118, 3547, 0], ["J47", 1, 3225, 3623, 0], ["J48", 1, 3095, 3463, 0], ["J49", 1, 5949, 3638, 0], ["J50", 1, 5933, 3547, 0], ["J51", 1, 6040, 3623, 0], ["J52", 1, 5910, 3463, 0], ["J53", 1, 4123, 1683, 180], ["J54", 1, 4139, 1774, 180], ["J55", 1, 4033, 1698, 180], ["J56", 1, 4162, 1858, 180], ["J57", 1, 6938, 1683, 180], ["J58", 1, 6954, 1774, 180], ["J59", 1, 6848, 1698, 180], ["J60", 1, 6977, 1858, 180], ["J61", 1, 1929, 3240, 0], ["J62", 1, 4744, 3240, 0], ["J63", 1, 7559, 3240, 0], ["J64", 1, 2513, 2081, 180], ["J65", 1, 5328, 2081, 180], ["R741", 1, 1811, 3051, 0], ["R742", 1, 4626, 3051, 0], ["R743", 1, 7441, 3051, 0], ["R744", 1, 2632, 2270, 180], ["R745", 1, 5446, 2270, 180], ["TP801", 1, 1024, 3240, 0], ["TP802", 1, 1220, 3240, 0], ["TP811", 1, 3839, 3240, 0], ["TP812", 1, 4035, 3240, 0], ["TP821", 1, 6654, 3240, 0], ["TP822", 1, 6850, 3240, 0], ["TP831", 1, 3419, 2081, 180], ["TP832", 1, 3222, 2081, 180], ["TP841", 1, 6234, 2081, 180], ["TP842", 1, 6037, 2081, 180], ["U41", 1, 1969, 3051, 0], ["U42", 1, 4783, 3051, 0], ["U43", 1, 7598, 3051, 0], ["U44", 1, 2474, 2270, 180], ["U45", 1, 5289, 2270, 180]]}
+1
查看文件
@@ -0,0 +1 @@
[[213.6604, 59.1, 0.2998], [213.6604, 64.8998, 0.2998]]
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+512
查看文件
@@ -0,0 +1,512 @@
{
"lines": [
"970456d044e8254e",
"831cea302d0e0bee",
"ab74163cefc3931a",
"a5569450583dac67",
"b9563345340b5c4f",
"4f37b75c7464f225",
"9c03340084ea5cb9",
"329edd11233cadfa",
"54c1e93f0bf314e6",
"a3ea9267f390c438",
"18e58b9bec91d2ba",
"5c7b6956618da6df",
"764263f208a139b7",
"989abc751e56c4fc",
"ffc0297928ded5f9",
"2e4e5a58b1e60027",
"33df2dca255fa5d9",
"afd7ae30b1fe33f2",
"c61f860aa652d925",
"61cc691b9b4e77b5",
"87dca485f639638f",
"565ef720532d8e62",
"4806ab1b93cc3369",
"ec9ff7814e0f9d4b",
"2728e0fd9c062858",
"88307fc2075178dacba1489d9492537c",
"88307fc2075178da060d4b628d881238",
"88307fc2075178da38c08fdc450b59e1",
"88307fc2075178da32cb57dfb4a24707",
"88307fc2075178daccfc6183d84bd2d4",
"88307fc2075178dade69798916df0947",
"88307fc2075178da591f1f111a1338e5",
"88307fc2075178dad8924703f938803a",
"88307fc2075178dab56236dd17cf52c4",
"88307fc2075178da478b96f0db8e46ca",
"88307fc2075178da8b45c5cdb0fcd9fa",
"88307fc2075178da14deb1b4707ceec2",
"88307fc2075178da134f0512d484f1b3",
"4ce24f13ffaa522fcba1489d9492537c",
"4ce24f13ffaa522f060d4b628d881238",
"4ce24f13ffaa522f38c08fdc450b59e1",
"4ce24f13ffaa522f32cb57dfb4a24707",
"4ce24f13ffaa522fccfc6183d84bd2d4",
"4ce24f13ffaa522fde69798916df0947",
"4ce24f13ffaa522f591f1f111a1338e5",
"4ce24f13ffaa522fd8924703f938803a",
"4ce24f13ffaa522fb56236dd17cf52c4",
"4ce24f13ffaa522f478b96f0db8e46ca",
"4ce24f13ffaa522f8b45c5cdb0fcd9fa",
"4ce24f13ffaa522f14deb1b4707ceec2",
"4ce24f13ffaa522f134f0512d484f1b3",
"b51497cb78d14195cba1489d9492537c",
"b51497cb78d14195060d4b628d881238",
"b51497cb78d1419538c08fdc450b59e1",
"b51497cb78d1419532cb57dfb4a24707",
"b51497cb78d14195ccfc6183d84bd2d4",
"b51497cb78d14195de69798916df0947",
"b51497cb78d14195591f1f111a1338e5",
"b51497cb78d14195d8924703f938803a",
"b51497cb78d14195b56236dd17cf52c4",
"b51497cb78d14195478b96f0db8e46ca",
"b51497cb78d141958b45c5cdb0fcd9fa",
"b51497cb78d1419514deb1b4707ceec2",
"b51497cb78d14195134f0512d484f1b3",
"ef79ad2794fb9709cba1489d9492537c",
"ef79ad2794fb9709060d4b628d881238",
"ef79ad2794fb970938c08fdc450b59e1",
"ef79ad2794fb970932cb57dfb4a24707",
"ef79ad2794fb9709ccfc6183d84bd2d4",
"ef79ad2794fb9709de69798916df0947",
"ef79ad2794fb9709591f1f111a1338e5",
"ef79ad2794fb9709d8924703f938803a",
"ef79ad2794fb9709b56236dd17cf52c4",
"ef79ad2794fb9709478b96f0db8e46ca",
"ef79ad2794fb97098b45c5cdb0fcd9fa",
"ef79ad2794fb970914deb1b4707ceec2",
"ef79ad2794fb9709134f0512d484f1b3",
"c293eaac4d30976fcba1489d9492537c",
"c293eaac4d30976f060d4b628d881238",
"c293eaac4d30976f38c08fdc450b59e1",
"c293eaac4d30976f32cb57dfb4a24707",
"c293eaac4d30976fccfc6183d84bd2d4",
"c293eaac4d30976fde69798916df0947",
"c293eaac4d30976f591f1f111a1338e5",
"c293eaac4d30976fd8924703f938803a",
"c293eaac4d30976fb56236dd17cf52c4",
"c293eaac4d30976f478b96f0db8e46ca",
"c293eaac4d30976f8b45c5cdb0fcd9fa",
"c293eaac4d30976f14deb1b4707ceec2",
"c293eaac4d30976f134f0512d484f1b3",
"cbf220baab763d0f55a4de92dccbe8fd",
"cbf220baab763d0f8a533a2ff9e42cb5",
"cbf220baab763d0f7671dd1a33da62c9",
"cbf220baab763d0f0e8bbcd3e87ae89b",
"4cd21ab70af0106a55a4de92dccbe8fd",
"4cd21ab70af0106a8a533a2ff9e42cb5",
"4cd21ab70af0106a7671dd1a33da62c9",
"4cd21ab70af0106a0e8bbcd3e87ae89b",
"927cb7592d479c6455a4de92dccbe8fd",
"927cb7592d479c648a533a2ff9e42cb5",
"927cb7592d479c647671dd1a33da62c9",
"927cb7592d479c640e8bbcd3e87ae89b",
"a4ead9726dfda49055a4de92dccbe8fd",
"a4ead9726dfda4908a533a2ff9e42cb5",
"a4ead9726dfda4907671dd1a33da62c9",
"a4ead9726dfda4900e8bbcd3e87ae89b",
"28bde7690ef63b1b55a4de92dccbe8fd",
"28bde7690ef63b1b8a533a2ff9e42cb5",
"28bde7690ef63b1b7671dd1a33da62c9",
"28bde7690ef63b1b0e8bbcd3e87ae89b",
"57ad79380e5b8c8055a4de92dccbe8fd",
"57ad79380e5b8c808a533a2ff9e42cb5",
"57ad79380e5b8c807671dd1a33da62c9",
"57ad79380e5b8c800e8bbcd3e87ae89b",
"14f9eba2e4921c6955a4de92dccbe8fd",
"14f9eba2e4921c698a533a2ff9e42cb5",
"14f9eba2e4921c697671dd1a33da62c9",
"14f9eba2e4921c690e8bbcd3e87ae89b",
"9c20013c6e18d0f655a4de92dccbe8fd",
"9c20013c6e18d0f68a533a2ff9e42cb5",
"9c20013c6e18d0f67671dd1a33da62c9",
"9c20013c6e18d0f60e8bbcd3e87ae89b",
"9b71085432c1c60755a4de92dccbe8fd",
"9b71085432c1c6078a533a2ff9e42cb5",
"9b71085432c1c6077671dd1a33da62c9",
"9b71085432c1c6070e8bbcd3e87ae89b",
"60b7cb0bef0d090855a4de92dccbe8fd",
"60b7cb0bef0d09088a533a2ff9e42cb5",
"60b7cb0bef0d09087671dd1a33da62c9",
"60b7cb0bef0d09080e8bbcd3e87ae89b",
"df354e93ee3c5a3455a4de92dccbe8fd",
"df354e93ee3c5a348a533a2ff9e42cb5",
"df354e93ee3c5a347671dd1a33da62c9",
"df354e93ee3c5a340e8bbcd3e87ae89b",
"6874f9d33c400ace55a4de92dccbe8fd",
"6874f9d33c400ace8a533a2ff9e42cb5",
"6874f9d33c400ace7671dd1a33da62c9",
"6874f9d33c400ace0e8bbcd3e87ae89b",
"91239cd1b2b6c68155a4de92dccbe8fd",
"91239cd1b2b6c6818a533a2ff9e42cb5",
"91239cd1b2b6c6817671dd1a33da62c9",
"91239cd1b2b6c6810e8bbcd3e87ae89b",
"e18f3a7e473432a755a4de92dccbe8fd",
"e18f3a7e473432a78a533a2ff9e42cb5",
"e18f3a7e473432a77671dd1a33da62c9",
"e18f3a7e473432a70e8bbcd3e87ae89b",
"3da8bf2a0db693a055a4de92dccbe8fd",
"3da8bf2a0db693a08a533a2ff9e42cb5",
"3da8bf2a0db693a07671dd1a33da62c9",
"3da8bf2a0db693a00e8bbcd3e87ae89b",
"1171467c08e34d5055a4de92dccbe8fd",
"1171467c08e34d508a533a2ff9e42cb5",
"1171467c08e34d507671dd1a33da62c9",
"1171467c08e34d500e8bbcd3e87ae89b",
"e79bff3b512dc43855a4de92dccbe8fd",
"e79bff3b512dc4388a533a2ff9e42cb5",
"e79bff3b512dc4387671dd1a33da62c9",
"e79bff3b512dc4380e8bbcd3e87ae89b",
"366015ba3ec7101f55a4de92dccbe8fd",
"366015ba3ec7101f8a533a2ff9e42cb5",
"366015ba3ec7101f7671dd1a33da62c9",
"366015ba3ec7101f0e8bbcd3e87ae89b",
"5cfbcbce328895f555a4de92dccbe8fd",
"5cfbcbce328895f58a533a2ff9e42cb5",
"5cfbcbce328895f57671dd1a33da62c9",
"5cfbcbce328895f50e8bbcd3e87ae89b",
"54ee816d37bcaa7b55a4de92dccbe8fd",
"54ee816d37bcaa7b8a533a2ff9e42cb5",
"54ee816d37bcaa7b7671dd1a33da62c9",
"54ee816d37bcaa7b0e8bbcd3e87ae89b",
"e9fd9e8a62b17a62",
"fe37e3447d5d3777",
"b88f2421c61ee5de",
"a3cae78807180aa8",
"3abd59cd4dd94082",
"15e229484250f987",
"ea812b204808e3ca",
"c5b48c568687ee1a",
"1655b0df8a8ee7fd",
"97832798b1f71b14",
"2de499e54bea5908",
"47ef6cc572b92694",
"9bc0eee60c358013",
"6eaa364f05d1723b",
"83c463f487450850",
"64324a9c046b1a4c",
"e145f04afe5e5ea1",
"9eb18c9644b4d833",
"9fe25eab5e09ec77",
"88393fec8754ff9c",
"a324bffdcb9ad669",
"dca6cc692cc66ad2",
"a26d184cb12442b3",
"8f20ca181f487d59",
"5420297fe4cf5991",
"937ca070e5ca91d5",
"1560aaba4e6e766f",
"8634b90a16f3592b",
"926467c2de14268b",
"3a111f2d7ec58c22",
"854efc7020f4dcc6",
"49806d321a8a79e2",
"1db1ce77d97665f4",
"defc8da4e2c4ce29",
"016b3e8b198302af",
"56be86542d8c339c",
"1322422bc412a889",
"3f3febd37a75dfc8",
"8ee9bf2beb4fcd2c",
"30a258943ac08e28",
"bb4af37a367649f1",
"fe9c8eec14214733",
"0afdae69e3eb2bfc",
"c9aacb4c906319fb",
"274f83576c7956c5",
"8c6ede54bdf5e017",
"2cc915324d2baffa",
"4e57ab5c3e933fea",
"2d5ef69292b61871",
"e62d02c6715253f4",
"16c23761cabf25c2",
"497db00af0d679a6",
"57bc12b0614fc749",
"1dbc984ec787ef3a",
"9b6a9747849d66f3",
"9f3ad224cccf4022",
"c9e07ce92e428e47",
"121f8c00002a92cc",
"4b07e3d8e2a49b36",
"21cb8265bc83946f",
"cd204ec4f5701116",
"636b1b359c7896ef",
"4ce6a780fd1b4008",
"793041ef217525bf",
"1fadb2e2993baf0c",
"095475b37dc0590d",
"3abd117df8bd5878",
"7ea74c4d69ca0655",
"f2797112601d245e",
"2205426a2fc885c1",
"4625360a3e8d289d",
"57e7f7a8b74da870",
"d86d6d71f73e02aa",
"625b99a5ae83d8cb",
"fd665268922af969",
"f00195867a27e22a",
"9ded3f0499735e7b",
"305317a9d00c2016",
"e5d0d4ea3e19e646",
"4e10d543d15501a8",
"e17d0e45642cd94b",
"ab331cb0eb756b04",
"c7ce2df7a1120363",
"6d1c6b05dd8f194e",
"793fd87cfb5459c9",
"614ff78c025c6f88",
"4c2db89af0cd7965",
"df01c68906414344",
"96c4d5a269caa7d4",
"aece54f46c5b8275",
"8ea951e7648b7bf6",
"bb55939c9d192884",
"27a8260801fd2900",
"7e83814a1b89459d",
"a41599f90dc312bb",
"35d3f15626cb2fe4",
"0dea6fea2209dcd5",
"affd0d4d2cc57b5a",
"f174485f6af9723f",
"9e9b68c8d9f44813",
"b300f6855d6dcb1c",
"e1ee62027fbc3553",
"c650ed0324e21dfd",
"9f2c8768ec86ec33",
"1effce25761dc27b",
"13335f1d7fb51832",
"fb41935fb6083bd1",
"c6ff149600cfcb28",
"c79748b868214a2c",
"f4ffc4fdd14e9fd0",
"e42d7cced887ba8a",
"9eff8ae7138620b2",
"e876938038368306",
"886e3d40908e51b6",
"580a8e84d9038756",
"39bf24adc30c1b9b",
"30445d60030f3e7a",
"6ed6858bedbae573",
"74dea9a5cd0656de",
"4b4061ab48309fcf",
"022f3efb91d1195f",
"6125db08573a06d6",
"a5b3623dcccf01b3",
"0021de89e2115fb0",
"09bc87a8ead0c5a7",
"5d5ce89f38f8bf76"
],
"vias": [
"3c76b8e16f83bedd",
"1160d22949fe1283",
"5ebcf86be9df9935",
"ba5093b4afb6cc84",
"13e94f8778ada1e3",
"19f391ff9c8107d7",
"6fb4f69f1fbd2ed7",
"b28e0a7bd7e72517",
"9b8145768d2d06cf",
"99bb0e8762594fab",
"c754eaf048bd33e7",
"f7d52aa42017da67",
"f709e13a4c6c0552",
"655a3e4d8aabfc32",
"e5658faf4ba3c66b",
"cefde9d73193c596",
"b61c2a23f5ca8e77",
"9c72904940d146b7",
"adc2a2b5d17212a9",
"c3cb39981b472b43",
"69d634423c18687b",
"758f057f647a9492",
"5aed245832ba7e5a",
"6012be2afe65fd5f",
"a607937bd27c470b",
"7f26a5882c7e3383",
"a765d15251983359",
"ff2663aa000ff6e0",
"d4a46fc6eaf78289",
"51ab949bcba5627b",
"2b6644ac9c533944",
"37d24c9b8a071d6d",
"5a433e7050bd35c7",
"de2afe51c2ae42ea",
"6a470deee7f39e32",
"458d15c595c8a947",
"cea11ea69401ef30",
"e1f089dc18dac014",
"a2ea1de82d6a14da",
"a850d50dcda9a183",
"acbdd79b82c0f0ae",
"0d9535a72d86e66e",
"07d45095a0f60eb9",
"665d50a47c522558",
"9c8c4bf4da95affd",
"31c97e4211c17adc",
"0bc9dc64809f99c6",
"07fdaab34fed56b9",
"74912648e237f34a",
"7fa6c3956f82b718",
"ef61ef4523c1eaa6",
"1e605b462957b1ac",
"fdf964fffa739008",
"d51b653339448a42",
"20745b0c5f6b3c1f",
"9b13e91237e259df",
"7e7c506b5a1e27af",
"166b67b6c46a1845",
"6d10752ada0cf7a5",
"6442d2bf70560937",
"17f9838ce30bd012",
"5532355e50f89e96",
"d99623f513ef1269",
"cfe5eb6009f12ee0",
"36bbeebac9fa2d11",
"59f8083e72b29cab",
"2619f51cfe20d664",
"ab77117ebd771c9e",
"6bf6abc83d6c83a4",
"54e27159bcbe604b",
"409ab2d0ef60ff2f",
"780b0248b7da6115",
"9d9344578dd2d6dd",
"57d24b4916acb341",
"8a759ad90f6c9104",
"5bec9848c8f1f48c",
"f8371b8e90a70cab",
"984db8c2238b65c0",
"fbbf5f98bed228fd",
"9213fe9563bcf6f7",
"6c2aa3f70374b21c",
"5459b5f27d894b71",
"02ffddde2edffd9e",
"5c4954d4575ce928",
"e2be6ec0bf9f0cd1",
"983e9f6dfb42dffc",
"500ee886d017847d",
"c4e84214b592aa46",
"a0b6c2a1782a214c",
"ed902e2e2aafdab0",
"2f4442551fa145f0",
"990092c69a542ff3",
"fbf14c4da494f8fa",
"71e175ebe5c84a7d",
"018862775ccfa40c",
"9e216718695bf6e0",
"7af4ca38a8813574",
"198e613808752f53",
"d545659bfa8b3600",
"24cb2446dfc5bd12",
"abf5337bbfb9b517",
"d69b2e4b9a41584b",
"af23e0bbabba82ac",
"02853a2977aada33",
"1fa969191058b18e",
"6dfba3f13b73802d",
"74772f9ed0194bda",
"392a8b9627f1d792",
"a77cc6ae45d993d4",
"6d58df4c306050b7",
"61a4cb2491a60917",
"b83b61937653fb86",
"d731323d95985409",
"8bd219b71ef56d45",
"e0392a6a29c1f5c2",
"141c4cd4f6d83290",
"abe71648b0eb9f6e",
"930b6be1cd81d00a",
"18799944fdbfe78a",
"a1342c0d7472dbea",
"07fc748f9b8fd5b6",
"eae7dd0d570e463c",
"b39298a8fe18a1e5",
"aa7310af853eb11b",
"af652110185ab2ce",
"de6406491a2fa9b3",
"308e2b858db9d207",
"796b718a1456c1a3",
"04ca739b9615d4b5",
"d9d5c349a8e93b84",
"ba0ecfae169916c3",
"5daeb70e7e58288d",
"6945cb2e5e675964",
"7bb3a40ad4898c8a",
"4bf061e8183e456e",
"8879a2b27cbcd066",
"fec9bd9171754554",
"dbe1b98100647b94",
"f1d4e637f331a1c3",
"620cae09120cd362",
"b05bfe01a7b18a3d",
"447195b06d237a25",
"a9d9a2e69c0d0811",
"793cf12bd5fc51b2",
"fbb48610479d6d31",
"c450b4f2ed71d14f",
"a26349a3cc9656f3",
"19336477140d436e",
"647803859d10eb03",
"c4b38a1c53032f30",
"c9a1253b2d2881ba",
"5a0e6619dc076a33",
"f62843ab88fb13c1",
"13b55d47a2ad3e03",
"1b79a36e8ed41e37",
"9e882ae7c58d4191",
"d3aef74f71703b1e",
"8dc132dd8ae48db1",
"9fbcded9a5df200d",
"49f104644c5c069e",
"45ef14c2a292ca5b",
"aa026dadf9316676",
"ed77c1b96b667c55",
"79f445a3ee1cdb55",
"301442622aefaf2b",
"c79741202850c23c",
"868a0c685d1a2486",
"b90266f989b9f382",
"f19bae15f031e4f8",
"8e0b0ef069f699e6",
"83edb50daa22c667",
"1ed885273d6a5e0f",
"068c9ef9992b874a",
"dbc5348c9b01a3f8",
"c159ad747fab8ef4",
"d277c025ef37e9e6",
"4d9e752b941834c1",
"e5aed657d3237dc1",
"678e98db26e5a019",
"2b4b6e4cd0f2be77",
"fff1c035227a89b0",
"c9a0305019ce6a09",
"a0c85182ec41747d",
"4d53a1fef606188f",
"941675c9b2e05595",
"fc487d1a1bd9ec6e",
"dae784afa71c6a78",
"6960e9999620e078",
"df42891f35084f1b",
"5c75b7c70a6bd1fa",
"d072166946eb8f42",
"01c75fece8cc264f",
"71afcd73c0e44507",
"88a0e90207bd415b",
"f5fcb883ce206827",
"fa36483e5c85caf7",
"732e63720ecdb61c",
"025a8df46c38b737",
"f9453697d1387929",
"8004cb8e319d6365",
"347380d7f8ada0a0",
"7be4920a28c93b44",
"11f6abbb6889961b",
"64bc8aa5282adf4b",
"89260ec458256137",
"3372e493fe323a62",
"b76433b4a72e8b36",
"1ef63e9394de2843",
"5d4b67c507f3b524",
"bacc8cae733a5d38"
]
}
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+772
查看文件
@@ -0,0 +1,772 @@
{
"success": true,
"result": {
"P3": [
[
"98148045ce0139f2",
"netport",
"NTC1",
340,
790,
0
],
[
"5917cffd8332f775",
"netport",
"NTC2",
420,
780,
0
],
[
"983bfeba77dd20ec",
"netport",
"EFUSE_EN1",
340,
760,
0
],
[
"a60e7109f60e71ec",
"netport",
"EFUSE_EN2",
420,
750,
0
],
[
"49c9229a62236dc5",
"netport",
"EFUSE_EN3",
500,
740,
0
],
[
"e9fcc1859a0a6c51",
"netport",
"EFUSE_EN4",
340,
730,
0
],
[
"0d166dc3755982d0",
"netport",
"EFUSE_EN5",
420,
720,
0
],
[
"071f2cf24985f4a5",
"netport",
"VBUS_EN1",
500,
710,
0
],
[
"3354feca6cd85f38",
"netport",
"VBUS_EN2",
340,
700,
0
],
[
"7c4ca8c8825b0391",
"netport",
"VBUS_EN3",
420,
690,
0
],
[
"9c3014a51a70dbe3",
"netport",
"VBUS_EN4",
500,
680,
0
],
[
"7581863958b5cac5",
"netport",
"VBUS_EN5",
340,
670,
0
],
[
"4f63016d4e1d5a5f",
"netport",
"SDA",
420,
660,
0
],
[
"a57d7eaef4ae6639",
"netport",
"SCL",
500,
650,
0
],
[
"5f8e62aa831f3f42",
"netport",
"KEY_SER",
340,
640,
0
],
[
"a4ce78d117f136d9",
"netport",
"KEY_SRCLK",
420,
630,
0
],
[
"5328d07ff404e571",
"netport",
"KEY_RCLK",
500,
620,
0
],
[
"d565c7eb35d8c59f",
"netport",
"USB_DM",
340,
610,
0
],
[
"2a891ec2568f8def",
"netport",
"USB_DP",
420,
600,
0
],
[
"aab9ea2a9f5f978c",
"netport",
"KEY_OE#",
500,
590,
0
],
[
"4629188eaec8801a",
"netport",
"IOEXP_INT#",
340,
550,
0
],
[
"536c7724af399ca9",
"netport",
"USB_DP",
310,
320,
0
],
[
"91b90443b9bc95d4",
"netport",
"USB_DM",
390,
295,
0
],
[
"9131b6da709caafc",
"netport",
"SDA",
650,
550,
0
],
[
"f434c0b1e9ee6e9a",
"netport",
"SCL",
730,
550,
0
],
[
"d788992f8a9f4752",
"netport",
"BUCK_PG",
810,
550,
0
],
[
"735d03e8b5f40161",
"netport",
"INA_ALERT",
890,
550,
0
],
[
"5d81a443cbd00788",
"netport",
"IOEXP_INT#",
980,
550,
0
],
[
"fe12d3221087c58e",
"netport",
"NTC1",
790,
340,
0
],
[
"61061b5a2507356d",
"netport",
"NTC2",
1010,
340,
0
],
[
"1a3575a2c6578b95",
"netport",
"FAN_PWM",
340,
480,
0
],
[
"14c52265e5aa15ef",
"netport",
"FAN_TACH",
340,
470,
0
],
[
"640917bc96b151a0",
"netport",
"UP_VBUS_DET",
200,
480,
180
]
],
"P3B": [
[
"741cfd4006369ea8",
"netport",
"K1_VUP",
195.00000000000003,
765,
180
],
[
"cef89243679d4896",
"netport",
"K1_VDN",
195.00000000000003,
755,
180
],
[
"7b95920caf4f963e",
"netport",
"K2_PWR",
195.00000000000003,
745,
180
],
[
"ee1b1b59b5b73be1",
"netport",
"K2_VUP",
195.00000000000003,
735,
180
],
[
"feb96ecf842ecea5",
"netport",
"K2_VDN",
195.00000000000003,
725,
180
],
[
"89ea0eaa9f0ff13a",
"netport",
"K3_PWR",
195.00000000000003,
715,
180
],
[
"434b89eee631f534",
"netport",
"K3_VUP",
195.00000000000003,
705,
180
],
[
"0fdfe36a58fac2d1",
"netport",
"K1_PWR",
340,
755,
0
],
[
"15d2ebcc0f6b3117",
"netport",
"KEY_SER",
340,
745,
0
],
[
"17d7ef9069ad7678",
"netport",
"KEY_OE#",
340,
735,
0
],
[
"e0141d4d265caf2d",
"netport",
"KEY_RCLK",
340,
725,
0
],
[
"268525dbc1db050e",
"netport",
"KEY_SRCLK",
340,
715,
0
],
[
"e5a1048502cf28db",
"netport",
"SR_CAS",
340,
695,
0
],
[
"c7a6729d5f6f4703",
"netport",
"K4_PWR",
195.00000000000003,
595,
180
],
[
"d67da862169d5fc3",
"netport",
"K4_VUP",
195.00000000000003,
585,
180
],
[
"a328b45bb62d3f36",
"netport",
"K4_VDN",
195,
575,
180
],
[
"f0a2bb4d1052b524",
"netport",
"K5_PWR",
195,
565,
180
],
[
"08df34e7a476259c",
"netport",
"K5_VUP",
195,
555,
180
],
[
"e53a2bf37e575c43",
"netport",
"K5_VDN",
195,
545,
180
],
[
"37beb5899f1281f2",
"netport",
"HUB_RST",
195,
535,
180
],
[
"84037e346e49c221",
"netport",
"K3_VDN",
340,
585,
0
],
[
"d7341625d364de72",
"netport",
"SR_CAS",
340,
575,
0
],
[
"832a7733c79aa4dc",
"netport",
"KEY_OE#",
340,
565,
0
],
[
"182256a2177d4fe1",
"netport",
"KEY_RCLK",
340,
555,
0
],
[
"4b506b0aaa31ef52",
"netport",
"KEY_SRCLK",
340,
545,
0
],
[
"8f31031466c68d3d",
"netport",
"KEY_OE#",
600,
495,
0
],
[
"75e4816c806bb887",
"netport",
"IOEXP_INT#",
639.9999999999999,
755.0000000000001,
180
],
[
"ef5b4374866dcb13",
"netport",
"EFUSE_FLT1",
639.9999999999999,
725.0000000000001,
180
],
[
"7824544364e1d513",
"netport",
"EFUSE_FLT2",
639.9999999999999,
715.0000000000001,
180
],
[
"7f7d28a99121dc5f",
"netport",
"EFUSE_FLT3",
639.9999999999999,
705.0000000000001,
180
],
[
"5e35e56d02b61af7",
"netport",
"EFUSE_FLT4",
639.9999999999999,
695.0000000000001,
180
],
[
"ba4bc46dd17643a7",
"netport",
"EFUSE_FLT5",
639.9999999999999,
685.0000000000001,
180
],
[
"3b42e114fb240424",
"netport",
"BUCK_PG",
639.9999999999999,
675.0000000000001,
180
],
[
"4cd0c723636ce358",
"netport",
"INA_ALERT",
639.9999999999999,
665.0000000000001,
180
],
[
"5e56ca3553b1050f",
"netport",
"EFUSE_PG1",
850,
645,
0
],
[
"2fea3e9353791e1e",
"netport",
"EFUSE_PG2",
850,
655,
0
],
[
"b89b1288a4f3806b",
"netport",
"EFUSE_PG3",
850,
665,
0
],
[
"c79f0a6c962fe042",
"netport",
"EFUSE_PG4",
850,
675,
0
],
[
"c763c9724ad52531",
"netport",
"EFUSE_PG5",
850,
685,
0
],
[
"db9e8a6b5b030562",
"netport",
"SCL",
850,
735,
0
],
[
"d795acb0ab25f92c",
"netport",
"SDA",
850,
745,
0
],
[
"c97468e14aad2ff3",
"netport",
"SDA",
100,
250,
180
],
[
"544fa1757e29b456",
"netport",
"SCL",
100,
270,
180
],
[
"adfd261e2d43dd4c",
"netport",
"VDAC3",
129.99999999999997,
295,
180
],
[
"20b60f8a802272bc",
"netport",
"VDAC1",
390,
270,
0
],
[
"b8f9ba754f9c4b7a",
"netport",
"VDAC2",
480,
260,
0
],
[
"7c06fd8bceb181c7",
"netport",
"SDA",
630,
249.99999999999997,
180
],
[
"f5714f898b1112cc",
"netport",
"SCL",
630,
270.00000000000006,
180
],
[
"879f23971770d401",
"netport",
"VDAC4",
920,
270,
0
],
[
"67d1451292925b2c",
"netport",
"VDAC5",
1010,
260,
0
],
[
"d1bbb4cf6918646c",
"netport",
"SR_CAS2",
340,
525,
0
]
],
"P6": [
[
"1ef1e7969d1549a5",
"netport",
"EDL_EN2",
170.00000000000003,
635,
180
],
[
"6b13ffe34211967b",
"netport",
"EDL_EN3",
170.00000000000003,
625,
180
],
[
"9a07d87bc11a54d6",
"netport",
"EDL_EN4",
170.00000000000003,
615,
180
],
[
"2e22a30a5a745358",
"netport",
"EDL_EN5",
170.00000000000003,
605,
180
],
[
"2cef6997a3a71516",
"netport",
"EDL_EN1",
330,
625,
0
],
[
"7a568f58a9fae937",
"netport",
"KEY_SRCLK",
330,
585,
0
],
[
"699bf1ac0010cf9b",
"netport",
"KEY_RCLK",
330,
595,
0
],
[
"4e626ca6a30df01c",
"netport",
"KEY_OE#",
330,
605,
0
],
[
"4838f59d2365b7c5",
"netport",
"SR_CAS2",
330,
615,
0
],
[
"b338535ed23239d9",
"netport",
"FAN_PWM",
540,
330.00000000000006,
180
],
[
"816f84602f52c351",
"netport",
"FAN_TACH",
799.9999999999999,
725.0000000000001,
180
]
]
},
"windowId": "1fc63338-da16-4591-bd8c-a22df2fba284"
}
+31
查看文件
@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
u"""刷新 `_pcb2_pads_full.json` / `_pcb2_vias.json`(inner1_* 三个校核脚本的输入)。"""
import json, os, sys
HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE)
from eda import run
JS = u"""
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1800));
const name = {};
for (const c of await eda.pcb_PrimitiveComponent.getAll())
name[c.getState_PrimitiveId()] = c.getState_Designator();
const ids = Object.keys(name).sort((a,b)=>b.length-a.length);
const pads = [];
for (const p of await eda.pcb_PrimitivePad.getAll()) {
const pid = p.getState_PrimitiveId(); let hit='';
for (const id of ids) if (pid.length>id.length && pid.indexOf(id)===0){hit=name[id];break;}
pads.push([hit, p.getState_PadNumber(), p.getState_Net(), p.getState_Layer(),
p.getState_X(), p.getState_Y(), p.getState_Pad(), p.getState_Hole()]);
}
const vias = [];
for (const o of await eda.pcb_PrimitiveVia.getAll())
vias.push([o.getState_Net(), o.getState_X(), o.getState_Y(), o.getState_Diameter(), o.getState_HoleDiameter()]);
return {pads: pads, vias: vias};
"""
r = run(JS, timeout=300)
if not r.get('success'):
sys.exit(u'失败: ' + json.dumps(r, ensure_ascii=False)[:400])
d = r['result']
json.dump(d['pads'], open(os.path.join(HERE, '_pcb2_pads_full.json'), 'w', encoding='utf-8'), ensure_ascii=False)
json.dump(d['vias'], open(os.path.join(HERE, '_pcb2_vias.json'), 'w', encoding='utf-8'), ensure_ascii=False)
print(u'焊盘 %d / 过孔 %d' % (len(d['pads']), len(d['vias'])))
文件差异因一行或多行过长而隐藏
+48
查看文件
@@ -0,0 +1,48 @@
08:21:21 自动布线中...(20%)
08:21:51 自动布线中...(25%)
08:22:21 自动布线中...(30%)
08:22:51 自动布线中...(30%)
08:23:21 自动布线中...(35%)
08:23:51 自动布线中...(35%)
08:24:21 自动布线中...(40%)
08:24:51 自动布线中...(40%)
08:25:21 自动布线中...(45%)
08:25:51 自动布线中...(45%)
08:26:21 自动布线中...(45%)
08:26:51 自动布线中...(50%)
08:27:21 自动布线中...(50%)
08:27:51 自动布线中...(55%)
08:28:21 自动布线中...(55%)
08:28:51 自动布线中...(55%)
08:29:21 自动布线中...(60%)
08:29:51 自动布线中...(60%)
08:30:22 自动布线中...(60%)
08:30:52 自动布线中...(60%)
08:31:22 自动布线中...(65%)
08:31:52 自动布线中...(65%)
08:32:22 自动布线中...(65%)
08:32:52 自动布线中...(65%)
08:33:22 自动布线中...(65%)
08:33:52 自动布线中...(65%)
08:34:22 自动布线中...(70%)
08:34:52 自动布线中...(70%)
08:35:22 自动布线中...(70%)
08:35:52 自动布线中...(75%)
08:36:22 自动布线中...(75%)
08:36:52 自动布线中...(75%)
08:37:22 自动布线中...(80%)
08:37:52 自动布线中...(80%)
08:38:22 自动布线中...(80%)
08:38:52 自动布线中...(85%)
08:39:22 自动布线中...(85%)
08:39:52 自动布线中...(85%)
08:40:22 自动布线中...(90%)
08:40:52 自动布线中...(90%)
08:41:22 自动布线中...(90%)
08:41:52 自动布线中...(90%)
08:42:22 自动布线中...(95%)
08:42:52 自动布线中...(95%)
08:43:22 (无进度条)
08:43:52 (无进度条)
08:44:22 (无进度条)
DONE 进度条连续 3 次消失
二进制
查看文件
二进制文件未显示。
+1
查看文件
@@ -0,0 +1 @@
const r=await eda.sch_Document.save(); await new Promise(x=>setTimeout(x,2500)); return r;
+14
查看文件
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
import io, json, os, sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from eda import run
js = io.open(os.path.join(HERE, '_tmp_snap.js'), encoding='utf-8').read()
r = run(js, timeout=180)
if not r.get('success'):
print(json.dumps(r, ensure_ascii=False)[:500]); sys.exit(1)
res = r['result']
out = os.path.join(HERE, sys.argv[1] if len(sys.argv) > 1 else '_snap_before.json')
io.open(out, 'w', encoding='utf-8').write(json.dumps(res))
print('vias %d lines %d arcs %d -> %s' % (len(res['vias']), len(res['lines']), len(res['arcs']), out))
print('sample', res['vias'][:1], res['lines'][:1])
文件差异因一行或多行过长而隐藏
文件差异因一行或多行过长而隐藏
+1116
查看文件
文件差异内容过多而无法显示 加载差异
+9
查看文件
@@ -0,0 +1,9 @@
const L = (await eda.pcb_PrimitiveLine.getAll()).filter(o=>o.layer===11);
const out = [];
for (const l of L) {
let adj = null;
try { const a = await l.getAdjacentPrimitives(); adj = a.map(o=>({t:o.primitiveType||(o.getState_PrimitiveType&&o.getState_PrimitiveType()), id:o.primitiveId||(o.getState_PrimitiveId&&o.getState_PrimitiveId()), l:o.layer})); }
catch(e){ adj = 'ERR '+String(e).slice(0,80); }
out.push({id:l.primitiveId, adj});
}
return out;
+5
查看文件
@@ -0,0 +1,5 @@
const a = await eda.pcb_Primitive.getAll();
const by = {};
for (const o of a) { const k = (o.primitiveType||'?') + '@' + (o.layer!==undefined?o.layer:'-'); by[k]=(by[k]||0)+1; }
const l11 = a.filter(o=>o.layer===11).map(o=>o.primitiveType);
return {total: a.length, byType: by, l11count: l11.length, l11types: [...new Set(l11)]};
+11
查看文件
@@ -0,0 +1,11 @@
const out={};
for (const k of Object.keys(eda)) {
try {
const o = eda[k];
const ms = [];
let p = o;
for (let d=0; d<3 && p; d++) { for (const m of Object.getOwnPropertyNames(p)) if (/rout|Rout|fanout|Fanout|auto|Auto/.test(m)) ms.push(m); p = Object.getPrototypeOf(p); }
if (ms.length) out[k] = [...new Set(ms)];
} catch(e){}
}
return out;
+24
查看文件
@@ -0,0 +1,24 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fireBtn = (txt) => {
for (const b of document.querySelectorAll('button')) if ((b.innerText||'').trim() === txt && b.offsetParent !== null) {
const p = propsOf(b);
if (p && typeof p.onClick === 'function') { p.onClick({target:b,currentTarget:b,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1}); return 'react'; }
b.click(); return 'native';
}
return null;
};
const out = {};
out.apply = fireBtn('应用修改');
await sleep(4000);
// 可能弹确认
out.btnsAfter = [...document.querySelectorAll('button')].filter(b=>b.offsetParent!==null).map(b=>(b.innerText||'').trim()).filter(t=>t).slice(0,30);
const u13 = [];
for (const c of await eda.pcb_PrimitiveComponent.getAll()) {
if ((c.designator || '') !== 'U13') continue;
for (const p of await eda.pcb_PrimitiveComponent.getAllPinsByPrimitiveId(c.primitiveId))
u13.push({n: String(p.padNumber), net: p.net || ''});
}
out.u13 = u13.filter(p => ['2','5'].includes(p.n));
out.saved = await eda.pcb_Document.save();
return out;
+17
查看文件
@@ -0,0 +1,17 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
// report radio states with their labels
const groups=[];
for (const lab of document.querySelectorAll('span[class*="ratio-label_"]')) {
if (lab.offsetParent===null) continue;
const row = lab.parentElement;
const opts=[];
for (const inp of row.querySelectorAll('input[type=radio]')) {
const sp = inp.closest('label') || inp.parentElement;
opts.push({t:(sp.innerText||'').trim(), on: inp.checked});
}
groups.push({name:(lab.innerText||'').trim(), opts});
}
return {groups};
+18
查看文件
@@ -0,0 +1,18 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
fire(leaf('布线')); await sleep(800);
fire(leaf('自动布线...')); await sleep(2500);
const fsL = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='布线图层');
const fsI = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
let btn=null;
for (const x of document.querySelectorAll('button')) if((x.innerText||'').trim()==='运行' && x.offsetParent!==null) btn=x;
const info = btn ? {props: Object.keys(propsOf(btn)||{}), cls: btn.className, type: btn.type, disabled: btn.disabled} : null;
return {
layers: fsL ? Array.from(fsL.querySelectorAll('tr')).map(tr=>({t:(tr.innerText||'').trim(), on: !!tr.querySelector('i[class*="active_"]')})) : null,
ignore: fsI ? (fsI.innerText||'').trim().replace(/\s+/g,' ') : null,
btn: info
};
+23
查看文件
@@ -0,0 +1,23 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
fire(leaf('布线')); await sleep(900);
fire(leaf('自动布线...')); await sleep(2500);
const fsI = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
const fsL = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='布线图层');
const groups=[];
for (const lab of document.querySelectorAll('span[class*="ratio-label_"]')) {
if (lab.offsetParent===null) continue;
const opts=[];
for (const inp of lab.parentElement.querySelectorAll('input[type=radio]')) {
const sp = inp.closest('label') || inp.parentElement;
if (inp.checked) opts.push((sp.innerText||'').trim());
}
groups.push((lab.innerText||'').trim()+'='+opts.join('/'));
}
return {ignore: fsI ? (fsI.innerText||'').trim().replace(/\s+/g,' ') : null,
layers: fsL ? Array.from(fsL.querySelectorAll('tr')).map(tr=>((tr.innerText||'').trim())+':'+(!!tr.querySelector('i[class*="active_"]'))) : null,
groups};
+39
查看文件
@@ -0,0 +1,39 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
fire(leaf('布线')); await sleep(900);
fire(leaf('自动布线...')); await sleep(2500);
// 布线网络 -> 所选网络
let done=false;
for (const lab of document.querySelectorAll('span[class*="ratio-label_"]')) {
if ((lab.innerText||'').trim() !== '布线网络') continue;
for (const inp of lab.parentElement.querySelectorAll('input[type=radio]')) {
const sp = inp.closest('label') || inp.parentElement;
if ((sp.innerText||'').trim()==='所选网络') { fire(sp); done=true; }
}
}
await sleep(600);
// 图层:内层1/2 取消
const fsL = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='布线图层');
for (const name of ['内层1','内层2']) {
const tr = Array.from(fsL.querySelectorAll('tr')).find(t=>(t.innerText||'').trim()===name);
const cb = tr && tr.querySelector('i[class*="checkbox_"][class*="active_"]');
if (cb) { fire(cb); await sleep(400); }
}
const groups=[];
for (const lab of document.querySelectorAll('span[class*="ratio-label_"]')) {
if (lab.offsetParent===null) continue;
const on=[];
for (const inp of lab.parentElement.querySelectorAll('input[type=radio]')) {
const sp = inp.closest('label') || inp.parentElement;
if (inp.checked) on.push((sp.innerText||'').trim());
}
groups.push((lab.innerText||'').trim()+'='+on.join('/'));
}
const fsI = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
return {setSel:done, groups,
layers: Array.from(fsL.querySelectorAll('tr')).map(tr=>((tr.innerText||'').trim())+':'+(!!tr.querySelector('i[class*="active_"]'))),
ignore:(fsI.innerText||'').trim().replace(/\s+/g,' ').slice(0,200)};
+29
查看文件
@@ -0,0 +1,29 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
fire(leaf('布线')); await sleep(800);
fire(leaf('自动布线...')); await sleep(2500);
// find the modal root
let modal=null;
for (const m of document.querySelectorAll('*')) {
const t=(m.innerText||'');
if (t.indexOf('布线网络')>=0 && t.indexOf('忽略网络')>=0 && m.offsetParent!==null) {
if (!modal || (m.innerText||'').length < (modal.innerText||'').length) modal=m;
}
}
if(!modal) return {err:'no modal'};
// dump structure: elements with class names, around 布线图层 and 忽略网络
const dump = [];
const walk = (el, d) => {
if (d>14) return;
const own = Array.from(el.childNodes).filter(n=>n.nodeType===3).map(n=>n.textContent.trim()).join('|');
const cls = (typeof el.className==='string'? el.className : '');
if (own || /checkbox|Checkbox|tree|Tree|select|Select|tag|Tag/.test(cls))
dump.push({d, tag: el.tagName, cls: cls.slice(0,70), txt: own.slice(0,40)});
for (const c of el.children) walk(c, d+1);
};
walk(modal, 0);
return {n: dump.length, dump: dump.slice(0, 120)};
+27
查看文件
@@ -0,0 +1,27 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
// dialog already open? check
let modal=null;
for (const m of document.querySelectorAll('*')) {
const t=(m.innerText||'');
if (t.indexOf('布线网络')>=0 && t.indexOf('忽略网络')>=0 && m.offsetParent!==null) {
if (!modal || (m.innerText||'').length < (modal.innerText||'').length) modal=m;
}
}
if(!modal) return {err:'dialog not open'};
let add=null;
for (const b of modal.querySelectorAll('button')) if((b.innerText||'').trim()==='新增' && b.offsetParent!==null) add=b;
if(!add) return {err:'no 新增 button', btns: Array.from(modal.querySelectorAll('button')).map(b=>(b.innerText||'').trim())};
fire(add);
await sleep(1200);
const inputs=[];
for (const i of document.querySelectorAll('input')) if(i.offsetParent!==null) inputs.push({ph:i.placeholder, val:i.value, cls:(i.className||'').slice(0,50)});
// dump any popup list
const pops=[];
for (const m of document.querySelectorAll('[class*="popup"],[class*="Popup"],[class*="dropdown"],[class*="Dropdown"],[class*="select"]')) {
const t=(m.innerText||'').trim();
if (t.length>5 && m.offsetParent!==null) pops.push(t.slice(0,300));
}
return {inputs, pops: pops.slice(0,5), modalTxt: (modal.innerText||'').slice(-400)};
+14
查看文件
@@ -0,0 +1,14 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
let leg=null;
for (const el of document.querySelectorAll('legend'))
if ((el.textContent||'').trim()==='忽略网络' && el.offsetParent!==null) leg=el;
if(!leg) return {err:'no legend'};
const fs = leg.parentElement;
const dump=[];
const walk=(el,d)=>{ if(d>12) return;
const own=Array.from(el.childNodes).filter(n=>n.nodeType===3).map(n=>n.textContent.trim()).join('|');
const cls=(typeof el.className==='string'?el.className:'');
dump.push({d,tag:el.tagName,cls:cls.slice(0,60),txt:own.slice(0,30),ttl:(el.getAttribute&&el.getAttribute('title'))||''});
for(const c of el.children) walk(c,d+1); };
walk(fs,0);
return {html: fs.outerHTML.slice(0,2500), n:dump.length};
+22
查看文件
@@ -0,0 +1,22 @@
const seek = (el) => { const out={}; for(const k of Object.keys(el)) out[k.split('$')[0]]=k; return out; };
let sel=null;
for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]'))
if (el.offsetParent!==null && el.closest('fieldset') && (el.closest('fieldset').querySelector('legend')||{}).textContent==='忽略网络') sel=el;
if(!sel) return {err:'no select'};
const keys = Object.keys(sel);
const pk = keys.find(k=>k.startsWith('__reactProps$'));
const fk = keys.find(k=>k.startsWith('__reactFiber$'));
const p = sel[pk];
let fiber = sel[fk];
// climb fiber to find one with memoizedProps having options/onChange
const found=[];
let f=fiber;
for(let i=0;i<12&&f;i++){
const mp=f.memoizedProps;
if(mp && typeof mp==='object'){
const ks=Object.keys(mp);
if(ks.some(k=>/option|onChange|value|data|list/i.test(k))) found.push({i, type: String(f.type&&(f.type.displayName||f.type.name||f.type)).slice(0,40), keys: ks.slice(0,25)});
}
f=f.return;
}
return {propKeys: p?Object.keys(p):null, found};
+12
查看文件
@@ -0,0 +1,12 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const getSel = () => { for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]')) {
const fs = el.closest('fieldset');
if (el.offsetParent!==null && fs && (fs.querySelector('legend')||{}).textContent==='忽略网络') return el; } return null; };
const sel = getSel(); if(!sel) return {err:'no select'};
const fk = Object.keys(sel).find(k=>k.startsWith('__reactFiber$'));
let f=sel[fk], target=null;
for(let i=0;i<12&&f;i++){ const mp=f.memoizedProps;
if(mp && mp.list && typeof mp.onChange==='function'){ target=mp; break; } f=f.return; }
if(!target) return {err:'no onChange fiber'};
const L = target.list;
return {listLen: L.length, sample: L.slice(0,5), value: target.value};
+21
查看文件
@@ -0,0 +1,21 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const getFiberProps = () => {
for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]')) {
const fs = el.closest('fieldset');
if (el.offsetParent!==null && fs && (fs.querySelector('legend')||{}).textContent==='忽略网络') {
const fk = Object.keys(el).find(k=>k.startsWith('__reactFiber$'));
let f=el[fk];
for(let i=0;i<12&&f;i++){ const mp=f.memoizedProps;
if(mp && mp.list && typeof mp.onChange==='function') return mp; f=f.return; }
}
} return null;
};
const rows = () => {
const fs = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
return fs ? (fs.innerText||'').trim() : '';
};
const p = getFiberProps(); if(!p) return {err:'no props'};
p.onChange('GND');
await sleep(800);
const p2 = getFiberProps();
return {before: p.list.length, after: p2 ? p2.list.length : null, table: rows().slice(0,200)};
+28
查看文件
@@ -0,0 +1,28 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const getIgn = () => {
for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]')) {
const fs = el.closest('fieldset');
if (el.offsetParent!==null && fs && (fs.querySelector('legend')||{}).textContent==='忽略网络') {
const fk = Object.keys(el).find(k=>k.startsWith('__reactFiber$'));
let f=el[fk];
for(let i=0;i<12&&f;i++){ const mp=f.memoizedProps;
if(mp && mp.list && typeof mp.onChange==='function') return mp; f=f.return; }
}
} return null;
};
const WANT = ['GND','USB1_DP','USB1_DM','USB2_DP','USB2_DM','USB3_DP','USB3_DM',
'USB4_DP','USB4_DM','USB5_DP','USB5_DM','UP_DP','UP_DM','USB_DP','USB_DM'];
const added=[], missing=[];
for (const n of WANT) {
const p = getIgn();
if(!p) return {err:'select gone at '+n};
if (!p.list.some(o=>o.value===n)) { missing.push(n); continue; }
p.onChange(n);
await sleep(220);
added.push(n);
}
const fs = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
return {added, missing, table: (fs.innerText||'').trim()};
+21
查看文件
@@ -0,0 +1,21 @@
const sleep = ms => new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const fsLayer = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='布线图层');
if(!fsLayer) return {err:'no layer fieldset'};
const state = () => Array.from(fsLayer.querySelectorAll('tr')).map(tr => ({
txt: (tr.innerText||'').trim().slice(0,10),
on: !!tr.querySelector('i[class*="active_"]')
}));
const before = state();
const hit = [];
for (const name of ['内层1','内层2']) {
const tr = Array.from(fsLayer.querySelectorAll('tr')).find(t=>(t.innerText||'').trim()===name);
if(!tr) { hit.push(name+':norow'); continue; }
const cb = tr.querySelector('i[class*="checkbox_"]');
if(!cb) { hit.push(name+':nocb'); continue; }
hit.push(name+':'+fire(cb));
await sleep(400);
}
return {before, hit, after: state()};
+23
查看文件
@@ -0,0 +1,23 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
fire(leaf('布线')); await sleep(800);
if(!fire(leaf('自动布线...'))) return {err:'no item'};
await sleep(2500);
// dump modal
const out = [];
for (const m of document.querySelectorAll('[class*="modal"],[class*="Modal"],[class*="dialog"],[class*="Dialog"]')) {
const t = (m.innerText||'').trim();
if (t.length > 20 && m.offsetParent !== null) out.push(t.slice(0, 1500));
}
const inputs = [];
for (const i of document.querySelectorAll('input,select,textarea')) {
if (i.offsetParent === null) continue;
inputs.push({type:i.type, val:i.value, checked:i.checked, ph:i.placeholder, name:i.name});
}
const btns = [];
for (const b of document.querySelectorAll('button')) if (b.offsetParent!==null) btns.push((b.innerText||'').trim());
return {modals: out.slice(-2), inputs: inputs.slice(0,40), btns: [...new Set(btns)].slice(0,30)};
+4
查看文件
@@ -0,0 +1,4 @@
const r = await eda.pcb_PrimitiveArc.create('', 11, 6102.365, 0, 6299.216, 196.851, 90, 5);
const A = (await eda.pcb_PrimitiveArc.getAll());
return {created: r ? Object.keys(r) : null, n: A.length,
arc: A.length ? JSON.parse(JSON.stringify(A[0], (k,v)=> k==='async'?undefined:v)) : null};
+12
查看文件
@@ -0,0 +1,12 @@
const A = [
[6299.216, 4724.412, 6102.365, 4921.262],
[196.851, 4921.262, 0, 4724.412],
[0, 196.851, 196.851, 0]
];
const out = [];
for (const [x0,y0,x1,y1] of A) {
const r = await eda.pcb_PrimitiveArc.create('', 11, x0, y0, x1, y1, 90, 5);
out.push(r ? r.primitiveId : null);
}
await eda.pcb_Document.save();
return {ids: out};
+9
查看文件
@@ -0,0 +1,9 @@
const out={};
const A = eda.pcb_PrimitiveArc;
out.methods = Object.getOwnPropertyNames(Object.getPrototypeOf(A)||{}).concat(Object.getOwnPropertyNames(A)).filter(n=>typeof A[n]==='function');
try{ out.ids = await A.getAllPrimitiveId(); }catch(e){ out.idsErr=String(e).slice(0,100); }
try{ out.all = (await A.getAll()).length; }catch(e){ out.allErr=String(e).slice(0,100); }
try{ const g = await A.get('7abeb5185a6eb114'); out.get1 = g ? {sx:g.startX, sy:g.startY, ex:g.endX, ey:g.endY, a:g.arcAngle, l:g.layer} : String(g); }catch(e){ out.getErr=String(e).slice(0,100); }
const SC = eda.pcb_SelectControl;
out.scMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(SC)||{}).concat(Object.getOwnPropertyNames(SC)).filter(n=>typeof SC[n]==='function');
return out;
+10
查看文件
@@ -0,0 +1,10 @@
const out={};
try { const f = await eda.pcb_ManufactureData.getAutoRouteJsonFile();
out.type = Object.prototype.toString.call(f);
if (f && f.size !== undefined) { out.size = f.size; const t = await f.text(); out.head = t.slice(0,600); }
else if (typeof f === 'string') { out.size = f.length; out.head = f.slice(0,600); }
else out.keys = f ? Object.keys(f).slice(0,20) : null;
} catch(e){ out.err = String(e).slice(0,300); }
out.logN = window.__arLog.length;
out.log = window.__arLog.slice(-6).map(s=>s.slice(0,160));
return out;
+9
查看文件
@@ -0,0 +1,9 @@
const out={};
try { const f = await eda.pcb_ManufactureData.getAutoRouteJsonFile('AutoRoute_Json');
out.type = Object.prototype.toString.call(f);
if (f && f.size !== undefined) { out.size = f.size; out.name = f.name; const t = await f.text(); out.head = t.slice(0,900); }
} catch(e){ out.err = String(e).slice(0,300); }
try { const g = await eda.pcb_ManufactureData.getAutoRouteJsonFileForJRouter('JR');
out.jr = g ? {size: g.size, name: g.name, head: (await g.text()).slice(0,600)} : null;
} catch(e){ out.err2 = String(e).slice(0,300); }
return out;
+10
查看文件
@@ -0,0 +1,10 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
await eda.dmt_EditorControl.openDocument('7e9415a16a909c51');
await sleep(2500);
const out={};
try { const f = await eda.pcb_ManufactureData.getAutoRouteJsonFile('AutoRoute_Json');
out.type = Object.prototype.toString.call(f);
if (f && f.size !== undefined) { out.size = f.size; out.name = f.name; out.head = (await f.text()).slice(0,900); }
} catch(e){ out.err = String(e).slice(0,300); }
out.log = window.__arLog.slice(-5).map(s=>s.slice(0,150));
return out;
+8
查看文件
@@ -0,0 +1,8 @@
const out={};
const grab = async (name, fn) => { try { const a = await fn(); out[name] = a.filter(o=>o.layerId===11 || o.layer===11).map(o=>({t:o.type, l:o.layerId!==undefined?o.layerId:o.layer, k:Object.keys(o).slice(0,14)})).slice(0,10); out[name+'_n']=a.length; } catch(e){ out[name]='ERR '+String(e).slice(0,60); } };
await grab('line', ()=>eda.pcb_PrimitiveLine.getAll());
await grab('arc', ()=>eda.pcb_PrimitiveArc.getAll());
await grab('poly', ()=>eda.pcb_PrimitivePolyline.getAll());
await grab('region', ()=>eda.pcb_PrimitiveRegion.getAll());
await grab('fill', ()=>eda.pcb_PrimitiveFill.getAll());
return out;
+8
查看文件
@@ -0,0 +1,8 @@
const L = (await eda.pcb_PrimitiveLine.getAll()).filter(o=>o.layer===11);
const A = (await eda.pcb_PrimitiveArc.getAll()).filter(o=>o.layer===11);
const P = (await eda.pcb_PrimitivePolyline.getAll()).filter(o=>o.layer===11);
const R = (await eda.pcb_PrimitiveRegion.getAll()).filter(o=>o.layer===11);
return {nLine:L.length, nArc:A.length, nPoly:P.length, nRegion:R.length,
lines: L.map(o=>[o.startX,o.startY,o.endX,o.endY,o.lineWidth,o.primitiveType]),
arcs: A.slice(0,8).map(o=>Object.assign({}, o, {async:undefined})),
polys: P.slice(0,3).map(o=>Object.keys(o))};
+10
查看文件
@@ -0,0 +1,10 @@
const MIL=39.3700787401575;
await eda.dmt_EditorControl.openDocument('7e9415a16a909c51');
await new Promise(r=>setTimeout(r,2500));
const out={};
for (const c of await eda.pcb_PrimitiveComponent.getAll()) {
const d=c.getState_Designator();
if (['C2','C3','R9','C4','C5','C6','J1','F1','Q1'].indexOf(d)>=0)
out[d]=[+(c.getState_X()/MIL).toFixed(2), +(c.getState_Y()/MIL).toFixed(2), c.getState_Layer()];
}
return out;
+6
查看文件
@@ -0,0 +1,6 @@
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
let ok=null;
for (const b of document.querySelectorAll('button')) if ((b.innerText||'').trim()==='取消' && b.offsetParent!==null) { ok=b; break; }
return {cancelled: ok ? fire(ok) : false};
文件差异因一行或多行过长而隐藏
+1
查看文件
@@ -0,0 +1 @@
{"httpError": 500, "body": "{\"success\":false,\"error\":\"TypeError: Cannot read properties of undefined (reading 'Symbol')\"}"}
+1
查看文件
@@ -0,0 +1 @@
{"httpError": 500, "body": "{\"success\":false,\"error\":\"Request 37cf686e-9623-4f12-a3d6-4be7cfc1650b timed out after 30000ms\"}"}
+9
查看文件
@@ -0,0 +1,9 @@
const keys = ['2200uF 10V 电解', '2200uF 6.3V 电解', '2200uF 6.3V 贴片', '2200uF 10V 贴片', '1500uF 6.3V 贴片 电解'];
const out = {};
for (const k of keys) {
try {
const r = await eda.lib_Device.search(k, undefined, undefined, undefined, 30, 1);
out[k] = (r || []).map(d => [d.lcscId || d.supplierPartNumber || '', d.name || '', (d.description || '').slice(0, 160), d.footprint ? d.footprint.name : (d.footprintName || ''), d.stock !== undefined ? d.stock : (d.lcscStock || '')]);
} catch (e) { out[k] = String(e); }
}
return out;
+11
查看文件
@@ -0,0 +1,11 @@
const keys = ['RVT0J152M1010', '2200uF 10x10', '2200UF 6.3V 10*10', '2200uF 6.3V 10*12', '2200uF 10V 10*12', 'RYVT10V2200UF12*13', '1500uF 10V 贴片 电解', '2200uF 6.3V SMD 铝电解'];
const out = {};
for (const k of keys) {
try {
const r = await eda.lib_Device.search(k, undefined, undefined, undefined, 20, 1);
out[k] = (r || []).filter(d => /uF|UF/.test(d.name||'') || /uF/.test(d.description||'')).map(d => {
const o = {}; for (const f of Object.keys(d)) { const v = d[f]; if (typeof v !== 'object') o[f] = String(v).slice(0, 140); }
return o; });
} catch (e) { out[k] = String(e); }
}
return out;
+33
查看文件
@@ -0,0 +1,33 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const fsL = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='布线图层');
if(!fsL) return {err:'dialog not open'};
for (const name of ['内层1','内层2']) {
const tr = Array.from(fsL.querySelectorAll('tr')).find(t=>(t.innerText||'').trim()===name);
const cb = tr && tr.querySelector('i[class*="checkbox_"]');
if (cb) { fire(cb); await sleep(400); }
}
const getIgn = () => {
for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]')) {
const fs = el.closest('fieldset');
if (el.offsetParent!==null && fs && (fs.querySelector('legend')||{}).textContent==='忽略网络') {
const fk = Object.keys(el).find(k=>k.startsWith('__reactFiber$'));
let f=el[fk];
for(let i=0;i<12&&f;i++){ const mp=f.memoizedProps;
if(mp && mp.list && typeof mp.onChange==='function') return mp; f=f.return; }
}
} return null;
};
const WANT = ['GND','$1N223','$1N227','$1N236','+12V',
'VO1','VO2','VO3','VO4','VO5','VO1_P','VO2_P','VO3_P','VO4_P','VO5_P'];
const added=[], missing=[];
for (const n of WANT) {
const p = getIgn(); if(!p) return {err:'select gone at '+n};
if (!p.list.some(o=>o.value===n)) { missing.push(n); continue; }
p.onChange(n); await sleep(220); added.push(n);
}
const fsI = Array.from(document.querySelectorAll('fieldset')).find(x=>(x.querySelector('legend')||{}).textContent==='忽略网络');
return {added, missing, ignore:(fsI.innerText||'').trim().replace(/\s+/g,' '),
layers: Array.from(fsL.querySelectorAll('tr')).map(tr=>((tr.innerText||'').trim())+':'+(!!tr.querySelector('i[class*="active_"]')))};
+5
查看文件
@@ -0,0 +1,5 @@
const cur = await eda.pcb_Drc.getCurrentRuleConfiguration();
const c = cur.config || cur;
const out = {top: Object.keys(c)};
for (const k of Object.keys(c)) out[k] = Object.keys(c[k]);
return out;
+6
查看文件
@@ -0,0 +1,6 @@
const NETS = ['UP_DP','UP_DM','USB_DP','USB_DM','USB3_DP','USB3_DM','USB4_DP','USB4_DM','USB5_DP','USB5_DM'];
const L = await eda.pcb_PrimitiveLine.getAll();
const c = {};
for (const o of L) if (NETS.includes(o.net)) c[o.net]=(c[o.net]||0)+1;
const bar = (document.body.innerText||'').split(String.fromCharCode(10)).map(s=>s.trim()).filter(s=>s.indexOf('自动布线')===0);
return {perNet: c, total: L.length, vias:(await eda.pcb_PrimitiveVia.getAll()).length, bar};
+7
查看文件
@@ -0,0 +1,7 @@
const NETS = ['USB1_DP','USB1_DM','USB2_DP','USB2_DM','USB3_DP','USB3_DM','USB4_DP','USB4_DM','USB5_DP','USB5_DM','UP_DP','UP_DM','USB_DP','USB_DM'];
const L = await eda.pcb_PrimitiveLine.getAll();
const c = {};
for (const n of NETS) c[n]=0;
for (const o of L) if (NETS.includes(o.net)) c[o.net]++;
const bar = (document.body.innerText||'').split(String.fromCharCode(10)).map(s=>s.trim()).filter(s=>s.indexOf('自动布线')===0);
return {perNet: c, total: L.length, vias:(await eda.pcb_PrimitiveVia.getAll()).length, bar};
+6
查看文件
@@ -0,0 +1,6 @@
await eda.dmt_EditorControl.openDocument('7e9415a16a909c51');
await new Promise(r => setTimeout(r, 1200));
let n = 0;
for (const p of await eda.pcb_PrimitivePour.getAll())
if (String(p.pourName || '').startsWith('P')) { await eda.pcb_PrimitivePour.delete(p.primitiveId); n++; }
return {deleted: n, left: (await eda.pcb_PrimitivePour.getAll()).map(p => p.pourName)};
+19
查看文件
@@ -0,0 +1,19 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const total = () => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim().startsWith('全部 (')) return (el.textContent||'').trim(); return null; };
const btns = [];
for (const x of document.querySelectorAll('button,span,i')) { const t=(x.innerText||x.title||'').trim();
if (t && t.length<8 && x.offsetParent!==null && /清除|刷新|错误|停止/.test(t)) btns.push(t); }
let cl=null;
for (const x of document.querySelectorAll('button,span,div')) { const t=(x.innerText||x.title||'').trim();
if (t==='清除错误' && x.offsetParent!==null) { cl=x; break; } }
let fired=false;
if (cl) { fired = fire(cl); await sleep(2000); }
const afterClear = total();
await eda.pcb_Drc.check();
const seq=[];
for (let i=0;i<8;i++){ await sleep(2500); seq.push(total()); }
return {btns:[...new Set(btns)], fired, afterClear, seq};
+19
查看文件
@@ -0,0 +1,19 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fireBtn = (txt) => {
for (const b of document.querySelectorAll('button')) if ((b.innerText||'').trim() === txt) {
const p = propsOf(b);
if (p && typeof p.onClick === 'function') { p.onClick({target:b,currentTarget:b,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1}); return 'react'; }
b.click(); return 'native';
}
return null;
};
const out = {};
out.confirm = fireBtn('确认');
await sleep(1500);
const pd = await eda.pcb_PrimitivePoured.getAll();
out.poured = pd.map(x => ({net: x.net, layer: x.layer, keys: Object.keys(x).slice(0,14)}));
out.saved = await eda.pcb_Document.save();
await sleep(1000);
out.pouredAfterSave = (await eda.pcb_PrimitivePoured.getAll()).length;
return out;
+23
查看文件
@@ -0,0 +1,23 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const p=propsOf(t); if(p&&typeof p.onClick==='function'){p.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*')) if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
const find = (sub) => { const r=[]; for (const el of document.querySelectorAll('*')) { const t=(el.textContent||'').trim(); if (el.children.length===0 && t.includes(sub)) r.push(el); } return r; };
await eda.dmt_EditorControl.openDocument('7e9415a16a909c51');
await sleep(1200);
const out = {};
fire(leaf('工具'));
await sleep(900);
const hits = find('运行命令');
out.hits = hits.map(e => ({txt: (e.textContent||'').trim(), tag: e.tagName, vis: e.offsetParent !== null}));
if (!hits.length) {
// 把当前浮层里所有可见叶子列出来
out.visibleLeaves = [...document.querySelectorAll('*')].filter(e => e.children.length===0 && e.offsetParent !== null && (e.textContent||'').trim().length>0 && (e.textContent||'').trim().length<26).map(e=>(e.textContent||'').trim()).slice(0, 300);
return out;
}
out.fired = fire(hits[hits.length-1]);
await sleep(1800);
const inputs = [...document.querySelectorAll('input')].filter(i => i.offsetParent !== null);
out.inputs = inputs.map(i => ({ph: i.placeholder, val: i.value}));
out.visible = [...document.querySelectorAll('*')].filter(e => e.children.length===0 && e.offsetParent !== null && (e.textContent||'').trim().length>0 && (e.textContent||'').trim().length<40).map(e=>(e.textContent||'').trim()).slice(0, 200);
return out;
+6
查看文件
@@ -0,0 +1,6 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
await sleep(5000);
const before = {v:(await eda.pcb_PrimitiveVia.getAll()).length, l:(await eda.pcb_PrimitiveLine.getAll()).length};
await eda.pcb_Document.save();
await sleep(3000);
return {before};
+16
查看文件
@@ -0,0 +1,16 @@
const sleep = ms => new Promise(r => setTimeout(r, ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
let leaf=null;
for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()==='连接性错误 (834)') { leaf=el; break; }
if(!leaf) return {err:'node not found'};
if(!fire(leaf)) return {err:'no onClick'};
await sleep(2000);
let best=null;
for (const el of document.querySelectorAll('div,table,tbody')) {
const x = el.innerText||'';
if (/错误对象/.test(x) && /[0-9]连接性错误/.test(x) && (!best || x.length < best.length)) best = x;
}
return {detail: (best||'').split('input::-webkit')[0].slice(0, 6000)};
+36
查看文件
@@ -0,0 +1,36 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
let leaf=null;
for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()==='连接性错误 (176)') { leaf=el; break; }
if(!leaf) return {err:'node not found'};
fire(leaf); await sleep(2500);
const collect = () => {
let best=null;
for (const el of document.querySelectorAll('div,table,tbody')) {
const x = el.innerText||'';
if (/错误对象/.test(x) && /[0-9]连接性错误/.test(x) && (!best || x.length < best.length)) best = x;
}
return (best||'').split('input::-webkit')[0];
};
const rows = new Map();
const add = (txt) => { const re = /\(([^)]+)\):\s*([A-Za-z0-9_.]+)-/g; let m;
while ((m = re.exec(txt))) { const k=m[1]; rows.set(k+'|'+m[2], true); } };
add(collect());
// page through
for (let i=0;i<12;i++){
let next=null;
for (const b of document.querySelectorAll('li,button,span')) {
const t=(b.textContent||'').trim();
if ((t==='>'||t==='下一页'||b.className && /next/i.test(String(b.className))) && b.offsetParent!==null) { next=b; break; }
}
if(!next) break;
if(!fire(next)) break;
await sleep(1200);
add(collect());
}
const byNet = {};
for (const k of rows.keys()) { const n=k.split('|')[0]; byNet[n]=(byNet[n]||0)+1; }
return {pads: rows.size, nets: Object.keys(byNet).length, byNet};
+18
查看文件
@@ -0,0 +1,18 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<6&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const detail = () => { for (const el of document.querySelectorAll('div'))
if (String(el.className).indexOf('lc-table-container')===0 && /错误对象/.test(el.innerText||''))
return (el.innerText||'').replace(/\s+/g,' ').split('input::-webkit')[0];
return ''; };
let leaf=null;
for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()==='连接性错误 (166)') { leaf=el; break; }
if(!leaf) return {err:'no leaf'};
fire(leaf); await sleep(2500);
const t = detail();
const re = /\(([^)]+)\):\s*([A-Za-z0-9_.]+)/g;
const by={}; let m; let n=0;
while((m=re.exec(t))){ by[m[1]] = (by[m[1]]||[]); by[m[1]].push(m[2]); n++; }
return {rows:n, nets:Object.keys(by).length, by, len:t.length};
+10
查看文件
@@ -0,0 +1,10 @@
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1000));
let n=0;
for (let pass=0; pass<3; pass++)
for (const l of await eda.pcb_PrimitiveLine.getAll()) {
if ([1,2,15,16].includes(l.getState_Layer())) { await eda.pcb_PrimitiveLine.delete(l.getState_PrimitiveId()); n++; }
}
const left = (await eda.pcb_PrimitiveLine.getAll()).filter(l=>[1,2,15,16].includes(l.getState_Layer())).length;
await eda.pcb_Document.save();
return {deleted:n, left};
+17
查看文件
@@ -0,0 +1,17 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await sleep(1500);
const nat = b => { const o={bubbles:true,cancelable:true,view:window,button:0};
for (const t of ['pointerdown','mousedown','pointerup','mouseup','click'])
b.dispatchEvent(new (t.startsWith('pointer')?PointerEvent:MouseEvent)(t,o)); };
for (const b of document.querySelectorAll('button'))
if ((b.innerText||'').trim()==='确认' && b.offsetParent!==null) { nat(b); break; }
await sleep(1500);
await eda.pcb_Document.save();
await sleep(2000);
const out=[];
for (const q of await eda.pcb_PrimitivePoured.getAll()) {
let f=[]; try { f=q.getState_PourFills()||[]; } catch(e){}
out.push(f.length);
}
return {fills: out, pour:(await eda.pcb_PrimitivePour.getAll()).map(p=>[p.getState_PourName(),p.getState_Net(),p.getState_Layer()])};
+11
查看文件
@@ -0,0 +1,11 @@
await eda.dmt_EditorControl.openDocument('f126ffb29c92f9b2');
await new Promise(r=>setTimeout(r,1000));
const M=39.3700787;
const want=['J71','U51','U32','J23','Y1','J74','U54'];
const out={};
for (const c of await eda.pcb_PrimitiveComponent.getAll()) {
const d=c.getState_Designator(); if(!want.includes(d)) continue;
const pins = await eda.pcb_PrimitiveComponent.getAllPinsByPrimitiveId(c.getState_PrimitiveId());
out[d]=pins.filter(p=>/DP|DM|XTAL|CC|VBUS|GND|^$/.test(p.net||'') || d!=='U32').map(p=>[p.padNumber,p.net,+(p.x/M).toFixed(3),+(p.y/M).toFixed(3),p.layer]);
}
return out;
+17
查看文件
@@ -0,0 +1,17 @@
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const propsOf = el => { for (const k of Object.keys(el)) if (k.startsWith('__reactProps$')) return el[k]; return null; };
const fire = (el) => { let t = el; for (let i=0;i<8&&t;i++){const q=propsOf(t);
if(q&&typeof q.onClick==='function'){q.onClick({target:t,currentTarget:t,stopPropagation(){},preventDefault(){},nativeEvent:{},button:0,detail:1});return true;} t=t.parentElement;} return false; };
const leaf = (txt) => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim()===txt) return el; return null; };
const total = () => { for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim().startsWith('全部 (')) return (el.textContent||'').trim(); return null; };
const before = total();
fire(leaf('设计')); await sleep(800);
fire(leaf('清除错误')); await sleep(2000);
const cleared = total();
fire(leaf('设计')); await sleep(800);
fire(leaf('检查DRC')); await sleep(3000);
const seq=[];
for (let i=0;i<8;i++){ await sleep(2500); seq.push(total()); }
return {before, cleared, seq};
+2
查看文件
@@ -0,0 +1,2 @@
const M = eda.pcb_Drc;
return {methods: Object.getOwnPropertyNames(Object.getPrototypeOf(M)||{}).concat(Object.getOwnPropertyNames(M)).filter(n=>typeof M[n]==='function')};
+15
查看文件
@@ -0,0 +1,15 @@
let node=null;
for (const el of document.querySelectorAll('*'))
if (el.children.length===0 && (el.textContent||'').trim().startsWith('全部 (')) { node=el; break; }
if(!node) return {err:'no panel'};
let panel=node;
for (let i=0;i<14&&panel.parentElement;i++){ panel=panel.parentElement; if((panel.innerText||'').length>200) break; }
const items=[];
for (const el of panel.querySelectorAll('button,i,svg,span,div')) {
if (el.offsetParent===null) continue;
const t=(el.getAttribute('title')||'').trim();
const dt=(el.getAttribute('data-test')||'').trim();
const cls=(typeof el.className==='string'?el.className:'').slice(0,50);
if (t||dt) items.push({tag:el.tagName, title:t, dataTest:dt, cls});
}
return {n: items.length, items: items.slice(0,40)};
+6
查看文件
@@ -0,0 +1,6 @@
const out={};
try { const f = await eda.pcb_ManufactureData.getDsnFile('AutoRoute_DSN');
out.type = Object.prototype.toString.call(f);
if (f && f.size !== undefined) { out.size=f.size; out.name=f.name; out.head=(await f.text()).slice(0,500); }
} catch(e){ out.err=String(e).slice(0,300); }
return out;
+5
查看文件
@@ -0,0 +1,5 @@
const L = (await eda.pcb_PrimitiveLine.getAll()).map(o=>[o.primitiveId,o.net,o.layer,
Math.round(o.startX*100)/100,Math.round(o.startY*100)/100,Math.round(o.endX*100)/100,Math.round(o.endY*100)/100]);
const V = (await eda.pcb_PrimitiveVia.getAll()).map(o=>[o.primitiveId,o.net,
Math.round(o.x*100)/100,Math.round(o.y*100)/100]);
return {L, V};
+12
查看文件
@@ -0,0 +1,12 @@
await eda.dmt_EditorControl.openDocument('9a6096762e036e23');
await new Promise(r => setTimeout(r, 1500));
const hit = [];
for (const w of await eda.sch_PrimitiveWire.getAll()) {
const l = w.getState_Line();
if (!l) continue;
const pts = [];
for (let i = 0; i + 1 < l.length; i += 2) pts.push([Math.round(l[i]), Math.round(l[i+1])]);
const touches = pts.some(p => (p[0] === 920 && (p[1] === 320 || p[1] === 570)) || (p[0] === 850 && p[1] === 320) || (p[0] === 890 && p[1] === 570));
if (touches) hit.push({id: w.getState_PrimitiveId(), net: w.getState_Net(), nSeg: pts.length / 2, pts});
}
return hit;
+11
查看文件
@@ -0,0 +1,11 @@
await eda.dmt_EditorControl.openDocument('9a6096762e036e23');
await new Promise(r => setTimeout(r, 1500));
const out = {};
out.deleted = await eda.sch_PrimitiveWire.delete('10da8544d0b1f864');
// A0(U13.2) → 绕行 → SCL 端口引脚 (920,340) 收尾
const w1 = await eda.sch_PrimitiveWire.create([890,570, 890,440, 850,440, 850,340, 920,340]);
// 端口引脚 → U13.5 (SCL)
const w2 = await eda.sch_PrimitiveWire.create([920,340, 920,570]);
out.w1 = !!w1; out.w2 = !!w2;
out.saved = await eda.sch_Document.save();
return out;
+9
查看文件
@@ -0,0 +1,9 @@
const out=[];
for (const key of ['2*20 排母','2x20 排母','排母 2*20','2.54 2*20P 母']) {
let r=[];
try { r = await eda.lib_Device.search(key, undefined, undefined, undefined, 30, 1); } catch(e){ out.push({key, err:String(e)}); continue; }
out.push({key, n:r.length, items:(r||[]).slice(0,12).map(d=>({
name:d.name||d.deviceName, sup:d.supplierPartNo||d.lcsc||d.productCode,
fp:d.footprintName||d.footprint, desc:(d.description||'').slice(0,60)}))});
}
return out;
+2
查看文件
@@ -0,0 +1,2 @@
const r = await eda.lib_Device.search('2.54-2*20P母', undefined, undefined, undefined, 20, 1);
return {n:r.length, keys: r[0]?Object.keys(r[0]):null, first: JSON.stringify(r[0]||null).slice(0,1200)};
+18
查看文件
@@ -0,0 +1,18 @@
const keys = ['2.54-2*20P母','排母 2*20P','2*20P 排母 插件','双排排母 40P','排针 2*20P',
'2.54 2*20P','PC104 排母','加高排母','堆叠 排母 2.54','排母 塑高 11',
'双排排针 2*20P','2*20P 排针 加高','双塑排针 2*20'];
const seen = {}, out = [];
for (const k of keys) {
let r=[];
try { r = await eda.lib_Device.search(k, undefined, undefined, undefined, 40, 1); } catch(e){ continue; }
for (const d of (r||[])) {
const fp = d.footprintName || '';
if (!/40P-P2\.54.*(R2-C20|C20)/.test(fp)) continue;
const id = d.otherProperty && d.otherProperty['Supplier Part'] || d.supplierId || d.uuid;
if (seen[id]) continue; seen[id]=1;
out.push({lcsc:id, name:d.name, fp:fp, mfr:d.manufacturer,
desc:(d.description||'').replace(/\s+/g,''),
cls:(d.otherProperty||{})['JLCPCB Part Class']});
}
}
return out;
+17
查看文件
@@ -0,0 +1,17 @@
if (!window.__arLog) {
window.__arLog = [];
const push = (k, a) => { try { window.__arLog.push(k+': '+Array.from(a).map(x=>{
try { return typeof x==='string'? x : JSON.stringify(x); } catch(e){ return String(x); } }).join(' ').slice(0,300)); } catch(e){} };
['log','warn','error','info'].forEach(k=>{ const o=console[k].bind(console);
console[k]=function(){ push(k, arguments); return o.apply(console, arguments); }; });
window.addEventListener('error', e=>window.__arLog.push('winerr: '+e.message));
window.addEventListener('unhandledrejection', e=>window.__arLog.push('rej: '+String(e.reason).slice(0,300)));
const of = window.fetch;
window.fetch = function(){ try{ window.__arLog.push('fetch: '+String(arguments[0]).slice(0,200)); }catch(e){} return of.apply(this, arguments); };
const ox = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(m,u){ try{ window.__arLog.push('xhr: '+m+' '+String(u).slice(0,200)); }catch(e){} return ox.apply(this, arguments); };
const ow = window.Worker;
if (ow) { window.Worker = function(u, o){ try{ window.__arLog.push('worker: '+String(u).slice(0,200)); }catch(e){} return new ow(u, o); }; window.Worker.prototype = ow.prototype; }
}
window.__arLog.length = 0;
return {hooked: true};
+9
查看文件
@@ -0,0 +1,9 @@
const out=[];
for (const f of document.querySelectorAll('iframe')) {
let accessible=false, keys=null, err=null;
try { const w = f.contentWindow; accessible = !!w.document;
keys = Object.keys(w).filter(k=>/bridge|rpc|pcb|editor|route|Route/i.test(k)).slice(0,25);
} catch(e){ err=String(e).slice(0,80); }
out.push({src:String(f.src).slice(0,120), id:f.id, cls:String(f.className).slice(0,40), accessible, keys, err});
}
return out;

某些文件未显示,因为此 diff 中更改的文件太多 显示更多