Skip to content

History / Engine Library

Revisions

  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • $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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • 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.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • Wiki dev pages: cover v3.3 per-device Copy/Paste payload + TouchpadSettings round-trip Engine-Library.md: PadSetting utility-methods table refreshed. - ToJson now lists every key it actually emits: layout metadata, the four mapping dicts, the typed __TouchpadSettings sub-tree, and the clipboard-only per-slot payloads. - FromJson notes that the typed TouchpadSettings and the payloads are reattached on deserialization. - CopyFrom mentions the TouchpadSettings deep-copy alongside mapping arrays. Services-Layer.md: Copy/Paste section gained BuildPerDeviceSettingsSnapshot and ApplyPerDeviceSettingsToSlot subsections. These are the v3.3 hooks that snapshot every assigned device's PadSetting on Copy and reapply on Paste with InstanceGuid -> ProductGuid matching. The old single- device helpers stay as-is for the row-by-row Apply path.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • Wiki: purge references to four classes removed from the codebase CustomInputUpdate, CustomInputHelper, DeviceEffectItem, and RumbleLogger no longer exist in PadForge.Engine — they were removed at some point and the wiki still documented them in detail across five pages. Cross-checked with grep across both projects: zero call sites remain in source. Removed: - Engine-Library.md: ToC entries + full sections for all four, plus UserDevice.InputUpdates / OldInputUpdates rows that referenced the dead CustomInputUpdate[] type. - Architecture-Overview.md: file-tree entries for the four .cs files + the RumbleLogger row in the static-class table. Added the two real Engine/Common touchpad files (PrecisionTouchpadReader, TouchpadOverlayDevice) that were missing from the tree. - Settings-and-Serialization.md: UserDevice.InputUpdates and UserDevice.DeviceEffects rows. - Input-Pipeline.md, SDL3-Integration.md: the step-(e) buffered- update code samples rewrote into the current per-(slot, device, padIdx) gesture-engine tick — that's what actually runs after the InputState swap in Step 2 today.

    @hifihedgehog hifihedgehog committed May 25, 2026
  • Engine-Library: add missing TargetKind to PadForge.Engine.Common.Mapping helper list

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: SDL_GAMEPAD_BUTTON_COUNT is 26 (not 21); add missing constants 15-25 (MISC1, paddles, TOUCHPAD, MISC2-6)

    @hifihedgehog hifihedgehog committed May 21, 2026
  • SDL3-Integration / Engine-Library: PadForge binds SDL_GetGamepadPowerInfo (returns int), not SDL_GetJoystickPowerInfo (returns SDL_PowerState)

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Polish: more pseudo-period semicolons fixed; correct stale v2-dev branch refs in Build-and-Publish

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Strip em-dash pseudo-colons and pseudo-period semicolons across wiki prose

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: 'Device Wrappers' subgraph label is PadForge.Engine Mermaid diagram subgraph labeled 'Device Wrappers. PadForge.Engine .Common' but every type in it (ISdlInputDevice, SdlDeviceWrapper, SdlKeyboardWrapper, SdlMouseWrapper, WebControllerDevice, TouchpadOverlayDevice) declares 'namespace PadForge.Engine'. The files live in the Common/ folder but the namespace is just PadForge.Engine. InputHookManager is the only Common/ file that sits in the PadForge.Engine.Common namespace. Fixed the subgraph label.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: namespace table reflects v3.2 .Common.Mapping namespace The namespace summary listed four namespaces (PadForge.Engine, PadForge.Engine.Data, PadForge.Engine.Common, SDL3). v3.2 added a fifth: PadForge.Engine.Common.Mapping, which holds the multi-source mapping helpers (CombineHelper, SourceEvaluator, SourceCoercion, SourceKindRuntime, MappingExpression). Documented the new namespace and tightened the descriptions on the other three so each row actually says what lives there.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: add v3.2 TouchpadOverlayDevice + diagram link The mermaid diagram's 'Device Wrappers' subgraph listed SdlDeviceWrapper / SdlKeyboardWrapper / SdlMouseWrapper / WebControllerDevice but not TouchpadOverlayDevice. It's a real ISdlInputDevice in PadForge.Engine that the v3.2 overlay window uses to publish touch state to PlayStation slots. Added the diagram node + the 'implements ISDI' edge. Wrote a full TouchpadOverlayDevice reference section between WebControllerDevice and DeviceObjectItem documenting the device identity (fixed VID/PID/GUIDs), button shape (NumButtons=17, SupportedButtonIndices=[16] for the touchpad click slot), and the 'one device per session' nature (SdlInstanceId=0xFFFFFFFE). Added the ToC entry.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: ToC reflects the two new type sections Added TouchpadState and CustomControllerLayout entries to the Table of Contents so the new sections land in the page navigation.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: add missing TouchpadState + CustomControllerLayout sections Two PadForge.Engine types weren't documented in the dev reference: TouchpadState (GamepadTypes.cs:73) Two-finger touchpad surface state. Used by the v3.2 PlayStation SubmitGamepadState overload so games see finger positions on the DS4 / DualSense extended report. Documented field-by-field including PacketCounter which only ticks on finger-state edges. CustomControllerLayout (CustomControllerLayout.cs) Per-slot HID descriptor shape for Extended slots. Replaces the v2 ExtendedDeviceConfig nested type. Documented the five count fields and called out IsTriggerSlot's role in keeping Step 3 / Step 4 / deadzone-pipeline in agreement about which axis indices are triggers vs sticks.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Wiki dev pages: another round of prose semicolons -> periods Architecture-Overview: drift-comp contrast, DSU 4-slot cap aside, slot-reorder consequence sentence. Input-Pipeline: positive/negative drift contrast, thread-safety sole-writer note. Engine-Library: back-compat XmlEnum exception path, KBM Open() GUID derivation. XAML-Views: MainViewModel constructor step, type-switch button unavailable-state aside, drag-drop type-group rule, HidingToggle side-effect list, KBM hover/recording color contrast, two 'Constructor only' code-behind glosses.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Engine-Library: document new CustomInputState battery fields Add BatteryPercent and BatteryCharging field rows and value-convention entries; update Clone() and the zero-state constructor row to reflect that both fields are part of the snapshot. These were added for v3.2's lightbar Battery mode and have been missing from the docs.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Pass 64: Engine-Library See Also pointer to Settings-and-Serialization now names the v3.2 MappingSet family of DTOs explicitly

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Pass 17: Engine-Library TOUCHPAD button-flag row clarifies output-side bitmask (Gamepad.Buttons) vs input-side array index (CustomInputState.Buttons[16])

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Pass 16: Engine-Library CustomInputState adds TouchpadFingers + TouchpadDown fields (live in v3) and notes Buttons[16] is SDL_GAMEPAD_BUTTON_TOUCHPAD

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Engine-Library: TouchpadClick is Buttons[16], not [21] (matches current SdlDeviceWrapper layout)

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Wiki: Pass 2 — dev-deep-dive accuracy + Home page voice match Architecture-Overview: AssemblyInfo.cs → SharedVersion.cs; expanded Data/ file list to include MappingSet/MappingSource/MappingRow/ ShiftActivator/MappingSetMigrator/DeviceTuning. Input-Pipeline: drop preserveExtendedNodes parameter; rebuild field table to match current InputService. Virtual-Controllers: VendorId==0xBEEF check replaced with DescriptorHasPidFfbBlock(descriptorHex) gate in three locations. HIDMaestro-Deep-Dive: Microsoft.HIDMaestro.SDK → HIDMaestro.Core (bundled at Resources/HIDMaestro/HIDMaestro.Core.dll); fix context.CreateController(profile) call shape. Services-Layer: drop preserveExtendedNodes from Stop(); remove the "step 9" preserve-nodes branch. Engine-Library: add TOUCHPAD = 0x0800 button flag row. SDL3-Integration: SDL3 fork now filters HM virtuals at SDL_GetJoysticks, so the engine no longer maintains _filteredVigemInstanceIds. Updated Mermaid flowchart and renumbered the connect-side step list. Home: "New in 3.2" rewritten from bullet lists to story paragraphs to match the website voice. Added Gyro / Impulse Triggers / Shift Layers to the navigation tables.

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Wiki rewrite: simple-English voice across all user-facing pages Rewrites 18 user-facing pages and adds hooks to 7 dev-deep-dive pages. Each user-facing page now opens with H1 then a one-sentence hook, strips banned vocabulary, replaces em-dash pseudo-colons with periods, and ends with a version marker. User-facing rewrites - Installation, Dashboard, Controller-Slots, Button-and-Axis-Mappings - Stick-Deadzones, Trigger-Deadzones, Force-Feedback, Adaptive-Triggers, Lighting - Macros, Profiles, Devices, DSU-Motion-Server, Web-Controller - Settings, Driver-Management, Input-Precision, Troubleshooting - 3D-and-2D-Visualization New 3.2 content woven into Force-Feedback (Impulse Triggers, Audio Bass Trigger Rumble, Constant Trigger Force) using actual in-app labels from Strings.resx. Profiles documents the new Toggle Virtual Controllers Disabled shortcut mode. Settings notes the stable-across-language-switch fix. DSU Motion Server covers the Gyro Aim Engage picker subtitle. Dev-deep-dive hooks added - Input-Pipeline, Settings-and-Serialization, ViewModels, XAML-Views, Engine-Library

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Lighting tab reset buttons + v3 terminology sweep Refreshes pad-lighting screenshot to capture the four new reset buttons (Lightbar Mode, LED Brightness, Player Pattern, Mute LED Mode) plus the rest of the slot-0 PadPage tabs and slot-type config bars against the post-deploy build. Wiki prose: drops residual v2 phrasing (ExtendedConfig.IsGamepadPreset, DualShock4 / Xbox 360 enum names, "Microsoft" / "Sony") and routes through the v3 OutputType / VirtualControllerType vocabulary instead.

    @hifihedgehog hifihedgehog committed May 4, 2026
  • VC type wiki: drop 'on-disk name' framing; XmlEnum is back-compat exception, not parallel name

    @hifihedgehog hifihedgehog committed Apr 28, 2026
  • Deep v3 resync: vJoy purge, Microsoft→Xbox terminology, current features Sweep residual v2 vJoy / ViGEmBus content out of user-facing pages and replace stale dev-page class names with the v3 unified HIDMaestro pipeline. Restore correct family-name terminology (Xbox / PlayStation / Extended, not Microsoft / Sony — those enum identifiers exist purely for v2 PadForge.xml back-compat per the in-source enum comment). User-facing pages (Home, Dashboard, Controller-Slots, Devices, Settings, Driver-Management, Troubleshooting, Force-Feedback, Web-Controller, 3D-and-2D-Visualization, 2D-Overlay-System, Installation, Stick-Deadzones, Trigger-Deadzones, Input-Precision): - vJoy slot type, "vJoy driver limit", and vJoy install steps removed - Troubleshooting: "vJoy Phantom Controllers" section deleted (v2 N²-bug, doesn't exist in HIDMaestro), other vJoy sections rewritten for HM - Force-Feedback: HID PID 1.0 framing for Extended; new Sony Report 0x01 rumble passthrough section - 3D-and-2D-Visualization: PlayStation touchpad preview (live finger spheres) and click-to-map TouchpadClick documented - 2D-Overlay-System: touchpad highlight visual spec (sampled colors) - Web-Controller: DS4 layout button-11 collapse for TouchpadClick Dev pages (Architecture-Overview, Engine-Library, Build-and-Publish, HIDMaestro-Deep-Dive, Input-Pipeline, SDL3-Integration, Services-Layer, Settings-and-Serialization, Driver-Installation-Internals, ViewModels, XAML-Views, Virtual-Controllers, Button-and-Axis-Mappings): - Stale Xbox360VirtualController / DS4VirtualController / ExtendedVirtualController / VJoyRawState references replaced with the v3 unified HMaestroVirtualController + ExtendedRawState - Step 5 prose updated to HMContext.SubmitState / SubmitRawReport with Sony Report 0x01 passthrough - HIDMaestro-Deep-Dive: HM 1.1.x → 1.2.0 - Services-Layer: false claim that Extended slots reset to "Microsoft (Xbox 360) gamepad preset" replaced with the actual behavior (ProfileId = GetDefaultProfileId(type), Custom "PadForge Game Controller" for Extended) - Three broken [[vJoy Deep Dive]] links retargeted to [[HIDMaestro Deep Dive]] - Virtual-Controllers gets a top-of-page editor's note flagging it for a full hand-rewrite (the deep sections still describe deleted v2 classes) Microsoft references kept where they are real: NuGet package Microsoft.Windows.Devices.Midi2, registry paths under SOFTWARE\Microsoft\, ".NET runtime download from Microsoft", literal VirtualControllerType.Microsoft enum-value citations, MaxXbox360Slots constant name (preserved from v2), [XmlEnum("Sony")] attribute string, OpenXInput Microsoft-trademark disclaimer.

    @hifihedgehog hifihedgehog committed Apr 27, 2026