Author the custom virtual HID gamepad that replaces vJoy, and pin its wire format on both sides. Builds clean to RioGamepad.sys against the EWDK (KMDF 1.15 + VHF, x64, warnings-as-errors). driver/RioGamepad/: - ReportDescriptor.h: 6x16-bit axes (X,Y,Z,Rx,Ry,Rz), one 4-direction hat with null state, and 96 buttons — the legacy vJoy layout. 25-byte input report. - Device.c/Driver.c: KMDF root-enumerated device that creates the VHF virtual HID device (VhfCreate in DeviceAdd, VhfStart in D0Entry, VhfDelete on cleanup) and exposes a device interface + IOCTL_RIO_SUBMIT_REPORT that forwards the caller's report bytes to VhfReadReportSubmit. Thin relay: no report logic in the kernel. - Public.h: device-interface GUID, IOCTL, and the report byte layout shared with the C# client. RioGamepad.inf + build.cmd (EWDK build, catalog/sign disabled). src/RioJoy.Core/Hid/RioHidReport.cs: packs AxisOutputs + hat + 96 buttons into the exact 25-byte report (LE axes, hat nibble with 0x0F=centered, button bitmap). 13 new xUnit tests (136 total). Remaining (deploy-side): test-sign + pnputil install + verify in joy.cpl, and wire the real DeviceIoControl feeder sink (replacing NullJoystickSink). The EWDK's in-build catalog task (DrvCat) can't load Microsoft.Kits.Logger on this image, so the .cat is produced with inf2cat/signtool at install time instead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
56 lines
1.2 KiB
INI
56 lines
1.2 KiB
INI
;
|
|
; RioGamepad.inf — RIOJoy virtual HID gamepad (KMDF + VHF), root-enumerated.
|
|
;
|
|
|
|
[Version]
|
|
Signature = "$WINDOWS NT$"
|
|
Class = System
|
|
ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318}
|
|
Provider = %ManufacturerName%
|
|
CatalogFile = RioGamepad.cat
|
|
DriverVer =
|
|
PnpLockdown = 1
|
|
|
|
[DestinationDirs]
|
|
DefaultDestDir = 13
|
|
|
|
[SourceDisksNames]
|
|
1 = %DiskName%
|
|
|
|
[SourceDisksFiles]
|
|
RioGamepad.sys = 1
|
|
|
|
[Manufacturer]
|
|
%ManufacturerName% = Standard,NT$ARCH$.10.0...16299
|
|
|
|
[Standard.NT$ARCH$.10.0...16299]
|
|
%DeviceName% = RioGamepad_Device, root\RioGamepad
|
|
|
|
[RioGamepad_Device.NT]
|
|
CopyFiles = RioGamepad_CopyFiles
|
|
|
|
[RioGamepad_CopyFiles]
|
|
RioGamepad.sys
|
|
|
|
[RioGamepad_Device.NT.Services]
|
|
AddService = RioGamepad, 0x00000002, RioGamepad_Service
|
|
|
|
[RioGamepad_Service]
|
|
DisplayName = %ServiceName%
|
|
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
|
StartType = 3 ; SERVICE_DEMAND_START
|
|
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
|
ServiceBinary = %13%\RioGamepad.sys
|
|
|
|
[RioGamepad_Device.NT.Wdf]
|
|
KmdfService = RioGamepad, RioGamepad_wdfsect
|
|
|
|
[RioGamepad_wdfsect]
|
|
KmdfLibraryVersion = 1.15
|
|
|
|
[Strings]
|
|
ManufacturerName = "VWE"
|
|
DiskName = "RioGamepad Installation Disk"
|
|
DeviceName = "RIOJoy Virtual Gamepad"
|
|
ServiceName = "RIOJoy Virtual Gamepad Service"
|