feat(input): the Nintendo Switch 2 Pro Controller over USB, read by the game itself #279

Open
airdamien wants to merge 2 commits from airdamien/Longshot:feat/switch2-pro-usb into main
First-time contributor

Why

A Nintendo Switch 2 Pro Controller plugged into a Windows PC does nothing in Longshot: Windows has no driver a game can use for it, and the SDL the game ships has none either. Players run a bridge program that shows it as an Xbox pad, without its motion sensor. This lets the game read the controller itself over USB, with its gyroscope and its rumble.

What changed

  • input: host/pad_switch2.c (new, Windows; a stub elsewhere). pad_open finds the controller's two interfaces (SetupAPI), opens the vendor one with WinUSB, reads its factory and user stick calibration and its gyroscope's rest from flash, and sends the start-up commands; switch2_main reads the HID reports (overlapped, so a silent controller is noticed and started again) and report gives them to an SDL virtual gamepad (sdl_attach) with an accelerometer and a gyroscope, so host/pad_sdl.c plays it as any pad: the Controls page, the prompts, the Motion controls. rumble_main sends the rumble on a thread of its own: output report 0x02, three frames a motor in the layout the controller takes (not the one SDL's driver packs), limited as for a USB port; when the controller stops taking those reports it plays the controller's own buzz and click samples instead and says so in the log.
  • input: host/pad_sdl.c starts it with the pads; nx2/build.py links setupapi, winusb and hid into the Windows exe.
  • menu: gpu/vk/vk_menu.cpp: a Switch 2 Pro Layout preset (apply_pad_layout, detect_pad_layout: every button the pad's own, and the Switch's icons), and a Controller menu button row (opts.pad_menu: Home as before, or GL, GR, or none) for the button that opens and closes the Insert menu.
  • docs: README (the controller, the two rows), docs/development.md (the two switches).
  • tests: tests/test_pad_layout.py (main's, from #266) also checks the Switch 2 Pro preset: from each preset and with each button cleared, every button gets the pad's own input and the row says Switch 2 Pro; Nintendo chosen after it says Nintendo.

Flags and settings

Flag What it does Default now Recommendation Helps on Doesn't help on Untested on
HOS_SWITCH2=0 The game leaves the controller alone (a bridge program can have it) Unset: the game takes a plugged-in controller On by default: it only acts when that controller is there and no other program has it Windows with a Switch 2 Pro Controller over USB Everyone else: one device lookup every 2 s on a thread of its own Other Switch 2 controllers (Joy-Con 2, the GameCube pad): not taken
HOS_SWITCH2_RUMBLE_TEST=1 A test's: rumble checked with the controller's own accelerometer Off Off Checking rumble without hands - -
Controls page, Layout preset: Switch 2 Pro Every button the pad's own, the Switch's icons Nintendo (Def) As it is Players coming from a bridge's Xbox layout - -
Controls tab, Controller menu button (controller_menu_button) The pad's button for the Insert menu: None, Home, GL, GR Home (what the Guide button did before) As it is Pads with back buttons; players who want Home for the game - Pads other than this one for GL / GR

Measurements

main: fbd42024 (2026-11-13)
this PR: feat/switch2-pro-usb @ 120b08ce (the measured commit; 00d333eb after it added only the row in docs/tested-configurations.md)
Hardware: NVIDIA GeForce RTX 5080 (Vulkan driver 0x93cec000), Windows 11; a Switch 2 Pro Controller (firmware 1.1.5) plugged in over USB
Scene: the save's load point, Link standing still; 3840x2160 output, DLSS, frame generation 3x, the game's frame rate cap 60
Method: 150 s runs, the first 60 s left out, two interleaved runs each (main, this PR, ...). The numbers are RX_VK_FRAME_LOG's frame times, a line per present (made frames included); the game's own rate is longshot_log.txt's vi: line.
How to reproduce: the builds from the same dump with nx2/make_game.py, the same longshot_options.ini and save, HOS_INPUT_SCRIPT=12:A,15:A,...,42:A HOS_INPUT_SCRIPT_BACKGROUND=1 RX_VK_FRAME_LOG=<csv>.

main @ fbd42024 this PR @ 120b08ce
presents per second (run 1 / run 2) 179.18 / 179.81 179.97 / 179.92
median frame time (run 1 / run 2) 5.556 / 5.563 ms 5.549 / 5.545 ms
p99 frame time (run 1 / run 2) 6.676 / 5.708 ms 5.732 / 5.725 ms
the game's own rate 60.0 fps 60.0 fps
main1: 16085 frames in 89.8 s after 60 s warm-up: 179.18 fps, median 5.556 ms, p99 6.676 ms, max 67.70 ms
main2: 16115 frames in 89.6 s after 60 s warm-up: 179.81 fps, median 5.563 ms, p99 5.708 ms, max 67.95 ms
s2a:   16076 frames in 89.3 s after 60 s warm-up: 179.97 fps, median 5.549 ms, p99 5.732 ms, max 46.66 ms
s2b:   16154 frames in 89.8 s after 60 s warm-up: 179.92 fps, median 5.545 ms, p99 5.725 ms, max 50.93 ms
[hos Presentation Thread] vi: 8321 frames presented (60.0 fps over the last 5.0 s, interval 1)   (main)
[hos Presentation Thread] vi: 8339 frames presented (60.0 fps over the last 5.0 s, interval 1)   (this PR)

Rebased since onto main @ 514591a3 (the branch's head is now d530cb97) and not measured again: main's ten commits since fbd42024 are the website, docs, the forge script, a Damage taken row, an HDR route for FSR 4 that is opt-in, occlusion query numbering, quick pipelines and two input fixes; none is in this change's path, and this change's code is as measured but for apply_pad_layout, where main's fix (#266: a preset is asked again until it is had whole) now also covers the Switch 2 Pro preset. The rebased branch was built whole (nx2/make_game.py) and its checks run.

Rumble, with the controller lying still (HOS_SWITCH2_RUMBLE_TEST=1): switch2: rumble test: the accelerometer moved 288 in a second at rest, 6022 in 0.8 s of rumble. main has no rumble for this controller to compare with.

Testing

Tested:

  • python -I -B tests/run_all.py on Windows 11 (llvm-mingw): 454 passed, 7 failed, at the rebased head. The same 7 fail on main @ 514591a3 on this PC (test_bake_portability, test_fpx_sticky, test_spawn_emit, test_nup_paths, test_check_third_party, test_release, test_menu_i18n): local tools and packages, and one text of main's without its translations, not this change.
  • Linux (WSL, Ubuntu 24.04, clang): host/pad_switch2.c, host/pad_sdl.c compile there (-fsyntax-only with the build's includes); the driver is a stub on Linux.
  • In the game, on a real controller (RTX 5080, Windows 11, firmware 1.1.5, USB): the log's switch2: ... started (sticks calibrated at 2021 2173 / 2164 2119), hid: controller "Nintendo Switch 2 Pro Controller" connected (SDL), with a gyroscope. Rumble, with the controller lying still (HOS_SWITCH2_RUMBLE_TEST=1): the accelerometer moved 288 in a second at rest, 6022 in 0.8 s of rumble. Played by the author in a build that also has the VR pull request's changes: sticks, buttons, the Home button opening the menu.
  • With another program holding the controller (Steam, a bridge): the game says so once in the log and takes it when it is free.

Not tested:

  • Any controller but one Switch 2 Pro Controller, on firmware 1.1.5. Newer firmware may differ.
  • Bluetooth: not done at all (the controller speaks a pairing of Nintendo's own there).
  • What makes a controller stop taking rumble reports: seen once, for a day, until the cable was pulled and put back; the bridge program failed the same way then. The fallback to the controller's samples was measured in that state (270 at rest, 1180 in rumble).
  • The Motion controls in play with this pad (the sensors' data arrives; aiming with it was not judged).
  • GL / GR as the menu button.

Needs other testers:

  • A Switch 2 Pro Controller on newer firmware, Windows, USB: buttons, sticks, gyro aiming and rumble, expecting all four (T-876X)
  • Any PC without the controller: no change, expecting the same log and fps as main (T-T93M)

Screenshots

The Controls tab's new row, this PR @ 120b08ce (main has no such row):

The Controller menu button row

Risk and rollback

  • Without the controller plugged in: a thread that looks for it every 2 s. With it: the game opens it exclusively, so a bridge program or Steam Input started later cannot have it (HOS_SWITCH2=0 gives it back).
  • The Windows exe now links setupapi, winusb and hid (all part of Windows).
  • Rumble is limited as the bridge program limits it over USB (the two bands of a motor 511 of 1023 together at the most).
  • Reverting the commit is enough.

Reviewer notes

  • The command set and the rumble frame's layout come from the community's notes (github.com/ndeadly/switch2_controller_research), SDL's driver (zlib) and reading how the Switch2Connect bridge sends rumble; no code is copied from any of them.
  • The NFC pull request (#280) sits on this one: the controller's NFC reader uses hos_switch2_command.
  • Not claimed in #dev-work beforehand.

Issues

None.

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported.
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

If applicable

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Flags noted, and the switch reference updated (docs/development.md, the README).
  • Screenshots for a change that shows on screen.
  • A row in docs/tested-configurations.md for each measured run.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths.
  • Docs updated.

🤖 Generated with Claude Code

## Why A Nintendo Switch 2 Pro Controller plugged into a Windows PC does nothing in Longshot: Windows has no driver a game can use for it, and the SDL the game ships has none either. Players run a bridge program that shows it as an Xbox pad, without its motion sensor. This lets the game read the controller itself over USB, with its gyroscope and its rumble. ## What changed - input: `host/pad_switch2.c` (new, Windows; a stub elsewhere). `pad_open` finds the controller's two interfaces (SetupAPI), opens the vendor one with WinUSB, reads its factory and user stick calibration and its gyroscope's rest from flash, and sends the start-up commands; `switch2_main` reads the HID reports (overlapped, so a silent controller is noticed and started again) and `report` gives them to an SDL virtual gamepad (`sdl_attach`) with an accelerometer and a gyroscope, so `host/pad_sdl.c` plays it as any pad: the Controls page, the prompts, the Motion controls. `rumble_main` sends the rumble on a thread of its own: output report 0x02, three frames a motor in the layout the controller takes (not the one SDL's driver packs), limited as for a USB port; when the controller stops taking those reports it plays the controller's own buzz and click samples instead and says so in the log. - input: `host/pad_sdl.c` starts it with the pads; `nx2/build.py` links `setupapi`, `winusb` and `hid` into the Windows exe. - menu: `gpu/vk/vk_menu.cpp`: a **Switch 2 Pro** Layout preset (`apply_pad_layout`, `detect_pad_layout`: every button the pad's own, and the Switch's icons), and a **Controller menu button** row (`opts.pad_menu`: Home as before, or GL, GR, or none) for the button that opens and closes the Insert menu. - docs: README (the controller, the two rows), `docs/development.md` (the two switches). - tests: `tests/test_pad_layout.py` (main's, from #266) also checks the Switch 2 Pro preset: from each preset and with each button cleared, every button gets the pad's own input and the row says Switch 2 Pro; Nintendo chosen after it says Nintendo. ## Flags and settings | Flag | What it does | Default now | Recommendation | Helps on | Doesn't help on | Untested on | |---|---|---|---|---|---|---| | `HOS_SWITCH2=0` | The game leaves the controller alone (a bridge program can have it) | Unset: the game takes a plugged-in controller | On by default: it only acts when that controller is there and no other program has it | Windows with a Switch 2 Pro Controller over USB | Everyone else: one device lookup every 2 s on a thread of its own | Other Switch 2 controllers (Joy-Con 2, the GameCube pad): not taken | | `HOS_SWITCH2_RUMBLE_TEST=1` | A test's: rumble checked with the controller's own accelerometer | Off | Off | Checking rumble without hands | - | - | | Controls page, Layout preset: Switch 2 Pro | Every button the pad's own, the Switch's icons | Nintendo (Def) | As it is | Players coming from a bridge's Xbox layout | - | - | | Controls tab, Controller menu button (`controller_menu_button`) | The pad's button for the Insert menu: None, Home, GL, GR | Home (what the Guide button did before) | As it is | Pads with back buttons; players who want Home for the game | - | Pads other than this one for GL / GR | ## Measurements main: fbd42024 (2026-11-13) this PR: feat/switch2-pro-usb @ 120b08ce (the measured commit; 00d333eb after it added only the row in docs/tested-configurations.md) Hardware: NVIDIA GeForce RTX 5080 (Vulkan driver 0x93cec000), Windows 11; a Switch 2 Pro Controller (firmware 1.1.5) plugged in over USB Scene: the save's load point, Link standing still; 3840x2160 output, DLSS, frame generation 3x, the game's frame rate cap 60 Method: 150 s runs, the first 60 s left out, two interleaved runs each (main, this PR, ...). The numbers are `RX_VK_FRAME_LOG`'s frame times, a line per present (made frames included); the game's own rate is `longshot_log.txt`'s `vi:` line. How to reproduce: the builds from the same dump with `nx2/make_game.py`, the same `longshot_options.ini` and save, `HOS_INPUT_SCRIPT=12:A,15:A,...,42:A HOS_INPUT_SCRIPT_BACKGROUND=1 RX_VK_FRAME_LOG=<csv>`. | | main @ fbd42024 | this PR @ 120b08ce | |---|---|---| | presents per second (run 1 / run 2) | 179.18 / 179.81 | 179.97 / 179.92 | | median frame time (run 1 / run 2) | 5.556 / 5.563 ms | 5.549 / 5.545 ms | | p99 frame time (run 1 / run 2) | 6.676 / 5.708 ms | 5.732 / 5.725 ms | | the game's own rate | 60.0 fps | 60.0 fps | ``` main1: 16085 frames in 89.8 s after 60 s warm-up: 179.18 fps, median 5.556 ms, p99 6.676 ms, max 67.70 ms main2: 16115 frames in 89.6 s after 60 s warm-up: 179.81 fps, median 5.563 ms, p99 5.708 ms, max 67.95 ms s2a: 16076 frames in 89.3 s after 60 s warm-up: 179.97 fps, median 5.549 ms, p99 5.732 ms, max 46.66 ms s2b: 16154 frames in 89.8 s after 60 s warm-up: 179.92 fps, median 5.545 ms, p99 5.725 ms, max 50.93 ms [hos Presentation Thread] vi: 8321 frames presented (60.0 fps over the last 5.0 s, interval 1) (main) [hos Presentation Thread] vi: 8339 frames presented (60.0 fps over the last 5.0 s, interval 1) (this PR) ``` Rebased since onto main @ 514591a3 (the branch's head is now d530cb97) and not measured again: main's ten commits since fbd42024 are the website, docs, the forge script, a Damage taken row, an HDR route for FSR 4 that is opt-in, occlusion query numbering, quick pipelines and two input fixes; none is in this change's path, and this change's code is as measured but for `apply_pad_layout`, where main's fix (#266: a preset is asked again until it is had whole) now also covers the Switch 2 Pro preset. The rebased branch was built whole (`nx2/make_game.py`) and its checks run. Rumble, with the controller lying still (`HOS_SWITCH2_RUMBLE_TEST=1`): `switch2: rumble test: the accelerometer moved 288 in a second at rest, 6022 in 0.8 s of rumble`. `main` has no rumble for this controller to compare with. ## Testing **Tested:** - `python -I -B tests/run_all.py` on Windows 11 (llvm-mingw): 454 passed, 7 failed, at the rebased head. The same 7 fail on `main` @ 514591a3 on this PC (`test_bake_portability`, `test_fpx_sticky`, `test_spawn_emit`, `test_nup_paths`, `test_check_third_party`, `test_release`, `test_menu_i18n`): local tools and packages, and one text of main's without its translations, not this change. - Linux (WSL, Ubuntu 24.04, clang): `host/pad_switch2.c`, `host/pad_sdl.c` compile there (`-fsyntax-only` with the build's includes); the driver is a stub on Linux. - In the game, on a real controller (RTX 5080, Windows 11, firmware 1.1.5, USB): the log's `switch2: ... started (sticks calibrated at 2021 2173 / 2164 2119)`, `hid: controller "Nintendo Switch 2 Pro Controller" connected (SDL), with a gyroscope`. Rumble, with the controller lying still (`HOS_SWITCH2_RUMBLE_TEST=1`): `the accelerometer moved 288 in a second at rest, 6022 in 0.8 s of rumble`. Played by the author in a build that also has the VR pull request's changes: sticks, buttons, the Home button opening the menu. - With another program holding the controller (Steam, a bridge): the game says so once in the log and takes it when it is free. **Not tested:** - Any controller but one Switch 2 Pro Controller, on firmware 1.1.5. Newer firmware may differ. - Bluetooth: not done at all (the controller speaks a pairing of Nintendo's own there). - What makes a controller stop taking rumble reports: seen once, for a day, until the cable was pulled and put back; the bridge program failed the same way then. The fallback to the controller's samples was measured in that state (270 at rest, 1180 in rumble). - The Motion controls in play with this pad (the sensors' data arrives; aiming with it was not judged). - GL / GR as the menu button. **Needs other testers:** - A Switch 2 Pro Controller on newer firmware, Windows, USB: buttons, sticks, gyro aiming and rumble, expecting all four (T-876X) - Any PC without the controller: no change, expecting the same log and fps as main (T-T93M) ## Screenshots The Controls tab's new row, this PR @ 120b08ce (`main` has no such row): ![The Controller menu button row](https://git.magicbean.dev/attachments/a849928f-ca86-4714-a878-6a55991e1b6d) ## Risk and rollback - Without the controller plugged in: a thread that looks for it every 2 s. With it: the game opens it exclusively, so a bridge program or Steam Input started later cannot have it (`HOS_SWITCH2=0` gives it back). - The Windows exe now links `setupapi`, `winusb` and `hid` (all part of Windows). - Rumble is limited as the bridge program limits it over USB (the two bands of a motor 511 of 1023 together at the most). - Reverting the commit is enough. ## Reviewer notes - The command set and the rumble frame's layout come from the community's notes (github.com/ndeadly/switch2_controller_research), SDL's driver (zlib) and reading how the Switch2Connect bridge sends rumble; no code is copied from any of them. - The NFC pull request (https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/280) sits on this one: the controller's NFC reader uses `hos_switch2_command`. - Not claimed in `#dev-work` beforehand. ## Issues None. ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [x] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### If applicable - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Flags noted, and the switch reference updated (docs/development.md, the README). - [x] Screenshots for a change that shows on screen. - [x] A row in `docs/tested-configurations.md` for each measured run. - [x] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Windows has no driver a game can use for this controller and the SDL the game ships has none either, so players ran a
bridge program. host/pad_switch2.c opens the controller's vendor interface with WinUSB, starts it, reads its calibration
and its HID reports, and gives it to the game as an SDL virtual gamepad with its motion sensor and its rumble. A Switch 2
Pro layout preset, and the controller's button for the Insert menu is the player's choice.

Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
docs(input): the Switch 2 Pro Controller's measured runs in tested-configurations
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
00d333eb4d
Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
airdamien changed title from WIP: feat(input): the Nintendo Switch 2 Pro Controller over USB, read by the game itself to feat(input): the Nintendo Switch 2 Pro Controller over USB, read by the game itself 2026-11-13 19:14:01 +00:00
airdamien force-pushed feat/switch2-pro-usb from 00d333eb4d
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to d530cb977b
Some checks failed
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Has been cancelled
2026-11-13 19:55:47 +00:00
Compare
Author
First-time contributor

Rebased onto main @ 514591a3 (head d530cb97). The conflict was apply_pad_layout: main's fix (#266) asks a preset again until it is had whole, and the Switch 2 Pro preset now does the same for all the pad's buttons. tests/test_pad_layout.py checks that preset too. With #266's row taking its value from detect_pad_layout, Nintendo chosen right after Switch 2 Pro would have read Switch 2 Pro again (the inputs are the same): the row now keeps Nintendo. Built whole and the checks run (454 passed; the 7 that fail also fail on main here). Not measured again: the description says why.

Rebased onto main @ 514591a3 (head d530cb97). The conflict was `apply_pad_layout`: main's fix (#266) asks a preset again until it is had whole, and the Switch 2 Pro preset now does the same for all the pad's buttons. `tests/test_pad_layout.py` checks that preset too. With #266's row taking its value from `detect_pad_layout`, Nintendo chosen right after Switch 2 Pro would have read Switch 2 Pro again (the inputs are the same): the row now keeps Nintendo. Built whole and the checks run (454 passed; the 7 that fail also fail on main here). Not measured again: the description says why.
Some checks failed
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Has been cancelled
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
Some workflows are waiting to be reviewed.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'feat/switch2-pro-usb:airdamien-feat/switch2-pro-usb'
git switch 'airdamien-feat/switch2-pro-usb'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!279
No description provided.