v3.5.1
3.5.1 是一个注重稳定性和质量的发布版本。主要内容包括:在 1↔1Inverse3 + 握把配置下的自动配对;在未打开 WebSocket 会话的情况下,GET /devices/{id} 仍可返回最新的运动状态;消除在力/位置模式切换时产生的尖锐异响;以及在持续高负载下能够自我调节的服务 tick 调度器。
亮点
- 1↔1Inverse3 + 握把安装的自动配对。 当一个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 毫秒空闲间隔临时规避方案已失效。 - 自调节 tick 调度器。主循环会在负载下自动调整分发速率,以防止单个慢 tick 导致命令队列无限增长。
- 高负载下的 1 进 1 出流式恢复。 每个会话中,每条 WS 消息的流式响应被限制为 1 次/毫秒;当达到上限时,系统会重放上一个缓冲区的内容,因此仿真循环永远不会在
recv()上。
内部改进
设备
- 按设备分类的Inverse3 与VerseGrip配对注册表。
GET|POST|DELETE /devices/{sel}/paired_with这是按设备划分的“一对一”映射。POST将清除双方的冲突配对;DELETE清除所选条目;选择器必须解析为唯一的 ID。 - 固件 v7.5+ 上的 20 Hz 运动状态轮询。
GET /devices/{id}每 50 毫秒返回一次最新数据cursor_position、cursor_velocity、angular_position、angular_velocity;对活动会话无感知。 - 无线 VerseGrip 的
set_extension_data速率控制。 采用“丢弃旧数据/空闲时重复发送”的流水线机制,并在服务 tick 时进行清空——这样既不会因发送过多而导致无线链路饱和,也不会因发送不足而残留过期数值。
会话
- 针对仅包含控制指令(力/位置)的批次,新增了 WS 接收快速路径,该路径将跳过感知配置的处理流水线;
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的航向广播也进行了相同的修复。
- 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 版本。