d3xMachina / BetterJoy

Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput
Other
73 stars 5 forks source link

[ENHANCEMENT] Remove HIDHide dependency #30

Open LinkSlayer64 opened 1 week ago

LinkSlayer64 commented 1 week ago

Since VigEMBus was end-of-lifed, I've been researching what the future will be, to little avail. While doing so, I stumbled upon this bit of information of someone mistakenly believing they can eliminate the need for VigEmBus' in another program, but instead the original creator of both HIDHide and VigEm commented on finding a way to remove the need for HIDHide

Less dependencies on external software means easier setup for users, and less failure points.

A bit of detail can be found in this discussion: https://github.com/Valkirie/HandheldCompanion/issues/1042 including an example that can be worked into pre-existing code, it seems. However, it is probably not a simple endeavor. I'd look into helping, if I have time, but I will warn that I am not familiar with HID programming at all (I'm more of a sysadmin.)

Anyway, just figured it might be something of use. Or, maybe completely unnecessary, you decide!

d3xMachina commented 3 days ago

The solution provided only works for USB devices. It works by replacing the driver of the device with a generic WinUSB driver so it is needed to talk to the controller in USB instead of HID as it's done currently. There is this library by the same author to facilitate that.

There is this project that shows how to hide a bluetooth device by patching its record. It has the disadvantage to need the bluetooth to be restarted every times you hide/unhide a device. For full examples, refers to this project

Less dependencies on external software means easier setup for users, and less failure points.

Easier to setup for the user but it has other dependencies and failure points.

According to the author of HIDHide, it is very unlikely it stops working unless Microsoft make a new controller API. It is still maintained and reliable so far.

There is quite a lot of work involved here for little benefit. However, I'm not against someone implementing this in a PR as an alternative solution for device hiding. It has one other advantage over HIDHide : HIDHide could be flagged by an anti cheat since it's a kernel mode driver. (I never had the issue though)