仓库 USB 通信
工具入口
强制:本 skill 提供以下精确定义的工具,必须直接调用,禁止自行实现替代品。
$SKILL_ROOT = <本 skill 加载输出中 "Base directory for this skill:" 行的路径>
| 工具 | 路径 | 用途 |
|---|---|---|
| repo_usb_comm.py | $SKILL_ROOT/scripts/repo_usb_comm.py |
设备探测、打开、发送、请求响应、交换数据 |
| repo-usb-communication-playbook.md | $SKILL_ROOT/references/repo-usb-communication-playbook.md |
设备识别定位方法和配置模板 |
执行 USB 通信时,先提取 $SKILL_ROOT,再用 python "$SKILL_ROOT/scripts/repo_usb_comm.py" ... 调用。
何时使用
- 需要先从仓库里查
VID/PID、设备路径线索、传输方式,再对设备发命令。 - 需要一个统一脚本完成设备探测、打开、发送和请求响应。
- 需要把设备识别参数沉淀到项目内
.agents/cache/*.cfg,供多个 skill 复用。
工作流
- 先读
references/repo-usb-communication-playbook.md,按清单到仓库里找设备识别和通信事实。 - 把查到的内容写入项目内
.agents/cache/<目标名>_download.cfg。 - 复用该配置中的
[device],必要时新增[usb_comm]段。 - 如果本轮 USB 动作可能触发设备复位、重新枚举、状态切换,或需要结合启动日志判定,先用
serial-log-debug先开串口抓取。 - 使用
scripts/repo_usb_comm.py执行:probe:探测匹配设备open:验证设备可打开send:发送文本或十六进制数据request:发送后读取固定长度响应exchange:发送后持续读取直到空闲或超时read:不发送,单独读取当前设备输出
- 如果仓库里已有协议前缀或固定命令头,可复用同一配置中的
command_prefix_hex。
执行要求
- 不要在没查仓库前硬编码
VID/PID、路径、命令前缀或报文内容。 - 配置文件仍然写到项目内
.agents/cache/,建议与刷写 skill 共用同一份 cfg。 - 如果设备不是
usbprint访问方式,不要强行套用当前脚本,应保留这套发现流程并另写脚本。 - 任何可能影响设备启动窗口或运行状态的 USB 测试前,都应先开串口抓取;不要等 USB 动作结束后再补抓。
- USB 指令默认严格串行:发送一条,等待响应、超时或结果判定完成,再发下一条。
- 真实收发时,把会话证据落到
artifacts/。
配置复用原则
- 直接复用
[device]:transportvidpidpath_hint
- 可复用
[protocol]:command_prefix_hex
- 新增
[usb_comm]用于通信默认值:default_modedefault_payload_hexdefault_texttext_encodingappend_crlfread_lengthread_timeout_msrequest_delay
参考
references/repo-usb-communication-playbook.md:仓库内定位方法、配置模板、收发建议。scripts/repo_usb_comm.py:统一 USB 通信脚本,优先读取.agents/cache/*.cfg。