Homebrew RELEASE HID-Mitm: Rebind buttons and use custom gamepads on your switch!

jakibaki

Well-Known Member
OP
Member
Joined
Mar 3, 2017
Messages
296
Trophies
0
Age
24
XP
1,806
Country
Germany
hid-mitm

Warning: This project is unmaintained (due to both a lack of motivation and there being much much better ways to achieve this) and broken on current atmosphere.

If anyone wants to pick this project up feel free to ping me in atlasnx and I'll happily answer questions about the code.

This is the official discussion-thread of hid-mitm.

https://github.com/jakibaki/hid-mitm

Disclaimer:
This sysmodule is in beta! Problems are to be expected. If you encounter any that aren't listed in the known issues section please report it here if nobody else did already.

Features
  • Rebind buttons on your gamepads.

  • Use custom gamepads on your nintendo switch by using your phone/pc as a proxy.
Setup
While hid-mitm will work perfectly fine on stock atmosphere and possibly reinx the recommended setup is to download the latest Kosmos since it comes preconfigured with the awesome Kosmos Toolbox which allows you to easily configure hid-mitm.

On Kosmos it's just a matter of opening the Kosmos Toolbox, enabling the hid-mitm sysmodule and rebooting.

On Atmosphere, installing hid-mitm can be done by dragging the content of the release.

No help for ReiNX is provided, if it runs that's fine but if you run into problems please try on a supported cfw before reporting.

No support whatsoever for sxos.

Usage
Rebinding buttons
Simply open the Kosmos toolbox, go to the sysmodule menu and continue to the hid-mitm menu from there (it's a simple button-press explained in the bottom bar)

After that a screen will pop up in which you can select the button you want to rebind and then what you want it to rebind for.
After you're done, be sure to touch the button in the middle to save your changes.

You can also configure it manually by editing the /modules/hid_mitm/config.ini file.

Custom gamepads
The way that custom gamepads work with hid-mitm is not by directly connecting the gamepad to your switch but by connecting your gamepad to your phone (and experimentally pc) and then running the hid-mitm app which then in turn sends the input to your switch which will recognize it as an additional pro-controller.

Download the companion_apps.zip from the release page.

Android
  • Install the hid-mitm.apk from the zip on your phone.
  • Make sure that your switch has hid-mitm enabled and is connected to the same network as your phone. You can use 90dns if you don't want your switch to connect to nintendos servers.
  • Connect your gamepad to your phone
  • Enter the ip-address of your nintendo switch in the hid-mitm app (it can be found in the network settings) and press "connect"
  • Your switch now should now pick up your gamepad as an additional pro-controller! :)
iOS
  • Install the hid-mitm.ipa from the zip on your phone. You can use Cydia Impactor for that, don't worry it will work just fine even without a jailbreak.
  • Make sure that your switch has hid-mitm enabled and is connected to the same network as your phone. You can use 90dns if you don't want your switch to connect to nintendos servers.
  • Connect your gamepad to your phone (please note that apple is rather restrictive with the choice of gamepads that they allow you to use)
  • Enter the ip-address of your nintendo switch in the hid-mitm app (it can be found in the network settings) and press "connect"
  • Your switch now should now pick up your gamepad as an additional pro-controller! :)
As a workaround to iOS not recognizing a plus and minus button l1+l2+r1+r2+x will result in a plus and l1+l2+r1+r2+dpad-left in a minus.

Hid-mitm can also easily be repurposed to do scripted inputs (for example a "twitch plays").
Check out the input_pc.py for some reference of how to talk to hid-mitm.

Known issues
  • In some games the "connect gamepad" dialog will pop up every few minutes when playing in multiplayer with a custom gamepad connected
  • There are various problems that happen if hid-mitm and sys-ftpd are enabled at the same time.
  • Some phones have a terrible bluetooth connection which will result in input-delay if using bluetooth gamepads. I can't do anything about that, that's an issue with android.
  • On some wifi-networks iPhones have problems which will result in terrible input delay. You can work around this by just opening a hotspot on your phone and letting the switch connect to that. If you don't want your switch to use up mobile data be sure to enable 90dns.
  • Some gamepads won't have their inputs mapped correctly on android.
    If anyone who has experience with android development wants to get that fixed by adding some kind of "setup interface" it would be greatly appreciated.
  • Tetris 99 doesn't want to recognize custom gamepads for some reason
  • The switch doesn't seem to accept using the custom gamepad as "activity" so the screen will automatically fade out after a while. You can work around that by turning off the auto-screen-off feature in the system settings.
Planned features
  • Support for connecting multiple custom gamepads
  • Support for motion controls
  • (maybe) vibration support
  • Support for "disguising" gamepads as something else. To allow for example to play pokemon with a pro-controller.
Support
The best way to get your questions answered is by asking in the AtlasNX discord.
 
Last edited by jakibaki,

masagrator

The patches guy
Member
Joined
Oct 14, 2018
Messages
5,150
Trophies
2
XP
9,168
Country
Poland
It's possible in the future to make whole app working in terminal? Then it could be possible to make something small and cheap to work.
 

Kubas_inko

"Something funny goes here."
Member
Joined
Feb 3, 2017
Messages
6,317
Trophies
1
Age
22
Location
I gues on earth.
XP
4,966
Country
Czech Republic
This seems like a good thread to ask. Is connecting 3rd party controller directly to switch possible? (So that you dont need to use any middle device) Like custom HID for controllers right over bluetooth.
 

LightBeam

Well-Known Member
Member
Joined
Oct 1, 2018
Messages
579
Trophies
0
XP
1,586
Country
France
How are you supposed to use that on PC ? I would like to use my SNES mini controller but I can't manage to connect my wiimote on my Switch and it would be more convenient for me to get this working on Windows
 

Bakugo

Active Member
Newcomer
Joined
Dec 28, 2016
Messages
30
Trophies
0
Website
steamid.ml
XP
491
Country
United States
Very well done, I've been waiting for something like this. Surprised it took so long.

Planned features: Support for motion controls

How long do you think it will take to add this? If the answer is more than a week, could you share the methods you used for debugging while developing this? I'd like to try adding it myself.
 

jakibaki

Well-Known Member
OP
Member
Joined
Mar 3, 2017
Messages
296
Trophies
0
Age
24
XP
1,806
Country
Germany
Very well done, I've been waiting for something like this. Surprised it took so long.



How long do you think it will take to add this? If the answer is more than a week, could you share the methods you used for debugging while developing this? I'd like to try adding it myself.
Probably will be a while, I won't have that much free time anymore for a while soon.

Well for debugging I just have a small script builds the project, boots the switch over into memloader and copies it over.
If you need some kind of debug-output fatals are generally useful.
 

LapCheong

Well-Known Member
Member
Joined
Mar 6, 2019
Messages
223
Trophies
0
XP
498
Country
Australia
Xbox one s bluetooth to my pc then to my switch works almost perfectly

The left thumb button is tied to the xbox logo button for some reason.
 

hellogbatemp

Active Member
Newcomer
Joined
May 19, 2018
Messages
44
Trophies
0
Age
36
XP
110
Country
France
Nice job!
the ps4 controller works perfectly, pair with the pc.BUT if I minimize the window "HID" the controller no longer work and
can we configure the "home" button?
thanks
 
Last edited by hellogbatemp,
General chit-chat
Help Users
    F @ Freqman: lone_wolf323 is such a good backseat moderator simp boi