ハイライト {#highlights}
デバイススコープの設定の書き込みは、書き込みを行ったセッションだけでなく、そのデバイスを保持しているすべてのクライアントセッションに反映されるようになりました。2つ目のビューアは、ポーリングを行う代わりに自身の セッション更新済み イベントを受けて更新されます。保持されているセッションごとに正確に1回のイベントが送信され、書き込みを行ったクライアントに対して2回送信されることはありません。
デバイスの物理的なマウント配置を、クライアントに報告できるようになりました。以前は、サービスは常にセッションで設定されたマウントを報告していました。どちらの値を参照しているかを示すラベルは、あらゆる出力形式において、構造的に常に正確に表示されるようになりました。デバイスが独自のマウント基準を保持している場合、サービスがその変化に対応できるようになりました。以前のサービスでは、デバイスの起動時に取得した値をそのまま返し、その後は再確認を行っていませんでした。現在は、クライアント自身の描画間隔に合わせて、要求に応じてこの基準を更新できます。サービス側でレート制限がかけられているため、描画頻度の高いクライアントによってデバイスとの接続に過負荷がかかることはありません。マウントが実際に回転した時点で、変更を1回通知します。内部の改善 {#internal-improvements}
実験的なグリップのヨー角ドリフト自動補正。新しいサービスモジュールが、ワイヤレスVerseGripの慣性によるヨー角ドリフトを閉ループで補正します。グリップの絶対ヨー角を、取り付けられているペアリング済みのInverse3またはMinverseの動きに合わせて調整し、一連の品質ゲートがすべて満たされると、1回分の補正値をグリップのファームウェアに書き込みます。この機能は初期状態では無効になっており、実験的なオプトインスイッチをオンにした場合にのみ利用できます。さらに、スイッチを切り替えた瞬間に、稼働中のすべてのグリップの補正を強制的にオフに戻す実行時スイッチも備えています。デバイスのファームウェアに書き込む機能であるため、この手順は省略できません。すべてのデバイスを対象とする設定書き込みは、すべてか全くないかの処理となりました。変更対象となるデバイスが1台もない段階で、ファームウェアの対応状況やデバイスの準備状態を含め、選択されたすべての項目が検証されます。そのため、ファームウェアが混在するデバイス群において、2台目のデバイスでエラーが発生した場合でも、半分だけ切り替わった状態で処理が停止してしまうことはなくなりました。グリップのファームウェアからの応答確認を、リクエストごとに追跡するようになりました。共有される結果スロットが1つしかなかったため、同時に2つのリクエストを送信すると、互いの応答を混同してしまうことがありました。また、1つの曖昧な値が「拒否」と「未応答」の両方を表していたため、拒否が再試行の連鎖を引き起こす恐れがありました。現在は、各リクエストが独自のトークンを持っており、送信に至らなかったリクエストは一切登録されません。応答が失われた場合、処理が停止したままになるのではなく、失敗として確定します。このスイープ処理は、未処理のリクエストがない間は負荷をかけません。インクウェルドックのキャリブレーションは、新しいグリップのファームウェア機能チェックの影響を受けません。ペンをドックに置くと、完全なポーズの再キャリブレーションが行われます。これは、ファームウェアのバージョンに関係なく、出荷されているすべてのペンにおいて正しい動作です。この処理は、計算による方位補正のために導入された機能要件の最低基準から明示的に除外されており、その除外理由は推測ではなく、呼び出し箇所に明記されています。修正 {#fixes}
重力補正のリセットにより、過補正になることなく、正しいデフォルト値に戻るようになりました。その名前とは裏腹に、config/重力補正 の スケーリング係数 フィールドは乗数ではありません。これは、デバイス自体の重量に加えて補正される、エンドエフェクタの追加ペイロード質量(キログラム単位)です。以前のリセットでは、その名称を文字通り受け止め、「中立」の係数として扱われていました。 1 に戻していました。これは架空の1キログラムのペイロードに相当するため、リセット後はデバイスがハンドルを押し上げ続けたままでした。これは、接続直後のデバイスの動作とは異なります。現在のリセットでは、実際のデフォルト値に戻ります。つまり、補正は有効であり、スケーリング係数 は 0 に設定されます。デバイスは自重のみを支え、ペイロードがないものとして動作します。アプリケーションがリセットを使用して補償強度を高めていた場合は、代わりに必要な値を明示的に設定してください。
ホームリターンのリセットにより、ホームリターンが実際に再び有効になるようになりました。 config/home_return リセットを行うと、ホームリターンが無効になっているにもかかわらず、呼び出し元に対して有効であると伝えてしまう状態になっていました。現在は、リセットによって実際に工場出荷時のデフォルト値(有効)に戻り、その後アプリケーションが読み取る値は、デバイスが実際に使用している値と一致するようになりました。デバイススコープへのマウントや向きの書き込み後、他のクライアントの表示が古いままになることはなくなりました。バージョン3.5.6以前では、デバイス自体に対する書き込み(そのデバイスを保持するすべてのセッションで共有される)の場合、書き込みを行ったクライアントの設定のみが更新され、デバイス全体のルートはどのクライアントの設定も更新しませんでした。同じデバイスを使用する他のクライアントは、ポーリングを行うまで古い値を表示し続けていました。現在は、そのデバイスを保持しているすべてのセッションに通知されるようになりました。インクウェルドックの再試行において、1回の拒否で諦めてしまうことはなくなりました。前回のドックの状態が後続のドックまで引き継がれていたため、2回目のドックでは最初の拒否を再試行期間の終了とみなしていました。再試行期間は、ドックの試行ごとにリセットされるようになりました。Wireless VerseGrip デバイスにおけるティック処理のデータ競合を修正しました。デバイスの識別子が接続スレッドによって再割り当てされることがあり、その最中にステージング処理が別のロックの下でそれを読み取ってしまうことがありました。現在は、正しいロックの下で識別子が一度だけスナップショットされ、以下のすべてのパス(拒否されたものを含む)はそのコピーに基づいて動作します。4つのWireless VerseGrip送信元における、同期されていないメッセージのステージングに関する問題を修正しました。4つの送信メッセージ経路は、ペイロードとチェックサムを組み立てて送信を要求していましたが、書き込みロックを取得していませんでした。そのため、2つの送信元が共有バッファ上で処理が競合してしまうことがありました。潜在的な互換性破りの変更 {#potential-breaking-changes}
API、ワイヤ、設定の変更はありません。デフォルトの出力は 3.5.5 と同一(バイト単位)であり、どのルートも削除または再ルーティングされておらず、公開されている C API にも変更はなく、設定キーの名称変更、削除、新しいデフォルト値の設定もありません。SDK のプレビューまたは実験的な機能にオプトインしているアプリケーションについては、今回のサイクルでの移行作業が必要です。これには、スイッチ階層の変更や、削除されたトークンセットが含まれます。各手順については、エンジニアリング向けの補足変更履歴に記載されています。重力補正のリセットは、バージョン 3.5.5 とは異なる値を返すようになりました。 フィールド、ルート、レスポンスの形状に変更はありませんが、リセットによって スケーリング係数 が 1 書き込みが行われることを前提としていたアプリケーションは、代わりに工場出荷時のデフォルト値 0 を受け取ります。いずれの場合も、補償自体は有効なままです。リセットに依存せず、値を明示的に設定してください。上記の修正を参照してください。ホームリターンをリセットした後は、ホームリターンがオフではなくオンのままになります。フィールド、ルート、レスポンスの形状に変更はありませんが、リセットによってホームリターンが無効になることを前提としていたアプリケーションでは、代わりに有効な状態になります。リセット後に無効にしたい場合は、明示的にオフに設定してください。上記の修正を参照してください。クライアントには、追加の設定イベントが届くようになります。 セッション更新済み 当初、イベントは自身の書き込みによってのみ送信されると想定されていたアプリケーションは、同じデバイスを両者が保有している別のクライアントが変更を行った場合にも、そのイベントを受信するようになります。その後、設定全体の再描画も行われます。これは、前述のファンアウトによる意図された結果です。イベントを受信して再読み込みを行うだけのクライアントについては、変更の必要はありません。