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>
66 lines
2.6 KiB
XML
66 lines
2.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
<ItemGroup Label="ProjectConfigurations">
|
|
<ProjectConfiguration Include="Debug|x64">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|x64">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
</ItemGroup>
|
|
<PropertyGroup Label="Globals">
|
|
<ProjectGuid>{4F1E9C2A-6B3D-4E58-9A77-1C2D3E4F5A6B}</ProjectGuid>
|
|
<MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
|
|
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
|
<Platform Condition="'$(Platform)' == ''">x64</Platform>
|
|
<RootNamespace>RioGamepad</RootNamespace>
|
|
</PropertyGroup>
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
<TargetVersion>Windows10</TargetVersion>
|
|
<UseDebugLibraries>true</UseDebugLibraries>
|
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
|
<ConfigurationType>Driver</ConfigurationType>
|
|
<DriverType>KMDF</DriverType>
|
|
<KMDFVersionMajor>1</KMDFVersionMajor>
|
|
<KMDFVersionMinor>15</KMDFVersionMinor>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
<TargetVersion>Windows10</TargetVersion>
|
|
<UseDebugLibraries>false</UseDebugLibraries>
|
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
|
<ConfigurationType>Driver</ConfigurationType>
|
|
<DriverType>KMDF</DriverType>
|
|
<KMDFVersionMajor>1</KMDFVersionMajor>
|
|
<KMDFVersionMinor>15</KMDFVersionMinor>
|
|
</PropertyGroup>
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
<ItemDefinitionGroup>
|
|
<ClCompile>
|
|
<WppEnabled>false</WppEnabled>
|
|
<TreatWarningAsError>true</TreatWarningAsError>
|
|
</ClCompile>
|
|
<Link>
|
|
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)vhfkm.lib</AdditionalDependencies>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<ItemGroup>
|
|
<ClCompile Include="Driver.c" />
|
|
<ClCompile Include="Device.c" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<ClInclude Include="Driver.h" />
|
|
<ClInclude Include="Public.h" />
|
|
<ClInclude Include="ReportDescriptor.h" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<Inf Include="RioGamepad.inf" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<FilesToPackage Include="$(TargetPath)" />
|
|
</ItemGroup>
|
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
</Project>
|