Conversation
xmsama
force-pushed
the
pr/yiciyuan-runtime
branch
from
September 24, 2026 22:08
3806b8f to
f50d48a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the Yiciyuan protocol/runtime-mode scope approved in #954, extending #917 and the FJB-03 findings in #888.
Depends on #955. This branch contains its prerequisite commit followed by a separate Yiciyuan commit. The prerequisite remains in the aggregate diff until #955 is merged.
Protocol changes
Oscillateoutput and battery input. Stroke and rotation are mechanically coupled; device-info responses report motor A only.Constrict), and C controls independent vibration.1..20in one direction or21..40in the opposite direction; reserve0for stop. Do not map unsigned intensity continuously across both direction ranges.35 11 04 N checksum, exposing seven fixed modes. Reapply active C after A/B writes, and keep the two packet families distinct during coalescing.message_gap_msin the configuration schema and regenerate the bundled device configuration.Host-side rotation modes
Forward,Reverse, andAlternatesettings without changing the unsigned client-facingOscillatecommand.The Rust settings API is submitted for design review. It does not alter advertised device features, add a wire-protocol command, reload device definitions, or simulate reconnection. Central UI, persistence, and engine-time configuration reload are excluded, consistent with the feedback in intiface/intiface-central#287.
Hardware validation
Tested on physical YCY-FJB-02 and YCY-FJB-03:
Independent vibration activation was verified, not every fixed mode. The latest runtime-switching implementation has software coverage but has not been hardware-verified. FJB-02 connection stability improved after connecting the motherboard's external antenna; that improvement is not attributed solely to software.
Automated validation
Windows, Rust 1.96.0:
cargo test -p buttplug_server --lib: 67 passed.cargo test -p buttplug_tests --test test_device_protocols: 871 passed.Suite totals include initialization ordering/error/timeout tests, packet/checksum tests, stop ordering, mode transitions, and legacy/current client protocol fixtures. Non-Windows builds and physical stop delivery after link loss are not verified.
Virtual Linear, Linear observation routing, YS-TD models, and Windows Bluetooth connection-retry changes are excluded.