More actions
No edit summary |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Infobox 3DS Homebrews | {{Infobox 3DS Homebrews | ||
|title=Netstick | |title=Netstick | ||
|image= | |image=Netstick3ds2.png | ||
|description=Netstick client for Nintendo 3DS - turn your portable console into a Linux compatible WiFi gamepad | |description=Netstick client for Nintendo 3DS - turn your portable console into a Linux compatible WiFi gamepad. | ||
|author=moslevin | |author=moslevin | ||
|lastupdated=2021/05/05 | |lastupdated=2021/05/05 | ||
Line 17: | Line 17: | ||
==Features== | ==Features== | ||
* Supports D-Pad, Circle Pad, C-Stick ( | * Supports D-Pad, Circle Pad, C-Stick (N3DS), and all buttons, which are correctly mapped. | ||
* Accelerometer (X/Y/Z). | * Accelerometer (X/Y/Z). | ||
* Gyroscope (X/Y/Z). | * Gyroscope (X/Y/Z). | ||
Line 23: | Line 23: | ||
==User guide== | ==User guide== | ||
===On Linux host | ===Preparation=== | ||
Build <code>netstickd</code> for your supported linux device and run it ([https://github.com/moslevin/netstick see instructions]). | '''On the Linux host:''' | ||
* Build <code>netstickd</code> for your supported linux device and run it ([https://github.com/moslevin/netstick see instructions]). | |||
* Take note of the device's IP address and port. | |||
'''On the 3DS console:''' | |||
* Prerequisite: Netstick requires Homebrew Launcher to be installed on your 3DS; for more information, refer to [https://3ds.hacks.guide/ 3DS Hacks Guide]. | |||
* On your host PC, edit the included <code>config.txt</code>, and set the server and port lines to the IP address/port of the Linux device running <code>netstickd</code>. | |||
Prerequisite: Netstick requires Homebrew Launcher to be installed on your 3DS; for more information, refer to [https://3ds.hacks.guide/ 3DS Hacks Guide]. | * Create a folder named <code>/3ds/netstick-3ds</code> on your 3DS, and copy <code>netstick-3ds.3dsx</code>, <code>netstick-3ds.smdh</code>, and your modified <code>config.txt</code> into it. | ||
On your host PC, edit the included <code>config.txt</code>, and set the server and port lines to the IP address/port of the Linux device running <code>netstickd</code>. | |||
Create a folder named <code>/3ds/netstick-3ds</code> on your 3DS, and copy <code>netstick-3ds.3dsx</code>, <code>netstick-3ds.smdh</code>, and your modified <code>config.txt</code> into it. | |||
===Running=== | ===Running=== | ||
Launch Netstick from the Homebrew Launcher, similar to any other homebrew app. | * Launch Netstick from the Homebrew Launcher, similar to any other homebrew app. | ||
* You should then see the 3DS indicate success connecting to the Linux host, and events routed to a device named "Nintendo 3DS" appear under /dev/input. | |||
* Use <code>evtest</code> on Linux to verify that the events are processed successfully. | |||
Use <code>evtest</code> on Linux to verify that the events are processed successfully. | |||
===Configuration=== | ===Configuration=== | ||
The configuration file format is very simple, and consists of lines in key:value format. | The configuration file format is very simple, and consists of lines in key:value format. The supported options are described below: | ||
* <code>server</code> - The IP address of the server on the local network. | |||
The supported options are described below: | * <code>port</code> - The port of the server on the local network. | ||
* server - The IP address of the server on the local network. | * <code>invert_cstick_x</code> - Invert the values reported natively by the 3DS on the C-stick's X axis (ignored on Old 3DS). | ||
* port - The port of the server on the local network. | * <code>invert_cstick_y</code> - Invert the values reported natively by the 3DS on the C-stick's Y axis (ignored on Old 3DS). | ||
* invert_cstick_x - Invert the values reported natively by the 3DS on the C-stick's X axis ( | * <code>invert_circle_pad_x</code> - Invert the values reported natively by the 3DS on the Circle Pad's X axis. | ||
* invert_cstick_y - Invert the values reported natively by the 3DS on the C-stick's Y axis ( | * <code>invert_circle_pad_y</code> - Invert the values reported natively by the 3DS on the Circle Pad's Y axis. | ||
* invert_circle_pad_x - Invert the values reported natively by the 3DS on the Circle Pad's X axis. | * <code>use_touch</code> - Enable the touchscreen device when set to "true". | ||
* invert_circle_pad_y - Invert the values reported natively by the 3DS on the Circle Pad's Y axis. | * <code>use_accel</code> - Enable the accelerometer when set to "true". | ||
* use_touch - Enable the touchscreen device when set to | * <code>use_gyro</code> - Enable the gyroscope when set to "true". | ||
* use_accel - Enable the accelerometer when set to | * <code>send_touch_event</code> - Send a linux "touch" event (in addition to the X/Y coordinates) when the touchscreen is active. | ||
* use_gyro - Enable the gyroscope when set to | * <code>touch_offset</code> - Shrink the touchscreen's surface by a number of pixels on each side, making it easier to reach its limits. | ||
* send_touch_event - | * <code>swap_ab</code> - Swap the a and b buttons in the joystick report (allows correct button mapping when using a 3DS as a controller for steam, etc). | ||
* touch_offset - | * <code>swap_xy</code> - Swap the x and y buttons in the joystick report (allows correct button mapping when using a 3DS as a controller for steam, etc). | ||
* swap_ab - | * <code>use_steering_controls</code> - Send a virtual steering-wheel axis in the gamepad report, derived from the X/Z accelerometer values. | ||
* swap_xy - | |||
* use_steering_controls - | |||
==Compatibility== | ==Compatibility== | ||
Tested by the suthor on New 3DS with a Raspberry Pi 4 running | Tested by the suthor on New 3DS with a Raspberry Pi 4 running netstickd. | ||
==Changelog== | ==Changelog== | ||
''' | '''V5''' | ||
* Added swap_ab and swap_xy config options to allow mapping of button names to other controllers (XBOX, Dreamcast, etc). | * Added swap_ab and swap_xy config options to allow mapping of button names to other controllers (XBOX, Dreamcast, etc). | ||
* Overhauled the codebase + documented source for easier maintainability going forward. | * Overhauled the codebase + documented source for easier maintainability going forward. | ||
''' | '''V4''' | ||
* Support "touch offset" config option, allow a user to reduce the touchscreen's active area in order to make it easier to activate the corners. | * Support "touch offset" config option, allow a user to reduce the touchscreen's active area in order to make it easier to activate the corners. | ||
* Wait 2s after every network error. | * Wait 2s after every network error. | ||
''' | '''V3''' | ||
* Adding Gyro support and Many Configuration Options. | * Adding Gyro support and Many Configuration Options. | ||
* This release features support for the Gyro. | * This release features support for the Gyro. | ||
Line 82: | Line 76: | ||
** Disable sending key events when touch-down/touch-up occurs on the touchscreen. | ** Disable sending key events when touch-down/touch-up occurs on the touchscreen. | ||
''' | '''V2''' | ||
* Improvements and new features, including: | * Improvements and new features, including: | ||
** Accelerometer support (creates a separate input device on the Linux host). | ** Accelerometer support (creates a separate input device on the Linux host). | ||
Line 89: | Line 83: | ||
** Socket send() calls are non-blocking. | ** Socket send() calls are non-blocking. | ||
''' | '''V1''' | ||
* First release. Tested on New 3DS with a Raspberry Pi 4 running netstickd. | * First release. Tested on New 3DS with a Raspberry Pi 4 running netstickd. | ||
Latest revision as of 11:48, 27 August 2023
Netstick | |
---|---|
General | |
Author | moslevin |
Type | PC Utilities |
Version | 5 |
License | Mixed |
Last Updated | 2021/05/05 |
Links | |
Download | |
Website | |
Source | |
Netstick for 3DS is a client for Linux that allows you to connect the 3DS portable console to the PC via WiFi, which can be used as a normal game controller.
Through the client it is possible to control any Linux-based device (as well as a Raspberry Pi with Retropie) using the 3DS portable console.
Features
- Supports D-Pad, Circle Pad, C-Stick (N3DS), and all buttons, which are correctly mapped.
- Accelerometer (X/Y/Z).
- Gyroscope (X/Y/Z).
- Touchscreen.
User guide
Preparation
On the Linux host:
- Build
netstickd
for your supported linux device and run it (see instructions). - Take note of the device's IP address and port.
On the 3DS console:
- Prerequisite: Netstick requires Homebrew Launcher to be installed on your 3DS; for more information, refer to 3DS Hacks Guide.
- On your host PC, edit the included
config.txt
, and set the server and port lines to the IP address/port of the Linux device runningnetstickd
. - Create a folder named
/3ds/netstick-3ds
on your 3DS, and copynetstick-3ds.3dsx
,netstick-3ds.smdh
, and your modifiedconfig.txt
into it.
Running
- Launch Netstick from the Homebrew Launcher, similar to any other homebrew app.
- You should then see the 3DS indicate success connecting to the Linux host, and events routed to a device named "Nintendo 3DS" appear under /dev/input.
- Use
evtest
on Linux to verify that the events are processed successfully.
Configuration
The configuration file format is very simple, and consists of lines in key:value format. The supported options are described below:
server
- The IP address of the server on the local network.port
- The port of the server on the local network.invert_cstick_x
- Invert the values reported natively by the 3DS on the C-stick's X axis (ignored on Old 3DS).invert_cstick_y
- Invert the values reported natively by the 3DS on the C-stick's Y axis (ignored on Old 3DS).invert_circle_pad_x
- Invert the values reported natively by the 3DS on the Circle Pad's X axis.invert_circle_pad_y
- Invert the values reported natively by the 3DS on the Circle Pad's Y axis.use_touch
- Enable the touchscreen device when set to "true".use_accel
- Enable the accelerometer when set to "true".use_gyro
- Enable the gyroscope when set to "true".send_touch_event
- Send a linux "touch" event (in addition to the X/Y coordinates) when the touchscreen is active.touch_offset
- Shrink the touchscreen's surface by a number of pixels on each side, making it easier to reach its limits.swap_ab
- Swap the a and b buttons in the joystick report (allows correct button mapping when using a 3DS as a controller for steam, etc).swap_xy
- Swap the x and y buttons in the joystick report (allows correct button mapping when using a 3DS as a controller for steam, etc).use_steering_controls
- Send a virtual steering-wheel axis in the gamepad report, derived from the X/Z accelerometer values.
Compatibility
Tested by the suthor on New 3DS with a Raspberry Pi 4 running netstickd.
Changelog
V5
- Added swap_ab and swap_xy config options to allow mapping of button names to other controllers (XBOX, Dreamcast, etc).
- Overhauled the codebase + documented source for easier maintainability going forward.
V4
- Support "touch offset" config option, allow a user to reduce the touchscreen's active area in order to make it easier to activate the corners.
- Wait 2s after every network error.
V3
- Adding Gyro support and Many Configuration Options.
- This release features support for the Gyro.
- Adding configuration options to support:
- Invert C-stick X/Y.
- Invert Circle-pad X/Y.
- Selectively enable the accel/gyro/touch devices.
- Disable sending key events when touch-down/touch-up occurs on the touchscreen.
V2
- Improvements and new features, including:
- Accelerometer support (creates a separate input device on the Linux host).
- Touchscreen support (creates a separate input device on the Linux host).
- Update the polling rate of the gamepad to 180Hz, reducing latency by ~5ms.
- Socket send() calls are non-blocking.
V1
- First release. Tested on New 3DS with a Raspberry Pi 4 running netstickd.