feat(devices): add Yiciyuan YCY-FJB-01 / FJB-02 stroker support#901
Open
SanJerry007 wants to merge 1 commit into
Open
feat(devices): add Yiciyuan YCY-FJB-01 / FJB-02 stroker support#901SanJerry007 wants to merge 1 commit into
SanJerry007 wants to merge 1 commit into
Conversation
The Yiciyuan FJB-01 / FJB-02 (役次元) are JieLi-SoC BLE strokers advertising as "YCY-FJB-01" and "YCY-FJB-02" with three independent actuators: - stroke axis (linear oscillation) - vibe axis (vibration motor) - axis_c (third haptic motor driven in app-recorded patterns) Each axis takes an unsigned 0..=0x14 level; the 16-byte control packet is sent to characteristic ff41 under service ff40 as: [0x35, 0x12, stroke, vibe, axis_c, 0×11] Battery push arrives on the same notify characteristic as a `35 13 01 <pct>` frame mixed with 10Hz uptime ticks (`35 14 ..`); the handler filters by prefix. FJB-01 is verified against physical hardware. FJB-02 is its successor in the same product line; the official app routes both through an identical code path (same vuex state, same hex-stringed motor frame, same BLE service/characteristic UUIDs), so the same protocol module covers it. Hardware verification welcome. Adds: * device-config-v4/protocols/yiciyuan.yml * server/.../protocol_impl/yiciyuan.rs * tests/.../test_yiciyuan_protocol.yaml (FJB-01) * tests/.../test_yiciyuan_protocol_fjb02.yaml (FJB-02) Test commands gated on protocol v3+ since v0-v2 single-axis Vibrate semantics don't map cleanly to a multi-actuator device. All 828 device protocol tests pass on debug build.
|
|
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.
Closes #887.
Adds device support for the Yiciyuan (役次元) YCY-FJB-01 stroker (and its identical-protocol sibline FJB-02), built on a JieLi SoC. Protocol was reverse-engineered independently and verified against hardware reporting firmware
02 07 07. This addresses the vendor left unsupported when #688 was closed for inactivity, answering each of that reviewer's open questions (oscillate vs vibrate, product link, full test coverage).Device
Protocol (GATT
0xFF40, write0xFF41, notify0xFF42)16-byte control frame:
35 12 <stroke> <vibe> <axis_c> 00.., each axis0..=0x14. Battery arrives unprompted on notify as35 13 01 <pct>;35 14 ..uptime ticks are prefix-filtered.Buttplug v4 mapping
Oscillate(stroke) +Vibrate×2 +Input::Battery (Read)— same shape as Galaku G317 / TFF1, so the data model is already proven in tree.Changes
device-config/protocols/yiciyuan.yml+ regeneratedbuttplug-device-config-v5.json(version5.6)protocol_impl/yiciyuan.rs— atomic per-axis state, single 16-byte frame per call, prefix-filtered battery readVerification
master; config regenerated against the v5 schemacargo buildclean (no new warnings)cargo test -p buttplug_tests --test test_device_protocols→ 828 passed, 0 failedOut of scope / follow-up (see #888)
FJB-03 (different packet + checksum), YS-TD family, pumps, lock, and e-stim variants are documented in #888 and deferred to separate PRs.