firmwareloop 0.7.3__tar.gz → 0.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/PKG-INFO +6 -6
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/README.md +4 -4
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/PKG-INFO +6 -6
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/requires.txt +1 -1
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/pyproject.toml +2 -2
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/__init__.py +1 -1
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/fw_mcp_server.py +8 -8
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/lib/ndtdbg.py +6 -6
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/setup-agent-mcp.ps1 +2 -2
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/LICENSE +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/SOURCES.txt +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/dependency_links.txt +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/entry_points.txt +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/firmwareloop.egg-info/top_level.txt +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/setup.cfg +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/acceptance-scenario.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/build.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/can.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/check-qoder-mcp.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/common/build-backends.psm1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/common/fw.psm1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/common/uart_probe.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/doctor.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/flash.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/instrument_cli.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/lib/__init__.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/lib/instruments.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/lib/serial_assistant.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/logic_capture.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/logic_decode.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/ndtdbg_bridge.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/ndtdbg_cli.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/reset.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/serial_cli.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/sigrok_csv_to_fwloop.py +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/test-backends.ps1 +0 -0
- {firmwareloop-0.7.3 → firmwareloop-0.7.4}/tools/test.ps1 +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: firmwareloop
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)
|
|
5
5
|
Author-email: WeilinZhang <19523330249@163.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,7 +18,7 @@ Requires-Python: >=3.10
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: pyvisa>=1.14.0
|
|
21
|
-
Requires-Dist: pyvisa-py>=0.7.
|
|
21
|
+
Requires-Dist: pyvisa-py>=0.7.4
|
|
22
22
|
Requires-Dist: pyserial>=3.5
|
|
23
23
|
Requires-Dist: pytest>=8.0.0
|
|
24
24
|
Requires-Dist: pyocd>=0.36.0
|
|
@@ -383,7 +383,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
383
383
|
├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
|
|
384
384
|
├── demo-make/ 示例固件(Make;构建测试载体)
|
|
385
385
|
├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
|
|
386
|
-
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.
|
|
386
|
+
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.4)
|
|
387
387
|
├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
|
|
388
388
|
├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
|
|
389
389
|
├── CLAUDE.md Claude Code CLI 指南
|
|
@@ -393,7 +393,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
393
393
|
|
|
394
394
|
---
|
|
395
395
|
|
|
396
|
-
## 能力验证状态(v0.7.
|
|
396
|
+
## 能力验证状态(v0.7.4)
|
|
397
397
|
|
|
398
398
|
> 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
|
|
399
399
|
> `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
|
|
@@ -437,10 +437,10 @@ claude mcp remove --scope user agentic-hil
|
|
|
437
437
|
| 串口 `SERIAL_PORT_ERROR: ... PermissionError(13)` | 端口被 GUI 上位机独占(NDT Debug Tool / STDataCollection.exe、串口助手)→ 关闭占用方后 `fw_serial_open`;残留会话用 `fw_serial_close`(已自动等待/强杀进程,端口释放可验证) |
|
|
438
438
|
| `fw_serial_status` 的 `error_class` 为 `UART_BUSY` | 会话未打开或已被占用 → 先 `fw_serial_open`;残留会话 `fw_serial_close` 清理 |
|
|
439
439
|
| `fw_serial_*` 报 `PermissionError(13)` / `rx_bytes: 0` | 串口被独占:**退出 NDT Debug Tool GUI(STDataCollection.exe)**——它打开时会同时占住 Box 串口与 USB-IIC 通道;失败信封/`fw_serial_status` 的 `suspected_holders` 会直接列出嫌疑进程(注意别杀 MCP server 的 python) |
|
|
440
|
-
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.
|
|
440
|
+
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.4 起默认走 `flash_engine: bridge`(桥内单体,与 GUI 同进程模型);要复现/排查旧行为用 `flash_engine: "serve"` |
|
|
441
441
|
| 长调用(capture/measure)客户端超时 | MCP stdio 循环是**单线程**的:长调用会让同会话其它调用排队(含 3s 的小调用)→ 缩短窗口,或用 `fw_ndtdbg_stream_start` job 模式 |
|
|
442
442
|
| 烧录报 `INCOMPLETE_FLASH` | 桥内 flash 连续 30s 无进度(疑似卡在写入中途)→ **芯片处于半擦写态,勿直接使用,必须重新完整烧录**;信封带 `chip_state: partially_erased` 与 `post_kill_power_cycle`(已尝试复位) |
|
|
443
|
-
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash
|
|
443
|
+
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash 字节已通过逐窗校验,但断电重上电后目标没有有效应答/与期望不符**(现场失败形态:烧录工具报成功、当场可读,冷启动后却读不到版本)→ 按固件冷启动路径排查(看门狗/时钟/外设初始化);或用 `cold_boot_expect` 指定期望值、`cold_boot_check: false` 关闭 |
|
|
444
444
|
| `fw_serial_status` 的 `port_probe.openable = false` | 端口当前**无法独占打开**(硬结论)→ 看 `holder_candidates`(`source: cmdline` 比 `name` 准,候选≠持有者)确认占用方 |
|
|
445
445
|
|
|
446
446
|
完整速查表与手工部署细节见 [`Fwloop_setup_pack/README.md`](Fwloop_setup_pack/README.md)。
|
|
@@ -355,7 +355,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
355
355
|
├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
|
|
356
356
|
├── demo-make/ 示例固件(Make;构建测试载体)
|
|
357
357
|
├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
|
|
358
|
-
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.
|
|
358
|
+
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.4)
|
|
359
359
|
├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
|
|
360
360
|
├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
|
|
361
361
|
├── CLAUDE.md Claude Code CLI 指南
|
|
@@ -365,7 +365,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
365
365
|
|
|
366
366
|
---
|
|
367
367
|
|
|
368
|
-
## 能力验证状态(v0.7.
|
|
368
|
+
## 能力验证状态(v0.7.4)
|
|
369
369
|
|
|
370
370
|
> 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
|
|
371
371
|
> `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
|
|
@@ -409,10 +409,10 @@ claude mcp remove --scope user agentic-hil
|
|
|
409
409
|
| 串口 `SERIAL_PORT_ERROR: ... PermissionError(13)` | 端口被 GUI 上位机独占(NDT Debug Tool / STDataCollection.exe、串口助手)→ 关闭占用方后 `fw_serial_open`;残留会话用 `fw_serial_close`(已自动等待/强杀进程,端口释放可验证) |
|
|
410
410
|
| `fw_serial_status` 的 `error_class` 为 `UART_BUSY` | 会话未打开或已被占用 → 先 `fw_serial_open`;残留会话 `fw_serial_close` 清理 |
|
|
411
411
|
| `fw_serial_*` 报 `PermissionError(13)` / `rx_bytes: 0` | 串口被独占:**退出 NDT Debug Tool GUI(STDataCollection.exe)**——它打开时会同时占住 Box 串口与 USB-IIC 通道;失败信封/`fw_serial_status` 的 `suspected_holders` 会直接列出嫌疑进程(注意别杀 MCP server 的 python) |
|
|
412
|
-
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.
|
|
412
|
+
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.4 起默认走 `flash_engine: bridge`(桥内单体,与 GUI 同进程模型);要复现/排查旧行为用 `flash_engine: "serve"` |
|
|
413
413
|
| 长调用(capture/measure)客户端超时 | MCP stdio 循环是**单线程**的:长调用会让同会话其它调用排队(含 3s 的小调用)→ 缩短窗口,或用 `fw_ndtdbg_stream_start` job 模式 |
|
|
414
414
|
| 烧录报 `INCOMPLETE_FLASH` | 桥内 flash 连续 30s 无进度(疑似卡在写入中途)→ **芯片处于半擦写态,勿直接使用,必须重新完整烧录**;信封带 `chip_state: partially_erased` 与 `post_kill_power_cycle`(已尝试复位) |
|
|
415
|
-
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash
|
|
415
|
+
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash 字节已通过逐窗校验,但断电重上电后目标没有有效应答/与期望不符**(现场失败形态:烧录工具报成功、当场可读,冷启动后却读不到版本)→ 按固件冷启动路径排查(看门狗/时钟/外设初始化);或用 `cold_boot_expect` 指定期望值、`cold_boot_check: false` 关闭 |
|
|
416
416
|
| `fw_serial_status` 的 `port_probe.openable = false` | 端口当前**无法独占打开**(硬结论)→ 看 `holder_candidates`(`source: cmdline` 比 `name` 准,候选≠持有者)确认占用方 |
|
|
417
417
|
|
|
418
418
|
完整速查表与手工部署细节见 [`Fwloop_setup_pack/README.md`](Fwloop_setup_pack/README.md)。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: firmwareloop
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)
|
|
5
5
|
Author-email: WeilinZhang <19523330249@163.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,7 +18,7 @@ Requires-Python: >=3.10
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: pyvisa>=1.14.0
|
|
21
|
-
Requires-Dist: pyvisa-py>=0.7.
|
|
21
|
+
Requires-Dist: pyvisa-py>=0.7.4
|
|
22
22
|
Requires-Dist: pyserial>=3.5
|
|
23
23
|
Requires-Dist: pytest>=8.0.0
|
|
24
24
|
Requires-Dist: pyocd>=0.36.0
|
|
@@ -383,7 +383,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
383
383
|
├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
|
|
384
384
|
├── demo-make/ 示例固件(Make;构建测试载体)
|
|
385
385
|
├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
|
|
386
|
-
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.
|
|
386
|
+
├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.7.4)
|
|
387
387
|
├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
|
|
388
388
|
├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
|
|
389
389
|
├── CLAUDE.md Claude Code CLI 指南
|
|
@@ -393,7 +393,7 @@ claude mcp remove --scope user agentic-hil
|
|
|
393
393
|
|
|
394
394
|
---
|
|
395
395
|
|
|
396
|
-
## 能力验证状态(v0.7.
|
|
396
|
+
## 能力验证状态(v0.7.4)
|
|
397
397
|
|
|
398
398
|
> 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
|
|
399
399
|
> `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
|
|
@@ -437,10 +437,10 @@ claude mcp remove --scope user agentic-hil
|
|
|
437
437
|
| 串口 `SERIAL_PORT_ERROR: ... PermissionError(13)` | 端口被 GUI 上位机独占(NDT Debug Tool / STDataCollection.exe、串口助手)→ 关闭占用方后 `fw_serial_open`;残留会话用 `fw_serial_close`(已自动等待/强杀进程,端口释放可验证) |
|
|
438
438
|
| `fw_serial_status` 的 `error_class` 为 `UART_BUSY` | 会话未打开或已被占用 → 先 `fw_serial_open`;残留会话 `fw_serial_close` 清理 |
|
|
439
439
|
| `fw_serial_*` 报 `PermissionError(13)` / `rx_bytes: 0` | 串口被独占:**退出 NDT Debug Tool GUI(STDataCollection.exe)**——它打开时会同时占住 Box 串口与 USB-IIC 通道;失败信封/`fw_serial_status` 的 `suspected_holders` 会直接列出嫌疑进程(注意别杀 MCP server 的 python) |
|
|
440
|
-
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.
|
|
440
|
+
| 烧录"擦除生效(probe 从非 00 变 00)但校验读回全 FF"、`pages_written` 已发出 | v0.7.1 及更早的逐笔 serve 路径问题 → v0.7.4 起默认走 `flash_engine: bridge`(桥内单体,与 GUI 同进程模型);要复现/排查旧行为用 `flash_engine: "serve"` |
|
|
441
441
|
| 长调用(capture/measure)客户端超时 | MCP stdio 循环是**单线程**的:长调用会让同会话其它调用排队(含 3s 的小调用)→ 缩短窗口,或用 `fw_ndtdbg_stream_start` job 模式 |
|
|
442
442
|
| 烧录报 `INCOMPLETE_FLASH` | 桥内 flash 连续 30s 无进度(疑似卡在写入中途)→ **芯片处于半擦写态,勿直接使用,必须重新完整烧录**;信封带 `chip_state: partially_erased` 与 `post_kill_power_cycle`(已尝试复位) |
|
|
443
|
-
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash
|
|
443
|
+
| 烧录报 `COLD_BOOT_VERIFY_FAILED` | **Flash 字节已通过逐窗校验,但断电重上电后目标没有有效应答/与期望不符**(现场失败形态:烧录工具报成功、当场可读,冷启动后却读不到版本)→ 按固件冷启动路径排查(看门狗/时钟/外设初始化);或用 `cold_boot_expect` 指定期望值、`cold_boot_check: false` 关闭 |
|
|
444
444
|
| `fw_serial_status` 的 `port_probe.openable = false` | 端口当前**无法独占打开**(硬结论)→ 看 `holder_candidates`(`source: cmdline` 比 `name` 准,候选≠持有者)确认占用方 |
|
|
445
445
|
|
|
446
446
|
完整速查表与手工部署细节见 [`Fwloop_setup_pack/README.md`](Fwloop_setup_pack/README.md)。
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "firmwareloop"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.4"
|
|
8
8
|
description = "AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -14,7 +14,7 @@ license = { text = "MIT" }
|
|
|
14
14
|
requires-python = ">=3.10"
|
|
15
15
|
dependencies = [
|
|
16
16
|
"pyvisa>=1.14.0",
|
|
17
|
-
"pyvisa-py>=0.7.
|
|
17
|
+
"pyvisa-py>=0.7.4",
|
|
18
18
|
"pyserial>=3.5",
|
|
19
19
|
"pytest>=8.0.0",
|
|
20
20
|
"pyocd>=0.36.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
fw_mcp_server.py - FirmwareLoop High-Level Workflow & Device MCP Server (v0.7.
|
|
3
|
+
fw_mcp_server.py - FirmwareLoop High-Level Workflow & Device MCP Server (v0.7.4).
|
|
4
4
|
|
|
5
5
|
Exposes high-level firmware engineering and hardware management tools to AI Coding
|
|
6
6
|
Agents (Antigravity CLI, Claude Code CLI, Qoder IDE, CodeBuddy IDE, Cursor) via the Model Context
|
|
@@ -332,7 +332,7 @@ def handle_fw_ndtdbg_write_reg(args: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
332
332
|
def handle_fw_ndtdbg_flash(args: Dict[str, Any]) -> Dict[str, Any]:
|
|
333
333
|
"""Erase + flash a .bin/.nfw image onto the NdtBox target chip (ChipSea Fxx) over IIC.
|
|
334
334
|
|
|
335
|
-
P1-3 (0.7.
|
|
335
|
+
P1-3 (0.7.4): 去掉按签名重试 —— "TARGET_MISMATCH @0x0000" 正是"根本没进 boot"的
|
|
336
336
|
特征签名 (旧 boot 判据假阳的同一条错误路径), 盲目重试只会重复同一失败路径。
|
|
337
337
|
整片重写 (<= rewrite_times) 现由 flash_exec 内部完成, 结果带 rewrite_count;
|
|
338
338
|
BOOT_NOT_ENTERED 直接返回指引 (需断电重启, 重试无意义)。
|
|
@@ -2335,7 +2335,7 @@ def process_request(req: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
|
2335
2335
|
},
|
|
2336
2336
|
"serverInfo": {
|
|
2337
2337
|
"name": "firmwareloop",
|
|
2338
|
-
"version": "0.7.
|
|
2338
|
+
"version": "0.7.4"
|
|
2339
2339
|
}
|
|
2340
2340
|
}
|
|
2341
2341
|
}
|
|
@@ -2470,7 +2470,7 @@ def _settle_stashed_entrypoints(stashed) -> None:
|
|
|
2470
2470
|
def handle_cli_update() -> int:
|
|
2471
2471
|
"""Handle `firmwareloop update` command."""
|
|
2472
2472
|
print("============================================================")
|
|
2473
|
-
print(" FirmwareLoop Auto-Updater (v0.7.
|
|
2473
|
+
print(" FirmwareLoop Auto-Updater (v0.7.4)")
|
|
2474
2474
|
print("============================================================")
|
|
2475
2475
|
|
|
2476
2476
|
is_git_repo = os.path.exists(os.path.join(REPO_ROOT, ".git"))
|
|
@@ -2901,7 +2901,7 @@ def set_ndtdbg_dlldir(dll_path: str) -> str:
|
|
|
2901
2901
|
def handle_cli_setup() -> int:
|
|
2902
2902
|
"""Handle `firmwareloop setup` command: simultaneously configure Antigravity CLI, Claude Code CLI, Qoder IDE, and CodeBuddy IDE."""
|
|
2903
2903
|
print("============================================================")
|
|
2904
|
-
print(" FirmwareLoop Multi-Agent Global Setup Helper (v0.7.
|
|
2904
|
+
print(" FirmwareLoop Multi-Agent Global Setup Helper (v0.7.4)")
|
|
2905
2905
|
print("============================================================")
|
|
2906
2906
|
print("")
|
|
2907
2907
|
|
|
@@ -3026,7 +3026,7 @@ def handle_cli_setup() -> int:
|
|
|
3026
3026
|
def handle_cli_init(chip: Optional[str] = None, upgrade: bool = False) -> int:
|
|
3027
3027
|
"""Handle `firmwareloop init [target_chip]` command."""
|
|
3028
3028
|
print("============================================================")
|
|
3029
|
-
print(" FirmwareLoop Multi-Agent Project Initializer (v0.7.
|
|
3029
|
+
print(" FirmwareLoop Multi-Agent Project Initializer (v0.7.4)")
|
|
3030
3030
|
print("============================================================")
|
|
3031
3031
|
cwd = os.getcwd()
|
|
3032
3032
|
print(f"[*] Initializing multi-agent guidelines & bench config in:\n {cwd}\n")
|
|
@@ -3059,7 +3059,7 @@ def handle_cli_init(chip: Optional[str] = None, upgrade: bool = False) -> int:
|
|
|
3059
3059
|
|
|
3060
3060
|
|
|
3061
3061
|
def print_cli_help() -> None:
|
|
3062
|
-
print("""FirmwareLoop (fwloop) — AI Agent Firmware Engineering & Lab Automation Platform (v0.7.
|
|
3062
|
+
print("""FirmwareLoop (fwloop) — AI Agent Firmware Engineering & Lab Automation Platform (v0.7.4)
|
|
3063
3063
|
|
|
3064
3064
|
Usage:
|
|
3065
3065
|
fwloop [command] (or: firmwareloop [command])
|
|
@@ -3105,7 +3105,7 @@ def main() -> None:
|
|
|
3105
3105
|
sys.exit(2)
|
|
3106
3106
|
sys.exit(handle_cli_ndtdebugtool(args[1]))
|
|
3107
3107
|
elif cmd in ["version", "-v", "--version"]:
|
|
3108
|
-
print("FirmwareLoop v0.7.
|
|
3108
|
+
print("FirmwareLoop v0.7.4")
|
|
3109
3109
|
sys.exit(0)
|
|
3110
3110
|
elif cmd in ["help", "-h", "--help"]:
|
|
3111
3111
|
print_cli_help()
|
|
@@ -828,7 +828,7 @@ class NdtBoxIo:
|
|
|
828
828
|
"""桥内单体 flash 引擎 (0.7.2 起为默认): 单进程内 USBIOX(0) 与 USB2IO(1) 句柄同持,
|
|
829
829
|
|
|
830
830
|
帧经 stdin 一次性传入、全程连续无逐笔管道往返 —— 即原厂 GUI 的进程模型, 也是
|
|
831
|
-
现场 (2026-09-11
|
|
831
|
+
现场 (2026-09-11) 6/6 verify pass 的那条路径。校验失败 (桥报
|
|
832
832
|
TARGET_MISMATCH "烧录校验失败") 时按 rewrite_times 整片重跑, 其余错误直接上抛。
|
|
833
833
|
"""
|
|
834
834
|
import time
|
|
@@ -879,7 +879,7 @@ class NdtBoxIo:
|
|
|
879
879
|
def flash_exec(self, plan: dict, timeout_ms: int | None = None) -> dict:
|
|
880
880
|
"""烧录引擎分派: "bridge" (默认, 桥内单体 flash) / "serve" (逐笔 Python 驱动)。
|
|
881
881
|
|
|
882
|
-
现场实证 (2026-09-11,
|
|
882
|
+
现场实证 (2026-09-11, 同一批固件 + 同一台设备):
|
|
883
883
|
桥内单体 flash (帧经 stdin 一次传入) -> 6/6 {"ok":true,"verify":"pass"}
|
|
884
884
|
逐笔 serve 路径 (每页一笔 raw 事务) -> 100% "擦除生效但页写不落地"
|
|
885
885
|
(probe FFFFFFFF -> 00000000 说明 7 字节擦除帧到达; 99 页 write_ms 7594ms
|
|
@@ -1428,8 +1428,8 @@ class ChipSeaFxx:
|
|
|
1428
1428
|
expect: str | None = None) -> dict:
|
|
1429
1429
|
"""烧后冷启动冒烟 (评审 §4): 断电重上电 -> 读已知寄存器 -> 判定固件是否真的跑起来。
|
|
1430
1430
|
|
|
1431
|
-
只校验 Flash 字节的流程抓不到"镜像烧对了但跑不起来"
|
|
1432
|
-
|
|
1431
|
+
只校验 Flash 字节的流程抓不到"镜像烧对了但跑不起来"——现场出现过: 烧录工具报成功
|
|
1432
|
+
且当场可读, 断电重上电后版本寄存器却读不到。这里 fail-closed:
|
|
1433
1433
|
expect 给定时逐字节比对; 未给定时判"有无效应答"(读不到或全 00/FF 都算失败)。
|
|
1434
1434
|
"""
|
|
1435
1435
|
import time
|
|
@@ -1452,7 +1452,7 @@ class ChipSeaFxx:
|
|
|
1452
1452
|
if raw is None:
|
|
1453
1453
|
out["ok"] = False
|
|
1454
1454
|
out["conclusion"] = ("冷启动后该寄存器无应答: 固件可能未起振/未使能 I2C 从机 "
|
|
1455
|
-
"—— Flash 字节已验证, 但目标跑不起来 (
|
|
1455
|
+
"—— Flash 字节已验证, 但目标跑不起来 (冷启动失败的特征)")
|
|
1456
1456
|
return out
|
|
1457
1457
|
if want is not None:
|
|
1458
1458
|
if raw[:len(want)] != want:
|
|
@@ -1530,7 +1530,7 @@ class ChipSeaFxx:
|
|
|
1530
1530
|
"pages_written": len(pages), "window_verified": True,
|
|
1531
1531
|
"cold_boot": cold,
|
|
1532
1532
|
"hint": "①确认目标固件在本寄存器上确有可读内容 (否则用 cold_boot_expect 指定)"
|
|
1533
|
-
";
|
|
1533
|
+
"; ②按冷启动路径排查 (看门狗/时钟/外设初始化); "
|
|
1534
1534
|
"③如确不需要该校验, 用 cold_boot_check=false / --no-cold-boot-check 关闭"})
|
|
1535
1535
|
return {
|
|
1536
1536
|
"file": file_path,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<#
|
|
2
2
|
.SYNOPSIS
|
|
3
|
-
Dual-Tier MCP setup and registration helper (v0.7.
|
|
3
|
+
Dual-Tier MCP setup and registration helper (v0.7.4).
|
|
4
4
|
Inspects installed AI coding agents (Qoder, Claude Code, Antigravity, Cursor)
|
|
5
5
|
and configures global MCP / skills or prints exact registration commands.
|
|
6
6
|
|
|
@@ -242,7 +242,7 @@ if ($Json) {
|
|
|
242
242
|
Write-FwJson ([pscustomobject]$report)
|
|
243
243
|
} else {
|
|
244
244
|
Write-Host "============================================================" -ForegroundColor Cyan
|
|
245
|
-
Write-Host " FirmwareLoop Dual-Tier MCP & Agent Setup Helper (v0.7.
|
|
245
|
+
Write-Host " FirmwareLoop Dual-Tier MCP & Agent Setup Helper (v0.7.4)" -ForegroundColor Green
|
|
246
246
|
Write-Host "============================================================" -ForegroundColor Cyan
|
|
247
247
|
Write-Host ""
|
|
248
248
|
Write-Host "[1] Google Antigravity / Gemini CLI:" -ForegroundColor Yellow
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|