android: clear usbfs endpoint-halt after every timed-out transfer (stream killer); drop async reader, add START re-kick

This commit is contained in:
ZXCLI
2026-09-10 01:38:25 +08:00
parent 0f2aa11196
commit 1a2fc7abb8
3 changed files with 68 additions and 88 deletions
+19
View File
@@ -271,6 +271,25 @@
(若官方也掉,就是供电/兼容问题,与我们的代码无关);③ 新日志看
`usb detached``get_status halted=` 行。
## 用户反馈修复 第十四轮(2026-09-10,端点 halt 真凶确认:usbfs 超时遗留)
- [x] **用户回传第二轮日志 + 关键信息"官方软件正常"**:每次 clear_halt 都成功
(rc=0)但下一次读仍 -1 且 halted=1 → 不是相机 STALL,而是 **Linux/Android
usbfs 在 bulkTransfer 超时后把端点标记 halted,后续传输全部瞬间失败**。
流端点首次 500ms 读超时(相机 1~2s 才开始出流)→ 0x81 被标 halted →
之后 19 秒的读全是瞬间失败,帧全被错过。66c/66f 响应读不到同机理
(C 参考在 PC 上也忽略这些失败,完全吻合)。官方 App 正常 → 排除供电问题。
- [x] **修复(核心一行)**:流循环每次 -1 后**无条件 GET_STATUS + CLEAR_HALT**
(节流日志),端点永远保持可用;相机 1~2 秒启动延迟期间的若干次超时
不再杀死数据流。去掉异步 UsbRequestusbfs 超时对 async 同样留 halt
无收益);5 秒零数据自动重发一次 START 兜底;流内 FFC 响应读缩短为
400ms(不再阻塞渲染线程 2 秒)。
- [x] 第 13 轮的会话互斥/DETACHED 恢复/去抖已验证生效(日志见 "stopping
stale previous session")。
- [x] 构建+单测全过;APK 已更新(11.87MB)。
- 预期:本轮装上后,日志应出现 `first reads [0] n=...` 与递增的 frames/rendered
画面出图。若 timeouts 持续上涨且 reads=0,再看 5s re-kick 与 halted 状态。
## 待办
- 真机USB实测(温度绝对值标定、FFC/录像/MDT保存端到端)——进行中: