Sys-con Switch by o0Zz: Difference between revisions
More actions
m Text replacement - "ForTheUsers - " to "Homebrew App Store - " |
1.6.0 |
||
| Line 4: | Line 4: | ||
|description=Nintendo Switch sysmodule that allows support for third-party controllers. | |description=Nintendo Switch sysmodule that allows support for third-party controllers. | ||
|author=o0Zz | |author=o0Zz | ||
|lastupdated=2025/ | |lastupdated=2025/11/26 | ||
|type=Sysmodules | |type=Sysmodules | ||
|version=1. | |version=1.6.0 | ||
|license=GPL-3.0 | |license=GPL-3.0 | ||
|download=https://dlhb.gamebrew.org/switchhomebrews/sysconnxo0zz.7z | |download=https://dlhb.gamebrew.org/switchhomebrews/sysconnxo0zz.7z | ||
| Line 63: | Line 63: | ||
When a new controller is connected, sys-con attempts to automatically assign the best profile. Most features like arrows and joysticks will work correctly, but button mappings may need adjustment. If you find that buttons are not correctly mapped or the right stick is reversed, you can manually configure the controller using one of the following methods: | When a new controller is connected, sys-con attempts to automatically assign the best profile. Most features like arrows and joysticks will work correctly, but button mappings may need adjustment. If you find that buttons are not correctly mapped or the right stick is reversed, you can manually configure the controller using one of the following methods: | ||
==== Method 1: | ==== Method 1: Configure on the Switch (Recommended) ==== | ||
* | Connect your controller: | ||
* | *Connect your controller to the Nintendo Switch. | ||
* Press | *Open the input test menu: On the Switch, go to: Settings > Controllers & Sensors > Test Input Devices. | ||
* On | |||
Test each button: | |||
*Press every button on the controller and write down or memorize how the Switch reports each input. | |||
*Your goal here is to understand the correct mapping for your specific controller. | |||
Edit your sys-con configuration: | |||
*On the SD card, open: <code>/config/sys-con/config.ini</code> | |||
*Locate the section corresponding to your controller’s VID-PID, which looks like: <code>[vid-pid]</code> | |||
*This section is usually added automatically when sys-con detects an unknown controller. | |||
*Most of the time, it will be at the bottom of the file. | |||
Tips for Faster Iteration: | |||
*The config.ini file is reloaded every time you plug in a controller. To speed up testing: | |||
**Install [[vgedit Switch|vgedit]] on your Switch. | |||
**Unplug the controller. | |||
**Edit config.ini directly from the Switch using vgedit. | |||
**Re-plug the controller to reload the config. | |||
**Test your changes immediately. | |||
This allows very quick trial-and-error cycles. | |||
Typical configuration will look like | Typical configuration will look like | ||
[0810-0001] | |||
[0810-0001] | B=1 | ||
B=1 | A=2 | ||
A=2 | Y=3 | ||
Y=3 | X=4 | ||
X=4 | L=5 | ||
L=5 | R=6 | ||
R=6 | ZL=7 | ||
ZL=7 | ZR=8 | ||
ZR=8 | minus=9 | ||
minus=9 | plus=10 | ||
plus=10 | home=11 | ||
home=11 | capture=12 | ||
capture=12 | rstick_left=-Rz | ||
rstick_left=-Rz | rstick_right=+Rz | ||
rstick_right=+Rz | rstick_up=+Z | ||
rstick_up=+Z | rstick_down=-Z | ||
rstick_down=-Z | |||
Where ButtonName (A,B,Y,X...) should be assign to a ButtonID (1,2,3,4,5...) you determined from testing. For example, if you found that 'B' is reversed with 'A', just swap the ButtonID: | |||
B=2 | |||
A=1 | |||
==== Method 2: Configure using a Windows PC ==== | |||
Note: Button mapping can differ between windows and the switch | |||
Finding the VID and PID: | Finding the VID and PID: | ||
* Plug your controller into your PC. | * Plug your controller into your PC. | ||
| Line 102: | Line 123: | ||
* Open joy.cpl (either from Win+R or directly from the Start menu). | * Open joy.cpl (either from Win+R or directly from the Start menu). | ||
* Select your controller and click on Properties. | * Select your controller and click on Properties. | ||
* Here you should see a panel with | * Here you should see a panel with ButtonID (1,2,3...), press the button and make a note of them (which button is assigned to which ID). | ||
Update Configuration: | Update Configuration: | ||
* On your SD card, open /config/sys-con/config.ini. | * On your SD card, open /config/sys-con/config.ini. | ||
* Edit the [vid-pid] section with the button IDs you noted: | * Edit the [vid-pid] section with the button IDs you noted: | ||
[0810-0001] | [0810-0001] | ||
B=3 | B=3 | ||
A=2 | A=2 | ||
Y=4 | Y=4 | ||
X=1 | X=1 | ||
L=7 | L=7 | ||
R=8 | R=8 | ||
ZL=5 | ZL=5 | ||
ZR=6 | ZR=6 | ||
minus=9 | minus=9 | ||
plus=10 | plus=10 | ||
home=11 | home=11 | ||
capture=12 | capture=12 | ||
rstick_left=-Z | rstick_left=-Z | ||
rstick_right=+Z | rstick_right=+Z | ||
rstick_up=+Rz | rstick_up=+Rz | ||
rstick_down=-Rz | rstick_down=-Rz | ||
Replace 1, 2, 3, 4 | Replace ButtonID (1,2,3,4...) from your PC testing. If this method does not work or mappings are incorrect, use Method 1. | ||
=== Button mapping === | === Button mapping === | ||
List of possible mappable switch buttons: | List of possible mappable switch buttons: | ||
lstick_left= | |||
lstick_right= | lstick_right= | ||
lstick_up= | lstick_up= | ||
lstick_down= | lstick_down= | ||
rstick_left= | rstick_left= | ||
rstick_right= | rstick_right= | ||
rstick_up= | rstick_up= | ||
rstick_down= | rstick_down= | ||
B= | B= | ||
A= | A= | ||
Y= | Y= | ||
X= | X= | ||
L= | L= | ||
R= | R= | ||
ZL= | ZL= | ||
ZR= | ZR= | ||
minus= | minus= | ||
plus= | plus= | ||
lstick_click= | lstick_click= | ||
rstick_click= | rstick_click= | ||
dpad_up= | dpad_up= | ||
dpad_down= | dpad_down= | ||
dpad_left= | dpad_left= | ||
dpad_right= | dpad_right= | ||
capture= | capture= | ||
home= | home= | ||
simulate_home= | simulate_home= | ||
simulate_capture= | simulate_capture= | ||
List of possible values: | List of possible values: | ||
* 1 to 31 - Represent the Button ID of the controller. | * 1 to 31 - Represent the Button ID of the controller. | ||
* Z, -Z, Rz, -Rz, Rx, -Rx, Ry, -Ry, Slider, -Slider, Dial, -Dial - | * Z, -Z, Rz, -Rz, Rx, -Rx, Ry, -Ry, Slider, -Slider, Dial, -Dial, Brake, -Brake, Accelerator, -Accelerator - Represents the analog inputs (e.g., joystick, slider). | ||
* 32 to 35 - | * 32 to 35 - Represents the hat switch (D-Pad) directions | ||
** 32 - dpad_up | ** 32 - dpad_up | ||
** 33 - dpad_down | ** 33 - dpad_down | ||
| Line 208: | Line 226: | ||
==Compatibility== | ==Compatibility== | ||
Support | Support FW 21.0.0. | ||
==Known issues== | ==Known issues== | ||
| Line 214: | Line 232: | ||
==Changelog== | ==Changelog== | ||
'''v1.6.0 2025/11/26''' | |||
* Added support for Firmware v21.0.0 ([https://github.com/o0Zz/sys-con/issues/86 #86]) | |||
* Fixed controller freeze due to thread priority too high ([https://github.com/o0Zz/sys-con/issues/72 #72]) | |||
* Add support for the L-TEK Dance Pad PRO (DDR pad) ([https://github.com/o0Zz/sys-con/pull/75 #75]) ([https://github.com/Phantop @Phantop]) | |||
* Added Google Stadia Controller ([https://github.com/o0Zz/sys-con/issues/82 #82]) (Credit: [https://github.com/pixel2user @pixel2user]) | |||
* Added support for Brake and Accelerator ([https://github.com/o0Zz/sys-con/pull/85 #85]) | |||
* Added support for Wii controller BX-W201 ([https://github.com/o0Zz/sys-con/issues/87 #87]) (Credit [https://github.com/mourossonero @mourossonero]) | |||
'''v1.5.4 2025/06/08''' | '''v1.5.4 2025/06/08''' | ||
* [https://github.com/o0Zz/sys-con/issues/71 #71] Fix: System Freeze on Controller Disconnect (Regression introduced in v1.5.3) | * [https://github.com/o0Zz/sys-con/issues/71 #71] Fix: System Freeze on Controller Disconnect (Regression introduced in v1.5.3) | ||
Revision as of 02:28, 28 November 2025
| sys-con | |
|---|---|
| General | |
| Author | o0Zz |
| Type | Sysmodules |
| Version | 1.6.0 |
| License | GPL-3.0 |
| Last Updated | 2025/11/26 |
| Links | |
| Download | |
| Website | |
| Source | |
| Support Author | |
Sys-con is a Nintendo Switch module that adds support for all HID and XID joysticks and gamepads to the Nintendo Switch.
Only USB connection is supported. If you want to connect your controllers using Bluetooth, you should use ndeadly's MissionControl.
Some of the supported controllers include:
- All PC Controllers
- All Playstation Controllers
- All Xbox Controllers
- Wheels
A complete list of tested controller is available here.
Features
- HID joystick/gamepad/wheels supported (PC Controller compatible).
- PS and XBOXs controllers supported.
- Custom key mapping using VID/PID and profile.
- Automatically add new controllers (Try to determine the best driver).
- Configurable deadzone.
- Configurable polling frequency.
- Configurable controller color using #RGBA.
Installation
Grab the latest zip, extract it in your SD card and boot/reboot your switch.
Configuration
The sys-con configuration folder is located at /config/sys-con/. It includes settings for controller button mappings, stick configurations, trigger settings, and deadzones.
The configuration is loaded in the following way:
- Global Settings - The [global] section is applied only once at boot. To update settings here, reboot the Switch.
- Controller-Specific Settings - For each controller, configuration is applied in the following order:
- [default] - Loaded first.
- [VID-PID] - Loaded next, where VID and PID correspond to the controller’s vendor and product IDs.
- If [VID-PID] contains a [profile], it will load the [profile] then load [VID-PID].
In other words, the loading order is: [Default] [Profile] [VID-PID]. If you want to override a setting for only 1 controller, it's adviced to change the configuration in [VID-PID] in order to not impact others controllers
Logs
Logs are stored at /config/sys-con/log.log on your SD card. The logs are automatically created with a log level equal to Info.
For more verbose logs, modify /config/sys-con/config.ini:
[global] log_level=0
Then reboot your Switch.
User guide
Configure a controller
When a new controller is connected, sys-con attempts to automatically assign the best profile. Most features like arrows and joysticks will work correctly, but button mappings may need adjustment. If you find that buttons are not correctly mapped or the right stick is reversed, you can manually configure the controller using one of the following methods:
Method 1: Configure on the Switch (Recommended)
Connect your controller:
- Connect your controller to the Nintendo Switch.
- Open the input test menu: On the Switch, go to: Settings > Controllers & Sensors > Test Input Devices.
Test each button:
- Press every button on the controller and write down or memorize how the Switch reports each input.
- Your goal here is to understand the correct mapping for your specific controller.
Edit your sys-con configuration:
- On the SD card, open:
/config/sys-con/config.ini - Locate the section corresponding to your controller’s VID-PID, which looks like:
[vid-pid] - This section is usually added automatically when sys-con detects an unknown controller.
- Most of the time, it will be at the bottom of the file.
Tips for Faster Iteration:
- The config.ini file is reloaded every time you plug in a controller. To speed up testing:
- Install vgedit on your Switch.
- Unplug the controller.
- Edit config.ini directly from the Switch using vgedit.
- Re-plug the controller to reload the config.
- Test your changes immediately.
This allows very quick trial-and-error cycles.
Typical configuration will look like
[0810-0001] B=1 A=2 Y=3 X=4 L=5 R=6 ZL=7 ZR=8 minus=9 plus=10 home=11 capture=12 rstick_left=-Rz rstick_right=+Rz rstick_up=+Z rstick_down=-Z
Where ButtonName (A,B,Y,X...) should be assign to a ButtonID (1,2,3,4,5...) you determined from testing. For example, if you found that 'B' is reversed with 'A', just swap the ButtonID:
B=2 A=1
Method 2: Configure using a Windows PC
Note: Button mapping can differ between windows and the switch
Finding the VID and PID:
- Plug your controller into your PC.
- Go to Control Panel > Device Manager.
- Locate your controller under Human Interface Devices, right-click, and select Properties.
- Go to the Details tab and select Hardware IDs to find the PID and VID, which will look like HID\VID_0810&PID_0001, translating to [0810-0001].
View Button IDs:
- Open joy.cpl (either from Win+R or directly from the Start menu).
- Select your controller and click on Properties.
- Here you should see a panel with ButtonID (1,2,3...), press the button and make a note of them (which button is assigned to which ID).
Update Configuration:
- On your SD card, open /config/sys-con/config.ini.
- Edit the [vid-pid] section with the button IDs you noted:
[0810-0001]
B=3 A=2 Y=4 X=1 L=7 R=8 ZL=5 ZR=6 minus=9 plus=10 home=11 capture=12 rstick_left=-Z rstick_right=+Z rstick_up=+Rz rstick_down=-Rz
Replace ButtonID (1,2,3,4...) from your PC testing. If this method does not work or mappings are incorrect, use Method 1.
Button mapping
List of possible mappable switch buttons:
lstick_left= lstick_right= lstick_up= lstick_down= rstick_left= rstick_right= rstick_up= rstick_down= B= A= Y= X= L= R= ZL= ZR= minus= plus= lstick_click= rstick_click= dpad_up= dpad_down= dpad_left= dpad_right= capture= home= simulate_home= simulate_capture=
List of possible values:
- 1 to 31 - Represent the Button ID of the controller.
- Z, -Z, Rz, -Rz, Rx, -Rx, Ry, -Ry, Slider, -Slider, Dial, -Dial, Brake, -Brake, Accelerator, -Accelerator - Represents the analog inputs (e.g., joystick, slider).
- 32 to 35 - Represents the hat switch (D-Pad) directions
- 32 - dpad_up
- 33 - dpad_down
- 34 - dpad_left
- 35 - dpad_right
Deadzone
Additionally to these mappings, you can configure deadzone for every analog:
deadzone_x=20 deadzone_y=20 deadzone_z=20 deadzone_rz=20 deadzone_rx=5 deadzone_ry=5 deadzone_slider=20 deadzone_dial=20 factor_x=100 factor_y=100 factor_z=100 factor_rz=100 factor_rx=100 factor_ry=100 factor_slider=100 factor_dial=100
All these values are in percentages:
- Typical deadzone range: 0% to 30%
- Typical Factor range: 100% to 150%
Shortcuts
By default, the HOME and CAPTURE can be triggered by pressing Minus + DPAD_UP and Minus + DPAD_DOWN, respectively.
Minus button is often mapped to the select button.
Troubleshooting
For common issues a troubleshooting guide is available: Troubleshooting
Media
sys-con on Logitech F710 (de\/ELOPER.su)
Compatibility
Support FW 21.0.0.
Known issues
For more information, see the Troubleshooting.
Changelog
v1.6.0 2025/11/26
- Added support for Firmware v21.0.0 (#86)
- Fixed controller freeze due to thread priority too high (#72)
- Add support for the L-TEK Dance Pad PRO (DDR pad) (#75) (@Phantop)
- Added Google Stadia Controller (#82) (Credit: @pixel2user)
- Added support for Brake and Accelerator (#85)
- Added support for Wii controller BX-W201 (#87) (Credit @mourossonero)
v1.5.4 2025/06/08
- #71 Fix: System Freeze on Controller Disconnect (Regression introduced in v1.5.3)
v1.5.3 2025/06/02
- Reduce input lag and reduce sys-con cpu usage #70.
v1.5.2 2025/05/19
- Added support for PDP Neon white (#68).
- Added support for HORI Drum controller (0x0f0d, 0x01b2).
- Added support for PowerA MOGA XP-Ultra controller (0x20d6, 0xa01a).
- Added a way to simulate any button (Thanks to @leofrachet11).
v1.5.1 2025/02/22
- Fixed 8BitDo Wireless Bluetooth USB Adapter 2 (#65)
- Fixed controller gamecube adapter cause a kernel panic (#59) - Do not use "controller_type=gamecube."
v1.5.0 2024/12/31
- Fixed DualShock 3 Support: Resolved a regression from v1.4.0 causing DualShock 3 controllers to stop working. (#56)
- Improved HID Controller Compatibility: Addressed issues with certain HID controllers not functioning correctly. (#45)
- Removed Atmosphere Dependency: Eliminated the dependency on Atmosphere to prevent compatibility issues with future firmware updates. (#55)
- Default Bindings Update: All controllers now have Minus + D-Pad Up mapped for Home and Minus + D-Pad Down mapped for Capture by default.
v1.4.3 2024/10/19
- Fix XBOXOne guide button don't works (Regression from v1.4.0).
- Add support for 8BitDo Ultimate 2C (XBOXOne controller).
- Fixed issue with HID controller with Joystick/Gamepad profile not in first position.
v1.4.2 2024/10/18
- Add support for Atmosphere v1.8
- Add an option to set an analog scaling factor for the controller, useful for cases where the analog stick doesn't reach its full range (factor_XXX=...).
v1.4.1 2024/09/07
- Fixed XBOX360 Wireless support (Regression introduced in v1.4.0).
v1.4.0 2024/09/01
- Added a way to map "Slider" and "Dial" (Useful for some controller that need slider on right stick).
- Fixed incorrect HID data interpretation when HID report descriptor contains negative values.
- Change analog mapping to be able to map everything on anything (Breaking change).
- Fixed Switch controller pro via USB don't works everytimes (Fixed v1.3.0).
- Add mapping for T.Flight Hotas X - PS3 Mode for ACE combat 7 Deluxe. Thanks to @kfkboys.
v1.3.0 2024/08/15
- Fixed crash when xbox controllers don't provide output endpoint.
- Fixed HID controller (with multiple interfaces) not properly working.
- Added a way to bind one button to multiple controller buttons More details.
- Added support for official switch controller USB (Switch pro controller, ...)
- Added multiple mappings.
v1.2.2 2024/06/26
- Implement R+L to be able to re-sync controller with the Nintendo switch.
- Fixed DPAD buttons can't be mapped.
- Added a way to simulate home or capture from any buttons combinaison.
- Added a way to define controllers (Gamecube, Pro, SNES, Sega etc ...).
- Added several mappings (thanks to @texita) - PSX, PS5, XboxOne, GameCube adapter ...
v1.2.1 2024/06/21
- Fixed input latency with some PC controllers (Generic HID).
v1.2.0 2024/06/20
- Support Atmosphere v1.7.1 (Fixed crash on FW 18.1).
- Add a way to simulate home button from +- (Usefull for controller that don't have a home button).
- Add support for DualSense (PS5 Controller).
- Configuration is now case insensitive.
- Stabilize USB stack.
- Fixed regression on XBOXS controller.
- Add an auto add controller feature.
v1.1.1 2024/06/14
- Added support for Atmosphere v1.6.2 and v1.7.0.
- Improve discovery mode to be able to discover a list of VID/PID only.
- Added support for XBOX original controllers.
- Added support for "Phantom White PDP Xbox One" and "Wave Afterglow PDP Xbox Series" controllers.
- Added support for "Foyu" and "Activbb X6-34U" controllers.
v1.1.0 2024/06/08
- Fixed log file not automatically created
- Reverse Y on XBOX S controller and original XBOX controller.
- Fixed home and capture binding not properly working.
- Fixed xbox360 wireless controller plug/unplug not properly working.
- Add a discovery mode to discover either all controllers or only known controllers (Avoid issue with official switch controllers).
- Fixed incorrect binding for right joystick on Generic HID.
v1.0.2 2024/06/04
- Support Logitech Driving Force GT (Wheel).
- Fixed incorrect inputs was transmitted to the switch (When HID report descriptor was not aligned on 8bits).
v1.0.1 2024/06/02
- Support Atmosphere 1.7.0.
v1.0.0 2024/06/01
- Support Xbox/PS & Generic HID.
- Support Atmosphere 1.6.2
Credits
Texita For his contribution in controllers testings and mappings
External links
- GitHub - https://github.com/o0Zz/sys-con
- Homebrew App Store - https://hb-app.store/switch/syscon1x2024