通过蓝牙在您的 Nintendo Switch 上使用本机其他控制台的控制器。无需加密狗或其他外部硬件。
mc.mitm
模块添加了扩展 IPC 命令,可用于与bluetooth
进程交互,而不会干扰系统状态。目前,支持以下控制器。如果您有以下其中一项的第三方变体,或者未列出的蓝牙控制器,请考虑提交控制器请求问题。
*并非所有 Xbox One 无线控制器都支持蓝牙。较旧的版本使用专有的 2.4Ghz 协议,无法与 Switch 一起使用。有关识别蓝牙变体的信息,请参阅此处。
下载最新版本的 .zip 并解压到 SD 卡的根目录,允许文件夹合并并覆盖任何现有文件。重新启动控制台以激活模块即可完成!
重要提示:要在固件 19.0.0 上运行最新版本的 Mission Control,需要 Atmosphère >= 1.8.0。使用较旧的 Atmosphère 版本将导致任务控制在启动时崩溃或冻结系统。
Mission Control 主要是一个系统模块(后台进程),在启动时由 Atmosphère 加载,并与操作系统的其余部分一起无限期地运行。它允许使用不受支持的蓝牙控制器,就像它们是本机 Pro 控制器一样。这意味着您可以通过任天堂自己的系统菜单配对和配置新控制器,而无需加载额外的自制应用程序。 (当前)没有要打开的任务控制“应用程序”。
控制器必须首先与控制台配对(见下文)才能使用。配对后,控制器将在唤醒时自动寻找并重新连接到控制台。无需每次都重新配对。请注意,非官方控制器不能用于唤醒控制台。
连接后,控制器的按钮将尽可能贴近 Switch Pro 控制器的物理布局。这意味着 A/B 和 X/Y 按钮将替换为使用 Xbox 样式按钮布局的控制器,而不是使用按钮上印刷的内容。为所有控制器提供了按钮组合MINUS + DPAD_UP
和MINUS + DPAD_DOWN
在没有足够的面部按钮可用的情况下,可以替代CAPTURE
和HOME
按钮。可以从官方系统菜单中更改按钮映射: System Settings->Controllers and Sensors->Change Button Mapping
。
大多数其他本机功能应该可以正常工作(固件更新等功能除外)。如果您发现有问题,请在此 github 页面上提出支持问题。
任天堂在其控制器菜单项中做出了一些相当令人困惑的命名选择。控制器是从系统菜单中的Controllers->Change Grip/Order
下进行配对的,而不是像您所期望的那样Pairing New Controllers
或Search for Controllers
。在此屏幕上,将控制器置于配对模式(见下文)并等待几秒钟。如果成功,您应该会在屏幕左上角看到Paired
通知。您的控制器现已配对,可以随时重新连接,而无需重新进入此屏幕。仅当您已将控制器连接到其他设备或 emummc 时才需要重新配对。
每个受支持的控制器都有自己的进入配对/同步模式的方法。以下是一些常见控制台控制器进入此模式的说明。
Nintendo Wii/WiiU 控制器按控制器背面的红色同步按钮。控制器 LED 将快速闪烁。
建议您在适用的情况下对这些控制器类型执行模拟摇杆校准,因为每个控制器都有不同的模拟摇杆范围和中心位置,但与 Switch 控制器不同,没有存储的工厂校准。
Sony Dualshock3 控制器要配对此控制器,您需要通过 USB 电缆将其连接到控制台。一旦控制器 LED 开始闪烁,请断开 USB 电缆并按下PS
按钮。
注意:为了避免在 USB 有线模式下使用控制器时发生不必要的行为,这仅适用于通常的Controllers->Change Grip/Order
屏幕。
Sony Dualshock4/Dualsense 控制器同时按住PS
+ share
按钮,直到灯条开始闪烁。如果正确完成,眨眼模式将类似于心跳,否则它将以恒定的速率闪烁。
如果您在将控制器与主机配对时遇到困难,请按住控制器背面的重置按钮几秒钟,然后重试。有时,连接到 Playstation 控制台或其他设备后需要执行此操作。
Microsoft Xbox One/Elite 2 控制器按住guide
( X
) 按钮,直到 LED 开始闪烁。然后按住背面靠近充电端口的小同步按钮,直到 LED 开始更快地闪烁。
注意:控制器固件版本 5.xx.xxxx.x 及更高版本使用蓝牙低功耗,当前不受支持。请参阅常见问题解答,了解有关降级到兼容固件的说明
其他控制器请参阅控制器的用户手册,了解如何将其置于同步模式的信息。请注意,许多通用蓝牙控制器可以以多种模式之一启动。通常您需要选择 HID、PC 或 Android 模式才能使其正常工作。
成功配对但尚未正式支持的控制器将在Controllers
菜单上显示红色按钮,以指示其控件尚未映射。请打开一个问题来请求对此类控制器的支持。
config .ini 文件的模板将安装到/config/MissionControl/missioncontrol.ini.template
。要修改默认模块设置,请将模板复制到/config/MissionControl/missioncontrol.ini
并取消注释(删除前导;
)并修改要更改的任何设置。该文件仅在启动时解析,因此您所做的任何更改都需要重新启动才能生效。无法正确解析/验证的设置条目将被忽略。目前只有一小部分配置设置,但这将在未来的版本中进行扩展。
[general]
这些是任务控制功能的常规设置。
enable_rumble
启用/禁用对非官方控制器的隆隆声支持。enable_motion
启用/禁用运动控制支持。 [bluetooth]
这些设置可用于欺骗您的 Switch 蓝牙,使其显示为另一个设备。如果您想在多个设备上使用控制器而无需每次切换时重新配对,这可能很有用(与链接密钥结合使用)。请注意,更改这些设置将使存储在任何先前配对的控制器中的控制台信息无效,并且需要重新配对。
host_name
覆盖蓝牙主机适配器名称。host_address
覆盖蓝牙主机适配器地址。 [misc]
这些是各种特定于控制器的设置等。
analog_trigger_activation_threshold
设置对于带有模拟触发器的控制器,ZL/ZR 被视为按下的阈值。有效范围 [0-100]%。dualshock3_led_mode
设置 Dualshock 3 播放器 LED 行为。有效模式 [0-1],其中 0= 开关模式、1=PS3 模式、2=混合(开关模式反转以与控制器上的数字标签对齐)dualshock4_polling_rate
设置 Sony Dualshock 4 控制器的轮询率。有效范围 [0-16],其中 0= 最大值,16= 最小值。请参阅此处了解相应的频率值。dualshock4_lightbar_brightness
设置 Sony Dualshock 4 控制器的 LED 灯条亮度。有效范围 [0-9],其中 0=关闭,1=最小,2-9=12.5-100%,增量为 12.5%。dualsense_lightbar_brightness
设置 Sony Dualsense 控制器的 LED 灯条亮度。有效范围 [0-9],其中 0=关闭,1=最小,2-9=12.5-100%,增量为 12.5%。dualsense_enable_player_leds
启用/禁用 Dualsense 触摸板下方的白色播放器 LED 指示灯。dualsense_vibration_intensity
设置 Dualsense 振动强度,每次增量 12.5%。有效范围 [1-8],其中 1=12.5%,8=100%。要在功能上卸载 Mission Control 及其组件,所需要做的就是从 SD 卡中删除以下目录并重新启动控制台。
/atmosphere/contents/010000000000bd00
/atmosphere/exefs_patches/bluetooth_patches
/atmosphere/exefs_patches/btm_patches
如果您希望完全删除曾经安装过的软件的所有痕迹(遥测除外),您可能还需要执行以下附加步骤
从 SD 卡中删除以下目录
/config/MissionControl
通过System Settings->Controllers and Sensors->Disconnect Controllers
来擦除蓝牙配对数据库
以下是我目前正在开发或将来想要研究的功能列表,大致按优先级降序排列。如果您有任何您认为会成为有用功能的想法,欢迎提出请求。
/config/MissionControl/controllers
目录中。如果此目录树的任何部分损坏,则在尝试读取配置数据失败时控制器可能会断开连接。它可以在 <在此插入 CFW> 上运行吗?不可以。任务控制只能在 Atmosphère 下运行。这并不是试图锁定其他 CFW 的用户,Atmosphere 只是唯一提供 MITM 蓝牙通信所需扩展的模块,从而使该系统模块成为可能。
使用此功能会导致我被禁止上网吗?目前还没有任何确认的因运行任务控制而被禁止的案例。也就是说,在 CFW 下运行任何非官方软件都将始终面临非零的禁令风险,并且任天堂可以随时更改其禁令标准。虽然任务控制应该相对安全,因为它只是模拟正在连接的专业控制器,但如果任天堂有兴趣这样做,肯定有可能检测到您已将非官方控制器连接到控制台。请自行决定使用。
这支持 USB 控制器吗?不,任务控制目前仅支持蓝牙。现在您可以使用 cathery 的 sys-con 作为 USB 控制器。
安装了 sys-con 后这可以工作吗?是的,两者可以同时运行,没有问题。
由于这个系统模块,我的控制台在启动时崩溃。我能做些什么?如果您发现 Mission Control 的标题 ID ( 010000000000bd00
) 在启动时崩溃,则可能是您最近更新到了新的 Atmosphere 版本并且需要更新 Mission Control,或者您正在运行旧版本的 Atmosphere与最新版本的任务控制不兼容。 sm
中的崩溃(标题 ID 0100000000000004
)可能表明当前 Atmosphere 与一个或多个自制系统模块之间的版本不兼容。这可能是由 Mission Control 引起的,也可能是另一个使用 libstratosphere 的自定义系统模块引起的,即使看起来似乎是 Mission Control 造成的( ldn_mitm
和emuiibo
是常见的罪犯)。如果您刚刚更新了 Atmosphere,您应该始终检查是否也为您使用的 sysmodules 发布了更新。 qlaunch 错误(标题 ID 0100000000001000
)可能表明您运行了太多自定义系统模块,并且正在耗尽可用的有限系统资源。检查您的/atmosphere/contents
文件夹并确认您确实需要其中的所有内容。如果您不知道自己在做什么,则完全删除此文件夹,重新安装气氛,然后仅显式重新安装您需要的 sysmodules 可能会更容易。
我安装了任务控制,但它没有执行任何操作。帮助!任务控制主要是一个后台进程。除了您的控制器通过任天堂官方菜单成功连接之外,您的系统没有任何视觉变化表明它已安装。如果您已按照上述使用和配对说明进行操作,但仍无法使其正常工作,请参阅以下基本故障排除清单。
DPAD_UP
+ MINUS
按钮。如果模块正在运行,这将充当捕获按钮并截取屏幕截图。如果您没有看到屏幕截图通知,则可能尚未加载任务控制。这通常是由于安装错误造成的,并且可能有多种原因造成:如何将其与多个 sysNAND/emuMMC 启动配置一起使用?跨多个独特的 HOS 安装配对控制器需要多个配对数据库,本质上与与两个不同控制台配对相同。唯一的例外是在制作 sysNAND 副本之前配对控制器的情况。目前,您在来回切换时必须重新配对控制器。将来我希望包含一个在 SD 卡上加载/存储数据库的选项,以避免这个问题。从版本 1.5.1 开始,Atmosphere 现在包含我贡献的代码,用于通过 sd 卡上的文件同步 sysNAND 和 emuMMC 之间的蓝牙配对数据库。可以通过在atmosphere/config/system_settings.ini
中的[atmosphere]
部分添加enable_external_bluetooth_db = u8!0x1
来激活此功能。注意:此功能需要运行大气才能发挥作用。因此,它不能用于将 sysCFW/emuMMC 与 stock/OFW 同步。
我可以使用 Mission Control 重新映射控制器按钮吗?是的。由于 Mission Control 模拟官方 Pro 控制器,因此您可以使用任天堂在固件 10.0.0 中引入的官方方法重新映射它们。您可以在系统菜单中的System Settings->Controllers and Sensors->Change Button Mapping
下找到重新映射选项。
我的控制台显示“已配对”通知,但我的控制器无法连接,出了什么问题?您的控制器已成功与控制台配对,但不久之后就会断开连接,然后才能开始发送输入。发生这种情况的原因有多种,最常见的是:
/config/MissionControl/controllers/<xxxxxxxxxxxx>/
,其中<xxxxxxxxxxxx>
是控制器蓝牙 MAC 地址的 12 个字符的十六进制表示形式)并让 Mission Control 创建一个新配置条目。在某些情况下,可能需要删除整个controllers
目录。注意:删除这些文件时,您将丢失任何存储的控制器特定数据,例如用户模拟摇杆或运动校准。由于这是最具破坏性的措施,因此您应该在用尽上述建议后最后尝试。我的 Xbox 控制器无法连接,我以为您说它们受支持?尽管它们看起来很相似,但并非所有 Xbox 控制器都是一样的。实际上有几种可用的硬件修订/型号(在撰写本文时有 7 个)具有不同的无线功能。在 Xbox 控制台(或带有无线 USB 适配器的 PC)上,所有控制器都使用称为 GIP 的专有 Microsoft 无线协议。然而,蓝牙连接并不是一回事,并且因控制器型号而异。有的支持蓝牙,有的不支持。其中一些正在使用较新的(当前不受支持的)蓝牙低功耗 (LE) 标准,或者在固件更新后切换到该标准。唯一支持的型号是 1708 (Xbox One S) 和 1797 (Xbox Elite V2) 修订版。如果这些已更新为蓝牙 LE 固件(5.xx.xxxx.x 及更高版本),您将需要将固件降级到旧版本(见下文)。 。控制器型号可以在电池盒内部找到,或者在带有内置电池的控制器的控制器背面找到。
有关各种控制器修订版(带图像)的更多详细信息,请参阅此处。
我的 Xbox One/Elite V2 控制器过去可以连接,但现在无法连接,这是怎么回事?截至 2021 年末,微软推出了新的控制器固件,旨在使 Xbox One/Elite 2 控制器与较新的 Series X|S 控制器保持一致。更新到此固件会将控制器切换为使用蓝牙低功耗 (LE),这是一种专注于低功耗的新蓝牙标准,任务控制当前不支持该标准。如果您的控制器固件版本为 5.xx.xxxx.x 或更高版本,则您拥有新的 LE 固件,并且需要降级到旧版固件(请参阅 https://support.xbox.com/en-US/help/hardware -网络/配件/控制器固件版本)
可以添加对 Xbox 360 控制器的支持吗?不,目前还没有。这些不使用蓝牙。尝试使用无线 USB 适配器进行 sys-con。
您可以添加对从睡眠中唤醒的支持吗?可能不会。据我所知,从睡眠中唤醒需要控制器向 Switch 蓝牙硬件发送特殊的控制命令。没有办法让非交换机控制器在不修改其硬件/固件的情况下发送交换机识别的命令。
可以添加蓝牙音频支持吗?不会。交换机上的蓝牙模块仅实现 hid 控制器工作所需的一小部分服务。在这一小组服务中,只有少数高级功能暴露给系统的其余部分。添加音频支持需要实现音频传输所需的服务,为此任何理智的人都需要开源地重新实现蓝牙模块,以便访问实现该功能所需的低级功能。从固件 12.0.0 开始,任天堂添加了支持蓝牙音频的功能。虽然官方软件尚未启用该功能,但 plutooo 创建了一个名为 nx-btred 的实验性系统模块,可在支持录音的游戏中启用蓝牙音频。将其功能添加到任务控制中对我来说并没有多大好处。自固件 13.0.0 起,任天堂正式支持蓝牙音频。
我的控制器有音频插孔,可以添加耳机支持吗?不太可能。据我所知,支持耳机音频的控制器是通过专有或非标准方式实现的。这将是一项艰巨的工作,不仅要了解它如何适用于特定控制器,而且当它没有支持音频的游戏手柄概念时,还要以某种方式将其集成到 HOS 中。在最好的情况下,控制器使用某种形式的标准蓝牙音频,您仍然会受到控制台通常的带宽限制(断断续续的音频、滞后的控制器输入等)。只需使用普通耳机即可。
任务控制的工作原理是中间人bluetooth
系统模块并拦截其初始化 IPC 命令和系统事件,并转换传入/传出数据以使 Switch 相信它正在与官方 Pro 控制器进行通信。
为了实现这一点,当系统尝试通过btm
和hid
模块通过 IPC 初始化bluetooth
系统事件和共享内存时, btdrv.mitm
模块会获取它们的句柄。然后,它创建自己的辅助版本,并传递它们的句柄而不是原始句柄。这允许在通知(或不通知)系统之前对任何数据缓冲区进行修改。此外, WriteHidData
IPC 命令被拦截以转换或丢弃对控制器的传出请求。在后者的情况下,假响应可以直接写入共享内存中的缓冲区。
拦截初始化 IPC 命令还允许自制程序正确使用bluetooth
服务。通常,调用任何初始化或完成系统事件的 IPC 命令都会导致控制台崩溃,或者使系统进程持有的事件句柄无效。通过btdrv.mitm
当自制程序尝试初始化接口时,我们能够分发替代事件句柄,并将真实的系统事件重定向到那些事件,而不是系统进程持有的事件。
提供了bluetooth
模块的 exefs 补丁,以启用 Wii/WiiU 和其他使用旧版 pincode 配对的控制器、Xbox Elite 2 无线控制器的配对,并放宽在较新固件上添加的设备类别检查,以允许设备识别为键盘或要连接的操纵杆。
添加了btm
模块的 exefs 补丁,以便在控制器无法正确响应nn::bluetooth::hal::CloseHidConnection
nn::bluetooth::hal::SetTsi
::CloseHidConnection 的调用。这可以防止所有受影响的控制器在连接后立即断开连接,并且无需使用settsi_disable.flag
文件手动标记某些控制器。
btm
服务现在也是 MITM,允许动态伪造控制器名称,同时在配对数据库中保留原始名称。
首先,将存储库克隆到本地计算机并切换到新克隆的目录
git clone --recurse-submodules https://github.com/ndeadly/MissionControl.git
cd MissionControl
任务控制当前使用官方 libnx master 现在用于构建任务控制。在撰写本文时,可以使用 devkitPro 分发的 libnx,无需自行构建。如果libnx
的自定义分支,添加蓝牙服务包装器和类型定义。Atmosphere-libs
更新为使用官方版本中不存在的前沿libnx
提交,这可能会改变。在任何情况下,您都可以使用以下命令从源代码构建包含的libnx
子模块。
cd lib/libnx
make && make install
接下来构建libstratosphere
。如果遇到任何构建错误,则可能缺少所需的依赖项(请参阅https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/building.md)
cd ../Atmosphere-libs/libstratosphere
make
最后,构建并打包发行版 .zip。这将构建mc.mitm
系统模块并将其与蓝牙 exefs 补丁一起打包。
cd ../..
make dist
可以按照上述方法安装生成的包。
如果您喜欢这个项目,请考虑支持我继续开发:)