Wii docs: scope the Windows-pairing limitation to the native wizard
Reword the blanket 'Windows cannot pair a Wii controller' statements in Home, Wii-Controllers, and Devices to scope the limitation to the Windows pairing wizard, which expects a typed PIN. Avoids implying PadForge is the only tool that can pair Wii controllers (reWASD does in-app Wii pairing since v9.4).
8e1f926
3.5.0: technical internals docs + screenshot refresh
Add Wii-Controllers-Internals (pairing ceremony, SDL hidapi_wii read path, rescan recovery, capability gate). Extend Input-Pipeline (mouse cursor source, shift cycle, trigger routing, source kinds + ramp, macro clipboard + cursor actions) and SDL3-Integration (Wii fork fixes, axis capability gating). Refresh all page screenshots against 3.5.0; add the Trigger Routing card shot and link it from Force Feedback and Home.
7d9cb16
3.5.0 docs: add Wii Controllers page. Trigger routing, mouse-cursor source, queue/shift layers, mouse macros, Latch and No Button modes across pages
199776a
Docs-audit fixes across the 3.4 pages
Five-lens audit against the code:
- Wheel: RPM-LED telemetry reads the SCS plugin, not OutGauge. Add the OutGauge
games (BeamNG.drive, Live for Speed). Thrustmaster friction renders as damper
(same 0x07 as inertia). Drop the "only" framing on the periodic generator.
- Remote Link: gamepad-only is off by default (the pair-dialog checkbox starts
unchecked), not "unknown peers start limited". Secure identity is DPAPI machine
scope, not "this Windows account".
- Home: lightbar count thirteen -> fifteen. Macro fire modes four -> five. Remote
Link nav framed as many PCs.
- Lighting: "thirteen base modes" -> "thirteen base entries" (Off plus twelve),
consistent with the fifteen-mode intro.
- Controller Audio: tab scope is per pad per slot.
- Wheel Force Feedback dev page: ReEvaluate -> TickFfb (no ReEvaluate exists).
"8-byte logical report" -> vendor-shaped command (Thrustmaster pads to 64/32).
bb8aa00
Remote Link: frame device sharing as many PCs, not two
Remote Link is a many-to-many mesh. LinkServer holds a list of connections,
a shared device's input fans out to every consuming peer, and reverse
feedback is addressed by the owning peer's fingerprint. Pairing is pairwise
(one six-digit code per pair), but a PC can be linked to many others and one
shared controller can drive games on several PCs at once. Reword the
two-PCs framing across the callout, feature card, screenshot caption, FAQ,
setup steps, and requirements.
ffe0101
Add 3.4 developer-reference pages and cross-links
New internals pages for Remote Link, Controller Audio, Wheel force feedback,
and MIDI input, each grounded in the live source (classes, files, data flow).
Link them from the Home developer-reference index. Add the MIDI enumeration
phase and the vendor-wheel force-feedback branch to Input Pipeline, the new
persisted fields to Settings and Serialization, and the engine-side
subsystems note to Services Layer.
Also small prose fixes to the user pages: drop a defensive "not input-only"
phrasing on Remote Link, fix a link alias on Wheel, Americanize a spelling
on MIDI Input.
f8f6bdd
Refresh impulse-triggers screenshot (3.4 build)
43c54d4
Refresh screenshots for the 3.4 build
31cbaea
Add 3.4 feature screenshots: Audio, Wheel, MIDI input, Remote Link
1ef1a96
Frame Remote Link internet play as a VPN capability
a382fbc
Document 3.4 features: Remote Link, Wheel, Controller Audio, MIDI Input
New pages for the four 3.4 headline features. Add a 3.4 What's new section
and nav links on Home. Cross-link from Force Feedback (native wheel FFB),
Devices (MIDI input cards), and Driver Management (MIDI input needs Windows
MIDI Services).
Audio page states the mirror is a Windows-output loopback, not game-audio
packet interception, and that DS4 audio is Bluetooth-only. Remote Link page
states local-network-only with no built-in internet path.
591880e
Steering: 'act like a steering wheel' wording (#94)
84fa6c6
Steering: Off (was Linear) is the normal-stick default (#94)
24e62f7
Steering: reword 'into a steering wheel' to 'steer like a wheel' (#94)
The stick isn't mapped to a wheel; it's used to steer like one.
a990e4f
Steering: new page for winding / 2D angle-to-axis / motion-lean modes (#94)
Document the three steering stick modes, their tunables and defaults, the at-lock
feedback layer, and the per-stick Sticks-tab config. Add a Steering Source Kinds
section to Input-Pipeline and a feature-table row + link on Home. Math credited to
JoyShockMapper (geometry only; original C#, no GPL code incorporated).
cd5d4d6
Engine-Library: drop GestureState.Suspended references
The Suspended lifecycle state and its global gesture-suspend hotkey
were ripped from the app in a4c681d (PadForge main). Update the
GestureRecognizer state-machine description and the lifecycle-state
table in TouchpadGestureContext to match.
1ca4c1b
Semicolon → period: two more pseudo-period uses
3D-Model-System: "Symbol meshes get PlayStation-specific colors;
base meshes default to black" — two factual clauses, period works.
Settings-and-Serialization: "Multiple UserSettings may reference
the same PadSettingChecksum; only one copy is serialized" — same
pattern.
Both are the AI-tell "X; Y" where Y is a separately complete
clause that doesn't strictly belong inside the first sentence.
36f39ff
Semicolon → period across dev pages
The "X; Y" pattern where the two clauses are separately complete
reads as the AI-tell pseudo-period semicolon called out in the
project's writing style notes. Replace with a period (or comma
where the relation is conjunctive) across:
- Architecture-Overview (PtpDeviceState description, added in this
sweep)
- Controller-Slots (Impulse Triggers parenthetical)
- Engine-Library (three slot-assignment / template-preprocess
paragraphs added in this sweep)
- Home (Driver-Installation-Internals table row)
- Services-Layer (move-slot-to-group-tail flow)
- Settings-and-Serialization (v2 Preset enum migration note)
- Troubleshooting (UAC accept step)
- Virtual-Controllers (Gamepad struct dispatch note)
No semantic changes.
1aad927
Devices: link "precision-touchpad reader" to its Engine-Library entry
Cross-link from the user-facing Devices page to the dev-section
PrecisionTouchpadReader docs so a reader following the PTP
mention can drop into the implementation detail.
55d47fd
Settings-and-Serialization: TouchpadSettings collection schema
Add a dedicated subsection covering the v3.3 TouchpadSettings
collection on PadSetting. Shows the on-disk XML structure (outer
Settings wrapper carrying DeviceGuid + TouchpadIndex; nested
Settings carrying the actual TouchpadGestureSettings attributes),
runtime lookup via the InputManager.TouchpadGestureSettingsProvider
Func, and why the collection is excluded from
CopyablePropertyNames (deep-copy semantics).
Was previously only mentioned in the excluded-properties list with
no schema detail; the reader had to read PadSetting.cs and
TouchpadSettingsEntry.cs to understand the on-disk shape.
4bd4497
Engine-Library: document TouchpadSettingsEntry XML wrapper
The wrapper that pairs each TouchpadGestureSettings instance with
its (DeviceGuid, TouchpadIndex) key under PadSetting.TouchpadSettings.
Without it the per-pad settings bundle round-trips with no key and
the engine has no way to look up the right entry through the
TouchpadGestureSettingsProvider Func.
dc323dd
$Q attribution: include Magrofuoco in brief refs
Magrofuoco contributed the canonical qdollar.js implementation
and is a joint copyright holder on the reference; the Touchpad
page already cites all four authors. Bring Engine-Library and
Architecture-Overview into line.
96f61a5
Touchpad pipeline: full class-by-class dev reference
Engine-Library:
- Add GestureRecognizer, ShapeRecognizer, AngularMarginRecognizer,
ShapeTemplate, InBoxShapeTemplates, TouchpadCustomGesture,
TouchpadGestureContext, TouchpadGestureSettings sections with
file path, namespace, purpose, key API, defaults.
- GestureRecognizer notes the three-tier breakdown, the long-press
recent-stillness metric, LongPress/RadialZones path-clear
interaction, and per-slot fan-out semantics.
- ShapeRecognizer documents the matched[] tracking + LUT-based
ComputeLowerBound + bidirectional CloudMatch (port of the
canonical qdollar.js reference).
- AngularMarginRecognizer covers the circular-variance gate,
closed-path detection, and direction-agnostic matching.
- Default values for TouchpadGestureSettings cross-checked
against the source (SwipeDistanceThreshold 0.15 not 0.12;
SwipeTimeWindowMs 500 not 350; RadialCenterDeadzone 0.30 not
0.10; LongPressTimeWindowMs 500 not 600; PinchThreshold 0.25
not 0.15).
Architecture-Overview:
- Add Precision Touchpad Reader as its own background-thread
section alongside RawInputListener / DSU / hooks / web server.
- Note RawInput mouse path skips MOUSE_MOVE_ABSOLUTE events and
doesn't surface RI_MOUSE_HWHEEL.
- Renumber DSU / Input Hook / Web Controller thread headings
to accommodate the new PTP reader entry.
c961d95
Document the PTP reader: tip-switch, frame assembly, slot stability
Adds a full PrecisionTouchpadReader section to Engine-Library with
the four spec-mandatory behaviors (tip-switch usage 0x42, multi-report
frame assembly via contact-count, HID-contact-id-stable slot
assignment, staleness clear), per-device state fields, and the public
API. The four behaviors are what made 3- to 5-finger taps reliable on
PTP hardware.
Also:
- Engine-Library RawInputListener: note the MOUSE_MOVE_ABSOLUTE skip.
- Architecture-Overview: extend PrecisionTouchpadReader.cs line.
- Touchpad: add a PTP-reader development subsection that summarizes
the four behaviors and links to the Engine-Library field reference.
Drop a pseudo-period semicolon in the recorder paragraph.
- Input-Pipeline Step 2: show both newState paths (PTP via
_ptpReader.ReadInto, SDL via ud.Device.GetCurrentState). The
prior text only showed the SDL path.
bc6cb3a
Touchpad: Algorithms and credits section with + GestureSign BSD-3 attribution
The page already cited each recognizer's source paper in the body
but didn't surface the copyright + license posture. Added a new
'Algorithms and credits' section above 'See also' with:
- paper citation (Vatavu / Anthony / Wobbrock 2018) and the
canonical JS reference link, naming the four copyright holders
- GestureSign's PointPatternAnalyzer attribution
- Both flagged BSD 3-Clause
Sibling-commit on the PadForge repo adds the same attribution to
README + About page + source-file headers.
b35047e
Lighting: lead tagline harmonized to fifteen modes (matches README)
The page tagline said 'thirteen modes plus a per-press overlay,'
counting the dropdown entries (twelve modes + Off) as the headline
total and undercounting the three Input Reactive overlay variants as
a single 'overlay.' README and padforge.org now say fifteen modes
(twelve active base + three overlay), which is the meaningful
user-selectable count. Aligned the lead to that framing.
The 'Thirteen entries' line in the dropdown section stays as-is -
that one is correct as dropdown cardinality (12 modes + Off) and
explains the picker's actual content.
b6223a1
Touchpad: drop CircleCCW jargon, write it like a human
The prior iteration introduced 'CircleCCW' in user-facing docs, which
reads as an internal descriptor name leaking into prose. The frontend
shows the two circle bindings as 'Circle (Clockwise)' and 'Circle
(Counter-Clockwise)' - users never see 'CircleCCW' on screen. The
docs now phrase it the same way: five shapes, with Circle binding
clockwise and counter-clockwise separately.
b93797f
Touchpad: catalog claim is 6 in-box shapes, not 5
Tier 3 description said 'Five built-in shapes' and omitted CircleCCW,
but InBoxShapeTemplates registers six entries: Circle, CircleCCW,
Square, Triangle, Z, Checkmark. CW and CCW circles are bindable
independently so a clockwise loop can fire a different mapping from
a counter-clockwise one. Updated the count and the list, added one
clarifying sentence about the CW/CCW split since users wouldn't
otherwise notice the two-template-per-circle design.
227054a
Architecture-Overview: add Touchpad/ to the Engine project layout
The 'PadForge.Engine' file-tree section in Architecture-Overview
listed Common/ and Data/ but skipped Touchpad/ entirely - even though
v3.3's gesture pipeline lives there. Added the directory with one
line per file (GestureRecognizer, ShapeRecognizer, ShapeTemplate,
AngularMarginRecognizer, InBoxShapeTemplates, TouchpadCustomGesture,
TouchpadGestureContext, TouchpadGestureSettings, TouchpadSettingsEntry).
Also added PerDeviceSettingsEntry.cs to the Data/ section, which
covers the v3.3 Copy / Paste / Copy From per-device clipboard payload
that the prior commit (Engine-Library namespace table) referenced
but the source-tree didn't surface here.
3fe348f
Engine-Library: surface PadForge.Engine.Touchpad namespace in the topline table
The namespace overview table didn't list PadForge.Engine.Touchpad,
even though it carries the full gesture pipeline (GestureRecognizer,
ShapeRecognizer, ShapeTemplate, AngularMarginRecognizer,
InBoxShapeTemplates, TouchpadCustomGesture, TouchpadGestureContext,
TouchpadGestureSettings). One-line addition that points future
developers at the right files without sinking another N pages of
prose on it. Also noted that PrecisionTouchpadReader lives under
PadForge.Engine.Common - it was missing from the prior bullet.
a1be436