亮点 {#highlights}
设备范围的配置写入操作现在会同步到所有拥有该设备的客户端会话,而不仅仅是发起写入操作的那个会话。第二个查看端不再进行轮询,而是通过自身的 会话已更新 事件刷新——每个持有该设备的会话恰好收到一个事件,写入方绝不会收到两个。
现在可以将设备的实际安装位置上报给客户端,而不再总是上报会话中配置的安装方式。用于标明当前显示的是哪种安装位置的标签,现在仅凭设计即可确保其准确性,且适用于所有输出格式。
当设备自行维护安装参考值时,服务器会跟上其变化。此前,服务器返回的是设备启动时捕获的值,此后从未重新检查过。现在,服务器端可以根据客户端自身的渲染节奏按需刷新该参考值,并在服务器端进行速率限制,以防止高频刷新的客户端占用设备链路带宽,并且仅在安装方向真正发生旋转后才通知变更。
内部改进 {#internal-improvements}
实验性握把偏航漂移自动校正。新增的服务模块为 Wireless VerseGrip 的惯性偏航漂移提供闭环校正:它会将手柄的绝对偏航角与其所连接的已配对Inverse3 或 Minverse 的运动数据进行拟合;一旦满足一系列质量阈值,便会向手柄固件写入一次校正值。该功能默认禁用,仅在启用实验性开关时可用,并配有一个运行时开关,一经切换即可强制所有在线手柄立即关闭该功能——对于会写入设备固件的功能而言,这一点不可或缺。面向所有设备的配置写入现在具有“全有或全无”的特性。在修改任何设备之前,系统会先验证整个选择范围(包括固件能力与设备就绪状态),因此固件版本不一的设备群,不会再因第二台设备出错而停留在半切换状态。握把固件的确认信号现在会根据请求分别进行跟踪。此前,所有请求共用一个结果槽,两个并发请求方可能会互相覆盖对方的应答;同一个模糊值同时代表“被拒绝”和“尚无结果”,这可能导致拒绝被误判为需要重试,从而引发重试风暴。现在每个请求都带有各自的令牌,从未真正发出的请求不会产生任何记录,丢失的响应则会被标记为失败,而不是导致系统死锁。执行此操作的清理程序在没有待处理请求时不会产生任何开销。Inkwell 底座校准不受新握把固件能力检查的影响。将笔放入底座会执行完整的姿态重新校准,这一点对所有已出货的笔均适用,与固件版本无关;该路径被明确豁免于为计算航向校正而引入的能力下限,且豁免条件在调用处明确写明,而非通过推断得出。修复 {#fixes}
重置重力补偿后,现在可以恢复真正的默认值,而不是过度补偿。 尽管名称如此,config/重力补偿 上的 缩放因子 该字段并非乘数:它是设备在自身重量之外额外补偿的末端执行器负载质量(单位为千克)。此前的重置操作字面理解了该名称,将其恢复为“中性”系数。 1——也就是一个虚构的一千克负载——因此重置后设备会将手柄向上推,但这并非新连接设备的正常表现。现在重置将恢复真正的默认值:补偿已启用,且 缩放因子 为 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 版本中的不同。 没有任何字段、路由或响应结构发生变化,但依赖项的重置将 缩放因子 写为 1 该应用现在将恢复为出厂默认值 0——补偿功能本身无论如何都保持启用。请显式设置该值,不要依赖重置;请参阅上文的修复说明。重置后,回位功能现在保持启用状态,而非关闭。没有任何字段、路由或响应结构发生变化,但依赖重置来禁用回位功能的应用程序,现在会发现该功能已被启用。如需关闭,请在重置后显式将其设为关闭;请参阅上文的修复说明。客户端将收到额外的配置事件。 原先的假设 会话已更新 此前仅因自身写入操作而接收到该事件的应用,现在当另一个客户端更改双方共同持有的设备时,也会收到该事件,随后还会收到一次完整的配置渲染。这是上述扇出机制的预期结果;仅在事件到达后重新读取数据的客户端无需进行任何更改。