Davidobot/BetterJoy

Support for Unofficial Controllers

OkamiTakahashi opened this issue · 107 comments

I have a couple of wired USB Nintendo Switch pro controllers, but no way of using them with Cemu. They can be used by my Steam account, but Cemu doesn't detect them at all, nor does BetterJoy. Well, a previous nightly of BetterJoy did when I tried to add controllers, but nothing happened. Now with the current build I can't even attempt that. The locate feature doesn't even function for these.

I'm sorry if this sounds rude, but is it REALLY too much to ask for PROPER support for these kinds of USB Switch pro controllers? I swear, it says there's USB support ON the page, but judging from my own experience, this is not the case at all; the controllers are very clearly plugged in, but not detected by this program. For the record, my controllers are made by PowerA and PDP- two are typical looking pro controllers with a Zelda motif, and one is a pro controller in the shape of a GCN controller- also with a Zelda motif. I'm attaching images of them at the bottom for reference. As someone continuing their file on BOTW from console and beta-testing a big mod pack in development, I wanted to use a natural-feeling controller rather than the Xbox 360 controller which, while nice and comfortable, didn't sit right with me while using Cemu, and is out of action currently.

6250912_sd

wiredsmashpadpro_20-_203-4_right_link

They're not official pro controllers, so yes, it is quite hard for me to add support without having physical access to them.

So, apparently third party officially licensed pro controllers don't count as official pro controllers then? That's a shame, considering the computer recognizes it and other programs on said computer.. Guess I'll just go back to using an Xbox 360 one, once I can procure a new bluetooth receiver for mine.

@OkamiTakahashi If you're willing, I can send you a small program that will extract the necessary info I need about the controllers (hardware IDs) and if you're willing to test, then we can get somewhere?

BetterJoy_Test_Ver.zip
Plug in your controllers, run this and send me the block of text from the console that looks like

-- COPY ME --
Vendor: 1406; Product: 8201;
-- COPY ME END --

I tried the same, but:

''HidGuardian is enabled.
-- COPY ME --
-- COPY ME END --
Starting server on 127.0.0.1:26760
All systems go''

If you're willing to help me too, that would be very much appreciated.

Okay, I'll post an updated version to try things tomorrow.

Thank you!

BetterJoy_Test_Ver.zip
Here's another version to try. This will list all your connected devices.

If you've used HidGuardian before, go to http://localhost:26762/ and clear out device, then restart your PC. Plug in your controller and then run the test version, pasting the results of the COPY ME here.

Thanks, I think it worked!
-- COPY ME -- Name: Gaming KB Vendor: 9610 Product: 58 Name: USB Keyboard Vendor: 6785 Product: 8212 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: Gaming KB Vendor: 9610 Product: 58 Name: Gaming KB Vendor: 9610 Product: 58 Name: Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch Vendor: 3695 Product: 388 Name: Gaming KB Vendor: 9610 Product: 58 Name: Vendor: 1133 Product: 49713 Name: G203 Prodigy Gaming Mouse Vendor: 1133 Product: 49284 Name: Vendor: 1133 Product: 49714 Name: Gaming KB Vendor: 9610 Product: 58 Name: USB Keyboard Vendor: 6785 Product: 8212 Name: USB Keyboard Vendor: 6785 Product: 8212 Name: USB Keyboard Vendor: 6785 Product: 8212 -- COPY ME END --

Name: Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch Vendor: 3695 Product: 388
(its this i think)

I also try. Haha. . .
-- COPY ME --
Name: Broadcom Bluetooth Wireless Mouse Vendor: 2652 Product: 1
Name: Broadcom Bluetooth Wireless Mouse Vendor: 2652 Product: 1
Name: Broadcom Bluetooth Wireless Mouse Vendor: 2652 Product: 1
Name: XiaoMi Bluetooth Wireless GameController Vendor: 10007 Product: 12612
Name: Vendor: 1133 Product: 45083
Name: Vendor: 1133 Product: 45083
Name: Vendor: 1133 Product: 45083
-- COPY ME END --

Nintendo Wireless Gamepad
HID{00001124-0000-1000-8000-00805F9B34FB}_VID&0002057E_PID&2009

GoerTek Corp. XiaoMi Bluetooth Wireless GameController
HID{00001124-0000-1000-8000-00805F9B34FB}_VID&00022717_PID&3144

BetterJoy_3rdP_Test.zip
Cool, here's an experimental version. Basically, plug in your controllers. Click the "Add Controllers" button. Then from "All Devices" select your controller and click the -> button. Then click on the controller in the "Switch Controllers" menu and set its type. Click apply. Tell me what happens.

when i click add controllers: See the end of this message for details on invoking
`just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at BetterJoyForCemu._3rdPartyControllers.ContainsText(ListBox a, String manu) in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\3rdPartyControllers.cs:line 92
at BetterJoyForCemu._3rdPartyControllers.RefreshControllerList() in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\3rdPartyControllers.cs:line 106
at BetterJoyForCemu._3rdPartyControllers..ctor() in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\3rdPartyControllers.cs:line 78
at BetterJoyForCemu.MainForm.btn_open3rdP_Click(Object sender, EventArgs e) in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\MainForm.cs:line 231
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4180.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

BetterJoyForCemu
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/BetterJoyForCemu.exe

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4001.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Net.Http
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Net.Http/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4180.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4150.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

System.ServiceProcess
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.ServiceProcess/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll

System.Numerics
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll

WindowsInput
Assembly Version: 6.1.1.0
Win32 Version: 6.1.1.0
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/WindowsInput.DLL

Nefarius.ViGEm.Client
Assembly Version: 1.16.150.0
Win32 Version: 1.16.150
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/Nefarius.ViGEm.Client.DLL

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.`

@DebornMC interesting, you seem to have some funky connected devices then, that don't have a name identifier attached.
BetterJoy_3rdP_Test2.zip
Try this

Thanks a lot! It works but I have to refresh it often to get it to work. Getting this error a lot:
`See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.OutOfMemoryException: List box contains too many items.
at System.Windows.Forms.ListBox.NativeAdd(Object item)
at System.Windows.Forms.ListBox.OnHandleCreated(EventArgs e)
at System.Windows.Forms.Control.WmCreate(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ListBox.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4180.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

BetterJoyForCemu
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/BetterJoyForCemu.exe

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4001.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Net.Http
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Net.Http/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4180.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4150.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

System.ServiceProcess
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.ServiceProcess/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll

System.Numerics
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll

WindowsInput
Assembly Version: 6.1.1.0
Win32 Version: 6.1.1.0
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/WindowsInput.DLL

Nefarius.ViGEm.Client
Assembly Version: 1.16.150.0
Win32 Version: 1.16.150
CodeBase: file:///C:/Users/kaide/Documents/Desktop/BetterJoy-master/Nefarius.ViGEm.Client.DLL

WindowsBase
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4180.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.`

@DebornMC What kind of devices to your PC? You seem to have some odd ones in there.

Bear with me guys, it's really hard to develop for hardware you don't have access to, so I need people to test a bunch of versions.

BetterJoy_3rdP_Test3.zip
Here's another one that should solve the memory overflow you experienced and should allow for USB.

Thanks I'll try right now

Same error, but it doesn't work anymore, no inputs

Can you please think what kind of dodgy USB things you have connected? This sort of behaviour isn't normal.

Do you use HIDGuardian? If you do, disable it for now. (clearing the affected devices)

Only a drive, keyboard, mouse and controller.

I do use HIDGuardian yes

Could you take a screenshot of your "Add Controllers" window?

Alright, also i uninstalled HIDGuardian for now

I have 1 controller connected.

Still nothing, unfortunately. But no duplicate controller now.

I found a different program which works: XOutput

Wow nevermind, that program sucked

Wow nevermind, that program sucked

Every time I disconnect the controller I have to insert all keybinds again
n

Friends, did you make it work? Mine doesn't just recognize the right joystick.

BetterJoy_3rdP_Test4.zip
I noticed there was a bug with some boolean. Anyone with a 3rd party controller - do try this please! Instructions higher up in this thread.

One of the controllers I'm trying is this one: https://www.amazon.com/IINE-Cartoon-Wireless-Controller-Nintendo/dp/B083DNW3P9

Hi, I've tried running the Test4 version and it crashes as well. Steps

  1. Add Controllers -> select "Controller (XBOX 360 for Windows")
  2. Set to Type "Pro Controller"
  3. Hit Apply/Close

The Controller is found, and the icon for it appears, however the program immediately crashes.

HID Guardian shows the following IDs:

HID\VID_045E&PID_028E&IG_00
HID\VID_057E&PID_2009

I get the same results with this controller: https://www.amazon.com/Controller-Nintendo-BEBONCOOL-Wireless-Controllers/dp/B07S4B9HSS

It actually gives the same two IDs as the above controller.

Thanks for taking a look!

Hello my pro controller doesn't work too, hope you can add the compatibility.
HID{00001124-0000-1000-8000-00805F9B34FB}_VID&0002057E_PID&2009
HID\VID_057E&PID_2009

thanks a lot!

Hello, Having similar issue trying to connect 3rd party controller over BT... My controller pairs up to my PC, no problem there. But it is doesn't show in the list when I click "add controllers". When connected via USB, it does show as "XBOX 360", and I can move it to the right of the dialog box using the arrow, and it then also shows up under "connected controllers" in the previous window. The program then shuts down 2-3 seconds later. This screenshot was taken right before it crashed.
image

I am running the BetterJoy_3rdP_Test4.zip version you issued 2 weeks ago. Any help would be really appreciated !


See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.OutOfMemoryException: List box contains too many items.
at System.Windows.Forms.ListBox.NativeAdd(Object item)
at System.Windows.Forms.ListBox.OnHandleCreated(EventArgs e)
at System.Windows.Forms.Control.WmCreate(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ListBox.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4220.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

BetterJoyForCemu
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/lepag/Downloads/BetterJoy_3rdP_Test4/BetterJoyForCemu.exe

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4200.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Net.Http
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Net.Http/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4220.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4200.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

System.ServiceProcess
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.ServiceProcess/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll

Nefarius.ViGEm.Client
Assembly Version: 1.16.150.0
Win32 Version: 1.16.150
CodeBase: file:///C:/Users/lepag/Downloads/BetterJoy_3rdP_Test4/Nefarius.ViGEm.Client.DLL

System.Numerics
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll

WindowsInput
Assembly Version: 6.1.0.0
Win32 Version: 6.1.0.0
CodeBase: file:///C:/Users/lepag/Downloads/BetterJoy_3rdP_Test4/WindowsInput.DLL

WindowsBase
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4220.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll

Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3752.0 built by: NET48REL1
CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

So uh, I’ve got a third party controller that doesn’t seem to work. It’s called the data frog g1 GameCube controller. Anything I can do to make it work?

CBD56C61-2A15-45E5-84D7-C3C26E6F6A91
Here’s a picture of the controller

Darn, it appears Im just boned here. I have a PowerA wireless Gamecube controller (should be officially supported by Nintendo), and I've been unable to get it to connect to BetterJoy. I followed the prompt to a T, but nothing seems to do it. Im guessing that unless it is the original Switch Pro Controller, it just doesn't work?

Seems like only Joy-cons and the Pro Controller work properly

Darn, it appears Im just boned here. I have a PowerA wireless Gamecube controller (should be officially supported by Nintendo), and I've been unable to get it to connect to BetterJoy. I followed the prompt to a T, but nothing seems to do it. Im guessing that unless it is the original Switch Pro Controller, it just doesn't work?

Any third party controller that communicates over BT or USB in the same way as Nintendo SHOULD work fine, but I know that PowerA for example communicate over BT in a different way, the Product and Vendor ID's are different as an example of something that is different between them.

Hi all,

I hope this is useful for you in adding support for the Power A Controllers. I have a Power A Mario Controller (https://www.powera.com/product/powera-enhanced-wired-controller-for-nintendo-switch-mario/) and tested this. I have the following from BetterJoy UI:
Starting poll thread.
This is a stacktrace that may be useful:
System.ArgumentException
HResult=0x80070057
Message=received undefined report. This is probably a bug
Source=BetterJoyForCemu
StackTrace:
at BetterJoyForCemu.Joycon.ProcessButtonsAndStick(Byte[] report_buf) in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\Joycon.cs:line 763
at BetterJoyForCemu.Joycon.ReceiveRaw() in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\Joycon.cs:line 506
at BetterJoyForCemu.Joycon.Poll() in C:\Users\Grigor\source\repos\BetterJoy\BetterJoyForCemu\Joycon.cs:line 734
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Hope this can be added soon so I can get to play using this type of controllers.
Any required testing, let me know and I can test.

One of the controllers I'm trying is this one: https://www.amazon.com/IINE-Cartoon-Wireless-Controller-Nintendo/dp/B083DNW3P9

Hi, I've tried running the Test4 version and it crashes as well. Steps

  1. Add Controllers -> select "Controller (XBOX 360 for Windows")
  2. Set to Type "Pro Controller"
  3. Hit Apply/Close

The Controller is found, and the icon for it appears, however the program immediately crashes.

HID Guardian shows the following IDs:

HID\VID_045E&PID_028E&IG_00
HID\VID_057E&PID_2009

I get the same results with this controller: https://www.amazon.com/Controller-Nintendo-BEBONCOOL-Wireless-Controllers/dp/B07S4B9HSS

It actually gives the same two IDs as the above controller.

Thanks for taking a look!

i get the same result with this controller https://www.amazon.com/Surge-Switchpad-Wireless-Controller-Nintendo-Switch/dp/B07L44K4RK/?th=1

Hi, Im' having a similar problem with my 3th party Switch pro controller on windows 10.
I'm using the master branch code and afther tinkering around a bit it seems the controller is properly connected and the application is able to "locate" the controller and send a rumble command to it.
The player light commands do also work.

However when the application tries to send subcommands the controller responds with a x21 reply (which it should)
However the most significant bit of the 14th byte of the reply is set to 0, so it seems to be responding with a NACK.
And thus the controller also doesnt start sending status reports about the buttons.

I'm not sure how to solve this, so maybe you have an idea :)

Thanks for taking a look !

From PowerA Controller.
-- COPY ME --
Name: HIDI2C Device Vendor: 1267 Product: 12641
Name: Vendor: 32903 Product: 2590
Name: HIDI2C Device Vendor: 1267 Product: 12641
Name: HIDI2C Device Vendor: 1267 Product: 12641
Name: HIDI2C Device Vendor: 1267 Product: 12641
Name: Wireless Gamepad Vendor: 0 Product: 0
-- COPY ME END --

3rd party support would be nice. I have the PowerA BOTW controller pictured at the top of this thread. PowerA seem to have managed to get a license from Nintendo, Sony and Microsoft, their pads are everywhere.

Using the BetterJoyForCemu in the BetterJoy_Test_Ver.zip doesn't seem to report the correct ID's. All of my USB devices are listed with the wrong VID/PID's.

The PowerA controller in the picture at the top of the threads USB ID's are:

VID = 206D
PID = A711

This is the wired version, not the wireless version. I'm having a poke around in the source now, see if I can get my head around how it works.

EDIT: Scratch the ID's being wrong, it lists them in decimal instead of hex.
EDIT2: After having a look inside the controller and finding no gyro I did a bit of raking online and it turns out there is indeed no gyro support on these pad's so making any changes to BetterJoy for these controllers is pointless. They are standard hid devices so will run with emulators etc fine as they are.

I've got a PowerA wireless controller (as seen below), and my problem is that the device is detected and connects (once I enable it as a 3rd party controller) but times out. It works fine when using it normally in Cemu via DirectInput.

After some debugging with the current source code it seems that HIDapi.hid_read_timeout() in Joycon.ReceiveRaw() is always returning -1. I used HIDapi.hid_error() and the error it gives is "The device is not connected". I'm guessing that something in the initialization is causing the device to disconnect.
@Davidobot If you want to hop on a Discord call or something maybe we can figure out what's happening

Image

@Bindernews I don't have time for an in-depth call right now. The timing-out issue could maybe be solved if you comment out the if statement here: https://github.com/Davidobot/BetterJoy/blob/master/BetterJoyForCemu/Joycon.cs#L811 ie make it send the rumble all the time.

Also see if you remove the thirdParty flag here:

if (isSnes || thirdParty)

Maybe the SPI data read is needed to get the controller properly connected. Also maybe try printing the output of

Subcommand(0x40, new byte[] { (imu_enabled ? (byte)0x1 : (byte)0x0) }, 1);

or even remove this if statement and make it pretend that the BT controller is actually connected via USB:

Okay I'll give those a try this evening and see what happens.

I tried out the horipad test using the enhanced wireless controller (like Bindernews') and can confirm that motion controls work perfectly (with yuzu at least). There are a few little oddities, like the xbox game bar rapidly being triggered if yuzu is opened after the test, but everything else seems good.
Idk if this is useful information but I figured I'd let you know.

@kenkojuko that's very useful, thank you! Can you walk me through what you did? Did you add the controller as a third party one or did it just work without other setup?

Hey @kenkojuko ,

Could you please test this release? I integrated the changes into the mainline. You'll have to add the controller using the "Add Controllers" menu.
Release.zip

@Bindernews try this too

working fine.
only add a controller, and default configuration.
my controller HORI NSW-175
https://hori.jp/products/nsw/wireless_horipad_gray_type_c/
thank you.

edit: infomation
DO NOT turn off "EnableRumble" checkbox. gone crash when connecting controller.
and betterjoy crash immedeately next run time with connected controller, so edit "EnableRumble" in configration file false to true manually.

The new test works fine, with me connecting the controller via the Add Controller menu (same with the previous test).
Boths tests also seem to stop the joysticks working, but I think that's an issue unrelated to BetterJoy, as Steam does the same thing to me.
EDIT: I'm realizing I think I forgot to install the drivers in the drivers folder, will let you know if that changes anything
EDIT 2: Haha yeah that fixes the joysticks...

DO NOT turn off "EnableRumble" checkbox. gone crash when connecting controller.
and betterjoy crash immedeately next run time with connected controller, so edit "EnableRumble" in configration file false to true manually.

@bitamind thank you! Does rumble work on your fork? If not, I'll disable it for third party controllers here too

@kenkojuko do you need to turn off rumble for it to work?

Edit: my bad, the advise was to not turn off rumble.

@bitamind thank you! Does rumble work on your fork? If not, I'll disable it for third party controllers here too

my controller does not support rumble, but no problem with "EnableRumble" on.
I guess good idea to disable it.
but im a little worried if other third party controller needs to disable rumble.

I Downloaded the Release.zip you mentioned above and installed all the drivers (after deleting the old ones) and now my controller doesn't appear at all in the "add controllers" window. It is the Power A wired controlled with the zelda design of the picture on the top. It appears in the "Bluetooth and Other Devices settings" as Core (Plus) Wired controller.

I Downloaded the Release.zip you mentioned above and installed all the drivers (after deleting the old ones) and now my controller doesn't appear at all in the "add controllers" window. It is the Power A wired controlled with the zelda design of the picture on the top. It appears in the "Bluetooth and Other Devices settings" as Core (Plus) Wired controller.

@Eustakios-Power make sure you enable useHidGuardian as per the wiki and have it actually installed.

I Downloaded the Release.zip you mentioned above and installed all the drivers (after deleting the old ones) and now my controller doesn't appear at all in the "add controllers" window. It is the Power A wired controlled with the zelda design of the picture on the top. It appears in the "Bluetooth and Other Devices settings" as Core (Plus) Wired controller.

@Eustakios-Power make sure you enable useHidGuardian as per the wiki and have it actually installed.

I have HidGuardian Installed and enabled. It doesn't detect it

Ughh, I might have changed how it goes through the USB devices to detect things, so I'll double check when I can. Thanks.

@Davidobot Tried the Release.zip above and it worked unless I disabled the "rumble" feature in which case I got a crash. No HidGuardian necessary. Device is connected via bluetooth to my PC.

Sick! Would be great if someone with a powerA controller would check too. Other than that, looks like it all works)

Can confirm, works as long as rumble is enabled and hidguardian is not needed.

may the problem be related to usb devices? because it only detects my headphones which are USB, but not my PowerA controller, even though my controller is obviously USB too

I Downloaded the Release.zip you mentioned above and installed all the drivers (after deleting the old ones) and now my controller doesn't appear at all in the "add controllers" window. It is the Power A wired controlled with the zelda design of the picture on the top. It appears in the "Bluetooth and Other Devices settings" as Core (Plus) Wired controller.

Unless your controller is weird and doesn't have a serial number https://github.com/Davidobot/BetterJoy/blob/master/BetterJoyForCemu/3rdPartyControllers.cs#L117 in its hid description, then the issue is probably that the controller is added in HidGuardian to be hidden. Try removing it as per the FAQ page.

i can't write from firefox, and it was late.
I've test my usb wired controller without HIDG. NSW-001
I can't see controller in 'All Devices' list, because my controller does not return 'enumerate.serial_number' string.
so i modified a litte bit, and I can see in the list.
but betterjoy going to crash (i don't know why), after add to 'Switch Controllers'.
i hope it helps.

has someone solved the problem with the PowerA pro controllers?

If it's a wired PowerA Pro controller, they don't have a gyro or rumble. They are a standard hid device and use Direct Input. They work fine in Cemu, there is no benefit to using BetterJoy for those. I can't say for the wireless ones, I don't have one.

Hello @Davidobot I went through all the comments above but I still can't solve my issue and I would appreciate some help if possible.

I have a Unofficial Switch Pro controller (GAMORY) and using last version of Win10.
Using the latest 6.4b release or the Release.zip file you provided above BetterJoy sees a HIDI2C device but it get's recognised as 3 separate switch pro controller and they get in a infinite loop of recognised/dropped.
The Test version you posted above do not work with my laptop configuration (window disappears).

Thank you :)

i turn around my joy con (Unofficial Controllers) after I turn back it cant Restore original position. how can i solve it?

NVM my third party controller is working fine after some googling

I have similar issue

Starting server on 127.0.0.1:26760
All systems go
Pro controller connected.
Starting poll thread.
Dropped.
Removed dropped controller. Can be reconnected.

Hello, I have the same PowerA 3rd party controller as the first picture on this thread.

Up until "BetterJoy_3rdP_Test3.zip", the controller would connect, but I couldn't map the buttons. It would not recognize the input.

I tried "release.zip" from above as well as the latest release and it goes into a never-ending disconnecting/reconnecting loop.

The "copy me" text: Name: Core (Plus) Wired Controller Vendor: 8406 Product: 42769

Thanks for your time

Name: Afterglow Wireless Deluxe Controller Vendor: 3695 Product: 390

The release.zip worked fine, the only problem being sticks can't be read fully, forcing my character to walk

Can anyone point me to the "release.zip" file? I couldn't find it in the above posts. I only found the "BetterJoy_3rdP_Test3.zip". Thanks!

Will the upcoming wireless n64 switch controller be supported nateivly being an official controller, or will there need to be an update?

I'm having a similar issue, my third party joycons keep showing up as a pro controller but are anything but

I'm having a similar issue, my third party joycons keep showing up as a pro controller but are anything but

Try this build. Also don't forget to change NonOriginalController config to "DefaultCalibration". You can either edit the config file or directly type DefaultCalibration in the Non Original Controller text field of the user interface. Credit: @maxill1
#646 (comment)

Third party also here, PDP wireless switch controller aka "afterglow when connected" is read as an xbox controller, it seems like it won't recognize it, what should I do?

There is another issue that the driver is dropping when I go wireless it says he controller is low battery and then it just drops. It clearly isn't after 6 hours of charge. There seems to be no way to fix it. The drivers are total garbage and don't even appear as PDP drivers on my system. It's always saying there are issues with the drive. And apparently nobody on the internet has a specific video about it. PDP doesn't answer to mails, and you don't even get a notification or troubleshooting. It's an utter mess of a device and doesn't seem to work with anything like Yuzu.

i've tried using the test versions above but when I run the program it remains minimized to my taskbar

Does it work for anyone that have their controller connected via USB? When I connect it via USB, my list of "All devices" when I click "Add controllers" is empty. Meanwhile windows does detect it as "Afterglow Wireless Deluxe Controller".

I have a Faceoff Wireless Deluxe Controller.

@matemato if your USB-connected controller is already recognized as an xbox controller (or xinput, you can check by going to https://gamepad-tester.com), then betterjoyforcemu won't be able to do anything (especially if you're looking for the gyro function).

@thanghn90

It is recognized as:

Brez naslova

So what are alternatives to using betterjoyforcemu? Will I be able to use this controller at all for example yuzu or steam?

@matemato I never had any luck with 3rd party controller being able to get recognized as official switch pro controller when connected to PC via USB (UNLESS you can eat the cost of a Magic NS usb dongle). Last time I know, you need to connect your controller to your PC via bluetooth, and if it is recognized as a "pro controller", then you may have a chance to use it with betterjoyforcemu. Did you try connecting your controller to your PC via bluetooth and then start betterjoyforcemu?

@thanghn90 nope, I don't have bluetooth on my PC, sadly. I guess I could try it on my laptop and check it out.

@thanghn90 I tried it on my laptop with bluetooth and it does get recognized. Maybe I'll invest into a bluetooth adapter for my PC. Thanks for your response.

this is all the info i can get and it came from the config file

Afterglow Deluxe+ Audio Wired Controller|392|3695|1

im not getting anything from the program itself

I tried using my joy cons but the stick was stuck at the top right!

Output:

Vendor: 1406; Product: 8198;
Left Joy-Con connected.
Vendor: 1406; Product: 8199;
Right Joy-Con connected.

@BenjaminHalko : that's what happened to me when I didn't change BetterJoyForCemu.exe.Config to set "NonOriginalController" to value="DefaultCalibration". Make sure you close betterjoyforcemu first, then change the config file (using any text editor like notepad or note++), and then start betterjoyforcemu again. Also, make sure the two joycon icons are vertical (i.e. they're recognized as a single pair, not as two separate joycons, which will appear with two horizontal joycon icons). See here: #646 (comment)

@thanghn90 I tried that and it just showed up as 2 pro controllers.

@BenjaminHalko : what I did to set my joycons as one single x-input controller is:

  1. Click on Add controller button:
    image

  2. Select your joycons' items on the left and click the "->" button to move them to the right, then change the "Type" so that the left joycon is the left joycon, and the right joycon is the right one (I'm not sure, you may want to pair them via bluetooth in the correct order: left one first, followed by right one):

image

  1. After that, close betterjoyforcemu and reopen it. Then, LEFT CLICK on one of the joycon's icon to turn them to vertically oriented:
    image
    If they're horizontal, it means they act as two separate controllers. At least that's what it appears in my case.

  2. If you haven't done it yet, make sure to modify the config file to set "NonOriginalController" to value="DefaultCalibration". You may need to close and reopen betterjoyforcemu for it to take effect.

@thanghn90 For me my controllers automatically get located by betterjoy when loading and don't appear in the add controller spot.

@BenjaminHalko : are you using betterjoyforcemu version 53a0a2 as mentioned in this post? #646 (comment)
And what happen when you left-click on one of the controller's icon? Does it change to a different type (like a joycon), or no change at all?
image

Hi
I have the same issues, 3rd party controller is recognized but does not register any keystroke.
image

Hid Guardian is enabled, but no device is hidden, Here the hardware Ids

Nintendo Wireless Gamepad
HID{00001124-0000-1000-8000-00805F9B34FB}_VID&0002057E_PID&2009

Unknown Controller (XBOX 360 For Windows)
HID\VID_045E&PID_028E&IG_00

On test version I get the following device list

HidGuardian is enabled.
Pro controller connected.
Using factory stick calibration data.
Using factory stick calibration data.
Starting poll thread.
Starting server on 127.0.0.1:26760
-- COPY ME --
blah bla... other stuff
Name: Controller (XBOX 360 For Windows) Vendor: 1118 Product: 654
Name: Wireless Gamepad Vendor: 1406 Product: 8201
-- COPY ME END --
All systems go

Is there anything more I can do? besides sharing these hardware IDs?

Hello!

I bought a controller com Aliexpress model MG26z which has gyro.
When connecting with the wireless adaptor or using usb, it works with no flaw, but only as a Xbox 360 Controller.
So I paired with bluetooth and then betterjoy recognized it as a 3rd party controller (with chinese words that even google translate didn't help me to understand).
However it's not working, it appears to have 2 controllers at the same time, one of them disconnecting everytime and the other one make weird actions when the buttons are pressed (like opening one drive, navegating as it was a random keyboard presses.
HidGuardian seems to be working fine, as well HidHide.

image
image
image

How could I proceed to find a solution for this case?
Is there a different bluetooth controller driver to install? Or maybe try a different method?
When connected to bluetooth the controller doesn't work on CEMU or in any game/emulator and the closest I got it from working was with betterjoy.

To windows it is recognized as "GamePadPlus V3" under the section "keyboard, mouse or pen"
image

Any suggestions would be nice to hear!
Thanks!