跳到主要内容

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。