b0c82333d2
audit / cargo-audit (push) Successful in 17s
apple / swift (push) Successful in 57s
android / android (push) Successful in 4m36s
ci / web (push) Successful in 34s
ci / docs-site (push) Successful in 52s
release / apple (push) Successful in 7m31s
ci / rust (push) Successful in 8m37s
ci / bench (push) Successful in 4m39s
decky / build-publish (push) Successful in 11s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 7s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 4s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
deb / build-publish (push) Successful in 2m35s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 2m18s
flatpak / build-publish (push) Successful in 4m0s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 8m31s
docker / deploy-docs (push) Successful in 19s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 8m22s
windows-host / package (push) Successful in 2m56s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 1m13s
windows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Successful in 1m15s
windows / build (aarch64-pc-windows-msvc) (push) Successful in 59s
windows / build (x86_64-pc-windows-msvc) (push) Successful in 1m3s
Windows virtual gamepads now have zero external dependencies - ViGEmBus is removed. - DualShock 4: Windows UMDF backend (inject/dualshock4_windows.rs + dualshock4_proto.rs), reusing the DualSense SwDeviceCreate game-detection identity fix. The one UMDF driver serves the DS5 or DS4 identity/descriptor/features/strings per a device_type byte the host stamps into shared memory. Driver also gains IOCTL_HID_GET_STRING and a 41-byte calibration feature. - Xbox 360: a new UMDF2 XUSB companion driver (packaging/windows/xusb-driver/) that registers GUID_DEVINTERFACE_XUSB and answers the buffered XInput IOCTLs from a shared section, so classic XInputGetState/SetState work with no kernel bus driver. inject/gamepad_windows.rs is rewritten to drive it and the vigem-client dependency is removed. Xbox One folds to the 360 XInput path. - Installer: vendor + pnputil-install the three UMDF drivers (packaging/windows/gamepad-drivers/ + install-gamepad-drivers.ps1, wired into pack-host-installer.ps1 + punktfunk-host.iss). - Multi-pad: the host stamps each pad index into the device Location (pszDeviceLocation); the driver reads it via WdfDeviceAllocAndQueryProperty to map its own *-shm-<index>, with UmdfHostProcessSharing=ProcessSharingDisabled giving each pad its own host (per-pad statics). Validated live on the Windows host: Cyberpunk native DualSense detection, DS4 identity + descriptor, XInputGetState + rumble round-trip, two pads -> two distinct XInput slots, and a full installer build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
2.5 KiB
PowerShell
51 lines
2.5 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Install the bundled punktfunk virtual-gamepad UMDF drivers - pf_dualsense (DualSense + DualShock 4,
|
|
one type-aware HID driver) and pf_xusb (Xbox 360 XUSB companion for classic XInput). Runs ELEVATED
|
|
at setup time (invoked from the installer's [Run] section). Best-effort: warns and exits 0 on any
|
|
failure, so a driver hiccup never aborts the whole install (gamepad input degrades gracefully - a
|
|
session still streams without a pad).
|
|
|
|
.DESCRIPTION
|
|
-Dir holds the staged payload: pf_dualsense.{inf,cat,dll}, pf_xusb.{inf,cat,dll}, and the signing
|
|
.cer. Steps:
|
|
1. Trust the self-signed driver cert (machine Root + TrustedPublisher) so pnputil adds it silently.
|
|
2. pnputil /add-driver each .inf - adds the package to the driver store. (No /install or device-node
|
|
creation: the host SwDeviceCreate's the per-session devnodes itself when a client forwards a pad,
|
|
so PnP binds the store driver on demand.)
|
|
|
|
ASCII-only on purpose: this is run by the installer via Windows PowerShell 5.1, which mis-decodes a
|
|
BOM-less UTF-8 non-ASCII char (e.g. an em-dash) as a smart-quote and breaks parsing.
|
|
|
|
.EXAMPLE
|
|
powershell -ExecutionPolicy Bypass -File install-gamepad-drivers.ps1 -Dir C:\path\to\gamepad
|
|
#>
|
|
[CmdletBinding()]
|
|
param([string]$Dir = $PSScriptRoot)
|
|
# Never abort the installer on a driver failure.
|
|
$ErrorActionPreference = 'Continue'
|
|
trap { Write-Warning "gamepad driver install error: $_"; exit 0 }
|
|
|
|
# 1) Trust the self-signed driver cert (Root so the chain validates + TrustedPublisher so pnputil adds
|
|
# it without a prompt).
|
|
$cer = Get-ChildItem -Path $Dir -Filter *.cer -ErrorAction SilentlyContinue | Select-Object -First 1
|
|
if ($cer) {
|
|
Write-Host "==> importing $($cer.Name) to Root + TrustedPublisher"
|
|
certutil.exe -addstore -f Root "$($cer.FullName)" | Out-Null
|
|
certutil.exe -addstore -f TrustedPublisher "$($cer.FullName)" | Out-Null
|
|
}
|
|
else { Write-Warning "no .cer in $Dir; drivers may not install silently (untrusted publisher)" }
|
|
|
|
# 2) Add each driver package to the store (idempotent; re-adding the same .inf is harmless).
|
|
$infs = Get-ChildItem -Path $Dir -Filter *.inf -ErrorAction SilentlyContinue
|
|
if (-not $infs) { Write-Warning "no driver .inf in $Dir; skipping gamepad driver install."; exit 0 }
|
|
foreach ($inf in $infs) {
|
|
Write-Host "==> pnputil /add-driver $($inf.Name)"
|
|
& pnputil.exe /add-driver "$($inf.FullName)"
|
|
$rc = $LASTEXITCODE
|
|
if ($rc -eq 3010) { Write-Host " added; a reboot is recommended." }
|
|
elseif ($rc -ne 0) { Write-Warning "pnputil /add-driver $($inf.Name) returned $rc" }
|
|
}
|
|
|
|
exit 0
|