Skip to content

History / ViewModels

Revisions

  • Wiki: scrub pseudo-colon em-dashes across user + dev pages

    @hifihedgehog hifihedgehog committed May 26, 2026
  • Wiki: tidy two small dev-doc seams Architecture-Overview Mermaid graph: DSU_CLIENT and BROWSER node labels were using a bare '.' as the separator between names (Cemu . Dolphin, Phone . tablet). Changed to ' / ' to match the rest of the graph and extended the DSU client list to the real four (Cemu / Dolphin / Yuzu / Ryujinx) the wiki documents elsewhere. ViewModels.md Per-Device Test Routing row: dropped the reference to the private Claude memory file (feedback_per_device_test_isolation.md); restated the rule in-doc and noted the same gate covers the dispatcher / routing branches that emit physical effects from those tabs.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • ViewModels: note PadViewModel.Touchpad.cs partial-class file PadViewModel is split across PadViewModel.cs (main) and PadViewModel.Touchpad.cs (v3.3 Touchpad-tab properties: TouchpadGesturesEnabled, TouchpadJoystickMaxRadius, TouchpadMouseSensitivityX/Y, etc.). The wiki page header listed only PadViewModel.cs. Updated to mention both files + the responsibilities list now includes Touchpad-tab settings.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • ViewModels/XAML-Views: refresh SelectedConfigTab + PadPage tab list Both pages still described the v3.1 tab layout (6 tabs, missing Adaptive Triggers / Lighting / Gyro / Impulse Triggers and now Touchpad). Walked PadPage.xaml's RadioButton Tag values and rebuilt the enumeration: - 6 always-visible (Controller, Macros, Mappings, Sticks, Triggers, FF) - 5 visibility-gated on the source device's capability flags: 6=Adaptive Triggers (HasAdaptiveTriggers) 7=Lighting (HasLightbar) 8=Gyro (HasGyro) 9=Impulse Triggers (HasRumbleTriggers) 10=Touchpad (HasTouchpad) XAML-Views.md tab-strip diagram extended to the same 11 entries.

    @hifihedgehog hifihedgehog committed May 26, 2026
  • ViewModels: ExtendedSlotConfigData adds ForceFeedbackEnabled (v3.0.3+); replace semicolon pseudo-period with period

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: DeviceRowViewModel adds SdlGuid, HasTouchpad, IsInternalVirtual + 3 ShowInputXxxSection gating flags for web/overlay virtual sources

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: DevicesViewModel touchpad fields (IsTouchpadDevice, HasTouchpadData, TouchpadX0/Y0/X1/Y1, TouchpadDown0/Down1) on the Devices-page raw input display

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: ProfileShortcutViewModel SwitchModes adds ToggleVCsDisabled (v3.2); correct SwitchProfileModeItem shape (ObservableObject class with mutable DisplayName, not record)

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: extend MacroTriggerMode (+CustomExpression) and MacroActionType (+ToggleTouchpadOverlay, Lightbar*, Rumble*) enum value lists; add MacroLightbar/Rumble hold-mode enums

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: PadViewModel shift-layer surface is ActiveLayerMask + LayerTabs + LayerActivated event (not CurrentLayerMask / ActiveLayers / LayerEngaged+Released)

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: document DashboardViewModel Touchpad Overlay section (v3.2) and ResetTouchpadOverlayPositionRequested event

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: add SettingsViewModel.KeepHidHideCloaksBetweenLaunches

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: document PadViewModel Constant Force + Impulse Triggers tab (Impulse / Constant Trigger Force / Audio Bass Trigger Rumble) properties new in v3.2

    @hifihedgehog hifihedgehog committed May 21, 2026
  • VirtualControllerType enum identifier is Xbox (not Microsoft — that's only the XmlEnum on-disk back-compat name)

    @hifihedgehog hifihedgehog committed May 21, 2026
  • ViewModels: add NavControllerItemViewModel.IsVirtualControllerConnected; fix EngineStatusBrush colors (RedBrush stopped, not Gray)

    @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
  • ViewModels: HIDMaestro registers itself via HMContext.InstallDriver(), not DriverInstaller Driver Status: HIDMaestro section said: 'The user-mode driver still needs to be installed once, which DriverInstaller handles on first run from Settings.' Contradicts Driver-Installation-Internals.md line 5 ('It is not installed by DriverInstaller') and the actual code path (HMContext.InstallDriver() called from InputManager.Step5.VirtualDevices.cs:EnsureHMaestroContext on first engine start). Rewrote to attribute the registration to the engine-side path with the file:method citation.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Dev wiki: more em-dash pseudo-colons -> periods ViewModels.md: HmInactivityDestroyTimeoutSeconds description em-dash attaching the 'only the live VC is destroyed' clarification. Services-Layer.md: Profile-restore Topology step had both a semicolon (pseudo-period) and an em-dash (pseudo-colon) attaching slot-diff outcomes; the device-assignment step had another em-dash attaching the unchanged-mapping promise. Three sentences each now. Input-Pipeline.md: 'preserve nodes path is gone — HM creates and destroys...' em-dash was a pseudo-colon attaching the v3 behavior.

    @hifihedgehog hifihedgehog committed May 21, 2026
  • Pass 14: ViewModels.md PadViewModel adds v3.2 properties (MappingSet/CurrentLayerMask/ActiveLayers, TestRumbleTargetGuid, TouchpadClickPressed/Touchpad fingers)

    @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 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
  • Inactivity timeout: clarify slot config is preserved (VC torn down only)

    @hifihedgehog hifihedgehog committed Apr 28, 2026
  • Wiki sync: drag-reorder rebuild logic + DS4/Microsoft identifier renames User-facing: documents the profile-aware drag-reorder behavior on the Dashboard. Active controllers in a group constitute their own ordering; the kernel rebuild fires only when an active VC's relative position to other actives changes such that a profile mismatch results. - Controller-Slots: new "What rebuilds on reorder" subsection. - Dashboard: drag-reorder paragraph extended with one-sentence summary. - 3D-and-2D-Visualization, Devices, Profiles, Macros, Troubleshooting: residual Xbox 360 / DualShock 4 family-name leakage replaced with Xbox / PlayStation in user-visible prose. Web-controller layout slugs and specific HM profile names left as-is. Dev pages: reflects the v2-era identifier renames in code that landed in 005ef8e + dc5b9fd: - Architecture-Overview, Settings-and-Serialization, Virtual-Controllers: MaxDS4Slots -> MaxPlayStationSlots. - ViewModels, XAML-Views: DS4Count -> PlayStationCount. - Services-Layer: rewrote SwapSlots / MoveSlot entries + added a new RebuildKernelOrderAfterReorder subsection covering the simplified single-pass live-subsequence comparison (replacing the older ShouldRebuildKernelOrder predicate). Also corrected a stale Xbox360 enum default in the CreateSlot row to Microsoft (the actual preserved enum identifier). - Input-Pipeline: cross-reference added to the Services-Layer reorder section since kernel-allocation rebuild lives in InputService. Preserved: VirtualControllerType.Microsoft enum value, MaxXbox360Slots constant, [XmlArray("MicrosoftSlotOrder")] attribute string, web layout slugs, ControllerModelDS4 / ControllerModelXbox360 class names, asset folder paths, HM JSON vendor "Microsoft"/"Sony" filter strings, all genuine Microsoft.Win32 / Microsoft.Windows.Devices.Midi2 / registry references.

    @hifihedgehog hifihedgehog committed Apr 28, 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
  • Rewrite Engine-Library / ViewModels / XAML-Views / Settings-and-Serialization for v3 Engine-Library: collapsed IVirtualController implementations to v3's three classes (HMaestroVirtualController, MidiVirtualController, KeyboardMouseVirtualController). VJoyRawState renamed conceptually to ExtendedRawState; VJoy custom mappings to Extended custom mappings. Added the v2-to-v3 enum migration note (Xbox360 -> Microsoft, DualShock4 -> PlayStation, VJoy -> Extended) so v2 PadForge.xml files still load. ViewModels: removed fabricated IsHIDMaestroInstalled / Install&UninstallHIDMaestroCommand rows; HIDMaestro is bundled, only HidHide + MIDI Services remain in driver status. Added HmInactivityDestroyTimeoutSeconds row. Renamed vJoy configuration subsection to Extended Configuration; OutputType default fixed to Microsoft. XAML-Views: switched framework references from ModernWPF (Valkirie) to WPF UI 4.2 (Lepo.Wpf.Ui). Slot-card type buttons listed as Microsoft / PlayStation / Extended / KB+M / MIDI. Replaced vJoy Config Bar section with HMaestroProfileBar + ExtendedConfigBar matching the live XAML. SettingsPage HIDMaestro card has no Install/Uninstall buttons (embedded). Settings-and-Serialization: ExtendedConfigs / Extended custom mappings terminology throughout. Save Flow mermaid node updated. SlotControllerTypes default = Microsoft. All XML element names verified against a live PadForge.xml. Each page's stale v3 banner replaced with a current banner stating the page has been rewritten and pointing to HIDMaestro Deep Dive for architecture rationale.

    @hifihedgehog hifihedgehog committed Apr 26, 2026
  • Architecture-Overview: refresh Mermaid diagram for v3 (HM thread pool, OpenXInput, 5 categories) + add v3 caveat banner to 7 dev pages The Mermaid diagram now reflects: - 5 controller categories (Microsoft / PlayStation / Extended / KBM / MIDI) instead of v2's Xbox360 / DualShock4 / vJoy. - HM lifecycle thread pool as a separate node feeding the three HM-backed categories (Microsoft, PlayStation, Extended). - OpenXInput shim as a sibling to SDL3.dll under External Systems. - HIDMaestro driver as the single virtual-HID-output driver (replacing ViGEm + vJoy nodes). - Windows MIDI Services as the MIDI backend. The 7 deeper dev pages (Driver-Installation-Internals, Input-Pipeline, Virtual-Controllers, Engine-Library, ViewModels, XAML-Views, Settings-and-Serialization) get a 'Note for v3' banner pointing readers to HIDMaestro-Deep-Dive as the canonical source for v3 implementation detail. The terminology in those pages was already swept; the implementation-detail sections still describe v2 mechanics until a follow-up content rewrite.

    @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