Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MissionControl Switch: Difference between revisions

From GameBrew
m (HydeWing moved page MissionControl Switch to Mission Control Switch without leaving a redirect)
No edit summary
Line 24: Line 24:


The app is easy to install and use. It comes with an intuitive user interface that makes it simple to set up and start using. All you need to do is download and install the app on your Nintendo Switch, pair it with your controller, and you're good to go. The app supports a wide range of controllers, including the PlayStation DualShock 4, Xbox One S/X, and even the Joy-Cons of the Nintendo Switch itself.
The app is easy to install and use. It comes with an intuitive user interface that makes it simple to set up and start using. All you need to do is download and install the app on your Nintendo Switch, pair it with your controller, and you're good to go. The app supports a wide range of controllers, including the PlayStation DualShock 4, Xbox One S/X, and even the Joy-Cons of the Nintendo Switch itself.
==How it works?==
Mission Control manipulates the Bluetooth system module of the Nintendo Switch by intercepting its initialisation IPC commands and system events. This is achieved by obtaining the handles to the Bluetooth system events and shared memory and creating secondary versions of these. Modifications can be made to any data buffers, and outgoing requests to the controller can be translated or dropped. Intercepting initialisation IPC commands allows homebrew to use the Bluetooth service without crashing the console or invalidating the event handles held by system processes.
Exefs patches to the Bluetooth module enable the pairing of various controllers, and patches to the btm module prevent controllers from being immediately disconnected. The btm service is also MITM'd, allowing for faking controller names while retaining the original names in the pairing database.


== Features ==
== Features ==
Line 80: Line 85:


*''Not all Xbox One wireless controllers support Bluetooth. Older variants use a proprietary 2.4Ghz protocol and cannot be used with the Switch. See [https://support.xbox.com/help/hardware-network/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues here] for information on identifying the Bluetooth variant.''
*''Not all Xbox One wireless controllers support Bluetooth. Older variants use a proprietary 2.4Ghz protocol and cannot be used with the Switch. See [https://support.xbox.com/help/hardware-network/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues here] for information on identifying the Bluetooth variant.''
==Installation==
===Requirements===
* Hackable Nintendo Switch running an up-to-date version of [[Atmosphere Switch|Atmosphère]] custom firmware. Other custom firmwares are '''''not supported'''''.
* Compatible Bluetooth controller.
===Installing Mission Control===
To install the latest release of Mission Control, please follow these steps:
* First, download the .zip file from [https://github.com/ndeadly/MissionControl/releases the official GitHub page].
* Then, extract the contents of the zip file to the root of your SD card. Allow the folders to merge and overwrite any existing files.
* Once the files are in place, simply reboot your console to activate the module and you're good to go!
'''Please note that if you are using firmware 16.0.0 or newer, you must have Atmosphère version 1.5.0 or later installed to run Mission Control without issues. Failure to use the correct version of Atmosphère may cause Mission Control to crash or freeze your system on boot.'''
== Usage ==
Mission Control is a sysmodule that runs in the background alongside the operating system when Atmosphère boots up. It allows the use of unsupported Bluetooth controllers as if they were native Pro Controllers, without the need for additional homebrew applications. To use controllers, they must first be paired with the console, after which they will automatically reconnect when woken up. Note that unofficial controllers cannot be used to wake the console.
Once connected, the controller's buttons are mapped to the physical layout of a Switch Pro Controller. For Xbox-style controllers, the A/B and X/Y buttons will be swapped, and <code>MINUS + DPAD_UP</code> and <code>MINUS + DPAD_DOWN</code> are provided as an alternative for <code>CAPTURE</code> and <code>HOME</code> buttons when there are not enough face buttons available. Button mappings can be changed from the official system menu at <code>System Settings->Controllers and Sensors->Change Button Mapping</code>.
Most native features should work, except for firmware updates. If you encounter any issues, please create a support issue on the [https://github.com/ndeadly/MissionControl/issues Github page].
=== Pairing Controllers ===
To pair your controllers with your Nintendo Switch, go to the system menu and select "Controllers->Change Grip/Order". Do not select "Pairing New Controllers" or "Search for Controllers". Place your controller into pairing mode and wait for a few seconds. Once paired, you will see a "Paired" notification on the top left of the screen. You can reconnect your controller anytime without having to re-enter the pairing process unless you've connected it to another device or emummc.
Different controllers have different methods of entering pairing/sync mode. It is recommended that you perform an analog stick calibration because every controller has different analog stick range and center position.
* For Nintendo Wii/WiiU controllers, press the red sync button on the back of the controller.
* For Sony Dualshock3 controllers, connect it to the console via USB cable, wait for the LED to flash, then disconnect the cable and press the "PS" button.
**''Note: to avoid unwanted behaviour if using the controller in USB wired mode, this only works from the usual Controllers->Change Grip/Order screen''.
* For Sony Dualshock4/Dualsense controllers, press and hold the "PS" and "share" buttons simultaneously until the lightbar blinks.
* For Microsoft Xbox One/Elite 2 controllers, press and hold the "guide" button until the LED blinks, then press and hold the small sync button on the back near the charging port until the LED blinks more rapidly.
**''Note: controller firmware versions 5.xx.xxxx.x and upward use Bluetooth Low Energy and are not currently supported.''
If your controller doesn't pair successfully, press and hold the reset button on the back of the controller for a few seconds and try again. If your controller is not officially supported, it will display with red buttons on the "Controllers" menu. Check your controller's user manual for instructions on how to put it into sync mode.
== Module configuration ==
A template for the config .ini file will be installed to <code>/config/MissionControl/missioncontrol.ini.template</code>. To modify the default module settings, copy the template to <code>/config/MissionControl/missioncontrol.ini</code> and uncomment (remove the leading <code>;</code>) and 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. Settings entries that can't be parsed/validated correctly are ignored. Currently there is only a small set of configuration settings, but this will be expanded upon in future releases.
* <code>[general]</code> These are general settings for mission control features.
** <code>enable_rumble</code> Enable/disable rumble support for unofficial controllers.
** <code>enable_motion</code> Enable/disable motion controls support.
* <code>[bluetooth]</code> These settings can be used to spoof your switch bluetooth to appear as another device. This may be useful (in conjunction with a link key) if you want to use your controller across multiple devices without having to re-pair every time you switch. Note that changing these settings will invalidate your console information stored in any previously paired controllers and will require re-pairing.
** <code>host_name</code> Override the bluetooth host adapter name.
** <code>host_address</code> Override the bluetooth host adapter address.
* <code>[misc]</code> These are miscellaneous controller-specific settings etc.
** <code>dualshock3_led_mode</code> Set Dualshock 3 player LED behaviour. Valid modes [0-1] where 0=Switch pattern, 1=PS3 pattern
** <code>dualshock4_polling_rate</code> Set polling rate for Sony Dualshock 4 controllers. Valid range [0-16] where 0=max, 16=min. Refer [https://github.com/ndeadly/MissionControl/blob/4a0326308d1ff39353b045f5efb1a99c4a504c28/mc_mitm/source/controllers/dualshock4_controller.hpp#L21 here] for corresponding frequency values.
** <code>dualshock4_lightbar_brightness</code> Set LED lightbar brightness for Sony Dualshock 4 controllers. Valid range [0-9] where 0=off, 1=min, 2-9=12.5-100% in 12.5% increments.
** <code>dualsense_lightbar_brightness</code> Set LED lightbar brightness for Sony Dualsense controllers. Valid range [0-9] where 0=off, 1=min, 2-9=12.5-100% in 12.5% increments.
** <code>dualsense_enable_player_leds</code> Enable/disable the white player indicator LEDs below the Dualsense touchpad.
** <code>dualsense_vibration_intensity</code> Set Dualsense vibration intensity, 12.5% per increment. Valid range [1-8] where 1=12.5%, 8=100%.


==Media==
==Media==
Line 85: Line 140:
<youtube>dRCDSKHA4u8</youtube>
<youtube>dRCDSKHA4u8</youtube>


'''How To Connect Various Joypads To Nintendo Switch 2023 (Mission Control) - ([https://www.youtube.com/watch?v=g90do6YSFac SwitchBrew])'''<br>
<youtube>g90do6YSFac</youtube>
== Removal ==
To functionally uninstall Mission Control and its components, all that needs to be done is to delete the following directories from your SD card and reboot your console.
* <code>/atmosphere/contents/010000000000bd00</code>
* <code>/atmosphere/exefs_patches/bluetooth_patches</code>
* <code>/atmosphere/exefs_patches/btm_patches</code>
If you wish to completely remove all traces of the software ever having been installed (telemetry excepted), you may also want to follow these additional steps
* Remove the following directory from your SD card
** <code>/config/MissionControl</code>
* Wipe the Bluetooth pairing database via <code>System Settings-&gt;Controllers and Sensors-&gt;Disconnect Controllers</code>
== Planned/In-progress Features ==
Below is a list of features I am currently working on or would like to look into in the future, roughly in descending order of priority. Requests are welcome if you have an idea you think would make a useful feature.
* <s>Rumble support</s>
* <s>Motion controls support</s>
* Bluetooth LE support
* USB wired controllers
* UART MITM to allow button combos and other future features to apply to joycons in handheld mode
* Per-controller configurations
** Rumble on/off
** Motion controls on/off
** Identify as Pro Controller or Joycon
** Set controller body/button colours
** Invert analog stick axes
** Analog stick deadzones
* Companion application
** Pairing database management
*** View paired controller information
*** Clear database
*** Export database to file
*** Import existing database from file
** Controller management/diagnostics
*** Manage controller configurations
*** View raw HID report data
*** Test buttons/analog sticks
*** Dump SPI flash (official controllers only)
** Controller discovery/pairing reimplementation
* Tesla overlay
* Keyboard and mouse support
* Gamecube mode (analog trigger support)
* Title-specific button bindings
=== Known Issues and Limitations ===
* Non-Switch controllers cannot be used to wake the system from sleep.
* Controllers using the Bluetooth LE (BLE) standard are currently not supported and will not connect to the system.
* Some controllers can take some time to be detected and subsequently pair with the console. Be patient and re-enter the sync mode of the controller several times if neccessary. Once synced, controllers should connect and work as usual.
* Xbox One controllers cannot be switched off via software and will attempt to reconnect to the console after being disconnected. This is a limitation of the controller's bluetooth firmware. To switch the controller off, the guide button must be held in for several seconds.
* Reported controller battery levels may not be correct. I'm relying entirely on reverse engineering notes found on the internet for these. In many cases I don't own the controller and there is simply no information available, so these controllers will always show full battery. Any help in improving this is most welcome.
* Several users have reported knockoff WiiU and Dualshock4 controllers that cannot be detected by the console during Bluetooth discovery. Unfortunately I think they're using an incompatible Bluetooth chipset.
* Mission Control stores configuration data for each paired controller in the <code>/config/MissionControl/controllers</code> directory. If any part of this directory tree becomes corrupted, controllers may be disconnected when attempting to read configuration data fails.
* When using Wii controllers with MotionPlus, the controller must be switched on while sitting button side down on a flat surface in order to be calibrated properly. Motion axes will be messed up otherwise.
* Wii extension controllers are sometimes detected incorrectly when MotionPlus is present. This issue appears to be timing related and can be resolved by reconnecting the extension as necessary.
== Frequently Asked Questions ==
'''''Does this run on &lt;insert CFW here&gt;?''''' No. Mission Control will only run under Atmosphère. This is not some attempt to lock out users of other CFW, Atmosphere is simply the only one providing the extensions neccessary to MITM Bluetooth communications that make this sysmodule possible.
'''''Will using this get me banned from online?''''' Currently there haven't been any confirmed cases of bans as a result of running Mission Control. That said, running any unofficial software under CFW will always carry a non-zero risk of ban, and Nintendo could change their ban criteria at any point. While Mission Control should be relatively safe, as it simply emulates a Pro Controller being connected, it would certainly be possible to detect that you had connected unofficial controllers to the console if Nintendo were interested in doing so. Use at your own discretion.
'''''Does this support USB controllers?''''' No, Mission Control is currently Bluetooth-only. For now you can use cathery's [https://github.com/cathery/sys-con sys-con] for USB controllers.
'''''Does this work with sys-con installed?''''' Yes, the two can be run simultaneously without issue.
'''''My console is crashing on boot because of this sysmodule. What can I do?''''' If you're seeing crashes on boot with Mission Control's title ID (<code>010000000000bd00</code>), it is likely either you have updated recently to a new Atmosphere release and an update to Mission Control is required, or you are running an old version of Atmosphere which is not compatible with the latest version of Mission Control. Crashes in <code>sm</code> (title ID <code>0100000000000004</code>) can indicate version incompatibilities between your current Atmosphere and one or more of your homebrew sysmodules. This may be caused by Mission Control, or it could be another custom sysmodule that uses libstratosphere, even if it looks as though Mission Control is to blame (<code>ldn_mitm</code> and <code>emuiibo</code> are common offenders). If you've just updated Atmosphere you should always check if there have also been updates released for the sysmodules you use. qlaunch errors (title ID <code>0100000000001000</code>) can be a sign that you have too many custom sysmodules running and are depleting the limited system resources available to them. Check your <code>/atmosphere/contents</code> folder and verify you actually need everything in there. If you don't know what you're doing, it may be easier to just delete this folder entirely, reinstall atmosphere, and then explicitly reinstall only the sysmodules you need.
'''''How can I use this with multiple sysNAND/emuMMC launch configs?''''' Pairing controllers across multiple unique HOS installations requires multiple pairing databases and is essentially the same as pairing with two different consoles. The only exception being the case where you paired the controller(s) prior to making sysNAND copies. For now you will have to re-pair your controllers when switching back and forth. In the future I hope to include an option to load/store the database on the SD card to avoid this issue.
'''''Can I remap controller buttons using Mission Control?''''' Yes. Since Mission Control emulates official Pro Controllers, you can remap them using the official method introduced by Nintendo in firmware 10.0.0. You can find the remapping options in the system menu under <code>System Settings-&gt;Controllers and Sensors-&gt;Change Button Mapping</code>.
'''''My console shows a &quot;Paired&quot; notification but my controller doesn't connect, what's wrong?''''' Your controller has successfully paired with the console but is being disconnected shortly after, before it can start sending inputs. This can happen for a variety of reasons, the most common being:
* Your controller is not officially supported by Mission Control and hasn't been assigned an input handler. Double-check the [[#supported-controllers|Supported Controllers]] list for your controller. Please open a controller request [https://github.com/ndeadly/MissionControl/issues/new/choose issue] so that I can add support if it's not present.
* Your controller battery is low and needs to be replaced or recharged.
* Your controller's virtual memory file or the directory tree containing it has been corrupted. Try deleting the controller's config entry (<code>/config/MissionControl/controllers/&lt;xxxxxxxxxxxx&gt;/</code>, where <code>&lt;xxxxxxxxxxxx&gt;</code> is the 12-character hex representation of your controllers Bluetooth MAC address) and letting Mission Control create a new one. It may be necessary to delete the entire <code>controllers</code> directory in some cases. Note: you will lose any stored controller specific data such as user analog stick or motion calibrations when deleting these files. As this is the most destructive measure, you should attempt it last, after exhausting the suggestions above.
'''''My Xbox controller won't connect, I thought you said they were supported?''''' Although they may look similar, not all Xbox controllers are created equal. There are actually several hardware revisions/models available (7 at the time of writing) with varying wireless capabilites. On Xbox consoles (or PC with the wireless USB adapter) all controllers use a proprietary Microsoft wireless protocol known as GIP. Bluetooth connectivity, however, is ''not'' the same thing and varies between controller models. Some support bluetooth, and some don't. Of those that do, some are using the newer (currently unsupported) Bluetooth Low Energy (LE) standard or will switch to it after a firmware update. '''The only supported models are the 1708 (Xbox One S) and 1797 (Xbox Elite V2) revisions. If these have been updated to a Bluetooth LE firmware (5.xx.xxxx.x and above), you will need to downgrade the firmware to the legacy version (see below).'''. Controller model numbers can be found on the inside of the battery compartment, or the back of the controller in controllers with an internal battery.
For more details on the various controller revisions (with images), see [https://en.wikipedia.org/wiki/Xbox_Wireless_Controller#Summary here].
'''''My Xbox One/Elite V2 controller used to connect and now it doesn't, what gives?''''' As of late 2021, Microsoft introduced a new controller firmware that aims to bring Xbox One/Elite 2 controllers in line with the newer Series X|S controllers. Updating to this firmware switches the controller over to using Bluetooth Low Energy (LE), a newer bluetooth standard focused on low power consumption, which is not currently supported by Mission Control. If your controller firmware is version 5.xx.xxxx.x or above, you have the new LE firmware and will need to downgrade to the legacy one (see https://support.xbox.com/en-US/help/hardware-network/accessories/controller-firmware-reversion)
'''''Can you add support for Xbox 360 controllers?''''' No, not currently. These don't use Bluetooth. Try sys-con with a wireless USB adapter.
'''''Can you add support for wake from sleep?''''' Probably not. As far as I know, wake from sleep involves a controller sending a special control command to the Switch Bluetooth hardware. There is no way to make a non-switch controller send the command recognised by the Switch without modifying its hardware/firmware.
'''''Can you add bluetooth audio support?''''' <s>No. The bluetooth module on the switch only implements a small set of services required to make hid controllers work. Of this small set of services, only a handful of high-level functions are exposed to the rest of the system. Adding audio support would require implementing the services neccessary for audio transport, for which any sane person would require an open-source re-implementation of the bluetooth module in order to have access the low-level functions required to pull it off.</s> <s>As of firmware 12.0.0 Nintendo have added functions supporting Bluetooth audio. While the feature hasn't been enabled in official software, plutooo has created an experimental sysmodule called [https://github.com/plutooo/nx-btred nx-btred] that enables Bluetooth audio in games that support recording. There isn't much benefit to me adding its functionality to Mission Control.</s> Since firmware 13.0.0 Nintendo now officially supports Bluetooth audio.


==Changelog==
==Changelog==
Line 95: Line 242:
* Renamed some of the other .ini config options.
* 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.
* 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.
'''v0.9.1'''
'''v0.9.0'''
'''v0.9.1'''
* Updated libraries for 16.0.0 support.
'''v0.9.1'''
* Added bluetooth exefs patches for 16.0.0.
'''v0.9.1'''
* Added support for Sony Dualsense Edge controller.
'''v0.9.1'''
* Added support for Razer Raiju Ultimate controller.
'''v0.9.1'''
* Added support for Mad Catz L.Y.N.X 3 controller.
'''v0.9.1'''
* Added support for AtGames Legends Pinball Arcade Control Panel extension. (Thanks @SK360)
'''v0.9.1'''
* 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.
'''v0.9.1'''
* 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.
'''v0.9.1'''
* Fixed regression in input handing for Wii Classic Controller/Classic Controller Pro extensions causing certain buttons not to be mapped.
'''v0.9.1'''
* Fixed cross-platform building from source. (Thanks @cadewey)
'''v0.9.1'''
'''v0.8.0'''
'''v0.9.1'''
* Updated libraries for 15.0.x support.
'''v0.9.1'''
* Added bluetooth IPS patches for 15.0.x.
'''v0.9.1'''
* Dualshock 4 controllers are no longer disconnected if motion calibration retrieval fails.
'''v0.9.1'''
'''v0.7.1'''
'''v0.9.1'''
* Added experimental support for Wii Balance Board.
'''v0.9.1'''
* Added support for 8bitdo SN30 Pro Xbox Cloud Gaming controller running firmware 2.XX.
'''v0.9.1'''
* Added mc IPC service for future sysmodule interaction.
'''v0.9.1'''
* Added config option to disable Dualsense player LEDs.
'''v0.9.1'''
* Added config option to set Dualsense vibration intensity.
'''v0.9.1'''
* Split config option for disabling LED lightbar on sony controllers into separate settings for Dualshock4 and Dualsense.
'''v0.9.1'''
* 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.
'''v0.7.0'''
* 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
'''v0.6.4'''
* Added bluetooth ips patches for 13.2.1.
* Fixed incorrect mapping of A/B buttons on Hyperkin Scout controller.
* Fixed disconnection issues affecting Xiaomi 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
'''v0.6.3'''
* Updated to latest libstratosphere for 13.2.0 support
* Added support for Hyperkin Scout controller
'''v0.6.2'''
* 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
'''v0.6.1'''
* Added bluetooth ips patches for 13.1.0.
* Updated module for libstratosphere refactor (thanks @SciresM)
* Added valid deadzone information to virtual SPI flash files (thanks @Banz99).
* Added means of manually disabling sending of SetTsi vendor command to controllers that don't support it.
'''v0.6.0'''
* Added full support for 13.0.0 firmware.
* Added bluetooth ips patches for 13.0.0.
* The /config/MissionControl/controllers directory is now created as required if not present. This avoids potential crashes eg. if the user has deleted this directory, or has failed to install the module correctly.
* Fixed potential incorrect battery level and report charging status for Wii U Pro Controller. (Thanks @GaryOderNichts)
* External power/USB status is now set for controllers known to report it.
* Xbox One controllers now report full battery when powered via USB, instead of the zero value reported by the controller.
'''v0.5.1'''
* Added support for the following controllers:
** Microsoft Xbox Elite Series 2 Controller
** Gamesir T2a
* Updated ips patch set to enable successful pairing of the Xbox Elite Wireless Series 2 controller.
* Added file-based virtual SPI flash system. Data such as calibrations can now be stored and retrieved for each controller.
* Analog values for L/R on the Wii Classic Controller are now taken into account when mapping controls. This allows for identical trigger behaviour of Gamecube controllers used via a wiimote adapter vs the official USB adapter.
* Fixed a regression where Mocute 050 and 8bitdo Zero controllers were disconnecting due to receiving the SetTsi command from the console.
* Rumble data sent along with the subcommand report (0x01) is now correctly handled.
* Fixed an array subscript partly outside of array bounds warning during compilation of the module.
'''v0.5.0'''
* Added support for the following controllers
** Razer Raiju Tournament
** Gamesir T1s
** 8BitDo SN30 Pro Xbox Cloud Gaming Edition
** Mad Catz C.T.R.L.R for Samsung
** Steelseries Stratus Duo
** iCade controller
** LanShen X1Pro
** AtGames Legends Pinball controller
* Added full support for 12.0.0 firmware
* Added ips patches for all 12.x.x firmwares to relax device class checks added in 12.0.0. This allows ipega and several other controllers that advertise themselves as keyboards or other input devices to pair once again.
* Added ips patches for all 12.x.x firmwares to make Wii/WiiU and other controllers that use legacy pincode pairing work again
* Added initial rumble support for selected major console controllers
* Added a global module configuration ini file
* Added support for spoofing the Bluetooth host adapter name and address
* Added support for Sony Dualsense player LEDs/lightbar colour and battery level reporting (thanks @Hydr8gon)
* Added support for the old Xbox One controller report format. Updating controller firmware is no longer a requirement for correct mapping of controls.
* Added support for an alternative report format for Mocute 050 controllers on certain firmware revisions
* Added a configuration option to disable the LED lightbar on Sony Dualshock4 and Dualsense controllers.
* Button combos for Home and Capture buttons are now also applied to official Nintendo controllers. Note that currently the console will ignore the combos for buttons that are not supposed to be present on the controller (eg. home button on left joycon, capture button on right)
* Fixed a bug caused by passing invalid analog stick factory calibration data for emulated controllers. This bug affected the scaling of analog stick data for all controllers to some degree, but was most noticeable for Xbox One controllers, where the stick values would max out when the stick was only around 60-70% tilted.
* Added delays between reading/writing controller memory when initialising Wii controller extensions. This should make detection of extension controllers more reliable for people who were experiencing issues.
* Reduced default reporting rate of Dualshock4 controller from 1000Hz to 125Hz to match Switch Pro Controller. This resolves an issue where using a Dualshock4 controller could seriously degrade wifi performance and caused issues with LAN play.
* SetTsi command is now only blocked from being sent to controllers where it is known to create issues (currently Xbox One and Gamesir controllers). This resolves an issue where a Dualshock4 controller connected alongside an official Nintendo controller would experience significant jitter, rendering it unsuitable for rhythm games. Blocking this command may also have played a part in the wifi issues mentioned above.
* Fixed a bug where some wiimote buttons could not be pressed with an extension controller connected.
* Fixed a bug where Xiaomi controllers would always show low or empty battery levels.
* Improved accuracy of battery level reporting in general.
* Dropped custom fork of libnx now that all relevant changes have been upstreamed. The libnx submodule now points to the official master branch, and at the time of writing Mission Control can be built with the official release from devkitPro without the need to compile it yourself.
* Removed call to CheckApiVersion function. This was intended for internal Atmosphere usage and was one of the major reasons Mission Control would often require an update after a new Atmosphere release.
* Updated to use new sf semantics introduced in Atmosphere 0.18.0
* Updated to use latest libstratosphere. This reduces the size of the module by almost 50%
* Added git branch, commit hash and tagged version when generating .zip file for distribution
'''v0.4.1'''
* 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.
'''v0.4.0'''
* 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)
'''v0.3.0'''
* Added support for the following controllers
** NVidia Shield (2017) 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
'''v0.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
'''v0.2.0'''
* Removed the modified boot2 from the original release. No more 0100000000000008 errors caused by mismatched Atmosphère versions. No more problems with users uninstalling and forgetting to replace the original boot2.
* Added a mitm of the btm service and renamed the sysmodule to 'bluetooth-mitm'. This allows the original controller names to be retained in the bluetooth database instead of renaming foreign controllers to Pro Controller. This should solve all the issues with Pro Controllers and other 3rd party switch controllers not connecting.
* Fixed a bug in the translation of battery level values for Dualshock4 controllers that would cause the console to crash/freeze when the controller battery was close to full or empty.
* Fixed a bug where motion control data wasn't being zeroed out, causing the camera to go crazy in games that try to read (currently unimplemented) motion controls.
* Support for several user-requested controllers was added:
** Ouya Controller
** Gamestick Controller
** Gembox Controller
** Ipega 9062S & 9023 (other models may also work)
** Xiaomi Mi Controller
* A new version of the optional btdb.nro has been provided alongside this release. This version can now read the real controller names from the database. It also now displays the Switch host bluetooth address.
'''v0.1.0'''
* First Release.
* First Release.
== Credits ==
* [https://switchbrew.org/wiki/Main_Page '''switchbrew'''] for the extensive documention of the Switch OS.
* [https://devkitpro.org/ '''devkitPro'''] for the homebrew compiler toolchain.
* '''SciresM''' for his dedicated work on the [https://github.com/Atmosphere-NX Atmosphère] project, libstratosphere and general helpfulness with all things Switch related.
* '''misson20000''' for his handy debug monitor [https://github.com/misson20000/twili Twili] and IPC logger [https://github.com/misson20000/ilia Ilia]
* '''dekuNukem''', '''CTCaer''', '''shinyquagsire23''' and others for their work in reversing and documenting the switch controller communication protocol.
* '''Banz99''' for ongoing code contributions, discussing ideas, testing and generally keeping me on my toes.
* '''friedkeenan''' for helping to test Wii extension controller support.
* '''DatenThielt''' for helping debug the bluetooth service remotely with his Xbox Elite Series 2 controller in order for me to develop patches to enable it to be successfully paired with the console.
* Everyone else over at the '''ReSwitched''' discord server who helped answering technical questions.


== External links ==
== External links ==
* Gbatemp - https://gbatemp.net/threads/missioncontrol-use-controllers-from-other-consoles-natively-via-bluetooth.572645/
* Gbatemp - https://gbatemp.net/threads/missioncontrol-use-controllers-from-other-consoles-natively-via-bluetooth.572645/
* Github - https://github.com/ndeadly/MissionControl
* Github - https://github.com/ndeadly/MissionControl

Revision as of 02:11, 19 April 2023

MissionControl
File:Missioncontrolswitch.png
General
Authorndeadly
TypeOther Apps
Version0.9.1
LicenseGPL-2.0
Last Updated2023/04/19
Links
Download
Website
Source
Support Author

Mission Control is an innovative homebrew application that allows you to use controllers from various other gaming consoles with your Nintendo Switch via Bluetooth connectivity. The best part is that you do not need to invest in any additional external hardware or dongles to use this app.

With the help of Mission Control, you can now enjoy playing your favorite Nintendo Switch games using the controllers of other consoles such as PlayStation, Xbox, or even your PC. This app is designed to provide gamers with a more immersive and enjoyable gaming experience by enabling them to use their preferred controllers.

The app is easy to install and use. It comes with an intuitive user interface that makes it simple to set up and start using. All you need to do is download and install the app on your Nintendo Switch, pair it with your controller, and you're good to go. The app supports a wide range of controllers, including the PlayStation DualShock 4, Xbox One S/X, and even the Joy-Cons of the Nintendo Switch itself.

How it works?

Mission Control manipulates the Bluetooth system module of the Nintendo Switch by intercepting its initialisation IPC commands and system events. This is achieved by obtaining the handles to the Bluetooth system events and shared memory and creating secondary versions of these. Modifications can be made to any data buffers, and outgoing requests to the controller can be translated or dropped. Intercepting initialisation IPC commands allows homebrew to use the Bluetooth service without crashing the console or invalidating the event handles held by system processes.

Exefs patches to the Bluetooth module enable the pairing of various controllers, and patches to the btm module prevent controllers from being immediately disconnected. The btm service is also MITM'd, allowing for faking controller names while retaining the original names in the pairing database.

Features

  • Supports all Switch firmware versions.
  • Connect up to 8 non-switch Bluetooth controllers simultaneously without any additional hardware.
  • Make use of native HOS menus for controller pairing, button remapping (firmware 10.0.0+) etc.
  • Support for rumble and motion controls (compatible controllers only)
  • Low input lag.
  • File-based virtual controller memory allowing for data such as analog stick calibration to be stored and retrieved.
  • Spoofing of host Bluetooth adapter name and address.
  • mc.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 a controller request issue.

  • 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
  • Not all Xbox One wireless controllers support Bluetooth. Older variants use a proprietary 2.4Ghz protocol and cannot be used with the Switch. See here for information on identifying the Bluetooth variant.

Installation

Requirements

  • Hackable Nintendo Switch running an up-to-date version of Atmosphère custom firmware. Other custom firmwares are not supported.
  • Compatible Bluetooth controller.

Installing Mission Control

To install the latest release of Mission Control, please follow these steps:

  • First, download the .zip file from the official GitHub page.
  • Then, extract the contents of the zip file to the root of your SD card. Allow the folders to merge and overwrite any existing files.
  • Once the files are in place, simply reboot your console to activate the module and you're good to go!

Please note that if you are using firmware 16.0.0 or newer, you must have Atmosphère version 1.5.0 or later installed to run Mission Control without issues. Failure to use the correct version of Atmosphère may cause Mission Control to crash or freeze your system on boot.

Usage

Mission Control is a sysmodule that runs in the background alongside the operating system when Atmosphère boots up. It allows the use of unsupported Bluetooth controllers as if they were native Pro Controllers, without the need for additional homebrew applications. To use controllers, they must first be paired with the console, after which they will automatically reconnect when woken up. Note that unofficial controllers cannot be used to wake the console.

Once connected, the controller's buttons are mapped to the physical layout of a Switch Pro Controller. For Xbox-style controllers, the A/B and X/Y buttons will be swapped, and MINUS + DPAD_UP and MINUS + DPAD_DOWN are provided as an alternative for CAPTURE and HOME buttons when there are not enough face buttons available. Button mappings can be changed from the official system menu at System Settings->Controllers and Sensors->Change Button Mapping.

Most native features should work, except for firmware updates. If you encounter any issues, please create a support issue on the Github page.

Pairing Controllers

To pair your controllers with your Nintendo Switch, go to the system menu and select "Controllers->Change Grip/Order". Do not select "Pairing New Controllers" or "Search for Controllers". Place your controller into pairing mode and wait for a few seconds. Once paired, you will see a "Paired" notification on the top left of the screen. You can reconnect your controller anytime without having to re-enter the pairing process unless you've connected it to another device or emummc.

Different controllers have different methods of entering pairing/sync mode. It is recommended that you perform an analog stick calibration because every controller has different analog stick range and center position.

  • For Nintendo Wii/WiiU controllers, press the red sync button on the back of the controller.
  • For Sony Dualshock3 controllers, connect it to the console via USB cable, wait for the LED to flash, then disconnect the cable and press the "PS" button.
    • Note: to avoid unwanted behaviour if using the controller in USB wired mode, this only works from the usual Controllers->Change Grip/Order screen.
  • For Sony Dualshock4/Dualsense controllers, press and hold the "PS" and "share" buttons simultaneously until the lightbar blinks.
  • For Microsoft Xbox One/Elite 2 controllers, press and hold the "guide" button until the LED blinks, then press and hold the small sync button on the back near the charging port until the LED blinks more rapidly.
    • Note: controller firmware versions 5.xx.xxxx.x and upward use Bluetooth Low Energy and are not currently supported.

If your controller doesn't pair successfully, press and hold the reset button on the back of the controller for a few seconds and try again. If your controller is not officially supported, it will display with red buttons on the "Controllers" menu. Check your controller's user manual for instructions on how to put it into sync mode.

Module configuration

A template for the config .ini file will be installed to /config/MissionControl/missioncontrol.ini.template. To modify the default module settings, copy the template to /config/MissionControl/missioncontrol.ini and uncomment (remove the leading ;) and 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. Settings entries that can't be parsed/validated correctly are ignored. Currently there is only a small set of configuration settings, but this will be expanded upon in future releases.

  • [general] These are general settings for mission control features.
    • enable_rumble Enable/disable rumble support for unofficial controllers.
    • enable_motion Enable/disable motion controls support.
  • [bluetooth] These settings can be used to spoof your switch bluetooth to appear as another device. This may be useful (in conjunction with a link key) if you want to use your controller across multiple devices without having to re-pair every time you switch. Note that changing these settings will invalidate your console information stored in any previously paired controllers and will require re-pairing.
    • host_name Override the bluetooth host adapter name.
    • host_address Override the bluetooth host adapter address.
  • [misc] These are miscellaneous controller-specific settings etc.
    • dualshock3_led_mode Set Dualshock 3 player LED behaviour. Valid modes [0-1] where 0=Switch pattern, 1=PS3 pattern
    • dualshock4_polling_rate Set polling rate for Sony Dualshock 4 controllers. Valid range [0-16] where 0=max, 16=min. Refer here for corresponding frequency values.
    • dualshock4_lightbar_brightness Set LED lightbar brightness for Sony Dualshock 4 controllers. Valid range [0-9] where 0=off, 1=min, 2-9=12.5-100% in 12.5% increments.
    • dualsense_lightbar_brightness Set LED lightbar brightness for Sony Dualsense controllers. Valid range [0-9] where 0=off, 1=min, 2-9=12.5-100% in 12.5% increments.
    • dualsense_enable_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%.

Media

USING THE MISSION CONTROL TO CONNECT VARIOUS GAMEPADS - (sthetix)

How To Connect Various Joypads To Nintendo Switch 2023 (Mission Control) - (SwitchBrew)

Removal

To functionally uninstall Mission Control and its components, all that needs to be done is to delete the following directories from your SD card and reboot your console.

  • /atmosphere/contents/010000000000bd00
  • /atmosphere/exefs_patches/bluetooth_patches
  • /atmosphere/exefs_patches/btm_patches

If you wish to completely remove all traces of the software ever having been installed (telemetry excepted), you may also want to follow these additional steps

  • Remove the following directory from your SD card
    • /config/MissionControl
  • Wipe the Bluetooth pairing database via System Settings->Controllers and Sensors->Disconnect Controllers

Planned/In-progress Features

Below is a list of features I am currently working on or would like to look into in the future, roughly in descending order of priority. Requests are welcome if you have an idea you think would make a useful feature.

  • Rumble support
  • Motion controls support
  • Bluetooth LE support
  • USB wired controllers
  • UART MITM to allow button combos and other future features to apply to joycons in handheld mode
  • Per-controller configurations
    • Rumble on/off
    • Motion controls on/off
    • Identify as Pro Controller or Joycon
    • Set controller body/button colours
    • Invert analog stick axes
    • Analog stick deadzones
  • Companion application
    • Pairing database management
      • View paired controller information
      • Clear database
      • Export database to file
      • Import existing database from file
    • Controller management/diagnostics
      • Manage controller configurations
      • View raw HID report data
      • Test buttons/analog sticks
      • Dump SPI flash (official controllers only)
    • Controller discovery/pairing reimplementation
  • Tesla overlay
  • Keyboard and mouse support
  • Gamecube mode (analog trigger support)
  • Title-specific button bindings

Known Issues and Limitations

  • Non-Switch controllers cannot be used to wake the system from sleep.
  • Controllers using the Bluetooth LE (BLE) standard are currently not supported and will not connect to the system.
  • Some controllers can take some time to be detected and subsequently pair with the console. Be patient and re-enter the sync mode of the controller several times if neccessary. Once synced, controllers should connect and work as usual.
  • Xbox One controllers cannot be switched off via software and will attempt to reconnect to the console after being disconnected. This is a limitation of the controller's bluetooth firmware. To switch the controller off, the guide button must be held in for several seconds.
  • Reported controller battery levels may not be correct. I'm relying entirely on reverse engineering notes found on the internet for these. In many cases I don't own the controller and there is simply no information available, so these controllers will always show full battery. Any help in improving this is most welcome.
  • Several users have reported knockoff WiiU and Dualshock4 controllers that cannot be detected by the console during Bluetooth discovery. Unfortunately I think they're using an incompatible Bluetooth chipset.
  • Mission Control stores configuration data for each paired controller in the /config/MissionControl/controllers directory. If any part of this directory tree becomes corrupted, controllers may be disconnected when attempting to read configuration data fails.
  • When using Wii controllers with MotionPlus, the controller must be switched on while sitting button side down on a flat surface in order to be calibrated properly. Motion axes will be messed up otherwise.
  • Wii extension controllers are sometimes detected incorrectly when MotionPlus is present. This issue appears to be timing related and can be resolved by reconnecting the extension as necessary.

Frequently Asked Questions

Does this run on <insert CFW here>? No. Mission Control will only run under Atmosphère. This is not some attempt to lock out users of other CFW, Atmosphere is simply the only one providing the extensions neccessary to MITM Bluetooth communications that make this sysmodule possible.

Will using this get me banned from online? Currently there haven't been any confirmed cases of bans as a result of running Mission Control. That said, running any unofficial software under CFW will always carry a non-zero risk of ban, and Nintendo could change their ban criteria at any point. While Mission Control should be relatively safe, as it simply emulates a Pro Controller being connected, it would certainly be possible to detect that you had connected unofficial controllers to the console if Nintendo were interested in doing so. Use at your own discretion.

Does this support USB controllers? No, Mission Control is currently Bluetooth-only. For now you can use cathery's sys-con for USB controllers.

Does this work with sys-con installed? Yes, the two can be run simultaneously without issue.

My console is crashing on boot because of this sysmodule. What can I do? If you're seeing crashes on boot with Mission Control's title ID (010000000000bd00), it is likely either you have updated recently to a new Atmosphere release and an update to Mission Control is required, or you are running an old version of Atmosphere which is not compatible with the latest version of Mission Control. Crashes in sm (title ID 0100000000000004) can indicate version incompatibilities between your current Atmosphere and one or more of your homebrew sysmodules. This may be caused by Mission Control, or it could be another custom sysmodule that uses libstratosphere, even if it looks as though Mission Control is to blame (ldn_mitm and emuiibo are common offenders). If you've just updated Atmosphere you should always check if there have also been updates released for the sysmodules you use. qlaunch errors (title ID 0100000000001000) can be a sign that you have too many custom sysmodules running and are depleting the limited system resources available to them. Check your /atmosphere/contents folder and verify you actually need everything in there. If you don't know what you're doing, it may be easier to just delete this folder entirely, reinstall atmosphere, and then explicitly reinstall only the sysmodules you need.

How can I use this with multiple sysNAND/emuMMC launch configs? Pairing controllers across multiple unique HOS installations requires multiple pairing databases and is essentially the same as pairing with two different consoles. The only exception being the case where you paired the controller(s) prior to making sysNAND copies. For now you will have to re-pair your controllers when switching back and forth. In the future I hope to include an option to load/store the database on the SD card to avoid this issue.

Can I remap controller buttons using Mission Control? Yes. Since Mission Control emulates official Pro Controllers, you can remap them using the official method introduced by Nintendo in firmware 10.0.0. You can find the remapping options in the system menu under System Settings->Controllers and Sensors->Change Button Mapping.

My console shows a "Paired" notification but my controller doesn't connect, what's wrong? Your controller has successfully paired with the console but is being disconnected shortly after, before it can start sending inputs. This can happen for a variety of reasons, the most common being:

  • Your controller is not officially supported by Mission Control and hasn't been assigned an input handler. Double-check the Supported Controllers list for your controller. Please open a controller request issue so that I can add support if it's not present.
  • Your controller battery is low and needs to be replaced or recharged.
  • Your controller's virtual memory file or the directory tree containing it has been corrupted. Try deleting the controller's config entry (/config/MissionControl/controllers/<xxxxxxxxxxxx>/, where <xxxxxxxxxxxx> is the 12-character hex representation of your controllers Bluetooth MAC address) and letting Mission Control create a new one. It may be necessary to delete the entire controllers directory in some cases. Note: you will lose any stored controller specific data such as user analog stick or motion calibrations when deleting these files. As this is the most destructive measure, you should attempt it last, after exhausting the suggestions above.

My Xbox controller won't connect, I thought you said they were supported? Although they may look similar, not all Xbox controllers are created equal. There are actually several hardware revisions/models available (7 at the time of writing) with varying wireless capabilites. On Xbox consoles (or PC with the wireless USB adapter) all controllers use a proprietary Microsoft wireless protocol known as GIP. Bluetooth connectivity, however, is not the same thing and varies between controller models. Some support bluetooth, and some don't. Of those that do, some are using the newer (currently unsupported) Bluetooth Low Energy (LE) standard or will switch to it after a firmware update. The only supported models are the 1708 (Xbox One S) and 1797 (Xbox Elite V2) revisions. If these have been updated to a Bluetooth LE firmware (5.xx.xxxx.x and above), you will need to downgrade the firmware to the legacy version (see below).. Controller model numbers can be found on the inside of the battery compartment, or the back of the controller in controllers with an internal battery.

For more details on the various controller revisions (with images), see here.

My Xbox One/Elite V2 controller used to connect and now it doesn't, what gives? As of late 2021, Microsoft introduced a new controller firmware that aims to bring Xbox One/Elite 2 controllers in line with the newer Series X|S controllers. Updating to this firmware switches the controller over to using Bluetooth Low Energy (LE), a newer bluetooth standard focused on low power consumption, which is not currently supported by Mission Control. If your controller firmware is version 5.xx.xxxx.x or above, you have the new LE firmware and will need to downgrade to the legacy one (see https://support.xbox.com/en-US/help/hardware-network/accessories/controller-firmware-reversion)

Can you add support for Xbox 360 controllers? No, not currently. These don't use Bluetooth. Try sys-con with a wireless USB adapter.

Can you add support for wake from sleep? Probably not. As far as I know, wake from sleep involves a controller sending a special control command to the Switch Bluetooth hardware. There is no way to make a non-switch controller send the command recognised by the Switch without modifying its hardware/firmware.

Can you add bluetooth audio support? No. The bluetooth module on the switch only implements a small set of services required to make hid controllers work. Of this small set of services, only a handful of high-level functions are exposed to the rest of the system. Adding audio support would require implementing the services neccessary for audio transport, for which any sane person would require an open-source re-implementation of the bluetooth module in order to have access the low-level functions required to pull it off. As of firmware 12.0.0 Nintendo have added functions supporting Bluetooth audio. While the feature hasn't been enabled in official software, plutooo has created an experimental sysmodule called nx-btred that enables Bluetooth audio in games that support recording. There isn't much benefit to me adding its functionality to Mission Control. Since firmware 13.0.0 Nintendo now officially supports Bluetooth audio.

Changelog

v0.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.

v0.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)

v0.8.0

  • Updated libraries for 15.0.x support.
  • Added bluetooth IPS patches for 15.0.x.
  • Dualshock 4 controllers are no longer disconnected if motion calibration retrieval fails.

v0.7.1

  • 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.

v0.7.0

  • 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

v0.6.4

  • Added bluetooth ips patches for 13.2.1.
  • Fixed incorrect mapping of A/B buttons on Hyperkin Scout controller.
  • Fixed disconnection issues affecting Xiaomi 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

v0.6.3

  • Updated to latest libstratosphere for 13.2.0 support
  • Added support for Hyperkin Scout controller

v0.6.2

  • 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

v0.6.1

  • Added bluetooth ips patches for 13.1.0.
  • Updated module for libstratosphere refactor (thanks @SciresM)
  • Added valid deadzone information to virtual SPI flash files (thanks @Banz99).
  • Added means of manually disabling sending of SetTsi vendor command to controllers that don't support it.

v0.6.0

  • Added full support for 13.0.0 firmware.
  • Added bluetooth ips patches for 13.0.0.
  • The /config/MissionControl/controllers directory is now created as required if not present. This avoids potential crashes eg. if the user has deleted this directory, or has failed to install the module correctly.
  • Fixed potential incorrect battery level and report charging status for Wii U Pro Controller. (Thanks @GaryOderNichts)
  • External power/USB status is now set for controllers known to report it.
  • Xbox One controllers now report full battery when powered via USB, instead of the zero value reported by the controller.

v0.5.1

  • Added support for the following controllers:
    • Microsoft Xbox Elite Series 2 Controller
    • Gamesir T2a
  • Updated ips patch set to enable successful pairing of the Xbox Elite Wireless Series 2 controller.
  • Added file-based virtual SPI flash system. Data such as calibrations can now be stored and retrieved for each controller.
  • Analog values for L/R on the Wii Classic Controller are now taken into account when mapping controls. This allows for identical trigger behaviour of Gamecube controllers used via a wiimote adapter vs the official USB adapter.
  • Fixed a regression where Mocute 050 and 8bitdo Zero controllers were disconnecting due to receiving the SetTsi command from the console.
  • Rumble data sent along with the subcommand report (0x01) is now correctly handled.
  • Fixed an array subscript partly outside of array bounds warning during compilation of the module.

v0.5.0

  • Added support for the following controllers
    • Razer Raiju Tournament
    • Gamesir T1s
    • 8BitDo SN30 Pro Xbox Cloud Gaming Edition
    • Mad Catz C.T.R.L.R for Samsung
    • Steelseries Stratus Duo
    • iCade controller
    • LanShen X1Pro
    • AtGames Legends Pinball controller
  • Added full support for 12.0.0 firmware
  • Added ips patches for all 12.x.x firmwares to relax device class checks added in 12.0.0. This allows ipega and several other controllers that advertise themselves as keyboards or other input devices to pair once again.
  • Added ips patches for all 12.x.x firmwares to make Wii/WiiU and other controllers that use legacy pincode pairing work again
  • Added initial rumble support for selected major console controllers
  • Added a global module configuration ini file
  • Added support for spoofing the Bluetooth host adapter name and address
  • Added support for Sony Dualsense player LEDs/lightbar colour and battery level reporting (thanks @Hydr8gon)
  • Added support for the old Xbox One controller report format. Updating controller firmware is no longer a requirement for correct mapping of controls.
  • Added support for an alternative report format for Mocute 050 controllers on certain firmware revisions
  • Added a configuration option to disable the LED lightbar on Sony Dualshock4 and Dualsense controllers.
  • Button combos for Home and Capture buttons are now also applied to official Nintendo controllers. Note that currently the console will ignore the combos for buttons that are not supposed to be present on the controller (eg. home button on left joycon, capture button on right)
  • Fixed a bug caused by passing invalid analog stick factory calibration data for emulated controllers. This bug affected the scaling of analog stick data for all controllers to some degree, but was most noticeable for Xbox One controllers, where the stick values would max out when the stick was only around 60-70% tilted.
  • Added delays between reading/writing controller memory when initialising Wii controller extensions. This should make detection of extension controllers more reliable for people who were experiencing issues.
  • Reduced default reporting rate of Dualshock4 controller from 1000Hz to 125Hz to match Switch Pro Controller. This resolves an issue where using a Dualshock4 controller could seriously degrade wifi performance and caused issues with LAN play.
  • SetTsi command is now only blocked from being sent to controllers where it is known to create issues (currently Xbox One and Gamesir controllers). This resolves an issue where a Dualshock4 controller connected alongside an official Nintendo controller would experience significant jitter, rendering it unsuitable for rhythm games. Blocking this command may also have played a part in the wifi issues mentioned above.
  • Fixed a bug where some wiimote buttons could not be pressed with an extension controller connected.
  • Fixed a bug where Xiaomi controllers would always show low or empty battery levels.
  • Improved accuracy of battery level reporting in general.
  • Dropped custom fork of libnx now that all relevant changes have been upstreamed. The libnx submodule now points to the official master branch, and at the time of writing Mission Control can be built with the official release from devkitPro without the need to compile it yourself.
  • Removed call to CheckApiVersion function. This was intended for internal Atmosphere usage and was one of the major reasons Mission Control would often require an update after a new Atmosphere release.
  • Updated to use new sf semantics introduced in Atmosphere 0.18.0
  • Updated to use latest libstratosphere. This reduces the size of the module by almost 50%
  • Added git branch, commit hash and tagged version when generating .zip file for distribution

v0.4.1

  • 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.

v0.4.0

  • 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)

v0.3.0

  • Added support for the following controllers
    • NVidia Shield (2017) 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

v0.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

v0.2.0

  • Removed the modified boot2 from the original release. No more 0100000000000008 errors caused by mismatched Atmosphère versions. No more problems with users uninstalling and forgetting to replace the original boot2.
  • Added a mitm of the btm service and renamed the sysmodule to 'bluetooth-mitm'. This allows the original controller names to be retained in the bluetooth database instead of renaming foreign controllers to Pro Controller. This should solve all the issues with Pro Controllers and other 3rd party switch controllers not connecting.
  • Fixed a bug in the translation of battery level values for Dualshock4 controllers that would cause the console to crash/freeze when the controller battery was close to full or empty.
  • Fixed a bug where motion control data wasn't being zeroed out, causing the camera to go crazy in games that try to read (currently unimplemented) motion controls.
  • Support for several user-requested controllers was added:
    • Ouya Controller
    • Gamestick Controller
    • Gembox Controller
    • Ipega 9062S & 9023 (other models may also work)
    • Xiaomi Mi Controller
  • A new version of the optional btdb.nro has been provided alongside this release. This version can now read the real controller names from the database. It also now displays the Switch host bluetooth address.

v0.1.0

  • First Release.

Credits

  • switchbrew for the extensive documention of the Switch OS.
  • devkitPro for the homebrew compiler toolchain.
  • SciresM for his dedicated work on the Atmosphère project, libstratosphere and general helpfulness with all things Switch related.
  • misson20000 for his handy debug monitor Twili and IPC logger Ilia
  • dekuNukem, CTCaer, shinyquagsire23 and others for their work in reversing and documenting the switch controller communication protocol.
  • Banz99 for ongoing code contributions, discussing ideas, testing and generally keeping me on my toes.
  • friedkeenan for helping to test Wii extension controller support.
  • DatenThielt for helping debug the bluetooth service remotely with his Xbox Elite Series 2 controller in order for me to develop patches to enable it to be successfully paired with the console.
  • Everyone else over at the ReSwitched discord server who helped answering technical questions.

External links

Advertising: