Repository navigation
Add per-player DSU phone motion and Mac calibration UI - #2429
victorwads wants to merge 10 commits into
Conversation
Front-ends: NXMotion exposes shared controller management and calibrated per-user DSU settings for generated games and Mac launchers. See LNPANDY/NX2Apple#1206.
|
Companion launcher PR: LNPANDY/NX2Apple#1207. Proposal: LNPANDY/NX2Apple#1206. Launcher required hooks passed under Python 3.14. Remaining review evidence is tracked in the companion draft. |
|
Latest fix: 6b24be4. Runtime used CLOCK_MONOTONIC while HID freshness uses mach_absolute_time. On the reported Mac their epochs differed by 6.675 seconds, so fresh DSU packets exceeded the 300ms acceptance window. Receiver now uses now_ns(). Offset-clock UDP regression passes, as do 3 shared Swift tests. Also keep the shared connection alive when Setup closes, persist auto-detected slot, add Done and saved-state text, and display per-player connection/XYZ rows. Xbox buttons and DSU motion target the same player independently. Corrected Mario Kart dmhost built and installed with backup. Real steering validation is pending user retest. Companion PR: LNPANDY/NX2Apple#1207. |
|
Resolved conflicts against upstream ce38664 in merge commit 14121ba without force-pushing. Preserved upstream motion history/rest calibration and per-Joy-Con source selection, adapting DSU priority to pointer-based streams. Local results: HID 467 checks passed, motion 229 passed, Switch 2 122 passed under sanitizers, DSU wire and UDP replay/clock tests passed. Frontend bridge refresh is being handled separately because its pin changed. Additional in-game diagnostics/buttons work remains local and is not included in this merge-only update. |
|
Updated to e887a11: opt-in per-phone buttons/sticks, default sensors-only, separate atomic input source merged with physical buttons, stale input expiry at 300ms, inline saved-phone switch and receiver snapshot API. Regressions pass: 469 HID checks (including Xbox+phone merge and stale phone release), protocol button/stick decoding, real UDP replay/clock checks and 3 shared Swift persistence tests. Fork-specific Button Mapping UI/direct JSON host loader is installed locally and being refreshed for the updated frontend pin. Hardware/gameplay behavior is still under user testing. No success claim based solely on launcher preview. |
|
Shared Swift UI updated with explicit full/left/right, horizontal button preview, saved SL/SR source selections and corrected rail environment serialization. Eight Swift tests pass including all wire buttons, per-half rail combinations and JSON roundtrip. Full fork host role/mapping implementation is carried in companion #1207 patches 0138–0147 and is still being adapted for upstream host layout; do not interpret this shared UI update as complete upstream native-role support. Installed game-side fixes retain native half reports and transform full-pad fallback only. Real wheel gameplay remains unconfirmed. |
|
Companion installation evidence updated at LNPANDY/NX2Apple#1207. Actual installed shared Swift package tests pass from signed app using external scratch directory. Fork host carries explicit roles, shared JSON reload, per-source rail mapping and SDK consumption diagnostics. Upstream native-role integration remains incomplete and must be reconciled rather than copying fork-specific host layout wholesale. Wheel gameplay is not claimed validated. |
Adds optional DSU phone motion without replacing physical controller buttons.
Generated Mac games and NX2Apple share a native device/calibration window and per-user configuration.
Proposal and companion launcher work: LNPANDY/NX2Apple#1206
Checked
Remaining before review
Draft: coordinated packaging, screenshots, real phone-to-guest validation and complete regression review remain in progress.
Full lint includes an unrelated nested checkout and existing baseline findings. It is not claimed clean.
The UI is macOS 14+, and uses a versioned per-user contract without embedding LAN endpoints in distributed bundles.
Design
DSU v1001 UDP subscription renews every second. Validate lengths, CRC, finite sensor values, sequence and sample timestamps. Signed gyro axes are converted separately from polar acceleration. Motion is separate from buttons and per-Joy-Con physical sources. The native game window includes discovery, per-player records and guided calibration without a standalone helper app. Calibration determines axes/signs and bias, not absolute heading. Device-specific semantics still need hardware review.