亮点 {#highlights}
设备范围的配置写入现在会同步到所有持有该设备的客户端会话,而不仅仅是发起写入的那一个。第二个查看端不再轮询,而是通过自身的 session-updated 事件刷新——每个持有该设备的会话恰好收到一个事件,写入方绝不会收到两个。
现在可以将设备的实际安装位置上报给客户端,而不再总是上报会话中配置的安装方式。用于标明当前看到的是哪一种安装位置的标签,现在从设计上即可保证准确,且适用于所有输出格式。
当设备自行维护安装参考值时,服务端会跟上其变化。 此前,服务端返回的是设备启动时捕获的值,之后从未重新检查。现在,服务端可按客户端自身的渲染节奏按需刷新该参考值,并在服务端进行速率限制,防止高频刷新的客户端占满设备链路,且仅在安装方向真正发生旋转后才通知变更。
内部改进 {#internal-improvements}
实验性握把偏航漂移自动校正。 新增的服务模块为 Wireless VerseGrip 的惯性偏航漂移提供闭环校正:它会将握把的绝对偏航角与其所附着的已配对 Inverse3 或 Minverse 的运动进行拟合;一旦一系列质量门限全部满足,便会向握把固件写入一次校正值。该功能默认禁用,仅在实验性启用开关开启时可用,并带有一个运行时开关,一经切换即可强制所有在线握把立即关闭该功能——对于会写入设备固件的功能而言,这一点不可或缺。面向所有设备的配置写入现在具备全有或全无的特性。 在修改任何设备之前,系统会先验证整个选择范围(包括固件能力与设备就绪状态),因此固件版本不一的设备群,不会再因第二台设备出错而停留在半切换状态。握把固件的确认信号现在按请求分别跟踪。 此前所有请求共用一个结果槽,两个并发的请求方可能互相覆盖对方的应答;同一个含糊的值还同时代表“被拒绝”和“尚无结果”,这可能使拒绝被误判为需要重试,从而引发重试风暴。现在每个请求都带有各自的令牌,从未真正发出的请求不会登记任何记录,丢失的响应则会被标记为失败,而不是导致卡死。执行此操作的清扫程序在没有待处理请求时不产生任何开销。Inkwell 底座校准不受新的握把固件能力检查影响。 将笔放入底座会执行完整的姿态重新校准,这在所有已出货的笔上都是正确的,与固件版本无关;该路径被明确豁免于为计算得出的航向校正而引入的能力下限,且豁免条件写在调用处,而非推断得出。修复 {#fixes}
重置重力补偿现在可恢复真正的默认值,而不是过度补偿。 尽管名称如此,config/gravity_compensation 上的 scaling_factor 字段并不是乘数:它是设备在自身重量之外额外补偿的末端执行器负载质量(单位为千克)。此前的重置按字面意思理解了这个名称,将其恢复为“中性”系数 1——也就是一个虚构的一千克负载——因此重置后设备会把手柄向上推,而这并不是新连接设备的表现。现在重置会恢复真正的默认值:补偿已启用,且 scaling_factor 为 0,意味着设备只承担自身重量,并不假设任何负载。如果你的应用此前是借助重置来提高补偿强度,请改为显式设置你所需的值。重置回位功能现在会真正将其重新开启。 此前,对 config/home_return 的重置会禁用回位功能,同时却告诉调用方该功能已启用。现在重置会真正恢复出厂默认值(开启),且应用随后读回的值即为设备实际使用的值。设备范围的安装方式或朝向写入不再使其他客户端的数据过时。 在 3.5.6 之前,写入设备本身(由持有该设备的所有会话共享)时,只会刷新发起写入的客户端的配置,而设备范围的路由则完全不刷新任何人。同一设备上的其他客户端会一直显示旧值,直到它们主动轮询。现在所有持有该设备的会话都会收到通知。Inkwell 底座的重复对接尝试不再在单次拒绝后放弃。 前一次对接的状态会在多次对接之间保留,因此第二次对接会把其首次拒绝视为重试窗口的结束。现在每次对接尝试都会重置重试窗口。修复了 Wireless VerseGrip 设备 tick 周期中的数据竞争。 设备标识符可能会在连接线程中被重新赋值,而与此同时,某个暂存路径却在使用另一把锁读取该标识符。现在该标识符会在正确的锁保护下统一取一次快照,且下方的每条路径(包括拒绝情况)都基于这份副本工作。修复了四个 Wireless VerseGrip 发送方上未同步的消息暂存问题。 这四条出站消息路径在组装负载和校验和并请求发送时,都未获取写锁,因此两个发送方可能在共享缓冲区上发生交错。潜在破坏性变更 {#potential-breaking-changes}
API、通信协议或设置均无变更。 默认输出与 3.5.5 逐字节一致,没有删除或更改任何路由路径,公共 C API 也没有任何差异,且没有任何设置键被重命名、删除或赋予新的默认值。选择启用 SDK 预览版或实验性接口的应用确实需要在本周期内完成迁移工作,包括一项开关层级的变更和一组被移除的令牌集;每一步均记录在工程配套的更新日志中。重力补偿重置返回的值与 3.5.5 中不同。 没有任何字段、路由或响应结构发生变化,但依赖重置将 scaling_factor 写为 1 的应用,现在会得到出厂默认值 0——补偿功能本身无论如何都保持启用。请显式设置该值,而不要依赖重置;参见上文的修复说明。回位重置后现在保持回位功能开启,而非关闭。 没有任何字段、路由或响应结构发生变化,但依赖重置来禁用回位功能的应用,现在会发现该功能已被开启。如需关闭,请在重置后显式将其设为关闭;参见上文的修复说明。客户端将收到额外的配置事件。 原本假定 session-updated 事件只会因其自身写入而到达的应用,现在当另一个客户端更改两者共同持有的设备时,也会收到该事件,随后还会收到一次完整的配置渲染。这是上述扇出机制的预期结果;仅在事件到达后重新读取的客户端无需做任何更改。