Skip to content

ImmutableOctet/3ds-controller

Repository files navigation

3ds-controller

A 3DS homebrew application that allows you to send input to a remote machine. For a likely more stable implementation, made by CTurt, click here. I didn't realize that existed before putting this together, but I intend to make a nicer version. At least, code-wise. This project is my first attempt at 3DS homebrew.

Functionality is currently experimental. This project is based on an input-demo from the official ctrulib examples. The "ftbrony" application was used as a reference for SOC initialization.

--

Platform Support & Input Methods:

The host application is currently Windows-only (x86 & x64), and supports both vJoy simulation, and keyboard simulation. Keyboard simulation is currently for debugging purposes; button-holding does not function properly. That being said, view below for configuration details.

vJoy support is dynamic, and will detect the appropriate interface DLL from the system's vJoy installation. However, it does need to be ran/built properly. On x64 systems, an x86 build of the server can not use vJoy. Likewise, an x64 build can not use an x86 installation (Not that something like this would ever happen). Please build/use an appropriate version for your architecture.

--

Configuration:

Host System (Windows):

A configuration file (INI) will be generated by the host-application automatically. If a configuration exists beforehand, you may delete it if preferable. You may change this configuration file as you see fit. The basic layout is "device-toggles" in the global section, and exact data in sub-sections, such as "3ds". You may map any of these buttons to virtual keys (As described by the Windows API and MSDN; excluding numeric representation). This is done via the configuration file (INI), and virtual-keys must be represented by their names. Naming conventions follow the official APIs, excluding custom macros, for example, 'KEY_A' through 'KEY_Z' and 'KEY_0' through 'KEY_9' (As well as other key names).

For those interested in supported virtual key names, this table may help.

3DS:

Input-data is sent over TCP, and is currently hard-coded to port 4865. You may specify an IP address / hostname using the "address.txt" file in the application's directory on your 3DS.

--

Technical:

Overview:

Input is sent as raw data, and does not (Currently) comply with network byte-order. The basic data-layout can be found here (The 'fullInputData' structure).

Building:

Windows host-application:

The host-application (Currently Windows-only) requires the following libraries:

In addition, builds are made using Visual Studio (2013; 2015 may also work, but is untested). The C++ standard required is C++11. When building this application, please build/run a correct version for your hardware (x86 or x64).

3DS:

To build the 3DS component, you will need to install devkitARM, including an up-to-date version of ctrulib. If you can build the examples, you shouldn't have any problem building this. If you are having problems, please build a more up-to-date version of ctrulib.

Once you have devkitARM installed, you should be able to run GCC's MAKE utility in the "3ds_controller" sub-folder (3DS component's folder).

About

A 3DS homebrew application that allows you to send input to a remote machine.

Resources

License

Stars

Watchers

Forks

Packages

No packages published