fix: 状态上报闪烁修复 + 休眠按钮状态约束
- _latestStatus 改用合并策略 (prev.copy),保留上次报告的非 null 字段, 避免 4 个独立订阅 (Basic/Error/Motion/Device) 交替覆盖导致闪烁 - StatusBar 电量改用独立 batteryStatus StateFlow,不依赖 status?.batteryStatus - 休眠按钮仅非站立状态 (空闲/趴下/阻尼) 可切换,站立/RL 控制时禁用 Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -159,6 +159,7 @@ gradlew installDebug
|
||||
- **协程**: 网络 I/O 使用 `kotlinx.coroutines`,避免裸线程
|
||||
- **UDP**: 使用 `java.net.DatagramSocket`,绑定本地随机端口
|
||||
- **状态管理**: 使用 `StateFlow` 暴露连接状态、机器人状态
|
||||
- **状态上报合并策略**: `handleStatusReport` 对 `_latestStatus` 采用合并(`prev.copy`)而非替换,避免 4 个独立订阅(Basic/Error/Motion/Device)的局部报告覆盖整个状态导致 UI 闪烁。各分项(`batteryStatus`、`motionStatus` 等)同时维护独立 StateFlow,供 UI 直接订阅
|
||||
- **生命周期**: 网络连接生命周期绑定到 Activity/Service,前台时活跃
|
||||
- **MsgId**: 从 0 递增 u16,循环回绕
|
||||
- **断线判定**: 收到首个有效数据包前为 `CONNECTING`(5 秒无数据 → `TIMEOUT`);`CONNECTED` 后 3 秒无任何 UDP 包 → `TIMEOUT`
|
||||
@@ -213,6 +214,9 @@ gradlew installDebug
|
||||
- [x] 状态机补充:`RobotConnection` 允许 `CONNECTING → TIMEOUT` 合法转换
|
||||
- [x] 心跳启动时机修复:`ProtocolClient.connect()` 立即启动心跳线程,不再等待首次收到数据包后才启动;心跳在 `CONNECTING` 和 `CONNECTED` 状态下均正常运行
|
||||
- [x] 软急停滑块:右上角新增平行四边形水平滑块,滑到右侧触发软急停(`MOTION_DAMPING`),跟随机器人状态上报自动归位
|
||||
- [x] 状态上报闪烁修复:`_latestStatus` 改用合并策略(`prev.copy`),保留上次报告的非 null 字段,避免 4 个独立订阅交替覆盖导致状态栏/步态按钮闪烁
|
||||
- [x] 电量显示稳定性优化:`StatusBar` 电量改用独立 `batteryStatus` StateFlow,不依赖 `status?.batteryStatus`
|
||||
- [x] 休眠按钮状态约束:仅非站立状态(空闲/趴下/阻尼等)可切换休眠,站立/RL 控制时禁用
|
||||
|
||||
### 待办
|
||||
|
||||
|
||||
Reference in New Issue
Block a user