ハイライト {#highlights}
デバイススコープの設定書き込みは、書き込みを行ったセッションだけでなく、そのデバイスを保持しているすべてのクライアントセッションに反映されるようになりました。2つ目のビューアーは、ポーリングする代わりに自身の session-updated イベントを受けて更新されます。保持しているセッションごとに正確に1回のイベントが送られ、書き込みを行ったクライアントに対して2回送られることはありません。
デバイスの物理的なマウント配置を、クライアントに報告できるようになりました。 以前は、サービスが常にセッションで設定されたマウントを報告していました。どちらの値を見ているかを示すラベルは、あらゆる出力形式において、構造的に常に正確な表示になりました。デバイスが独自のマウント基準を保持している場合、サービスがその変化に追従するようになりました。 以前のサービスは、デバイスの起動時に取得した値をそのまま返し、その後は再確認していませんでした。現在は、クライアント自身の描画の間隔に合わせて、要求に応じてこの基準を更新できます。サービス側でレート制限をかけているため、描画頻度の高いクライアントがデバイスとの接続を過負荷にすることはありません。マウントが実際に回転した時点で、変更を1回通知します。内部の改善 {#internal-improvements}
実験的なグリップのヨー角ドリフト自動補正。 新しいサービスモジュールが、ワイヤレスVerseGripの慣性によるヨー角ドリフトを閉ループで補正します。グリップの絶対ヨー角を、取り付けられているペアリング済みのInverse3またはMinverseの動きに合わせてフィッティングし、一連の品質ゲートがすべて満たされると、1回分の補正値をグリップのファームウェアに書き込みます。この機能は初期状態では無効になっており、実験的なオプトインスイッチをオンにした場合にのみ利用できます。さらに、切り替えた瞬間に稼働中のすべてのグリップを強制的に補正オフへ戻す実行時スイッチも備えています。デバイスのファームウェアに書き込む機能であるため、これは省略できない仕組みです。すべてのデバイスを対象とする設定書き込みは、全か無かの処理になりました。 変更されるデバイスがひとつもないうちに、ファームウェアの対応状況やデバイスの準備状態を含め、選択されたすべてが検証されます。そのため、ファームウェアが混在するフリートで、2台目のデバイスでエラーが起きた際に半分だけ切り替わった状態で止まってしまうことはなくなりました。グリップのファームウェアからの応答確認を、リクエストごとに追跡するようになりました。 共有の結果スロットが1つしかなかったため、同時に2つのリクエストを送ると互いの応答を取り違えることがありました。また、1つのあいまいな値が「拒否」と「未応答」の両方を表していたため、拒否が再試行の嵐につながりかねませんでした。現在は各リクエストが独自のトークンを持ち、送信に至らなかったリクエストは何も登録しません。応答が失われた場合は、処理が止まったままになる代わりに失敗として確定します。このスイープ処理は、未処理のリクエストがない間は負荷がかかりません。インクウェルドックのキャリブレーションは、新しいグリップのファームウェア機能チェックの影響を受けません。 ペンをドックに置くと、完全なポーズの再キャリブレーションが行われます。これは、ファームウェアのバージョンに関係なく、出荷されているすべてのペンで正しい動作です。この経路は、計算による方位補正のために導入された機能要件の最低ラインから明示的に除外されており、その除外の理由は推測ではなく呼び出し箇所に明記されています。修正 {#fixes}
重力補償のリセットが、過補償ではなく正しい既定値に戻るようになりました。名前とは裏腹に、config/gravity_compensation の scaling_factor フィールドは乗数ではありません。これは、デバイス自身の重量に加えて補償する、エンドエフェクタの追加ペイロード質量(キログラム単位)です。以前のリセットは名前を額面どおりに受け取り、「中立」の係数 1 に戻していました。これは架空の1キログラムのペイロードに相当するため、リセット後はデバイスがハンドルを押し上げ続けていました。これは接続直後のデバイスの挙動とは異なります。現在のリセットでは、実際の既定値に戻ります。つまり補償は有効で、scaling_factor は 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 とは異なる値を返すようになりました。 フィールド、ルート、レスポンスの形状は変更されていませんが、リセットによって scaling_factor が 1 に書き込まれることを前提にしていたアプリケーションは、代わりに工場出荷時の既定値 0 を受け取ります。いずれの場合も補償自体は有効なままです。リセットに依存せず、値を明示的に設定してください。上記の修正を参照してください。ホームリターンのリセット後は、ホームリターンがオフではなくオンのままになります。 フィールド、ルート、レスポンスの形状は変更されていませんが、リセットによってホームリターンを無効化することを前提にしていたアプリケーションでは、代わりに有効な状態になります。リセット後に無効にしたい場合は、明示的にオフを設定してください。上記の修正を参照してください。クライアントには、追加の設定イベントが届くようになります。 session-updated イベントは自分の書き込みによってのみ届くと想定していたアプリケーションは、同じデバイスを両方が保持している別のクライアントが変更した場合にも、そのイベントを受け取るようになります。その後、設定全体の再描画も行われます。これは上記のファンアウトによる意図された結果です。イベントを受けて再読み込みするだけのクライアントは、変更不要です。