deb / build-publish (push) Successful in 9m31s
windows-drivers / probe-and-proto (push) Successful in 42s
ci / web (push) Successful in 54s
ci / docs-site (push) Successful in 1m9s
windows-drivers / driver-build (push) Successful in 2m1s
ci / bench (push) Successful in 7m35s
decky / build-publish (push) Successful in 20s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 10s
deb / build-publish-host (push) Successful in 10m4s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 10s
android / android (push) Successful in 12m30s
ci / rust-arm64 (push) Successful in 13m55s
apple / swift (push) Successful in 5m28s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m41s
deb / build-publish-client-arm64 (push) Successful in 11m7s
windows-host / package (push) Successful in 16m55s
arch / build-publish (push) Successful in 20m3s
docker / build-push (ci, ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 8m46s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 9m7s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 10m54s
docker / deploy-docs (push) Successful in 34s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 4m4s
flatpak / build-publish (push) Failing after 8m23s
docker / build-push-arm64cross (push) Successful in 3m59s
windows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 3m28s
windows / build (aarch64-pc-windows-msvc) (push) Successful in 4m48s
ci / rust (push) Successful in 32m19s
windows / build (x86_64-pc-windows-msvc) (push) Successful in 5m55s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 19m9s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 18m53s
release / apple (push) Successful in 29m51s
apple / screenshots (push) Successful in 24m26s
`pf_dualsense.inx` gave all four hardware ids a single %DeviceDesc%, so Device Manager labelled an emulated DualShock 4, DualSense Edge and Steam Deck pad "punktfunk Virtual DualSense". The HID layer was always per-type — device_type picks the PID (09CC for DS4), the report descriptor and the product string — but the one place a user goes to check said DualSense for every choice, which reads exactly like the controller-type setting being ignored. Split into four model lines over the same install section, one description each. No binding, service or descriptor change; stampinf's 9.9.MMdd.HHmm DriverVer increments on every build, so pnputil takes the update. InfVerif on the WDK runner: INF is VALID. Also correct the Slot.pref comment from the previous commit: emulating a DualShock 4 gives up adaptive triggers by construction. HidOutput::Trigger is emitted only by dualsense_proto, and a DS4 has no trigger-effect reports — the host never generates any to send. Rumble and the lightbar remain. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
97 lines
3.4 KiB
Plaintext
97 lines
3.4 KiB
Plaintext
;/*++
|
|
; punktfunk virtual PlayStation/Valve pads — UMDF2 HID minidriver INF (M0 spike).
|
|
; One package, four hardware ids: DualSense, DualShock 4, DualSense Edge, Steam Deck.
|
|
; Adapted from the WDK vhidmini2 UMDF2 sample (VhidminiUm.inx).
|
|
; Depends on MsHidUmdf.inf (build >= 22000).
|
|
; Install: devgen /add /hardwareid "root\pf_dualsense" (after pnputil /add-driver /install)
|
|
;--*/
|
|
[Version]
|
|
Signature="$WINDOWS NT$"
|
|
Class=HIDClass
|
|
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
|
|
Provider=%ProviderString%
|
|
CatalogFile=pf_dualsense.cat
|
|
PnpLockdown=1
|
|
|
|
[DestinationDirs]
|
|
DefaultDestDir = 13
|
|
|
|
[SourceDisksNames]
|
|
1=%Disk_Description%,,,
|
|
|
|
[SourceDisksFiles]
|
|
pf_dualsense.dll=1
|
|
|
|
[Manufacturer]
|
|
%ManufacturerString%=pf, NT$ARCH$.10.0...22000
|
|
|
|
[pf.NT$ARCH$.10.0...22000]
|
|
; Hardware ids: `root\pf_dualsense` for a root-enumerated devnode (devgen/devcon tests); `pf_dualsense`
|
|
; for the host's SwDeviceCreate'd DualSense (the `root\` prefix is reserved for root enumeration, so
|
|
; SwDeviceCreate rejects it with E_INVALIDARG); `pf_dualshock4` / `pf_dualsenseedge` / `pf_steamdeck`
|
|
; for the host's other virtual pads — ONE driver binds all of them (every model line below installs
|
|
; the same `pfDualSense` section) and serves the matching HID identity per the device_type byte the
|
|
; host stamps into shared memory.
|
|
;
|
|
; Each id carries its OWN description: Device Manager reads this string, and a single shared
|
|
; "Virtual DualSense" made an emulated DualShock 4 look like the controller-type setting had been
|
|
; ignored. The HID layer (VID/PID, report descriptor, product string) was always per-type; this
|
|
; makes the human-readable name agree with it.
|
|
%DeviceDesc%=pfDualSense, root\pf_dualsense, pf_dualsense
|
|
%DeviceDescDS4%=pfDualSense, pf_dualshock4
|
|
%DeviceDescEdge%=pfDualSense, pf_dualsenseedge
|
|
%DeviceDescDeck%=pfDualSense, pf_steamdeck
|
|
|
|
[pfDualSense.NT]
|
|
CopyFiles=UMDriverCopy
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT
|
|
|
|
[pfDualSense.NT.hw]
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT.hw
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.hw
|
|
|
|
[pfDualSense.NT.Services]
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT.Services
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.Services
|
|
|
|
[pfDualSense.NT.Filters]
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.Filters
|
|
|
|
[pfDualSense.NT.Wdf]
|
|
UmdfService="pf_dualsense", pf_dualsense_Install
|
|
UmdfServiceOrder=pf_dualsense
|
|
UmdfKernelModeClientPolicy=AllowKernelModeClients
|
|
UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
|
|
UmdfMethodNeitherAction=Copy
|
|
UmdfFsContextUsePolicy=CanUseFsContext2
|
|
; Each pad gets its OWN WUDFHost so the driver's per-pad statics (incl. the shm index) don't collide
|
|
; across multiple simultaneous controllers (multi-pad).
|
|
UmdfHostProcessSharing=ProcessSharingDisabled
|
|
|
|
[pf_dualsense_Install]
|
|
UmdfLibraryVersion=$UMDFVERSION$
|
|
ServiceBinary="%13%\pf_dualsense.dll"
|
|
|
|
[UMDriverCopy]
|
|
pf_dualsense.dll
|
|
|
|
[Strings]
|
|
ProviderString ="punktfunk"
|
|
ManufacturerString ="punktfunk"
|
|
ClassName ="HID device"
|
|
Disk_Description ="punktfunk DualSense Installation Disk"
|
|
; One per hardware id — these are what Device Manager shows. Keep them aligned with the product
|
|
; strings the driver serves per device_type (src/lib.rs `on_get_string`).
|
|
DeviceDesc ="punktfunk Virtual DualSense"
|
|
DeviceDescDS4 ="punktfunk Virtual DualShock 4"
|
|
DeviceDescEdge ="punktfunk Virtual DualSense Edge"
|
|
DeviceDescDeck ="punktfunk Virtual Steam Deck Controller"
|