Netstick 3DS

From GameBrew
Netstick
Netstick3ds2.png
General
Authormoslevin
TypePC Utilities
Version5
LicenseMixed
Last Updated2021/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 running netstickd.
  • Create a folder named /3ds/netstick-3ds on your 3DS, and copy netstick-3ds.3dsx, netstick-3ds.smdh, and your modified config.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.

External links

Advertising: