# Windows 测试与 USB 抓包指南 ## 1. 已安装的工具 | 工具 | 位置 | 用途 | |---|---|---| | USBPcap 1.5.4 | `C:\Program Files\USBPcap\` | USB 抓包驱动 + USBPcapCMD.exe | | Wireshark 4.6.7 | `C:\Program Files\Wireshark\` | 查看 .pcap 抓包文件 | | libusb-1.0 (x64) | `csdk\third_party\libusb\win64\` | 本地构建用(TI CCS 的 64 位 DLL + dlltool 生成的导入库) | | MinGW gcc 14.2 | `C:\mingw64\bin\gcc.exe` | 编译 | 注意:USBPcap/Wireshark 安装后**需要重启**才能加载驱动。 本机当前没有 VID 0x833C 设备 —— 插入相机后按下面流程测试。 ## 2. 构建(Windows 无 CMake 环境时用 MinGW 直接编) ```powershell $lb = "C:\Project\MAG160C\csdk\third_party\libusb\win64" $srcs = @( "csdk\src\mag160c_error.c","csdk\src\mag160c_frame.c", "csdk\src\mag160c_temp.c","csdk\src\mag160c_tcm.c", "csdk\src\mag160c_ir.c") gcc -std=c11 -Icsdk\include -Icsdk\src -I$lb ` -DMAG160C_STATIC -DMAG160C_HAS_LIBUSB=1 -DMAG160C_HAS_THREADS=1 ` $srcs csdk\tools\mag160c_cli.c $lb\libusb-1.0.x64.a ` -o build-artifacts\csdk_cli_libusb.exe -lpthread Copy-Item $lb\libusb-1.0.dll build-artifacts\ ``` 或装 CMake 后: `cmake -B build -S csdk && cmake --build build`(会自动用 third_party 里的 libusb)。 ## 3. 无硬件验证(纯计算 + 协议构造) ```powershell .\build-artifacts\csdk_cli_libusb.exe tcm-rotate 5 # 7e 00 07 85 02 77 00 01 00 05 7f .\build-artifacts\csdk_cli_libusb.exe tcm-light green blink # 7e 00 09 87 02 32 00 01 01 00 ff 00 35 .\build-artifacts\csdk_cli_libusb.exe frame-test .\build-artifacts\csdk_cli_libusb.exe temp-test .\build-artifacts\csdk_cli_libusb.exe ir-info # 应显示 "no device with VID 0x833c" ``` ## 4. 有硬件验证 插入相机(VID 0x833C)后: ```powershell # 确认系统看到设备 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match "833C" } # 枚举 + 信息 .\build-artifacts\csdk_cli_libusb.exe ir-info # 触发 FFC(会真实发包) .\build-artifacts\csdk_cli_libusb.exe ffc # 启动流(帧回调打印)+ 停止 .\build-artifacts\csdk_cli_libusb.exe start .\build-artifacts\csdk_cli_libusb.exe stop ``` 预期:ir-info 显示 width=160 height=120;FFC 返回 OK;start 后 USBPcap 抓包应看到 EP 0x03 上 `6b b6 b6 72` 或 `6b b6 b6 73` 的 8 字节写、EP 0x82 的响应读、 EP 0x81 上 `1b b1 b1 1b` 开头的帧流。 ## 5. USB 抓包(USBPcap + Wireshark) USBPcap 需要管理员权限。列出捕获设备: ```powershell # 管理员 PowerShell & "C:\Program Files\USBPcap\USBPcapCMD.exe" -d ``` 输出示例: ``` 1. \\.\USBPcap1 USB Root Hub (xHCI) 2. \\.\USBPcap2 USB Root Hub (xHCI) ... ``` 开始抓包(抓所有 USB 根集线器,输出 pcap 文件): ```powershell # 管理员 PowerShell,抓 30 秒(-A 30) & "C:\Program Files\USBPcap\USBPcapCMD.exe" -d "\\.\USBPcap1" -o C:\captures\mag1.pcap -A 30 & "C:\Program Files\USBPcap\USBPcapCMD.exe" -d "\\.\USBPcap2" -o C:\captures\mag2.pcap -A 30 ``` 另开一个窗口跑 `csdk_cli_libusb.exe ffc` / `start`,让包被捕获。 在 Wireshark 中打开 pcap,过滤: - 找到相机设备(右键设备名查看) - 过滤 `usb.idVendor == 0x833c` - 看 bulk OUT 到 0x03 的 8 字节包、bulk IN 0x82 的响应、0x81 的帧流 也可以用 Wireshark 图形界面直接选 USBPcap 接口开始抓(需要重启后驱动生效)。 ## 6. 抓包结果对照(逆向验证清单) | 包 | 期望 | |---|---| | 链接后第一个命令 | `6b b6 b6 6f 00 00 00 00` (GET_INFO) | | FFC | `6b b6 b6 72 ` | | Start | 50ms 后 `6b b6 b6 73 00 00 00 00` | | Stop | `6b b6 b6 74 00 00 00 00` | | 响应 | `5b b5 b5 5b` + 0x38 字节(payload +0x10=width, +0x14=height) | | 帧流 | `1b b1 b1 1b` ... 数据在 +0x1c ... `1c b1 b1 1b` | 如与期望不符,将 pcap 保存到 `analysis/captures/` 并记录差异,用于修正协议。 ## 2026-08-10 Post-reboot verification (USBPcap live capture) - After a system reboot the USBPcap filter driver binds to the root hubs. On this machine the MAG160C device appears on \\\\.\USBPcap4 (AMD xHCI). Capture with: USBPcapCMD -d \\.\USBPcap4 -o out.pcap -A -s 65535 - The csdk's own traffic (analysis/captures/csdk_verified.pcap) matches the official demo byte-for-byte at the sequence level: 66b -> 66c -> 66f -> FFC(0) x2 -> START -> frames (15 fps) -> STOP. - USBPcap capture replaces the libusb0.dll shim for routine sniffing.