No description
  • Rust 85.2%
  • CSS 5.4%
  • JavaScript 3.7%
  • HTML 3.1%
  • PowerShell 2.6%
Find a file
2026-08-30 22:07:33 -03:00
src Fixed regression on toggling NV Whisper on the latest driver 2026-08-30 22:07:33 -03:00
web Added settings menu and other tweaks 2026-08-19 11:57:41 -03:00
.gitignore Added hotkey helper 2026-08-08 21:25:06 -03:00
ACER_POWER_PROFILE_RUST_SPEC.md Added hotkey helper 2026-08-08 21:25:06 -03:00
AGENTS.md Fixed regression on toggling NV Whisper on the latest driver 2026-08-30 22:07:33 -03:00
Cargo.lock Added hotkey helper 2026-08-08 21:25:06 -03:00
Cargo.toml Fixed regression on toggling NV Whisper on the latest driver 2026-08-30 22:07:33 -03:00
HOTKEY_HELPER.md Added settings menu and other tweaks 2026-08-19 11:57:41 -03:00
install-hotkey-helper.ps1 Added settings menu and other tweaks 2026-08-19 11:57:41 -03:00
install-service.ps1 Added hotkey helper 2026-08-08 21:25:06 -03:00
README.md Fixed regression on toggling NV Whisper on the latest driver 2026-08-30 22:07:33 -03:00
uninstall-hotkey-helper.ps1 Added hotkey helper 2026-08-08 21:25:06 -03:00
uninstall-service.ps1 Firt release 2026-07-24 20:48:15 -03:00

Acer Profile Switcher for Nitro

A small Windows service that hosts an Axum web app at http://127.0.0.1:56789. Its four buttons select Silent, Quiet, Balanced, and Performance modes through ROOT\WMI AcerGamingFunction and NVIDIA Whisper.

The native COM/WMI implementation follows ACER_POWER_PROFILE_RUST_SPEC.md and the AeroForge service implementation. It sends SetGamingMiscSetting(0x0B | profile << 8) first, validates gmOutput, and only then falls back to SetGamingProfile(profile).

Silent and Quiet both apply Acer Quiet firmware value 0x00. Silent enables NVIDIA Whisper / External Quiet Mode through NVAPI driver settings (DRS 0x10115C8D). The older hidden Whisper setter is kept only as a fallback because Game Ready 616+ rejects it with NVAPI_NOT_SUPPORTED. Quiet, Balanced, and Performance explicitly disable that NVIDIA quiet state. Synchronization is best-effort: an absent or unsupported NVIDIA GPU does not turn a successful Acer firmware change into a firmware failure. The service retries NVIDIA quiet control in the logged-on desktop session when the LocalSystem session 0 call is rejected.

Turbo (0x05) is currently disabled because this laptop reports a supported profile mask that does not include it.

Settings

The dashboard's Settings control stores a versioned JSON document owned by the service at %PROGRAMDATA%\\AcerProfileSwitcher\\settings.json. It controls the helper overlay (visibility, duration, opacity, and position), whether either cycle input is enabled, and the alternative shortcut key (P by default). The service validates and clamps values before saving, writes through a temporary file replacement, and quarantines a corrupt file before restoring defaults. Settings are preferences only; the current firmware profile is always read live and is never persisted as state.

The service reads GetGamingMiscSetting(0x0B) at startup and after every successful write. The UI highlights only a firmware-confirmed mode; Silent and Quiet additionally require a successfully synchronized Whisper request before the service distinguishes them. A rejected, unknown, or unavailable readback is not presented as a confirmed change. Because some Acer firmware updates this value asynchronously, the service uses a short bounded confirmation sequence rather than trusting only the first immediate response. An unconfirmed result triggers one later UI refresh.

Per-user profile controls

The unelevated helper cycles the same mode sequence from either the physical Nitro key or the configurable alternative Ctrl+Alt+Shift+key shortcut (P by default):

Silent -> Quiet -> Balanced -> Performance -> Silent

It observes the Nitro key through background Win32 Raw Input and shows the firmware-confirmed active mode in a short on-screen overlay. Install or update it for the current user after a release build:

.\install-hotkey-helper.ps1

See HOTKEY_HELPER.md for its Raw Input signature, confirmation behavior, logging, and removal instructions.

Try it in a console

cargo run -- --console

Then open http://127.0.0.1:56789. Press Ctrl+C to stop it.

Install the Windows service

Build and run the installer from an elevated PowerShell:

cargo build --release
.\install-service.ps1

Running the installer again stops and updates an existing installation. The service starts automatically with Windows and listens only on the IPv4 loopback interface. To remove it:

If the running service locks the normal Cargo release executable during an upgrade, build into the supported staging directory before running the installer:

cargo build --release --target-dir target\staging
.\install-service.ps1

The installer stops the service and promotes the newer staged executable.

.\uninstall-service.ps1

Notes

  • Windows and supported Acer hardware are required.
  • The known WMI instance is AcerGamingFunction.InstanceName="ACPI\\PNP0C14\\APGe_0".
  • Requests are serialized, and slow COM work runs outside Axum's async workers.
  • Native COM uses the method-specific Acer WMI input type. If a model rejects the native call, the service uses a hidden PowerShell/CIM fallback and caches that choice for the affected method.
  • The UI uses live firmware readback. Silent versus Quiet is additionally identified from the last Whisper state successfully synchronized during the current service lifetime, because firmware reports 0x00 for both and NVAPI exposes no matching getter here.
  • This project does not alter fan curves, GPU overclocking, or Windows processor policies.