주요 내용 {#highlights}
장비 범위에 대한 구성 변경 사항은 이제 해당 장비를 보유한 모든 클라이언트 세션에 동기화되며, 더 이상 변경을 시작한 세션에만 국한되지 않습니다.두 번째 뷰어는 더 이상 폴링을 하지 않고, 대신 자체적인 세션 업데이트됨 이벤트 갱신——해당 장치를 보유한 각 세션은 정확히 하나의 이벤트만 수신하며, 작성자는 절대로 두 개의 이벤트를 수신하지 않습니다.
이제 기기의 실제 설치 위치를 클라이언트에 보고할 수 있으며, 더 이상 세션에서 구성된 설치 방식만 보고할 필요가 없습니다.현재 어떤 설치 위치를 표시하고 있는지 나타내는 레이블은, 이제 설계상 정확성이 보장되며 모든 출력 형식에 적용됩니다.
장치가 자체적으로 유지 관리 및 설치 기준값을 업데이트할 때, 서버 측도 그 변화에 맞춰 업데이트됩니다. 이전에는 서버 측에서 장치 시작 시 캡처된 값을 반환했을 뿐, 그 이후로는 다시 확인한 적이 없었습니다.이제 서버 측에서는 클라이언트 측의 렌더링 속도에 맞춰 필요에 따라 해당 참조값을 갱신할 수 있으며, 서버 측에서 속도 제한을 적용하여 고주파수 갱신을 수행하는 클라이언트가 기기 통신 회선을 모두 차지하지 못하도록 방지하고, 설치 방향에 실제 회전이 발생한 경우에만 변경 사항을 알립니다.
내부 개선 사항 {#internal-improvements}
실험용 그립의 요각 드리프트 자동 보정. 새로 추가된 서비스 모듈은 Wireless VerseGrip의 관성 요각 드리프트에 대해 폐루프 보정을 제공합니다. 이 모듈은 그립의 절대 요각과, 그립에 연결된 페어링된 Inverse3 또는 Minverse의 움직임을 매칭시킵니다. 일련의 품질 임계값이 모두 충족되면, 그립 펌웨어에 보정값을 한 번 기록합니다. 이 기능은기본적으로 비활성화되어 있으며, 실험용 활성화 스위치가 켜져 있을 때만 사용할 수 있습니다. 또한 런타임 스위치가 포함되어 있어,이 스위치를 전환하면 온라인 상태인 모든 그립에서 해당 기능을 즉시 비활성화할 수 있습니다. 이는 장치 펌웨어에 값을 기록하는 기능의 경우 필수적인 조치입니다.모든 장치에 대한 구성 쓰기 작업은 이제 ‘전부 적용’ 또는 ‘전부 적용하지 않음’ 방식으로만 수행됩니다. 어떤 장치든 수정하기 전에 시스템은 먼저 전체 선택 범위(펌웨어 지원 기능 및 장치 준비 상태 포함)를 검증하므로, 펌웨어 버전이 서로 다른 장치 그룹의 경우 두 번째 장치에서 오류가 발생하더라도 더 이상 전환이 중단된 상태로 머물지 않습니다.핸들 펌웨어의 확인 신호는 이제 요청별로 개별적으로 추적됩니다. 이전에는 모든 요청이 하나의 결과 슬롯을 공유했기 때문에, 두 개의 동시 요청자가 서로의 응답을 덮어쓸 가능성이 있었습니다. 또한 동일한 모호한 값이 “거절됨”과 “결과 없음”을 동시에 나타내기도 했기 때문에,이로 인해 거절이 재시도가 필요한 상황으로 오판되어 재시도 폭풍을 유발할 수 있었습니다. 이제 각 요청에는 고유한 토큰이 부여되며, 실제로 전송되지 않은 요청은 어떤 기록도 남기지 않고, 누락된 응답은 시스템이 멈춰버리는 대신 실패로 표시됩니다. 이를 처리하는 정리 프로그램은 처리 대기 중인 요청이 없을 때 어떠한 오버헤드도 발생시키지 않습니다.Inkwell 거치대의 보정 기능은 새로운 그립 펌웨어의 성능 검사 항목의 영향을 받지 않습니다. 펜을 거치대에 놓으면 전체 자세 재보정이 수행되며, 이는 펌웨어 버전과 관계없이 출하된 모든 펜에서 정상적으로 작동합니다. 이 프로세스는 계산에 기반한 방위 보정을 위해 도입된 성능 하한선에서 명시적으로 제외되며, 해당 제외 조건은 추론에 의한 것이 아니라 호출 지점에 직접 명시되어 있습니다.수정 사항 {#fixes}
중력 보정 재설정 시 이제 과도한 보정이 아닌 진정한 기본값으로 복원됩니다. 이름과는 달리,config/중력 보정 위의 스케일링 계수 이 필드는 승수가 아닙니다. 이는 장비가 자체 중량 외에 추가로 보상하는 종단 액추에이터 하중 질량(단위: 킬로그램)을 나타냅니다. 이전의 재설정에서는 이 명칭을 문자 그대로 해석하여 이를 “중립” 계수로 복원했습니다. 1——즉, 가상의 1kg 하중을 의미합니다——따라서 재설정 후 기기는 조이스틱을 위쪽으로 밀어 올리게 되는데, 이는 새로 연결된 기기의 정상적인 동작이 아닙니다. 이제 재설정을 통해 진정한 기본값이 복원됩니다: 보정이 활성화되어 있으며, 스케일링 계수 ~을 위해 0,이는 장치가 자체 중량만 지탱하며 어떠한 하중도 가정하지 않음을 의미합니다. 이전에 리셋을 통해 보정 강도를 높여왔던 경우, 필요한 값을 명시적으로 설정하도록 변경하십시오.재설정 및 초기화 기능이 이제 실제로 다시 활성화됩니다. 이에 앞서, ~에 대해 config/home_return 재설정 시 리셋 기능이 비활성화되지만, 호출 측에는 해당 기능이 활성화된 것으로 전달됩니다. 이제 재설정을 통해 공장 출하 시 기본값(활성화)으로 완전히 복원되며, 이후 애플리케이션이 다시 읽어오는 값은 기기가 실제로 사용하는 값이 됩니다.장치 범위의 설치 방식이나 방향에 대한 쓰기 작업이 더 이상 다른 클라이언트의 데이터를 오래된 상태로 만들지 않습니다. 3.5.6 이전 버전에서는 장치 자체(해당 장치를 보유한 모든 세션이 공유)에 대한 쓰기 작업이 수행될 때, 해당 쓰기 작업을 시작한 클라이언트의 구성만 새로 고쳐졌으며, 장치 범위의 경로에 대해서는 누구의 구성도 새로 고쳐지지 않았습니다. 동일한 장치에 있는 다른 클라이언트는 직접 폴링을 수행할 때까지 계속해서 이전 값을 표시했습니다. 이제 해당 장치를 보유한 모든 세션이 알림을 받게 됩니다.Inkwell 받침대의 반복 도킹 시도는 한 번 거부된 후 더 이상 중단되지 않습니다. 이전 도킹 상태는 여러 번의 도킹 시도 사이에 유지되므로, 두 번째 도킹 시도는 첫 번째 거부 시점을 재시도 기간의 종료 시점으로 간주합니다. 이제 매번 도킹 시도가 있을 때마다 재시도 기간이 초기화됩니다.Wireless VerseGrip 장치의 틱 주기에서 발생하던 데이터 경합 문제를 수정했습니다. 연결 스레드에서 장치 식별자가 재할당되는 동안, 특정 임시 경로에서 다른 잠금을 사용하여 해당 식별자를 읽는 경우가 발생할 수 있었습니다. 이제 해당 식별자는 올바른 잠금 보호 하에 한 번만 일관되게 스냅샷이 생성되며, 하위 경로(거부 상황 포함)는 모두 이 복사본을 기반으로 처리됩니다.4개의 Wireless VerseGrip 송신기에서 메시지 임시 저장소가 동기화되지 않는 문제를 수정했습니다. 이 4개의 발신 메시지 경로는 페이로드를 조립하고 체크섬을 계산한 후 전송을 요청할 때 쓰기 잠금을 획득하지 않았기 때문에, 두 송신기 간에 공유 버퍼에서 충돌이 발생할 수 있었습니다.잠재적인 호환성 문제 {#potential-breaking-changes}
API, 통신 프로토콜 또는 설정에는 어떠한 변경도 없습니다. 기본 출력은 3.5.5 버전과 바이트 단위로 일치하며, 어떤 라우팅 경로도 삭제되거나 변경되지 않았고, 공통 C API에도 차이가 없으며, 설정 키의 이름이 변경되거나 삭제되거나 새로운 기본값이 부여된 것도 없습니다. SDK 프리뷰 또는 실험적 인터페이스를 활성화한 애플리케이션은이번 주기 내에 마이그레이션 작업을완료해야 합니다.여기에는 스위치 레벨의 변경 사항 하나와 제거된 토큰 세트가 포함되며, 각 단계는 해당 프로젝트의 업데이트 로그에 기록되어 있습니다.중력 보정 재설정 시 반환되는 값이 3.5.5 버전과 다릅니다. 어떤 필드, 라우팅 또는 응답 구조도 변경되지 않았지만, 의존성 재설정으로 인해 스케일링 계수 ~로 쓰다 1 해당 기능을 사용하면 이제 공장 출하 시 기본값이 적용됩니다. 0——보상 기능은 어떤 경우에도 항상 활성화된 상태로 유지됩니다. 재설정에 의존하지 말고 이 값을 명시적으로 설정하십시오. 상단의 수정 지침을 참조하십시오.초기화 후 이제 초기화 기능이 비활성화 상태가 아닌 활성화된 상태로 유지됩니다. 어떤 필드, 라우팅 또는 응답 구조도 변경되지 않았지만, 초기화를 통해 초기화 기능을비활성화하도록 설계된애플리케이션의 경우 이제 해당 기능이 활성화된 것을 확인할 수 있습니다. 이 기능을 비활성화하려면 초기화 후 명시적으로 비활성화 설정으로 변경해야 합니다. 자세한 내용은 위의 수정 사항을 참조하십시오.클라이언트는 추가적인 구성 이벤트를 수신하게 됩니다. 원래는 다음과 같이 가정했었다 세션 업데이트됨 이전에 해당 이벤트가 기록된 경우에만 해당 이벤트가 전달되던 애플리케이션은, 이제 다른 클라이언트가 양쪽이 공유하는 장치를 변경할 때도 해당 이벤트를 수신하게 되며, 그 후 전체 구성 렌더링도 한 번 더 수신하게 됩니다. 이는 앞서 언급한 팬아웃 메커니즘의 예상된 결과이며, 이벤트가 도착한 후에만 다시 읽는 클라이언트는 어떠한 변경도 할 필요가 없습니다.