App Details
Notice: It has been confirmed that the new Xbox Insiders controller firmware update will convert your controller to use Bluetooth LE, which is not currently supported. Please do not update if you wish to continue using your controller with Mission Control
Use controllers from other consoles natively on your Nintendo Switch via Bluetooth. No dongles or other external hardware neccessary.
Features
Supports all firmware versions
Pair Bluetooth controllers natively via Change Grip/Order screen
Native button remapping (firmware 10.0.0+)
btdrv-mitm module adds extension IPC commands that can be used to interact with the bluetooth process without interfering with the state of the system.
Supported Controllers
Currently, the following controllers are supported. If you have a third-party variant of one of the below, or a Bluetooth controller that isn't listed, consider submitting an issue with the controller details, including vid/pid, to request support.
Nintendo Wii Remote + extensions (Nunchuck, Classic Controller, Classic Controller Pro, SNES Mini, TaTaCon (Taiko drum), MotionPlus)
Nintendo Wii Balance Board (experimental)
Nintendo WiiU Pro Controller
Sony Dualshock3 (Playstation 3) Controller
Sony DualShock4 (Playstation 4) Controller
Sony Dualsense (Playstation 5) Controller
Sony Dualsense Edge Controller
Microsoft Xbox One S/X Controller (not to be confused with Series S/X controllers - these use Bluetooth LE, which isn't currently supported)*
Microsoft Xbox Elite Wireless Controller Series 2
NVidia Shield Controller (2017 Model)
Ouya Controller
Gamestick Controller
Gembox Controller
iCade Controller
Ipega Controllers (7197, 9017s, 9023, 9055, 9062S, 9076, 9078, 9087, 9096 confirmed working. Others may also work)
g910 Wireless Bluetooth Controller
Xiaomi Mi Controller
Steelseries Free
Steelseries Nimbus
Steelseries Stratus Duo
GameSir G3s
GameSir G4s
GameSir T1s
GameSir T2a
Hori Onyx
8bitDo SN30 Pro Xbox Cloud Gaming Edition
8BitDo ZERO (Most other 8BitDo controllers have a Switch mode available. May require firmware update)
PowerA Moga Hero
PowerA Moga Pro
PowerA Moga Pro 2
Mad-Catz C.T.R.L.R
Mad-Catz L.Y.N.X 3
Razer Raiju Tournament
Razer Raiju Ultimate
Razer Serval
Mocute 050
Mocute 053
Gen Game S3
AtGames Legends Pinball Controller + Arcade Control Panel
Hyperkin Scout
Requirements
Hackable Nintendo Switch running at least version 0.14.2 of Atmosphère custom firmware. Other custom firmwares are not supported.
Compatible Bluetooth controller
Installation
After installation a console reboot is required in order for MissionControl to become active.
It is recommended after rebooting to also disconnect any physically connected controllers from the console, delete the pairing database, and re-pair via bluetooth to make sure your existing Switch controllers have the correct hardware ID stored and can be recognised properly. To delete the database, navigate to System Settings->Controllers and Sensors->Disconnect Controllers
Usage
Install MissionControl to your SD card, reboot the console and then pair controllers as you normally would via the Controllers->Change Grip/Order screen. Once paired, controllers will reconnect automatically when woken up.
Most native features should just work (with the exception of things like firmware update). If you find something that's broken please create an issue.
Pairing controllers
The supported controllers each have their own methods to enter pairing/sync mode. Below are instructions on entering this mode for each supported type.
Wii(U) Controllers Press the red sync button on the back of the controller. The controller LEDs will blink rapidly.
Dualshock4 Controllers Press and hold the PS + share buttons simultaneously until the lightbar starts blinking. When done correctly the blink pattern will resemble a heartbeat, otherwise it will blink periodically.
Xbox One Controllers Press and hold the guide(X) button until the LED starts blinking. Then press and hold the small sync button on the back near the charging port until the LED starts blinking more rapidly. You should also ensure your controller firmware is up to date, as old firmwares were known to have flakey bluetooth.
Other Controllers Please refer to your controller's user manual for information on how to put it in sync mode.
How it works
MissionControl works by Man-In-The-Middling the bluetooth system module and intercepting its initialisation IPC commands and system events, and translating incoming/outgoing data to convince the Switch that it's communicating with an official Pro Controller.
To achieve this, the btdrv-mitm module obtains the handles to bluetooth system events and shared memory when the system attempts to initialise them over IPC via the btm and hid modules. It then creates its own secondary versions of these and passes their handles on instead of the original. This allows modifications to be made to any data buffers before notifying (or not) the system. Additionally, the WriteHidData IPC command is intercepted to translate or drop outgoing requests to the controller. In the case of the latter, fake responses can be written directly to the buffer in shared memory.
Intercepting initialisation IPC commands also allows homebrew to properly make use of the bluetooth service. Normally, calling any of the IPC commands that would initialise or finalise system events would either crash the console, or invalidate the event handles held by system processes. With btdrv-mitm we are able to hand out alternative event handles when homebrew attempts to initialise an interface, and redirect the real system events to those instead of the events held by system processes.
IPS patches to the bluetooth module are provided to (re)enable the passing of abitrary pincodes when Bluetooth legacy pairing is used (Nintendo hardcodes a value of '0000', ignoring IPC arguments). This enables Wii(U) devices to be paired with the console.
The btm service is now also MITM'd, allowing for faking controller names on the fly while retaining the original names in the pairing database.
Changelog
0.12.0
Added support for firmware 19.0.0
Improved accuracy of HD rumble decoding
Fixed issue where controllers would vibrate erratically in certain titles
Fixed issue where certain titles would display an error when attempting to query non-native controllers for amiibo data
0.11.1
Added support for firmware 18.1.0.
0.11.0
Added full support for firmware 18.0.0.
Added support for SCUF Vantage 2 controller.
Added binary patches to enable Joycon-Droid to operate without root access on firmware 12.0.0+.
Fixed an issue where analog trigger values were swapped for 8BitDo SN30 Pro Xbox Cloud Gaming Edition controller.
0.10.0
Added full support for firmware 17.0.0.
Added support for Atari Modern Wireless Controller.
Mapped 8BitDo Zero D-pad as left analog stick to improve game compatibility.
Removed unnecessary gyro scaling factor for Sony controllers. Controller rotations should now be more sensitive/accurate.
Fixed an issue where capture button state wasn't being reset after Dualshock 4 touchpad button released.
0.9.4
Fixed a bug in the exefs patches for 16.1.0 that caused the system to get stuck in an infinite loop and freeze when pairing new controllers not already in the bluetooth pairing database
Check vendor/product ID in addition to name when identifying official Switch controllers
0.9.3
Added support for Steelseries Stratus XL controller
Added support for 8BitDo Ultimate 2.4G Wireless Controller
Added support for Betop 2585N2 controller
Added .ini config option for setting the analog trigger activation threshold
Added new "hybrid" mode to .ini settings for Dualshock 3 player indicator LEDs to display the Switch LED pattern, but reversed to align with the numbers printed on the controller
Changed behaviour of Dualshock 4/Dualsense touchpad so that the outer edges are mapped to +/- in order to prevent accidental screenshots being taken when pressing those buttons
Dualsense mute button is now additionally mapped as capture button
Updated list of official controller names to include a new name introduced in HOS 15.0.0. This fixes an issue where some newer PowerA licensed Switch controllers don't register inputs with Mission Control running.
Fixed a bug that could cause the console to spam commands when trying to set the player indicator LEDs to flash
0.9.2
Modified the usb interface filter used in Dualshock 3 pairing so as not to clash with the default filter used by the hid module
Fixed an issue where the system would crash when attempting to pair a Dualshock 3 controller when the Bluetooth pairing database contains the maximum number of paired hid devices.
0.9.1
Added support for Sony Dualshock 3 controller.
Added support for Mocute 053 controller.
Added .ini config option to select preferred Dualshock 3 player LED pattern.
Added .ini config option to control the polling rate used by Dualshock 4 controllers.
Replaced .ini config option for enabling/disabling the LED lightbar on Sony controllers with a brightness control setting.
Renamed some of the other .ini config options.
Wiimote dpad is now mapped to the left analog stick when in horizontal orientation to improve compatibility with games that don't allow dpad inputs for movement.
0.9.0
Updated libraries for 16.0.0 support.
Added bluetooth exefs patches for 16.0.0.
Added support for Sony Dualsense Edge controller.
Added support for Razer Raiju Ultimate controller.
Added support for Mad Catz L.Y.N.X 3 controller.
Added support for AtGames Legends Pinball Arcade Control Panel extension. (Thanks @SK360)
Added exefs patches for btm module to skip calls to CloseHidConnection when a controller doesn't respond properly to the SetTsi vendor command. This eliminates the need to manually flag certain controllers with the settsi_disable.flag file to stop them from being disconnected.
Disabled incorrect handling of incoming NFC requests that caused games like Splatoon and Smash Bros to freeze or experience audio glitches when the game attempts to access amiibo data.
Fixed regression in input handing for Wii Classic Controller/Classic Controller Pro extensions causing certain buttons not to be mapped.
Fixed cross-platform building from source. (Thanks @cadewey)
0.8.0
This is the sixteenth official release of Mission Control.
This is purely a compatibility release to support the newly released 15.0.0 firmware, since I pushed all my recent changes out with the 0.7.1 release last week.
Please note that this is a pre-release intended to allow people to continue using the module on 15.0.0 while I finalise support for it. It should be stable (though please report any issues if you encounter them), but is missing the patches to the bluetooth module for 15.0.0 that enable new Wii and Xbox Elite 2 controllers to be paired. It is otherwise fully functional.
0.7.1
This is the fifteenth official release of Mission Control.
This is mostly a bugfix release to push out all of the fixes and improvements that I've been sitting on over the past 6 months. Several improvements and some new configuration options were added for Sony controllers, and experimental Wii Balance Board support mapping center of mass values to left analog stick was added. See below for the full changelog.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. There you can find installation and usage instructions along with an FAQ section that will answer most of your questions.
New configuration options
The following additional/modified settings are now available under this [misc] section of the config .ini file.
enable_dualshock4_lightbar Enable/disable the coloured LED lightbar on Sony Dualshock4 controllers.
enable_dualsense_lightbar Enable/disable the coloured LED lightbar on Sony Dualsense controllers.
enable_dualsense_player_leds Enable/disable the white player indicator LEDs below the Dualsense touchpad.
dualsense_vibration_intensity Set Dualsense vibration intensity, 12.5% per increment. Valid range [1-8] where 1=12.5%, 8=100%.
Please note that the disable_sony_leds setting no longer exists, and has been replaced by enable_dualshock4_lightbar and enable_dualsense_lightbar (with inverted logic). If you have been using this setting to date, you will need to update your missioncontrol.ini file accordingly.
See here for full instructions on configuring the sysmodule via the .ini file
Changelog:
Added experimental support for Wii Balance Board.
Added support for 8bitdo SN30 Pro Xbox Cloud Gaming controller running firmware 2.XX.
Added mc IPC service for future sysmodule interaction.
Added config option to disable Dualsense player LEDs.
Added config option to set Dualsense vibration intensity.
Split config option for disabling LED lightbar on sony controllers into separate settings for Dualshock4 and Dualsense.
Inverted logic for controller config options to match other boolean settings.
Fixed Dualsense player LEDs for controllers updated to newer firmware versions.
Disabled fade-in effect for Dualsense player LEDs.
Lowered default vibration intensity for Dualsense controllers to 50%. This should address user complaints of the vibration being too strong and getting picked up by the motion sensors in certain games.
Fixed a regression in Wii extension controller detection that caused WiiU Pro controllers to be incorrectly identified.
Wii MotionPlus extension is no longer initialised if motion controls have been disabled in module settings.
Wiimote buttons 1/2 now act as L3/R3 when a Classic Controller/ Classic Controller Pro extension is connected.
Tweaked battery level mapping for Sony controllers. Should hopefully reduce instances of controllers with low battery being immediately disconnected without warning.
Added mutex locks around some sensitive buffer accesses. May improve reliability when pairing controllers.
Updated npdm json to eliminate warnings when building from source.
0.7.0
This is the fourteenth official release of Mission Control.
This adds full support for HOS 14.1.0, motion controls for Dualshock4, Dualsense and Wii MotionPlus* controllers, and support for the g910 Wireless Bluetooth controller. See below for the full changelog.
*Note: regular Wiimote controllers without the MotionPlus extension may work in some games, but only come equiped with an accelerometer and lack the gyroscope sensor required for full "sixaxis" motion controls.
- Added bluetooth ips patches for 14.0.0.
- Added support for g910 wireless bluetooth controller.
- Support for motion controls was added for Dualshock4, Dualsense, and Wii MotionPlus controllers.
- Wii controller handling was refactored for accuracy and completeness.
- Added mechanisms for executing code in a worker thread and receiving asynchronous responses from controllers.
- Minor bugfixes and improvements
0.6.4
This is the thirteenth official release of Mission Control.
Added bluetooth ips patches for 13.2.1.
Fixed incorrect mapping of A/B buttons on Hyperkin Scout controller.
Fixed disconnection issues affecting Xiami Mi, Steelseries Free and PowerA Moga controllers.
Fixed a regression that caused the enable_rumble setting in the module config ini file to have no effect.
Fixed a compilation error when building with latest devkitA64 update
0.6.3
This is the twelfth official release of Mission Control
Just a quick release to support Atmosphère 1.2.5 and the new 13.2.0 firmware. Support for the Hyperkin Scout SNES controller was also added.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. There you can find installation and usage instructions along with an FAQ section that will answer most of your questions.
Atmosphère >= 1.2.5 is required to run this release.
0.6.2
This is the eleventh official release of Mission Control
This is mostly a bugfix release to address the rumble issues that have surfaced since recent Atmosphère releases. Support for the new N64 and Sega Genesis/Megadrive Nintendo Switch Online controllers has also been added. See below for the full changelog.
Added support for new N64 and Sega Genesis/Megadrive Nintendo Switch Online controllers
Fixed an issue where controllers would vibrate non-stop under certain conditions after connecting to the console
Fixed an issue where rumble output was missing from certain games
Fixed an issue where Crash Team Racing Nitro-Fueled and Crash Bandicoot N. Sane Trilogy games would output a constant stream of random rumble data
Disabled sending SetTsi command to Ouya controller (fixes disconnect issue)
Changed the order of initialisation commands for Sony controllers to reduce perceived delay when connecting to the console
Various improvements to the accuracy of controller subcommand handling were added
Atmosphère >= 1.2.0 is required to run this release.
0.6.1
This is the tenth official release of Mission Control.
Just a small update to add support for the latest HOS (13.1.0) and Atmosphère (1.2.1) versions, and a couple of minor fixes. See below for the full changelog.
Valid analog stick deadzone parameters are now stored in virtual SPI flash file for each controller. This resolves an issue reported by several users where some controllers were experiencing analog stick drift even after calibration due to incorrect deadzone parameters being applied. Please delete the controller entries under sdmc:/config/MissionControl/controllers/ so that these files can be recreated with the correct parameters. Note that you will need to redo any user calibrations after deleting these entries.
Support for manually disabling a vendor command (SetTsi) for incompatible controllers has been added. Allowing the console to send the command to such controllers causes them to be disconnected shortly after connecting. In most cases, sending of this command can be disabled in code after the incompatibility has been reported. Some incompatible third-party controllers, however, are indistinguishable from the originals that do support the command and must be flagged manually. To do so, a blank file settsi_disable.flag can be created under the directory for a specific controller under sdmc:/config/MissionControl/controllers/. Note that this command is used for managing bandwidth between bluetooth devices and also the Wifi chip. It is therefore desirable to have the console send it where possible and should only be disabled where absolutely necessary.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. There you can find installation and usage instructions along with an FAQ section that will answer most of your questions.
Atmosphère >= 1.2.0 is required to run this release.
0.6.0
This is the ninth official release of Mission Control
This release brings full support for firmware 13.0.0, along with a few minor additions and bugfixes. See the changelog below for details.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. There you can find installation and usage instructions along with an FAQ section that will answer most of your questions.
Note: 13.0.0 firmware made changes to the system to facilitate bluetooth audio support. While I have updated Mission Control to support the changes that concern hid devices, it's possible that there are issues that could arise from untested scenarios involving audio devices. If you notice any strange behaviour with audio devices that only occurs with mission control installed, please open an issue on the issue tracker.
Atmosphère >= 1.1.0 is required to run this release.
0.5.0
https://github.com/ndeadly/MissionControl/releases/tag/v0.5.0
0.5.0-alpha.4
Once again, this is the same as the previous pre-release, recompiled to work with the latest atmosphere and HOS (0.19.4 and 12.0.3)
This release incorporates updates made to libstratosphere since the previous release that relax version checks, meaning that these updates to Mission Control for each minor Atmosphere release should no longer be required.
0.5.0-alpha.3
This is the same as the previous pre-release, recompiled to work with atmosphere 0.19.3 on 12.0.2
0.5.0-alpha.2
This is the same as the original pre-release, updated to work with atmosphere 0.19.2
0.5.0-alpha
NOTE: the new 12.0.0 update made a lot of changes to the bluetooth service under the hood that have broken various things in Mission Control. This is an alpha release intended to appease the masses with preliminary support for HOS 12.0.0/Atmosphere 0.19.x until I find the time to look at it properly. While it should work as usual on firmwares prior to 12.0.0, controller pairing is currently broken for many controllers on the latest firmware. Controllers already paired to the console prior to updating should connect and work as expected. There are likely to be other issues waiting to be discovered (please report them if you encounter any!)
This release brings partial support for the new 12.0.0 firmware, some new controllers and handful of new features and improvements including a global module config .ini, spoofing name and address of the host Bluetooth adapter, and maybe most notably rumble support (finally!)
Rumble support is available for the major console controllers from Nintendo, Microsoft and Sony and is enabled by default. Support for other controllers can be added at request if you can find me information about the output report format for your controller. Anyone know of a newbie-friendly way to dump an HID report descriptor?
Please note that while rumble works without issue for the supported controllers, it is considered a work in progress with room for improvement. Do not expect the vibrations to be perfect reproductions of the HD rumble found in Switch controllers. It can be disabled globally via the config ini file if you don't like it. This will not affect official Switch controllers.
A template for the config .ini file will be installed to /atmosphere/config_templates/missioncontrol.ini. To modify the default module settings, copy the template to /atmosphere/config/missioncontrol.ini and uncomment/modify any settings you want to change. The file is only parsed on startup, so any changes you make will require a reboot to take effect. Currently there is only a small set of configuration settings, but this will be expanded upon in future releases.
0.4.1
This is the sixth official release of MissionControl.
This is just a quick update to support the new 11.0.1 firmware update, along with a couple of included bugfixes. See below for the full changelog.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. There you can find installation and usage instructions along with an FAQ section that will answer most of your questions.
IMPORTANT: Atmosphère >= 0.16.1 is required to run this release. Using an older Atmosphère version will cause MissionControl to crash the system on boot.
Changelog:
Updated to support 11.0.1 firmware/Atmosphere 0.16.1
Fixed an issue where some official Nintendo controllers with L and R variants (eg. NES Online Controller) had their inputs ignored due to not being identified correctly.
Fixed a regression that caused paired controller information from the btm service to be truncated past the first entry. This caused controllers to be missing from the Search for Controllers screen, and in some cases could lead to repeated pairing notifications upon startup/wakeup and database full dialogs being shown.
0.4.0
This is the fifth official release of MissionControl.
This release adds compatibility with the new 11.0.0 firmware update, support for new controllers, and some minor fixes and improvements. See below for the full changelog.
New users landing on this release page should first check out the readme on the main project page for the official project documentation. Most of your questions will be already answered there.
Once again, thanks to all the users that requested, helped identify and test new controllers.
IMPORTANT: Atmosphère >= 0.16.0 is required to run this release. Using an older Atmosphère version will cause MissionControl to crash the system on boot.
Changelog:
Added support for 11.0.0 firmware
Added support for the following controllers:
Sony Dualsense Controller*
Steelseries Nimbus
Razer Serval
Mad-Catz C.T.R.L.R
PowerA Moga Pro
ipega 9017s
Mocute 050
Fixed incorrect button mapping for 8bitdo zero controller as reported by users
Added correct hardware ID for recognition of Gamesir G3s controller in Android mode
Added unique Dualshock4 lightbar colours for players 5-8 (P5=cyan, P6=orange, P7=yellow, P8=purple)
Added toolbox.json file for compatibility with ovl-sysmodules and Hekate/Kosmos Toolbox (thanks Borrajo)
*Only basic Dualsense button inputs are supported for now. The controller hasn't been fully reverse engineered yet and I don't own one to test out other features properly.
0.3.0
This is the fourth official release of MissionControl.
This release fixes a critical bug in the setting of thread priorities, reworks the way that controller inputs were being handled and adds support for a handful of new controllers, amongst other things. See below for the full changelog.
New users landing on this release page should first check out the readme on the main project page. Most of your questions will be already answered there.
Thanks again to all the users that requested and helped identify and test new controllers.
Also thanks to peteruk for sending me an icon to use for btdb.nro
IMPORTANT: Atmosphère >=0.14.2 is required to run this release of MissionControl. Older Atmosphere versions will cause the console to hang or crash during boot.
Users upgrading from version 0.1.0 of MissionControl are also advised to wipe their pairing database and re-pair controllers running 0.2.0 or greater. Failure to wipe the old entries may result in non-switch controllers being detected incorrectly.
Changelog
Added support for the following controllers
NVidia shield controller
TaTaCon (Taiko drum) Wii extension controller
8bitdo zero
GameSir G4s
ipega 9076, 9078, 9087
PowerA Moga Hero
PowerA Moga Pro 2
Fixed an issue where threads were being assigned lower than intended priorities. This caused the game Hades to freeze at the loading screen when wifi was disabled, and possibly other unreported issues due to conflicting threads.
Changed the way that controller input reports are handled. State is now stored for each controller and updated with each incoming report. This should fix several cases where controllers could register false button presses/stick movements.
Unrecognised controllers now show up as connected to the console after successful pairing (may require a button press before the console sees the controller). These will display with red coloured buttons in the Controllers menu to indicate they are not being mapped. This should help eliminate some of the confusion between paired/connected state experienced by users requesting controller support.
Added the button combos MINUS + DPAD_DOWN and MINUS + DPAD_UP to act as HOME and CAPTURE buttons respectively, to act as a fallback for controllers where these buttons can't be mapped.
Reduced the brightness of Dualshock4 controller lightbar by 50%.
btdb.nro now has an option to clear the controller pairing database
0.2.1
Added support for firmware 10.2.0
Fixed a bug with the conversion of WiiU analog stick data that could cause extreme values in X and Y to wrap around to the opposite side in some controllers.
Added support for the following controllers
Steelseries Free
GameSir G3s
Hori Onyx