主な内容 {#highlights}
「デバイス範囲の設定」の書き込み操作は、そのデバイスを所有するすべてのクライアントセッションに反映されるようになりました。 これは、書き込みを行ったセッションにのみ反映される方式ではありません。2人目の閲覧者は、ポーリングを行う代わりに、独自の セッション更新済み イベントを受信すると、ページが更新されます。デバイスを保持している各セッションにつき、イベントは正確に1回発生し、書き込みを行ったクライアントでは2回発生することはありません。これで、デバイスの実際のマウント位置をクライアントに通知できるようになりました。これは、サービスが常にセッションで設定されたマウントのみを通知していた従来の方式に代わるものです。どちらの値を通知しているかを示すラベルは、すべての出力形式において構造的に正確になりました。デバイスが独自のマウント基準値を維持する場合、サービスもそれに従います。以前は、サービスはデバイスの起動時に取得した値をそのまま提供し、再確認は行っていませんでした。現在は、クライアントのレンダリングサイクルに合わせて、リクエスト時に基準値を更新できるようになりました。高速なクライアントによってデバイスリンクに過負荷がかからないよう、サービス側で速度を制限し、マウントが実際に回転した後に変更内容を1回通知します。内部の改善点 {#internal-improvements}
実験的なグリップのヨー(yaw)ドリフトの自動補正。新しいサービスモジュールが、Wireless VerseGripの慣性ヨードリフトに対する補正ループを閉じます。グリップの絶対ヨー値を、グリップが取り付けられたペアリング済みのInverse3 またはMinverseの動きに合わせて調整し、一連の品質ゲートがすべて満たされた場合、単一の補正値をグリップのファームウェアに書き込みます。 この機能はデフォルトで無効な状態で提供され、実験的なオプトインスイッチをオンにした場合にのみ利用可能です。また、ランタイムスイッチが含まれており、切り替えの瞬間にアクティブな状態にあるすべてのグリップの補正を強制的に無効にします。これはデバイスファームウェアへの書き込みを行う機能であるため、このスイッチは必須です。すべてのデバイスを対象とした設定の書き込みは、これ以降、すべて適用されるか、まったく適用されないかのいずれかとなります。デバイスを変更する前に、選択されたすべての項目について、ファームウェアの機能とデバイスの準備状況が検証されます。そのため、ファームウェアが混在するデバイス群において、2台目のデバイスでエラーが発生し、半分だけ切り替えられた状態になってしまうようなことは、もはやありません。グリップのファームウェア確認応答は、リクエストごとに追跡されるようになりました。以前は、共有の結果スロットが1つしかなかったため、2人の同時リクエスト者が互いの応答を見失う可能性があり、曖昧な1つの値が「拒否」と「まだ応答なし」の両方を同時に意味していました。 その結果、拒否が再試行の急増につながる可能性がありました。現在は各リクエストに一意のトークンが割り当てられ、実際に送信されていないリクエストは登録されません。応答が失われた場合、処理を停止するのではなく、失敗として処理されます。これを実行するスイープ(sweep)は、待機中のリクエストがない場合、コストは発生しません。Inkwellのドックキャリブレーションは、新しいグリップファームウェア機能の検査の影響を受けません。ペンをドックに装着すると、ポーズ全体の再キャリブレーションが実行されますが、これはファームウェアのバージョンに関係なく、出荷されたすべてのペンにおいて正常な動作です。この処理は、計算された方向補正のために導入された最小機能要件から明示的に除外されており、その除外事項は推測に委ねられることなく、呼び出し箇所に明記されています。修正内容 {#fixes}
重力報酬のリセット時、過剰な報酬ではなく、実際のデフォルト値に復元されるようになりました。 その名前とは裏腹に config/重力補正の スケーリング係数 このフィールドは乗数ではありません。このフィールドは、デバイスが自身の重量に加えて支えるエンドエフェクタのペイロード質量(キログラム単位)です。リセットでは、この名前をそのまま採用し、「中立」係数である 1に復元しました。これは、1キログラムの仮想ペイロードを設定したのと同じであり、リセット後、デバイスはハンドルを上に押し上げる状態になりました。新しく接続されたデバイスは、そのようには動作しません。これで、リセット時に実際のデフォルト値が適用されるようになりました。報酬が有効になり、 スケーリング係数は 0に設定されており、デバイスが自身の重量のみを担い、ペイロードがないものと仮定しています。アプリケーションがリセット機能を利用して補償強度を高めていた場合は、希望する値を明示的に設定してください。「ホーム復帰(home return)」のリセット機能が、いよいよ実際に再び有効になります。 config/home_returnのリセットは、呼び出し元に有効になったことを通知しつつ、実際にはホーム画面への復帰を無効にしていました。これに伴い、リセット時に工場出荷時のデフォルト設定(オン)が実際に復元されるようになり、その後アプリケーションが読み取る値は、デバイスが実際に使用している値と一致するようになりました。デバイス範囲のマウントまたは方向の書き込み後、他のクライアントに古い値が残ることはありません。3.5.6 以前では、デバイス自体に対して行われた書き込み(そのデバイスを保持するすべてのセッションで共有)は、書き込みを行ったクライアントの設定のみを更新し、デバイスのグローバルルートについてはどのクライアントも更新されませんでした。 同じデバイスを使用している他のクライアントは、ポーリングを行うまで以前の値を表示し続けていました。現在では、そのデバイスを保持しているすべてのセッションに通知が送信されます。Inkwellのドッキングを試行する際、1回の拒否で諦めることはありません。以前のドッキングの状態がドッキング間で保持されるため、2回目のドッキングでは1回目の拒否が再試行期間の終了とみなされていました。これに対し、現在は再試行期間がドッキングの試行ごとにリセットされるようになりました。Wireless VerseGrip デバイス「Tick」のデータレースを修正しました。ステージングパスが別のロックから読み取られている間に、接続スレッドがデバイス識別子を再割り当てできていました。これによって、識別子は正しいロックの下で一度スナップショットとして保存されるようになり、その下のすべてのパス(拒否処理を含む)がこのコピーに基づいて動作するようになりました。Wireless VerseGripの4つの送信元において、メッセージのステージングが同期されていなかった問題を修正しました。4つの送信メッセージ経路が、ペイロードとチェックサムを組み立てた後、書き込みロックを取得せずに送信を要求していたため、2つの送信元が共有バッファ内のデータを混在させてしまう可能性がありました。互換性を損なう可能性のある変更点 {#potential-breaking-changes}
API、ワイヤーフォーマット、設定の変更はありません。デフォルトの出力はバージョン3.5.5と同様にバイト単位であり、削除されたりパスが変更されたルートはなく、公開C APIにも違いはありません。また、設定キーの名前が変更されたり、削除されたり、新しいデフォルト値が割り当てられたりすることもありません。ただし、SDKのプレビューまたは実験的機能にオプトインしているアプリケーションについては、今回のサイクルで移行作業が必要となります。 これにはスイッチのクラス変更や削除されたトークンセットが含まれており、すべての変更はエンジニアリング向け変更ログに文書化されています。重力補正のリセット値が、バージョン3.5.5とは異なる値を返します。 フィールド、ルート、応答形式に変更はありませんが、リセットが スケーリング係数を 1に記録することに依存していたアプリケーションは、現在では工場出荷時のデフォルト値である 0を受け取ることになります。いずれの場合も、補償自体は引き続き有効な状態です。リセットに依存せず、値を明示的に設定してください。上記の修正内容を参照してください。「ホーム復帰」をリセットすると、ホーム復帰はオフにならず、オンの状態が維持されます。フィールド、ルート、応答形式に変更はありませんが、リセットを利用してホーム復帰を無効にしていたアプリケーションでは、ホーム復帰が有効になっている状態が表示されます。オフの状態が必要な場合は、リセット後に明示的にオフにしてください。上記の修正事項を参照してください。クライアントは、追加の設定イベントを受信します。 セッション更新済み 以前は、イベントが自身の書き込みによってのみ発生すると想定していたアプリケーションですが、現在では、他のクライアントが連携しているデバイスを変更した際にもイベントを受信し、その後、設定全体のレンダリングが行われます。これは、前述したファンアウトの意図された結果です。イベントを受信した後、単に再読み込みを行うだけのクライアントについては、変更する必要はありません。