Skip to content

History / SDL3 Integration

Revisions

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

    @hifihedgehog hifihedgehog committed Jun 19, 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
  • SDL3-Integration: drop stale Step 1 PnP-walk filter-resync claim; fix table-cell semicolon pseudo-period

    @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
  • SDL3-Integration: HM filter uses HIDMAESTRO substring + hardware-ID list walk (not container-ID-to-root-enumerator); FeedbackReceived → OutputReceived

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Polish: drop stale v2.2.1 version markers, banned 'Essential' wording, image-caption em-dashes

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

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Wiki: more accurate SDL3 fork descriptions in page intros + HM filter file list SDL3-Integration.md page intro framed the fork as Switch-2-Pro-only ('the custom SDL3 fork for Switch 2 Pro Controller support'). Updated to '6 commits across four features: HIDMaestro filter, Switch 2 Pro Controller, 16-XInput, XInput Share'. HIDMaestro-Deep-Dive.md filter-cascade bullet claimed the HIDMaestro filter substring list lives in 'joystick/windows/SDL_xinputjoystick.c'. That's wrong: the XInput backend is pristine upstream, XInput-side filtering happens through the OpenXInput fork. The actual SDL3-side patch touches three files: src/hidapi/windows/hid.c (classifier + 256-entry path cache), and one SDL_HidmaestroIsAnsiHidPathHm call site each in src/joystick/windows/SDL_dinputjoystick.c and SDL_rawinputjoystick.c. Updated the bullet to match.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • SDL3-Integration: SDL3 fork is 6 commits across 4 features, not 2 Previous edit framed the fork as carrying just two patches (HIDMaestro filter + Switch 2 Pro Controller). User correction: the feat/hidmaestro-filter branch is actually 6 commits across 4 features: 1. Switch 2 Pro Controller WinUSB bulk I/O (7c4118c49) 2. HIDMaestro filter + HMXINPUT dead-branch cleanup (60d06e2f4 + 14f883872) - PadForge-specific 3. 16 XInput controllers (XUSER_MAX_COUNT 4 -> 16) at ba25d3671 - paired with hifihedgehog/OpenXinput OpenXinput1_4 commit 45c91b1 (CMake default bump) 4. XInput Share button (reads XInputGetSystemButtons ordinal 109 via OpenXInput) at 1b266767c (loader/dispatch) + 3fbf1429f (gamepad-db misc1:b11) Rewrote the 'Why a Fork' section as a 4-row table that lists each feature, its SDL3 commit hashes, and any paired OpenXInput work. Also added the cross-reference to the hidmaestro-fork-resync recipe since changing the HM enumerator name now needs to stay in sync across three places (SDL3 filter, OpenXInput filter, Step 1 PnP walk).

    @hifihedgehog hifihedgehog committed May 21, 2026
  • SDL3-Integration: fix SDL3-fork section (purpose, source, build cmd) The 'SDL3 Fork: Switch 2 Pro Controller Support' section had three accuracy issues: 1) Title and intro said the fork's purpose is Switch 2 Pro Controller support. Per the project memory rule sdl3-fork-rebase-priority.md, the HIDMaestro filter is PRIMARY (branch 'feat/hidmaestro-filter', 3 files); Switch 2 Pro is secondary. Rewrote the section to lead with the HM filter and explain Switch 2 Pro as the second patch. 2) Cited a local dev path ('C:\Users\sonic\GitHub\SDL3-build\SDL\') as the fork source. Replaced with the public fork URL (github.com/hifihedgehog/SDL, branch feat/hidmaestro-filter). 3) Build instructions started with 'cd C:\Users\sonic\...'. Rewrote as a git clone + cmake build sequence that any reader can run. Also dropped a stale '2026 Steam Controller' reference into the fork purpose since Valve's upstream PR now lives on libsdl-org/SDL mainline and the fork just rebases against it. Updated the ToC entry + the section-link in the P/Invoke intro.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Dev wiki: more prose semicolons -> periods (4 more pages) DSU-Motion-Server: slots 1-4 vs 5-16 contrast. DSU-Protocol-Implementation: SDL coord system contrast, axis-invert note, subscriber-resolution algorithm steps, GetSubscribers gloss. SDL3-Integration: 7 prose constructions across marshaling, haptic strategy, raw-button mapping, BT-serial priority note, ISdlInputDevice interface description, ClearRuntimeState side effects, WinUSB notes. Driver-Installation-Internals: 8 prose constructions across v2/v3 backend swap, UAC-prompt aside, MIDI Services download notes, GitHub-asset parser, async-void try/catch, ViGEmBus MSI lookup, HID-class-key cleanup, and v2-relaunch removal note.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Pass 28: tighten 'the user can enable' → imperative 'enable'

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Pass 23: SDL3-Integration mermaid drops dead FILTER/SKIP1/SKIP2/SKIP3 style refs (nodes were removed when HM filter moved fork-side); Step1 source-files line corrected

    @hifihedgehog hifihedgehog committed May 20, 2026
  • SDL3-Integration: button layout table now covers SDL extended range (11-21) and shows raw passthrough starts at 22, not 11 The page was a few SDL revisions out of date. Indices 11-21 are SDL's standardized extended gamepad buttons (Misc1, paddles, Touchpad, Misc2-6), which PadForge fills in via SDL_GAMEPAD_BUTTON_* lookups. Only after those do the device-specific raw buttons start (index 22+). The TouchpadClick correction at Buttons[16] now lines up with this table.

    @hifihedgehog hifihedgehog committed May 20, 2026
  • SDL3-Integration: HIDMaestro sentinel is HIDMAESTRO, not Root\HMCOMPANION HMCOMPANION was an earlier HM enumerator name that's been replaced. Current HM PnP chain carries HIDMAESTRO in the Hardware ID list, matched via substring fast path + 4-deep PnP parent walk. The fork follows the same shape as the OpenXInput-side filter so both stay in lockstep when HM device characteristics change.

    @hifihedgehog hifihedgehog committed May 20, 2026
  • SDL3-Integration: rewrite Device Filtering section against current fork-side filter The in-engine IsHIDMaestroVirtualDevice classifier was removed when the SDL3 fork landed the container-ID-walk filter inside SDL_GetJoysticks. The wiki still documented the old detection-order table + counter-based heuristics + the PnP-tree-walking rationale. All of that is replaced with a brief description of the upstream fork-side filter and a pointer to the feat/hidmaestro-filter branch.

    @hifihedgehog hifihedgehog committed May 20, 2026
  • Wiki Pass 3: dev-deep-dive accuracy corrections ViewModels: HMaestro SDK assembly is HIDMaestro.Core (not Microsoft.HIDMaestro.SDK); user-mode driver still needs first-run installation, not just an embedded assembly. SDL3-Integration: drop the _filteredVigemInstanceIds field documentation. That field is gone from current InputService.cs. HM virtuals are filtered upstream by the SDL3 fork's patched SDL_GetJoysticks (walks container ID to the HM root enumerator and drops matches before returning the list), so the engine no longer needs the rumble-killing-close guard. Architecture-Overview / Driver-Installation-Internals / Build-and-Publish / HIDMaestro-Deep-Dive: OpenXInput corrections. xinput1_4.dll is bundled inside the single-file EXE via Content + IncludeNativeLibrariesForSelfExtract, not "copied adjacent to PadForge.exe". devobj.dll is deliberately NOT shipped (a bundled stub would hijack setupapi.dll's own DevObj* imports and crash HID class enumeration per PadForge #69). System devobj.dll resolves from System32 unaided. Also: refresh pad-playstation-configbar.jpg to match the canonical PS slot screenshot (DualSense (PS5, Bluetooth) profile, dualsense-bt).

    @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
  • 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
  • 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
  • Fix mojibake throughout the wiki + rewrite Input-Precision Stage 5 for v3 Mojibake sweep: 1067 sequences across 17 .md files. Earlier passes had round-tripped UTF-8 punctuation through a CP1252 layer, baking the literal three-character mojibake into the files (em-dash → â + € + ", en-dash, right arrow, box-drawing chars, middle dot, multiplication sign, etc.). Restored to the proper Unicode codepoints: — – → ↔ ← │ ├ └ · ×. Input-Precision Stage 5 rewrite: the page still described 'Stage 5: vJoy Output (15-bit unsigned)' which doesn't exist in v3. v3 has a single HIDMaestro Output stage with three sub-cases: - Microsoft (Xbox 360): signed 16-bit sticks, 8-bit triggers - PlayStation (DS4): 8-bit sticks AND triggers (DS4 protocol) - Extended (HM custom HID): 16-bit unsigned sticks, 8-bit triggers by default, raisable to 16-bit per profile Verified against HIDMaestro's HidDescriptorBuilder.cs (AddStick default bits=16, AddTrigger default bits=8) and PadForge's HMaestroVirtualController.cs (SubmitGamepadState normalizes through float at the SDK boundary). Output Throughput section: dropped the vJoy single-IOCTL note, replaced with HIDMaestro single-call SubmitState description. Summary table axis-resolution rows now reflect per-VC-type wire bit depth. Stage 3 callout pointing at Stage 5. Pseudo-colon em-dash converted to period per the project style rule.

    @hifihedgehog hifihedgehog committed Apr 26, 2026
  • Bulk v3 terminology sweep across remaining wiki pages (23 files) Mechanical s/// pass on the names that don't depend on architectural context: ViGEmBus -> HIDMaestro, ViGEmClient -> HIDMaestro SDK, VJoy -> Extended (the C# enum value name appearing in narrative text), 'DirectInput (vJoy)' -> 'Extended (HIDMaestro)', 'Xbox 360 / DualShock 4' (slot type pair) -> 'Microsoft / PlayStation', etc. Pages already hand-rewritten upstream were left alone (Home, Installation, Driver-Management, HIDMaestro-Deep-Dive). Virtual-Controllers got the same pass since it's a central reference. Caveat: many of the deeper architecture pages (Driver-Installation- Internals, Input-Pipeline, ViewModels, XAML-Views, Engine-Library, etc.) still describe v2-era *implementation* (vjoy.sys SetupAPI device-node creation, ViGEm.Client P/Invoke surface, etc.). The TERMINOLOGY now matches v3 but the IMPLEMENTATION DETAILS in those pages are still v2 and need a follow-up content pass to reflect the HIDMaestro SDK surface, the OpenXInput shim, the HM thread-pool lifecycle, the bubble-up cascade, etc. See HIDMaestro-Deep-Dive.md for the v3-correct version of that material.

    @hifihedgehog hifihedgehog committed Apr 26, 2026
  • Sweep em-dash pseudo-colons across developer reference pages

    @hifihedgehog hifihedgehog committed Apr 18, 2026
  • Wiki sync: per-mapping dead zone, BLE HidHide, async enumeration, UI polish 16 pages updated across 7 parallel agents: - Button-and-Axis-Mappings: source dropdown raw buttons, clear resets DZ - Input-Pipeline: async Raw Input, MapToButtonPressed params, half-axis math - Settings-and-Serialization: MappingDeadZones dict, DeviceObjects serialized - Engine-Library: raw button count, DeviceObjects, FindInstanceIdsByVidPid BLE - Dashboard: TypeSwitchButton, driver gating, red stopped indicators, drag fix - Home: feature highlights updated - XAML-Views: branding bar, SyncBarBackgrounds, theme-aware brushes - Architecture-Overview: branding bar, async enumeration, stable 1000 Hz - Services-Layer: async enumeration, offline dropdowns, popup dismiss - Driver-Installation-Internals: removed methods, merge-based cache - Controller-Slots, ViewModels, Force-Feedback, Troubleshooting, SDL3-Integration, 3D-and-2D-Visualization: targeted updates - All 25 screenshots refreshed

    @hifihedgehog hifihedgehog committed Mar 21, 2026
  • Wave 5: Visual overhaul, second polish, cross-page consistency, TOCs, diagrams Home.md: Hero section with centered about.jpg, "New in this release" callout, 6 themed sub-sections, Unicode symbols, verb-led descriptions. Visual: 3 unused dropdown screenshots added to Sticks/Triggers pages. TOCs added to 5 long dev docs. 3 new Mermaid diagrams (save/load flow, class relationships, device discovery). Cross-page consistency (user + dev): Bidirectional Related Pages across all 31 pages (94 dev cross-links, 60+ user cross-links). Feature naming standardized ("Force Raw Joystick Mode", "DualShock 4", "DirectInput (vJoy)"). Setting names matched to UI labels. 9 screenshot alt texts made descriptive. Dev doc links removed from user pages. Second polish (all pages): 200+ edits tightening prose, removing AI voice ("robust", "This ensures", "you can"), standardizing See Also sections, cutting filler. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 19, 2026
  • Numeric accuracy sweep: 18 agents verified every number against source code Fixes found by accuracy agents: - Virtual-Controllers: Xbox/DS4 max instances 4→16 (3 locations), 5 Gamepad button bit values corrected (A=0x1000, B=0x2000, X=0x4000, Y=0x8000, GUIDE=0x0400) - Controller-Slots: per-type limit reasons now explain XInput 4-slot visibility vs ViGEm 16-slot creation, SDL/DirectInput see all 16 - Input-Pipeline: VJoyRawState axes "up to 16" → "up to 8" - 3D-and-2D-Visualization + Button-and-Axis-Mappings: triggers "up to 4" → "up to 8" (MaxAxes=8, sticks consume 2 each) - Dashboard: Xbox/DS4 per-type limits 4→16 - Build-and-Publish: removed phantom LICENSE.txt from publish output - SDL3-Integration: added missing padding fields to SDL_HapticCondition and SDL_HapticRamp structs - ViewModels: DeadZoneShape.ScaledRadial=2 not 0, tab order corrected, ViewModelBase code snippet fixed - Engine-Library: mouse button order L,R,M → L,M,R - Driver-Installation-Internals: removed phantom EnsureWhitelisted, added 4 missing HidHide API methods - 2D-Overlay: schematic line count 795→794 - 3D-Model: torus offset 0.4→0.8mm Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 19, 2026
  • Professional polish: proper typography, concise writing, 33 agents Replace all 590+ double-hyphen (--) instances with proper em dashes (—) and en dashes (–) for numeric ranges. Remaining -- only inside code blocks. Rewrite every page for professional conciseness: - Simple English, short sentences, active voice - Prose converted to tables and bullet lists - Filler words and AI-tell phrases eliminated - Parallel structure in descriptions - Every section scannable in seconds Net result: 632 fewer lines across 32 files while preserving all detail. Verified: 0 broken cross-references, all 9 Mermaid diagrams valid, all 21 image references valid, README fully synchronized. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 19, 2026
  • Comprehensive wiki rewrite: 22 agents, 2M+ tokens, all 31 pages improved Every wiki page deeply rewritten by dedicated agents that read full source files (not commit history). Total: ~2 million input tokens across 22 agents. User guide pages (17): - Home: all 32 descriptions rewritten with specific subsection details - Force-Feedback: motor physics, pipeline flow, haptic/condition/audio sections - Macros: 12 action type subsections, 6 practical recipes, fire mode guide - Devices: card layout, raw input viz, GUID persistence, 7 troubleshooting items - Stick-Dead-Zones: per-shape subsections, anti-DZ tuning, 5 genre recommendations - Trigger-Dead-Zones: floor/ceiling examples, 4 genre recommendations - Controller-Slots: "What Is a Slot?", type decision table, limits, reordering - Dashboard: engine states, VC card anatomy, power icon color table - Settings: per-setting guidance, driver comparison table, auto-save behavior - Button-and-Axis-Mappings: source dropdown, descriptor names, mapping tips - Profiles: pipe-separated exe format, 4 practical examples - DSU-Motion-Server: emulator table, sensor requirements, setup guides - Web-Controller: step-by-step setup, network requirements, latency expectations - Installation: Quick Start, auto-elevation, first-launch walkthrough - Driver-Management: graceful degradation, compatibility matrix, troubleshooting - Troubleshooting: 10 new scenarios, Quick Reference 18→33 entries - 3D-and-2D-Visualization: view selection table, MIDI preview, touch tips Developer reference pages (14): - Architecture-Overview: verified project layout, Key Design Decisions, threading - Input-Pipeline: 1538 lines, 3-thread Mermaid, dead zone algorithms, thread safety - Services-Layer: rewritten from scratch, 25+ method table, 5 interaction flows - ViewModels: 1559 lines, all 14 ViewModel classes, 70+ PadSetting properties - Engine-Library: 1811 lines, 31 types, full SDL3 P/Invoke reference - Settings-and-Serialization: 73 CopyablePropertyNames, save/load flowcharts - XAML-Views: layout trees, binding tables, 11 styles, UI Automation IDs - Virtual-Controllers: Mermaid type hierarchy, per-VC axis/button tables - SDL3-Integration: 1133 lines, enumeration flow, rumble, haptic, custom mappings - Build-and-Publish: all build modes, CI/CD, versioning, local NuGet - vJoy-Deep-Dive: HID descriptors, FFB, device lifecycle, restart strategies - Driver-Installation-Internals: Mermaid flowcharts, SetupAPI P/Invoke, registry - DSU-Protocol-Implementation: corrected byte offsets, sequence diagrams, CRC32 - 2D-Overlay-System: MIDI preview, verified file counts, flash timer corrected - 3D-Model-System: material system, coordinate transforms, touch gestures Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 19, 2026
  • Deep audit: fix 30+ discrepancies, add Mermaid diagrams, correct DSU offsets Deep source-code audit with 9 parallel agents reading full source files against all 32 wiki pages. Verification pass with 4 additional agents. Fixes: - Engine-Library: remove stale XInputState struct, trim ObjectAspect/ EffectParameterFlags enums to match code, delete nonexistent GetSlidersMask(), fix MidiRawState.Create() CC init description - Settings-and-Serialization: fix *Neg range defaults (nullable, not "100"), add MaxPads=16 note - Services-Layer: fix Start() (RemoveAllDeviceNodes not called), fix Stop() order (11 steps including web/audio), add Mermaid service diagram - Input-Pipeline: fix "seven" → "eight" files, add Mermaid pipeline diagram - vJoy-Deep-Dive: fix DisableDeviceNode (full removal, not keep-in-PnP), add RestartDeviceNode DICS_PROPCHANGE vs full restart strategies - ViewModels: add KeyboardMouseControllerIcon, fix SlotNumber (settable), add KBM to OutputTypeIndex mapping - Build-and-Publish: add missing Microsoft.Windows.Devices.Midi2 NuGet, fix AssemblyVersion (App=2.1.0 vs Engine=2.0.0) - Architecture-Overview: add CurveLut.cs, CurveEditor, fix MaxVJoySlots note, add Mermaid architecture diagram - SDL3-Integration: add VIDEO_ALLOW_SCREENSAVER hint, haptic skip note - DSU-Protocol-Implementation: fix motion data offsets (were 4 bytes off) - 2D-Overlay-System: fix schematic flash timer (400ms, not 170ms) - Driver-Installation-Internals: fix IsMidiServicesInstalled description - Devices: fix Instance Path label to HidHide Instance Path - Virtual-Controllers: add Mermaid VC type hierarchy diagram Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 19, 2026
  • Update wiki: add multilingual, Copy From, condition effects, directional FFB docs; retake all screenshots - Button-and-Axis-Mappings: Copy From Translation, Clipboard Metadata sections - Force-Feedback: Directional Haptic Forces, Condition Effects sections - Settings: Language / Multilingual Support section - Virtual-Controllers: condition effects, NumHapticAxes - Engine-Library: MappingTranslation, updated Vibration class, ConditionAxisData - SDL3-Integration: SDL_HapticCondition, SDL_HapticRamp, SDL_GetNumHapticAxes - Architecture-Overview: MappingTranslation.cs in project layout - ViewModels: culture/localization support in ViewModelBase - Settings-and-Serialization: cross-layout mapping translation - vJoy-Deep-Dive: condition effect struct details - All 24 screenshots retaken with current UI Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    @hifihedgehog hifihedgehog committed Mar 16, 2026