diff --git a/sys/Ds4Pdo.cpp b/sys/Ds4Pdo.cpp index baccb6d..16ed3b6 100644 --- a/sys/Ds4Pdo.cpp +++ b/sys/Ds4Pdo.cpp @@ -15,7 +15,7 @@ ViGEm::Bus::Targets::EmulationTargetDS4::EmulationTargetDS4() : EmulationTargetP UsbConfigurationDescriptionSize = DS4_DESCRIPTOR_SIZE; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PrepareDevice(PWDFDEVICE_INIT DeviceInit, +NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) { NTSTATUS status; @@ -99,7 +99,7 @@ NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PrepareDevice(PWDFDEVICE_INIT return STATUS_SUCCESS; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PrepareHardware() +NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PdoPrepareHardware() { WDF_QUERY_INTERFACE_CONFIG ifaceCfg; INTERFACE devinterfaceHid; @@ -152,7 +152,7 @@ NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PrepareHardware() return STATUS_SUCCESS; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::InitContext() +NTSTATUS ViGEm::Bus::Targets::EmulationTargetDS4::PdoInitContext() { NTSTATUS status; @@ -380,7 +380,7 @@ VOID ViGEm::Bus::Targets::EmulationTargetDS4::GetConfigurationDescriptorType(PUC RtlCopyBytes(Buffer, Ds4DescriptorData, Length); } -VOID ViGEm::Bus::Targets::EmulationTargetDS4::GetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) +VOID ViGEm::Bus::Targets::EmulationTargetDS4::UsbGetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) { pDescriptor->bLength = 0x12; pDescriptor->bDescriptorType = USB_DEVICE_DESCRIPTOR_TYPE; diff --git a/sys/Ds4Pdo.hpp b/sys/Ds4Pdo.hpp index 2effd28..d9c52ef 100644 --- a/sys/Ds4Pdo.hpp +++ b/sys/Ds4Pdo.hpp @@ -24,17 +24,17 @@ namespace ViGEm::Bus::Targets EmulationTargetDS4(); ~EmulationTargetDS4() = default; - NTSTATUS PrepareDevice(PWDFDEVICE_INIT DeviceInit, + NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) override; - NTSTATUS PrepareHardware() override; + NTSTATUS PdoPrepareHardware() override; - NTSTATUS InitContext() override; + NTSTATUS PdoInitContext() override; VOID GetConfigurationDescriptorType(PUCHAR Buffer, ULONG Length) override; - VOID GetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) override; + VOID UsbGetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) override; NTSTATUS SelectConfiguration(PURB Urb) override; diff --git a/sys/EmulationTargetPDO.cpp b/sys/EmulationTargetPDO.cpp index 71127c7..1b80b82 100644 --- a/sys/EmulationTargetPDO.cpp +++ b/sys/EmulationTargetPDO.cpp @@ -10,7 +10,7 @@ PCWSTR ViGEm::Bus::Core::EmulationTargetPDO::_deviceLocation = L"Virtual Gamepad Emulation Bus"; -NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::CreateDevice(WDFDEVICE Device, PWDFDEVICE_INIT DeviceInit, PPDO_IDENTIFICATION_DESCRIPTION Description) +NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::PdoCreateDevice(WDFDEVICE Device, PWDFDEVICE_INIT DeviceInit, PPDO_IDENTIFICATION_DESCRIPTION Description) { NTSTATUS status = STATUS_UNSUCCESSFUL; WDF_DEVICE_PNP_CAPABILITIES pnpCaps; @@ -69,7 +69,7 @@ NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::CreateDevice(WDFDEVICE Device, PW #pragma region Prepare PDO - status = this->PrepareDevice(DeviceInit, &deviceId, &deviceDescription); + status = this->PdoPrepareDevice(DeviceInit, &deviceId, &deviceDescription); if (!NT_SUCCESS(status)) break; @@ -179,7 +179,7 @@ NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::CreateDevice(WDFDEVICE Device, PW #pragma region Set PDO contexts - status = this->InitContext(); + status = this->PdoInitContext(); if (!NT_SUCCESS(status)) { @@ -311,14 +311,14 @@ ULONG ViGEm::Bus::Core::EmulationTargetPDO::GetSerial() const #pragma region USB Interface Functions -BOOLEAN USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbIsDeviceHighSpeed(IN PVOID BusContext) +BOOLEAN USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbInterfaceIsDeviceHighSpeed(IN PVOID BusContext) { UNREFERENCED_PARAMETER(BusContext); return TRUE; } -NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbQueryBusInformation(IN PVOID BusContext, IN ULONG Level, +NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbInterfaceQueryBusInformation(IN PVOID BusContext, IN ULONG Level, IN OUT PVOID BusInformationBuffer, IN OUT PULONG BusInformationBufferLength, OUT PULONG BusInformationActualLength) @@ -332,7 +332,7 @@ NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbQueryBusInformatio return STATUS_UNSUCCESSFUL; } -NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbSubmitIsoOutUrb(IN PVOID BusContext, IN PURB Urb) +NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbInterfaceSubmitIsoOutUrb(IN PVOID BusContext, IN PURB Urb) { UNREFERENCED_PARAMETER(BusContext); UNREFERENCED_PARAMETER(Urb); @@ -340,7 +340,7 @@ NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbSubmitIsoOutUrb(IN return STATUS_UNSUCCESSFUL; } -NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbQueryBusTime(IN PVOID BusContext, IN OUT PULONG CurrentUsbFrame) +NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbInterfaceQueryBusTime(IN PVOID BusContext, IN OUT PULONG CurrentUsbFrame) { UNREFERENCED_PARAMETER(BusContext); UNREFERENCED_PARAMETER(CurrentUsbFrame); @@ -348,7 +348,7 @@ NTSTATUS USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbQueryBusTime(IN PV return STATUS_UNSUCCESSFUL; } -VOID USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbGetUSBDIVersion(IN PVOID BusContext, +VOID USB_BUSIFFN ViGEm::Bus::Core::EmulationTargetPDO::UsbInterfaceGetUSBDIVersion(IN PVOID BusContext, IN OUT PUSBD_VERSION_INFORMATION VersionInformation, IN OUT PULONG HcdCapabilities) { @@ -436,7 +436,7 @@ NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::EvtDevicePrepareHardware( const auto ctx = EmulationTargetPdoGetContext(Device); - return ctx->Target->PrepareHardware(); + return ctx->Target->PdoPrepareHardware(); } VOID ViGEm::Bus::Core::EmulationTargetPDO::EvtIoInternalDeviceControl( @@ -576,7 +576,7 @@ VOID ViGEm::Bus::Core::EmulationTargetPDO::EvtIoInternalDeviceControl( TRACE_BUSPDO, ">> >> >> USB_DEVICE_DESCRIPTOR_TYPE"); - ctx->Target->GetDeviceDescriptorType(static_cast(urb->UrbControlDescriptorRequest.TransferBuffer)); + ctx->Target->UsbGetDeviceDescriptorType(static_cast(urb->UrbControlDescriptorRequest.TransferBuffer)); break; @@ -679,7 +679,7 @@ VOID ViGEm::Bus::Core::EmulationTargetPDO::EvtIoInternalDeviceControl( ">> IOCTL_INTERNAL_USB_GET_PORT_STATUS"); // We report the (virtual) port as always active - *(unsigned long*)irpStack->Parameters.Others.Argument1 = USBD_PORT_ENABLED | USBD_PORT_CONNECTED; + *static_cast(irpStack->Parameters.Others.Argument1) = USBD_PORT_ENABLED | USBD_PORT_CONNECTED; status = STATUS_SUCCESS; @@ -702,7 +702,7 @@ VOID ViGEm::Bus::Core::EmulationTargetPDO::EvtIoInternalDeviceControl( TRACE_BUSPDO, ">> IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION"); - // TODO: implement + // TODO: implement? // This happens if the I/O latency is too high so HIDUSB aborts communication. status = STATUS_SUCCESS; diff --git a/sys/EmulationTargetPDO.hpp b/sys/EmulationTargetPDO.hpp index 5f6c5f3..be2323c 100644 --- a/sys/EmulationTargetPDO.hpp +++ b/sys/EmulationTargetPDO.hpp @@ -31,17 +31,15 @@ namespace ViGEm::Bus::Core virtual ~EmulationTargetPDO() = default; - virtual NTSTATUS PrepareDevice(PWDFDEVICE_INIT DeviceInit, + virtual NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) = 0; - virtual NTSTATUS PrepareHardware() = 0; + virtual NTSTATUS PdoPrepareHardware() = 0; - virtual NTSTATUS InitContext() = 0; - - virtual VOID GetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) = 0; - - NTSTATUS CreateDevice(_In_ WDFDEVICE Device, + virtual NTSTATUS PdoInitContext() = 0; + + NTSTATUS PdoCreateDevice(_In_ WDFDEVICE Device, _In_ PWDFDEVICE_INIT DeviceInit, _In_ PPDO_IDENTIFICATION_DESCRIPTION Description); @@ -54,6 +52,8 @@ namespace ViGEm::Bus::Core return (other.SerialNo == this->SerialNo); } + virtual VOID UsbGetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) = 0; + NTSTATUS UsbSelectConfiguration(PURB Urb); void UsbAbortPipe(); @@ -75,9 +75,9 @@ namespace ViGEm::Bus::Core static PCWSTR _deviceLocation; - static BOOLEAN USB_BUSIFFN UsbIsDeviceHighSpeed(IN PVOID BusContext); + static BOOLEAN USB_BUSIFFN UsbInterfaceIsDeviceHighSpeed(IN PVOID BusContext); - static NTSTATUS USB_BUSIFFN UsbQueryBusInformation( + static NTSTATUS USB_BUSIFFN UsbInterfaceQueryBusInformation( IN PVOID BusContext, IN ULONG Level, IN OUT PVOID BusInformationBuffer, @@ -85,11 +85,11 @@ namespace ViGEm::Bus::Core OUT PULONG BusInformationActualLength ); - static NTSTATUS USB_BUSIFFN UsbSubmitIsoOutUrb(IN PVOID BusContext, IN PURB Urb); + static NTSTATUS USB_BUSIFFN UsbInterfaceSubmitIsoOutUrb(IN PVOID BusContext, IN PURB Urb); - static NTSTATUS USB_BUSIFFN UsbQueryBusTime(IN PVOID BusContext, IN OUT PULONG CurrentUsbFrame); + static NTSTATUS USB_BUSIFFN UsbInterfaceQueryBusTime(IN PVOID BusContext, IN OUT PULONG CurrentUsbFrame); - static VOID USB_BUSIFFN UsbGetUSBDIVersion( + static VOID USB_BUSIFFN UsbInterfaceGetUSBDIVersion( IN PVOID BusContext, IN OUT PUSBD_VERSION_INFORMATION VersionInformation, IN OUT PULONG HcdCapabilities diff --git a/sys/XusbPdo.cpp b/sys/XusbPdo.cpp index 6088258..6040d98 100644 --- a/sys/XusbPdo.cpp +++ b/sys/XusbPdo.cpp @@ -7,7 +7,6 @@ #include "busenum.h" -#include "ViGEmBusDriver.h" PCWSTR ViGEm::Bus::Targets::EmulationTargetXUSB::_deviceDescription = L"Virtual Xbox 360 Controller"; @@ -18,7 +17,7 @@ ViGEm::Bus::Targets::EmulationTargetXUSB::EmulationTargetXUSB() : EmulationTarge UsbConfigurationDescriptionSize = XUSB_DESCRIPTOR_SIZE; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, +NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) { NTSTATUS status; @@ -103,7 +102,7 @@ NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PrepareDevice(PWDFDEVICE_INIT return STATUS_SUCCESS; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PrepareHardware() +NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PdoPrepareHardware() { WDF_QUERY_INTERFACE_CONFIG ifaceCfg; @@ -195,11 +194,11 @@ NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PrepareHardware() xusbInterface.InterfaceReference = WdfDeviceInterfaceReferenceNoOp; xusbInterface.InterfaceDereference = WdfDeviceInterfaceDereferenceNoOp; - xusbInterface.SubmitIsoOutUrb = UsbSubmitIsoOutUrb; - xusbInterface.GetUSBDIVersion = UsbGetUSBDIVersion; - xusbInterface.QueryBusTime = UsbQueryBusTime; - xusbInterface.QueryBusInformation = UsbQueryBusInformation; - xusbInterface.IsDeviceHighSpeed = UsbIsDeviceHighSpeed; + xusbInterface.SubmitIsoOutUrb = UsbInterfaceSubmitIsoOutUrb; + xusbInterface.GetUSBDIVersion = UsbInterfaceGetUSBDIVersion; + xusbInterface.QueryBusTime = UsbInterfaceQueryBusTime; + xusbInterface.QueryBusInformation = UsbInterfaceQueryBusInformation; + xusbInterface.IsDeviceHighSpeed = UsbInterfaceIsDeviceHighSpeed; WDF_QUERY_INTERFACE_CONFIG_INIT( &ifaceCfg, @@ -221,7 +220,7 @@ NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PrepareHardware() return STATUS_SUCCESS; } -NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::InitContext() +NTSTATUS ViGEm::Bus::Targets::EmulationTargetXUSB::PdoInitContext() { WDF_OBJECT_ATTRIBUTES attributes; PUCHAR blobBuffer; @@ -450,7 +449,7 @@ VOID ViGEm::Bus::Targets::EmulationTargetXUSB::GetConfigurationDescriptorType(PU RtlCopyBytes(Buffer, XusbDescriptorData, Length); } -VOID ViGEm::Bus::Targets::EmulationTargetXUSB::GetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) +VOID ViGEm::Bus::Targets::EmulationTargetXUSB::UsbGetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) { pDescriptor->bLength = 0x12; pDescriptor->bDescriptorType = USB_DEVICE_DESCRIPTOR_TYPE; diff --git a/sys/XusbPdo.hpp b/sys/XusbPdo.hpp index 1ee5fc3..af211ed 100644 --- a/sys/XusbPdo.hpp +++ b/sys/XusbPdo.hpp @@ -31,17 +31,17 @@ namespace ViGEm::Bus::Targets EmulationTargetXUSB(); ~EmulationTargetXUSB() = default; - NTSTATUS PrepareDevice(PWDFDEVICE_INIT DeviceInit, + NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, PUNICODE_STRING DeviceDescription) override; - NTSTATUS PrepareHardware() override; + NTSTATUS PdoPrepareHardware() override; - NTSTATUS InitContext() override; + NTSTATUS PdoInitContext() override; VOID GetConfigurationDescriptorType(PUCHAR Buffer, ULONG Length) override; - VOID GetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) override; + VOID UsbGetDeviceDescriptorType(PUSB_DEVICE_DESCRIPTOR pDescriptor) override; NTSTATUS SelectConfiguration(PURB Urb) override;