v3.5.1
3.5.1 是一个稳定性与质量发布版本。主要主题包括:在 1↔1 Inverse3 + 握把配置下的自动配对;在未打开 WebSocket 会话的情况下,GET /devices/{id} 仍可返回最新的运动状态;消除力/位置模式切换时的尖啸异响;以及在持续高负载下自我调节的服务 tick 调度器。
亮点
- 1↔1 Inverse3 + 握把安装的自动配对。 当一个 Inverse3 与一个握把均已就绪时,SDK 会自动注册配对关系——在多设备环境中,
pen_attached与 Minverse 校准解锁不再被错误路由。 - 无需打开会话即可获取最新的
GET /devices/{id}快照。 固件 v7.5+ 的 Inverse3 / Inverse3x / Minverse 现在会以 20 Hz 轮询运动状态,与 WebSocket 的活动状态无关。v7.5 之前的固件会跳过该轮询,并只发出一次警告。 - 力/位置切换不再产生尖啸声。
set_cursor_force↔set_cursor_position的切换采用槽位互斥机制:两个 tick 之间,每台设备只保留最新的一条指令。HARP 中的 200 ms 空闲间隔临时规避方案已失效。 - 自调节 tick 调度器。 主循环会在负载下自动调整分发速率,使单个慢 tick 不会导致命令队列无限增长。
- 高负载下的 1 进 1 出流式回复。 每条 WS 消息的流式回复在每个会话中被限制为 1/ms;当上限拒绝时,会重放上一个缓冲区的内容,因此仿真循环永远不会阻塞在
recv()上。
内部改进
设备
- 按设备划分的 Inverse3 ↔ VerseGrip 配对注册表。
GET|POST|DELETE /devices/{sel}/paired_with是按设备划分的一对一映射。POST会清除双方的冲突配对;DELETE清除所选条目;选择器必须解析为唯一的 ID。 - 固件 v7.5+ 上的 20 Hz 运动状态轮询。
GET /devices/{id}每 50 ms 返回一次最新的cursor_position、cursor_velocity、angular_position、angular_velocity;对活动会话无感知。 - 无线 VerseGrip 的
set_extension_data速率控制。 采用“丢弃旧数据 / 空闲时重复发送”的流水线,并在服务 tick 上进行排空——发送过多不再使无线链路饱和,发送不足也不会再残留过期数值。
会话
- 为仅包含控制指令(力/位置)的批次新增了 WS 接收快速路径,该路径会跳过感知 configure 的处理流水线;
configure/set_profile/ 自定义命令仍会经过竞态修复逻辑。
可观测性
- 检测日志的输出频率按端口区分,并考虑持续时长。 每个被列入黑名单的端口独立进行门控;周期性出现的
"...blacklisted: skipping"日志行现在会附带(×N),表示两次触发之间被静默的 tick 次数。 - 当探测到非 WVG 设备时,无线 VerseGrip 检测不再大量刷屏日志。
问题修复
- 使用
POST /device.config.preset并指定defaults或arm_front时,现在会将设备的挂载配置重置为出厂预设(此前为静默的空操作)。basis会被保留,因此应用中配置的基座在挂载预设变更后依然有效。 - 当匹配的 configure 与之在同一条 WS 消息中到达时,
force_render_full_state不再返回缺少config块的快照——configure 路径会在快照之前同步完成处理。 - 跨会话的
force_render_full_state现在会返回目标会话的完整快照。 A 与 B 现在都能收到完整载荷(此前 A 只收到流式数据)。 - 当
target_session_id未知时,跨会话命令不再使请求-应答循环挂起。 请求方会收到其自身的快照,以及一个session-command-dropped事件(cross-session-unknown-target)。 - Minverse 多设备校准解锁不再错误路由。 校准 Minverse A 不再解锁 Minverse B;对 inkwell-success 的 heading 广播也做了同样的修复。
- HTTP 设备选择器 接受
#1234与1234作为设备 ID;选择器类(inverse3、verse_grip)可与索引配合使用;404 消息会保留原始选择器表达式。 - 无线 VerseGrip 的
ready标志现在依赖于初始设备信息握手——此前在某些重新连接路径上,设备尚未完全上报自身信息时该标志就可能被置位。 - 对由 keyed-rate-gate 支持的设置所做的运行时更改,现在会在下一次命中时生效(此前在首次 emplace 时即被固定,只有新会话才会应用该更改)。
潜在的破坏性变更
- HTTP 的 404 字符串已统一,涵盖
basis、preset、mount、transform、force_gate:"{type} device #{id} not found"→"no device matches selector '{expr}'"。会话的 404 同样如此。 - 设置项通配符
devices/inverse*/...→devices/*inverse/...,适用于力缩放增益、力闸门增益、控制超时以及safeties/expose_in_snapshot。使用旧字面路径的 3.5.0 设置文件将无法绑定。 - 设置:序列化全局项已迁移至
session/serialization/*(explicit_fields、force_complete_transforms、preview/*)。旧的serialization/*路径仍可通过已弃用的别名解析;将于 4.0 中移除。 - 行为变更:将每条消息的 WS 回复用作 tick 同步握手的客户端,在持续流量下每个会话每毫秒最多只会收到一次回复。配置变更时的完整快照不受影响。
弃用项
3.5.1 中无弃用项。预览总开关是即将到来的 3.6 版本“从静默到警告”流水线的弃用基础设施;首轮弃用计划安排在 3.5.2。