-
Notifications
You must be signed in to change notification settings - Fork 114
Releases: Valkirie/HandheldCompanion
Build 0.30.1.0
Handheld Companion – Release Notes
0.30.0.1 - Controller Overhaul, Fan Override and Docking Awareness
Version 0.30.0.1 is a significant release. The biggest change under the hood is the replacement of ViGEm with VIIPER for virtual controller emulation, a move that resolves a whole class of resume, slot, and input loss issues that have been difficult to fully eliminate until now. Beyond that, Legion Go 2 owners finally get complete fan speed control thanks to remarkable work from Undervoltologist and Rodpad, experimental HID support lands for ONEXPLAYER X1 and APEX thanks to srsholmes efforts.
With Microsoft rolling out docking improvements to handheld devices, we've mimicked two new features that give HC users direct control over display switching and controller connection behavior when docking. Finally, this build ships one of the largest single-build fix lists.
Highlights
- ViGEm replaced by VIIPER The deprecated ViGEm library has been replaced with VIIPER for virtual controller emulation. In addition to broader controller type support: Xbox 360, DualShock 4, DualSense, Steam Controller, and Steam Deck. VIIPER eliminates the need to suspend and resume the virtual controller on system sleep, prevents the redundant power-cycling that was causing XInput slot 0 recovery issues, and should put an end to the input loss problems some users were experiencing with running games after resume.
- Legion Go 2: full fan control Fan speed control is now fully overridable on the Legion Go 2 through direct EC access, even when an OEM power profile would otherwise override it. If the Legion Go 2's fan behavior has been frustrating you, this is the fix.
- Experimental ONEXPLAYER X1 and APEX support A HID driver backport adds initial device support for the ONEXPLAYER X1 and APEX. This is experimental — feedback from owners of these devices is especially welcome.
- Docking and controller connection behavior gives you direct control over two related behaviors. DockedDisplayBehavior lets you define what happens to your main screen when docking: do nothing, switch to the external display, or switch only when on power. PlugBehavior lets you define whether a newly plugged external controller should be hooked automatically, always prompt you, or do nothing.
What Changed
Device support
- Legion Go 2: Backported total control over fan speed through EC, even on OEM power profiles from https://github.com/Rodpad/LeGo2-Fan-Control/.
- ONEXPLAYER X1 and APEX: Backported HID driver from srsholmes/onexplayer-apex-bazzite-fixes#8 (experimental).
New features
- Replaced deprecated ViGEm with VIIPER for controller emulation: bringing support over virtual XBOX360, DualShock4, DualSense, Steam Controller, Steam Deck while removing the need for the virtual controller to suspend/resume with system, preventing redundant controller power-cycling to recover XInput slot 0 and inputs loss issue with running games/softwares.
- Implemented a new setting DockedDisplayBehavior (#534): Define whether the main screen should switch to the external display when docking: Do nothing, switch to external display, switch to external display when plugged to power.
- Implemented a new setting PlugBehavior: Define whether the recently plugged external controller should be hooked: Do nothing, always ask, always connect.
- Implemented gamecontrollerdb update management (notification/download/install) from the settings page.
- Implemented button to axis mapping on layout page to allow traditional controllers to mimic Steam controller and Steam deck controller touchpads and touchpad-based dpad behaviors.
- Implemented controller-based update rate to accommodate virtual controllers without timestamps (Steam controller and Steam deck controller requiring a static 250Hz rate).
UI/UX
- Simplified sensor selection UI elements.
- Overlay page to use MVVM and SettingsCard(s).
- Reduce CPU/UI pressure from power profile fan graph.
- Improve Layout items clarity with toggle/repeat and shift logic visible from layout page.
- Removed hacky WM_PAINT hook logic in favor of ShadowAssist.UseBitmapCache.
- Previous button and axis mappings will no-longer be removed when unsupported by newly targeted controller and will instead appear disabled on layout page.
Fixes
- Fixed an issue preventing the application from locating/restoring any currently running instance when trying to start HC.
- Fixed an issue preventing KeyboardActions and MouseActions from using both Turbo and Toggle at the same time.
- Fixed several issues with installer script when reading dependencies versions causing uninstall/reinstall loops on disconnected (no internet) systems.
- Fixed an issue causing a crash when trying to read some UWP processes "ProductName".
- Fixed an issue with gyro related settings when manipulated from the quick profile page.
- Fixed a couple of issues when displaying foreground process/profile on quick profile page.
- Fixed an issue when pulling MicrosoftStore/App logo from Manifest file.
- Fixed an issue with layout Trigger shift logic.
- Fixed a rare crash scenario when closing a process.
- Fixed an issue causing incorrect UI focus when a ContentDialog is closed.
- Fixed an issue preventing controller update rate settings from being applied while app is running.
- Fixed an issue that would cause GPU Manager to still interact with AMD settings when GPU management is turned off.
Miscellaneous
- Defaulted gamepad mode to Auto instead of Gamepad.
- Misc performance improvements to layout UI render logic with artwork load/unload and bitmapscalingmode (LowQuality).
- Misc UI tweaks related to gamepad mode hotkey.
- Updated process filter (restricted) list to exclude: pickerhost.exe, gamingservicesui.exe.
- Updated SDL3 to 3.4.8.
- Added a new Layout template for SteamController (DPAD to left touchpad, right stick to right touchpad).
- Keep controller routing active at Windows login but gate keyboard input capture on session lock state, and defer HC main window display until the interactive desktop is available.
Full Changelog: 0.29.3.0...0.30.1.0
Assets 3
Build 0.29.3.1 - Hotfix
Handheld Companion – Release Notes
0.29.3.1
What Changed
Fixes
- Fixed an issue with Trigger shift logic (Thanks to Koladonia)
Assets 3
0.28.6.14 - Hotfix
Hotfixes
- Fixed an issue with the input shifting logic on layout manager.
Full Changelog: 0.28.6.13...0.28.6.14
Assets 3
0.28.6.13 - Hotfix
Hotfixes
- Fixed an issue with the input shifting logic on layout manager.
Full Changelog: 0.28.6.12...0.28.6.13
Assets 3
Build 0.29.3.0
de3831a Handheld Companion – Release Notes
0.29.3.0
Highlights
- This release cycle focuses on restoring Intel power management, improving stability around sleep/resume and virtual controller handling, reducing memory footprint, expanding Library and Collection management, and adding proper DSU server controls.
- Intel TDP and power profile support have been restored by detecting Windows Smart App Control and surfacing the issue directly in the Device page, allowing affected users to disable it when it blocks HC’s power manipulation features.
- HC’s internal managers are now more configurable: the Performance, Library, and GPU managers can each be toggled independently, making it easier to run HC alongside other tools without overlapping responsibilities.
- The Library page received a substantial update with Collections support, faster rendering, improved memory behavior, Microsoft Store scanning, and cleaner settings organization.
- Virtual controller reliability has been improved across resume, connection, and power-cycling scenarios, including updates to ViGEmClient and better exception handling when reconnecting controllers after sleep or hibernation.
What Changed
New features
- Added Smart App Control detection to help restore Intel TDP and power manipulation support.
- Added independent toggles for the Performance, Library, and GPU managers.
- Added ADLX 1.5 support with AFMF 2.1 support, while removing the previous heavy probe executable dependency.
- Added Microsoft Store title scanning through the Library update flow.
- Added Collection management in the Library, including create/delete support.
- Added proper DSU server management in the Settings page for emulator motion input workflows.
- Added HID back button support for GPD Win 5 firmware 1.11.
- Added misaligned HID report detection for Legion Go.
- Added proper ISpaceWatcher disposable handling.
- Added a notification when PawnIO is not detected.
UI / UX
- Reworked Library settings into a single dropdown button.
- Improved Library item visibility and memory management.
- Improved game rendering performance in the Library.
- Added Collection support to the Library UI.
- Updated the Library favorites glyph in list view.
- Improved main window compatibility at 720p / 150% scaling, especially for Steam Deck-like layouts.
- Improved navigation menu behavior on narrow screens.
- Reworked navigation history and overall navigation when using mouse or touchscreen.
- Improved gamepad navigation with better historical GoBack() behavior.
- Fixed left-stick navigation on Desktop layout.
- Mouse cursor and touch input now properly exit UI mode during gamepad interactions.
- Migrated FramerateValue from profile to power profile.
- Improved update manager display logic on the Settings page.
- Added DSU server controls to the Settings page.
Device support
- Restored Intel TDP and power profile behavior where Smart App Control was silently blocking HC.
- Added GPD Win 5 HID back button support for firmware 1.11.
- Fixed Legion Go default / hardware fan table behavior that could cause fan throttling at higher CPU temperatures.
- Fixed Legion Go controller swap behavior.
- Restored OEM2 key detection on MSI Claw A1M.
- Fixed Steam Deck / Neptune controller detection by correcting the expected input report length.
- Added detection for misaligned HID reports on Legion Go.
Performance and reliability
- Updated ViGEmClient to improve virtual controller stability after sleep and hibernation.
- Improved virtual controller resiliency during system resume with proper exception handling and UI alerts.
- Improved device and controller manager startup sequencing so controllers should connect faster.
- Improved async compatibility across performance and profile managers.
- Improved object disposal logic to reduce memory usage.
- Fixed a memory leak from LibreHardwarePlatform.
- Improved Library rendering and memory containment.
- Fixed rare startup timing where LogManager could initialize too late.
Fixes
- Fixed random application freezes on close while HC is running.
- Fixed a deadlock when closing HC with QuickTools open.
- Fixed a deadlock in process detection.
- Fixed a rare infinite virtual-controller power-cycling loop.
- Fixed the broken Connect when plugged setting on the Controller page.
- Fixed snap-window logic from the QuickTools Applications page.
- Fixed input shifting logic in the Layout Manager.
- Fixed a regression in layout shift logic.
- Fixed malformed string messages causing crashes in LogManager.
- Fixed device capability and internal sensor reading issues.
- Fixed virtual controller combobox values being incorrect at startup.
- Fixed ProfileViewModel platform image rendering when the Platform manager was not ready yet.
- Fixed Settings manager crashes on corrupted values.
- Fixed several async ViewModel / manager handling issues.
- Fixed abnormally low thumbnail quality.
- Fixed the FPS limit control appearing empty in QuickTools.
- Fixed Touchpad emulation on virtual DS4.
- Fixed FPS Limit and AutoTDP behavior when Dynamic Refresh Rate is enabled.
- Fixed occasional incorrect screen frequency readings.
- Fixed two empty power profiles being created on startup.
- Fixed an endless loop when creating a new profile and fetching artwork.
- Fixed QuickDevice screen frequency not refreshing correctly.
Full Changelog: 0.28.6.10...0.29.3.0
Assets 3
0.28.6.12 - Hotfix
Hotfixes
- Fixed an issue causing a crash on Settings manager on corrupted values.
Full Changelog: 0.28.6.11...0.28.6.12
Assets 3
0.28.6.11 - Hotfix
Hotfixes
- Fixed an issue causing virtual controller combobox value to be randomly incorrect on startup.
- Fixed an issue with Steam Deck HID inputBufferLen.
Full Changelog: 0.28.6.10...0.28.6.11
Assets 3
Build 0.28.6.4
53dddb6 Handheld Companion – Release Notes
0.28.6.4
Highlights
- Performance and startup improvements: Several targeted optimizations reduce startup time and runtime overhead. JIT compilation for loops is now faster on startup, and GC scaling behavior has been tuned to avoid stalls when the app wakes from idle. A handful of hot code paths also received aggressive inlining for better runtime throughput.
- UI and library experience: The Library has received a round of focused improvements: games now load asynchronously so the UI stays responsive, a new All Wide view mode has been added, missing artwork is now surfaced clearly with a dedicated UI element, and hovering a game now shows a quick Play/Stop button. Logo selection is now available in the artwork picker, and navigation debouncing prevents visual noise when moving through pages quickly.
- Navigation and profiles: Gamepad and keyboard navigation has been improved with better control target logic and additional default button assignments. Hotkey settings have been moved to their own dedicated page, which also meaningfully reduces the loading time for that section. The Profiles page received several usability improvements.
What Changed
Performance
- Optimized build output to skip copying unchanged 3D model files.
- Enabled TieredCompilationQuickJitForLoops for faster startup.
- Tuned GarbageCollectionAdaptationMode to prevent GC stalls on app wake.
- Applied AggressiveInlining to several performance-sensitive code paths.
- Miscellaneous performance and stability improvements throughout.
UI/UX
- Added a MissingArtwork UI element for games without artwork.
- Improved Library metadata and artwork refresh logic to preserve existing visuals and fill in missing ones.
- Implemented Logo selection in the artwork/library picker.
- Added All Wide as a new Library view mode.
- Games in the Library now display asynchronously.
- Play/Stop button now appears on mouse hover over library items.
- Migrated Hotkey settings to a dedicated page, reducing Hotkeys page load time.
- Implemented UI navigation debouncing (300ms) to smooth out rapid page transitions.
- Improved gamepad navigation with better control target logic.
- Added missing DefaultButton assignments for keyboard navigation.
- Improved Profiles page behavior.
Fixes
- Fixed a timeout issue in ForegroundCallback() when task.Wait() would expire.
- Fixed QuickTools failing to create and apply profiles with per-game mode enabled.
- Fixed a UI freeze when an SDL controller GameType could not be retrieved.
- Fixed controller passthrough being incorrectly enabled on the default profile.
- Fixed SDL controller glyph logic.
- Fixed a memory leak originating from LibreHardwarePlatform.
- Fixed Hotkey chord listening button staying toggled after gamepad press.
Controller
- Implemented partial vJoy support.
Device
- Fixed IMU axis configuration for GPD Win 5, Win Max 2, and Win Mini.
Library updates
- SDL3 3.4.2
- SDL3-CS 3.4.2
Installer
- gamecontrollerdb.txt is now downloaded automatically during installation.
Assets 3
0.28.6.10 - Performance Improvements and OpenXInput Support
Highlights
- Performance improvements: This update includes a broad round of optimizations aimed at reducing CPU usage and memory footprint in several subsystems, including process and window management, LibreHardware, SDL event waiting, and power management logic.
- OpenXInput implementation: Recent Windows changes broke the previous method we relied on for associating an XInput controller with its UserIndex. HC now implements OpenXInput. This replaces our previous approach for retrieving XInput controller UserIndex through the device path and gives us a much more reliable foundation beyond Xbox 360-based controllers, extending support to Xbox One-based controllers as well.
What Changed
Performance
- Reduced CPU and memory footprint from process and window management.
- Reduced CPU and memory footprint from LibreHardware.
- Reduced CPU footprint from SDL.WaitEventTimeout().
- Reduced CPU footprint in PerformanceManager, with RequestCoreParkingMode now checking current values before reapplying them.
- Reduced overall CPU and memory footprint across the application.
Controller / Input
- Implemented OpenXInput (Xinput1_4.dll) to support Windows 11 KB5086672 update while improving the UserIndex reading logic.
- Implemented ReleaseNumber reading, which may help manage firmware-related HID index differences in the future.
- Improved the overall Inputs manager robustness and implemented per-device, KeyboardChord-based flush intervals.
- Improved the overall Controller manager robustness.
- Fixed an issue causing a race condition with XInput controller IsGone / IsBusy.
- Fixed SDL GetPathFromUserIndex() logic.
UI / UX
- Reworked the Controller Page architecture around a cleaner MVVM structure, improving maintainability and helping make future controller-related UI changes easier to build and manage.
- Improved threading and observable collection management.
- Fixed an issue preventing UI navigation when focus was on a disabled, hidden, or collapsed control.
- Fixed a controller lock race condition that could freeze the UI.
Device
- Legion Go: updated factory default fan values.
- Legion Go: reduced keyboard hook flush interval from 150ms to 10ms.
Library / Dependencies
- PixiEditor.ColorPicker
- Sentry
- WindowsAPICodePack
Full Changelog: 0.24.1.2...0.28.6.10
Assets 3
Build 0.28.4.6
Handheld Companion – Release Notes
0.28.4.6
Hotfixes
- Fixed an issue preventing CPU data from being read due to outdated LibreHardwareMonitor library and recent PawnIO update.
- Fixed an issue with PawnIO implementation due to lack of PCI Mutex.
- Fixed an issue causing TDPOverride values to be set to 0, potentially causing major stability and performance issues.